reBotArm B601 DM / ROS 2 工程文件架构(逐文件注释) 本文档按“运行依赖 → ROS 2 包 → 硬件驱动 → 运动学/MoveIt → 示例 → 上位机”的顺序说明工程。实际 ROS 2 工程位于当前工作区中的reBotArmController_ROS2-main/子目录;不要把上层工作区中的 Word、QA 和生成脚本当作机械臂运行时依赖。
1. 运行时总链路 CAN/串口/电机 ↓ reBotArm_control_py(第三方硬件 SDK) ↓ rebotarmcontroller/hardware_manager.py ↓ rebotarm_controller.py ├── /rebotarm/joint_states ├── /rebotarm/arm_status ├── ROS services ├── ROS actions └── low-level command topics ↓ MoveIt 2 / 视觉抓取 / 上位机最重要的原则:hardware_manager.py是硬件安全边界;ROS、MoveIt、视觉程序都不应该绕过它直接操作电机。
2. 工作区根目录 这些文件位于工程父目录,主要是教程、方案、测试输出和文档生成工具,不参与colcon build。
文件/目录 作用 reBotArmController_ROS2-main/真正的 ROS 2 源码工作区。 garbage_sorting_dashboard/垃圾分拣上位机源码,独立于机械臂 ROS 2 包。 build_*.py生成教程、方案或部署手册的 Python 脚本。 create_rdkx5_ubuntu_guide.py生成 RDK X5 部署指南。 qa/Word/HTML/PDF 渲染和视觉检查产物,不参与机器人运行。 docx_render/文档渲染产生的页面图片和 PDF。 outputs/视觉分拣脚本、配置和方案图片等输出文件。 tools/文档提取、转换、联系图生成等辅助工具。 *.docx学习教程、故障手册、RDK 方案和部署手册。 *.zip已打包的上位机源码,不是 ROS 2 驱动依赖。
3. ROS 2 工作区根文件 目录:reBotArmController_ROS2-main/
文件 注释 .gitignoreGit 忽略规则,通常忽略build/、install/、log/等编译产物。 README.md英文项目说明、编译和启动入口。 README_zh.md中文项目说明,适合第一次部署。 API_zh.mdROS 2 topic、service、action、消息类型和参数的接口文档。 media/rebot_arm_b601.pngREADME 使用的机械臂图片,不参与运行。 src/ROS 2 源码包目录。
4.rebotarm_msgs:自定义ROS接口包 目录:src/rebotarm_msgs/
这个包只定义通信接口,不负责连接电机。修改.msg、.srv、.action后必须重新colcon build。
包文件 文件 注释 package.xml声明 ROS 2 构建和运行依赖。 CMakeLists.txt使用rosidl_generate_interfaces生成 Python/C++ 接口代码。
消息msg/ 文件 注释 ArmStatus.msg发布整机模式、使能状态、控制循环、状态机和错误码。 JointMotorState.msg发布单个关节/夹爪的位置、速度、力矩和电机状态码。 JointMitCmd.msg单关节或夹爪 MIT 控制命令:位置、速度、Kp、Kd、力矩。 JointPosVelCmd.msg单关节或夹爪位置-速度控制命令。
服务srv/ 文件 注释 GripperCommand.srv开合夹爪并等待到位,包含位置、超时和反馈。 MoveToPoseIK.srv给定末端 Pose,执行一次 IK,并返回解。 SetGripper.srv直接设置夹爪目标位置。 SetZero.srv设置单个关节或整机零点;必须谨慎使用。
动作action/ 文件 注释 MoveToPose.action末端位姿轨迹动作,支持反馈、取消和结果。
5.rebotarmcontroller:核心硬件控制包 目录:src/rebotarmcontroller/
这是整个机械臂的核心包,职责是:加载硬件配置、创建第三方 SDK 对象、管理控制模式、发布反馈、提供 service/action,并阻止互相冲突的命令。
包装文件 文件 注释 package.xml声明rclpy、消息包、控制消息、几何消息等依赖。 setup.pyPython 包安装和 console script 入口。 setup.cfgsetuptools 安装配置。 resource/rebotarmcontrollerROS 2 Python 包索引资源文件。 rebotarmcontroller/__init__.pyPython 包初始化。
核心Python文件 文件 作用 rebotarm_controller.pyROS 2 Node 总入口。创建HardwareManager、发布器、服务、动作和底层命令订阅器。 hardware_manager.py硬件安全边界。封装RebotArm、arm/gripper group、连接、使能、失能、归位、轨迹、IK、MIT、PosVel、重力补偿和状态机。 hardware_config.py找到第三方 SDK、加载 SDK YAML,并把 ROS 选择的model/channel覆盖到最终硬件配置。 conversions.pyROSPose与 XYZ/RPY、旋转矩阵、四元数之间的转换。 ros_publishers.py定时发布/rebotarm/joint_states、每关节状态、夹爪状态和锁存的/rebotarm/arm_status。 ros_services.py注册 enable、disable、safe_home、set_zero、IK、夹爪和重力补偿等 service。 ros_actions.py注册 MoveToPose、FollowJointTrajectory、GripperCommand action,并处理反馈、取消、超时。 motor_passthrough.py订阅低层 MIT/PosVel topic,把指定关节的低层命令转给硬件,同时执行命令仲裁。
rebotarmcontroller/examples/文件 注释 move_to.py关节空间目标示例,输入六个关节角和持续时间。 move_to_pose.py末端位姿目标示例,调用 MoveToPose 服务或动作。 gripper_control.py交互式打开、闭合和退出夹爪示例。 gravity_compensation.py启动和停止重力补偿的示例。 __init__.py示例脚本目录初始化。
6.rebotarm_bringup:启动、配置和模型资源包 目录:src/rebotarm_bringup/
这个包负责把控制节点、机器人描述、RViz 和参数组合成可启动的系统。
包文件 文件 注释 package.xml声明启动文件、描述文件和运行时依赖。 setup.py安装 Python launch 文件、配置、描述和 RViz 资源。 setup.cfgsetuptools 配置。 resource/rebotarm_bringupROS 2 包索引资源。
配置config/ 文件 注释 rebotarm_hardware.yamlDM/RS 型号、通信通道、关节组、夹爪范围、控制模式、MIT 增益、重力补偿参数。 driver_params.yamlROS 控制节点参数示例,例如发布频率、命名空间、QoS相关设置。
DM B601 的关键配置通常包括:
default_model : dmchannel : /dev/ttyACM0groups : arm : joints : [ joint1, joint2, joint3, joint4, joint5, joint6] gripper : joints : [ gripper] 启动文件launch/ 文件 注释 driver.launch.py主要启动文件,只启动机械臂控制器。真实硬件测试优先使用它。 bringup.launch.py更完整的启动入口,可同时启动机器人描述、状态发布器、控制器和可选 RViz。
机器人描述description/urdf/ 文件 注释 reBot-DevArm_fixend.urdfDM 机械臂主体和末端固定结构的 URDF。 reBot_B601_DM_with_gripper.urdfB601 DM 机械臂加夹爪的完整 URDF,仿真和显示常用。 00-arm-rs_asm-v3.urdfRS 版本机械臂的 URDF。
DM模型网格description/meshes/ 文件 注释 base_link.STL底座外观/碰撞网格。 link1.STL~link6.STL六个机械臂连杆的网格。 end_link.STLDM 末端连接件网格。
B601夹爪网格description/meshes_b601_gripper/ 文件 注释 base_link.STL夹爪安装底座。 link1.STL~link6.STL夹爪内部联动结构网格。 gripper_link.STL夹爪主体。 gripper_left.STL左指。 gripper_right.STL右指。
RS模型网格description/meshes_rs/ 文件 注释 base_link.STLRS底座。 link1.STL~link6.STLRS六个连杆。 motor_2_3.STL、motor_4.STL、motor_5.STL、motor_6.STL、motor_7.STLRS各电机外观。 cnc2.STL、cnc3.STL、cnc4.STL、cnc5.STL、cnc7.STLRS加工件。 gripper_end.STLRS末端连接件。 gripper_left.STL、gripper_right.STLRS夹爪指。 pla2_black.STL、pla2_green.STL、pla3_black.STL、pla3_green.STL、pla5_green.STL、pla7_green.STLRS塑料外壳。 pla_left.STL、pla_right.STLRS夹爪塑料件。
RViz 文件 注释 rviz/rebotarm.rviz机器人状态和TF可视化配置。
7.rebotarm_moveit_config:MoveIt 2配置包 目录:src/rebotarm_moveit_config/
这个包负责运动规划、IK、碰撞检测、规划组和轨迹控制器配置。它不直接实现电机通信。
包和元文件 文件 注释 package.xmlMoveIt、ros2_control、TF、Xacro等依赖。 CMakeLists.txt安装配置、URDF/Xacro和MoveIt资源。 .setup_assistantMoveIt Setup Assistant 生成的配置记录。
config/文件 注释 rebotarm.urdf.xacroDM版本机器人模型入口,通常引用bringup中的URDF/网格。 rebotarm_rs.urdf.xacroRS版本模型入口。 rebotarm.srdfDM的MoveIt planning group、末端执行器和默认状态。 rebotarm_rs.srdfRS的SRDF配置。 rebotarm.ros2_control.xacroDM的ros2_control虚拟/硬件控制接口。 rebotarm_rs.ros2_control.xacroRS的ros2_control接口。 kinematics.yamlMoveIt IK求解器配置。 joint_limits.yamlMoveIt使用的关节速度、加速度和角度限制。 initial_positions.yaml仿真控制器初始关节位置。 ros2_controllers.yaml仿真或控制器管理器中的joint/gripper controller。 moveit_controllers.yamlMoveIt轨迹执行器与ROS控制器的映射。 moveit_hardware_controllers.yaml连接真实控制节点时使用的MoveIt控制器映射。 ompl_planning.yamlOMPL规划器、采样和规划时间参数。
launch/文件 注释 demo.launch.py启动MoveIt仿真环境、move_group、RViz和虚拟控制器。 hardware.launch.py在真实机械臂控制器已经启动后连接MoveIt。 moveit_launch_common.py两个launch文件共用的参数、robot description和MoveIt构造逻辑。 demo_view.rvizMoveIt仿真界面配置。 moveit.rvizMoveIt规划界面配置。
8.rebotarm_moveit_demos:MoveIt示例包 目录:src/rebotarm_moveit_demos/
包文件 文件 注释 package.xmlMoveIt demo依赖。 setup.py注册draw_square和pick_place等Python入口。 setup.cfgsetuptools配置。 resource/rebotarm_moveit_demosROS 2包索引资源。 rebotarm_moveit_demos/__init__.pyPython包初始化。
参数config/ 文件 注释 draw_square.yamlDM画矩形轨迹的起始点、矩形尺寸、TCP姿态和速度参数。 draw_square_rs.yamlRS画矩形轨迹参数。 pick_place.yamlDM固定物体抓取放置参数。 pick_place_rs.yamlRS抓取放置参数。
启动和程序 文件 注释 launch/draw_square.launch.py启动画矩形demo。 launch/pick_place.launch.py启动固定物体pick-place demo。 rebotarm_moveit_demos/demo_common.py两个demo共用的MoveIt连接、规划和执行辅助函数。 rebotarm_moveit_demos/draw_square.py生成矩形四个角点并请求轨迹。 rebotarm_moveit_demos/pick_place.py依次执行预抓取、抓取、抬升、放置和释放。
9. 垃圾分拣上位机 目录:garbage_sorting_dashboard/
它是独立的Python标准库服务,不是ROS 2控制器。默认提供HTTP、SSE、SQLite、CSV导出和可选ROS 2状态桥接。
文件 注释 README.md上位机启动、配置、API和RDK部署说明。 requirements.txt可选依赖说明;基础HTTP/SQLite功能主要使用Python标准库。 config/dashboard.env.exampleRDK上的环境变量模板。 dashboard/config.py环境变量和服务配置加载。 dashboard/database.pySQLite建表、事件去重、统计、CSV导出和会话管理。 dashboard/broker.pySSE客户端订阅和事件广播。 dashboard/app.pyHTTP API路由、事件写入、控制命令和静态文件响应。 dashboard/server.pyThreadingHTTPServer启动入口。 dashboard/client.py上位机客户端事件上报封装。 dashboard/ros_bridge.py可选ROS 2桥接,读取机械臂健康状态和发布分拣控制命令。 dashboard/__init__.pyPython包初始化。 static/index.html上位机页面结构。 static/styles.css深色工业风页面样式和响应式布局。 static/app.jsSSE实时刷新、统计卡片、事件列表、控制按钮和CSV导出。 examples/sort_waste_integration.py将视觉分拣脚本接入事件上报器的示例。 examples/publish_demo_events.py不接真机时发布演示事件的脚本。 scripts/run_dashboard.sh手动启动上位机服务。 scripts/install_rdk.sh将服务安装到RDK X5的/opt、/var/lib、/etc和systemd。 systemd/garbage-dashboard.service上位机开机自启动服务单元。 tests/test_database.py数据库去重、会话、统计和重试逻辑测试。 tests/test_http.pyAPI、静态页面、SSE、健康状态和控制接口测试。
10. 启动时各文件如何协作 真实硬件 driver.launch.py ↓ reBotArmController ↓ HardwareManager.__init__() ↓ hardware_config.py 找到 SDK 和 YAML ↓ RebotArm.connect() ↓ JointStatePublisher 定时发布反馈 ArmServices 提供 service ArmActions 提供 action MotorPassthrough 接收低层命令典型命令:
source /opt/ros/humble/setup.bashsource ~/rebotarm_ros2/install/setup.bash ros2 launch rebotarm_bringup driver.launch.py model:= dm channel:= slcan0MoveIt仿真 demo.launch.py ↓ Xacro + URDF + SRDF ↓ robot_state_publisher ↓ move_group + OMPL + RViz ↓ 虚拟 ros2_control controller视觉抓取 相机帧 → YOLO/颜色检测 → 深度反投影 → 相机坐标 → 手眼变换 → base_link目标位姿 → IK/轨迹 → HardwareManager11. 建议学习顺序 先读rebotarm_msgs,理解所有ROS接口。 再读hardware_config.py,理解配置如何选择 DM/RS。 重点读hardware_manager.py,理解连接、状态机、模式切换和安全归位。 读ros_publishers.py,确认/joint_states和/arm_status的来源。 读ros_services.py与ros_actions.py,理解上层如何下发命令。 用rebotarm_bringup先运行RViz/MoveIt仿真。 再做真实硬件只读反馈。 最后才测试低速运动、夹爪、视觉和分拣。 12. 不应直接修改的文件 以下文件修改前应先备份:
hardware_manager.pyrebotarm_hardware.yamlrebotarm.urdf.xacrojoint_limits.yamlkinematics.yamlros2_controllers.yaml尤其不要为了“让IK成功”随意增大关节限制,也不要为了“让夹爪归位”直接修改零点。应先确认机械零点、坐标系、URDF轴方向和真实硬件反馈。
13. 编译和验证入口 cd ~/rebotarm_ros2source /opt/ros/humble/setup.bash colcon build --symlink-installsource install/setup.bash ros2 pkg executables rebotarmcontroller ros2 topic list| grep rebotarm ros2service list| grep rebotarm真实硬件与仿真必须分开验证。任何真实运动测试前,都应先完成RViz模型、关节限制、TCP坐标和急停检查。