

本系列详解的源代码来自github开源项目:github地址 ↗
声明:本项目详解仅用于个人学习ROS2,若有表达不对的地方,欢迎交流指正。
关于ROS2的CMake介绍可以参考博客1 ↗,博客2 ↗,视频可以看B站视频
ROS2的编译流程图解:

学习本项目所需要的基础:ROS2、C++、Python、目标检测YOLO等基础
项目介绍:UR5e Dynamic Grasping System 是一个基于 ROS2 和 MoveIt2 框架开发的智能抓取系统。该项目结合深度相机感知、目标定位、动态环境建图(OctoMap)与路径规划,实现了 UR5e机械臂在动态环境中的实时避障与抓取任务。 系统具备良好的扩展性和开源性,适用于机器人抓取、动态避障、人机协作等场景研究与开发。
在 ROS 2 中,有三个重要的概念和目录:

- 源码目录(src) - 这是你的源代码所在的地方,包括 Python 文件、C++ 文件、配置文件等(专注于开发)
- 构建目录(build) - 这是在编译过程中创建的临时目录(编译过程的临时产物)
- 安装目录(install) - 这是最终安装包的地方,也是运行时实际使用的目录(最终部署和运行时使用)
src源码目录结构#

代码功能包说明#
- octo_bringup - OctoMap建图模块
- 负责实时生成环境的三维占据栅格地图
- 用于动态避障
注意:在本项目中这个并没有用到,暂时可以不进行了解
- robotiq_description - Robotiq夹爪描述文件
- 包含Robotiq夹爪的详细描述文件
- 包括网格模型、关节参数
- robotiq_moveit_config - Robotiq的Moveit2配置包
-
包含SRDF 配置:
- 定义了夹爪的运动学组(kinematic group)
- 定义了夹爪的预设状态(如打开和关闭状态)
- 定义了碰撞忽略规则(disable_collisions)
-
包含夹爪组定义:
- 创建了一个名为 “gripper” 的组,包含了夹爪的所有链接
- 定义了两个预设状态: “open” 状态:夹爪完全打开 “close” 状态:夹爪闭合到指定位置
-
包含碰撞忽略规则:
- 定义了夹爪内部链接之间的碰撞忽略规则
- 这些规则告诉 MoveIt 哪些链接之间永远不会发生碰撞,从而提高规划效率
注意:这个包里的文件基本都是由Setup Assistant生成的。如果要快速上手的话,个人觉得不需要太深入的了解。
- sim_models - 仿真模型资源包
- 包含Gazebo仿真用的模型文件
- 包括UR5e机械臂、夹爪、深度相机等仿真模型
注意:这些仿真模型,一般都是由产品对应的公司发布的。
- ur_bringup - 系统启动包
- 包含启动整个系统的launch文件
- simulation.launch.py 启动仿真环境、MoveIt配置、视觉模块和OctoMap
- start_grasp.launch.py 启动抓取演示
- ur5e_gripper_control - 机械臂控制包
- 实现了UR5e机械臂的控制逻辑
- 包含抓取演示的主逻辑 demo.cpp
- 核心控制类 ur5e_gripper.h 和 ur5e_gripper.cpp
- ur5e_gripper_description - UR5e机械臂和夹爪的URDF描述文件
- 包含机械臂和夹爪的3D模型描述
- 用于机器人建模和可视化
- ur5e_gripper_moveit_config - MoveIt 2配置包
- 包含UR5e机械臂在MoveIt中的运动规划配置
- 定义了规划组、末端执行器设置等
- 包含运动学配置、规划算法配置、控制器配置等
- ur5e_octomap_moveit - OctoMap与MoveIt集成
- 将OctoMap生成的环境地图集成到MoveIt中
- 实现基于环境感知的路径规划和避障
- vision - 视觉处理模块
- 负责目标物体检测与三维定位
- 使用YOLOv11进行目标检测 (obj_detect.py)
- 实现深度信息处理和目标追踪
系统工作流程#
-
启动仿真环境:
a. 通过 simulation.launch.py 启动Gazebo仿真环境 b. 加载UR5e机械臂和夹爪的URDF模型 c. 启动MoveIt 2运动规划框架 d. 启动视觉处理:
-
启动深度相机数据处理模块 a. 使用YOLOv11进行目标检测和定位 b. 将检测结果发布到ROS 2话题 c. 启动抓取演示:
-
通过 start_grasp.launch.py 启动抓取演示 a. 读取目标物体的位姿信息 b. 规划机械臂运动路径 c. 控制夹爪执行抓取动作 d. 将物体移动到指定位置并释放
核心技术组件#
- MoveIt 2 - 用于运动规划和控制
- Gazebo - 用于物理仿真
- YOLOv11 - 用于目标检测
- OctoMap - 用于环境建图和避障
- TF2 - 用于坐标变换