第4章 配置MoveIt助手:Setup Assistant使用流程

说实话,很多刚接触MoveIt的朋友,第一步就被Setup Assistant劝退了。界面全是英文,选项又多,一不小心生成的文件就跑不起来。我最早带项目时也在这上面栽过跟头——生成的自碰撞矩阵漏了一对连杆,结果规划出来的轨迹直接和机器人本体“打架”。

这一章,我就带你完整走一遍Setup Assistant的核心流程。咱们不搞花架子,每一步我都会告诉你实际项目中容易踩的坑。

Setup Assistant 核心流程 加载URDF模型 自碰撞矩阵 虚拟关节 规划组 末端执行器 控制器配置 生成配置文件 从URDF到可用的MoveIt配置包,一气呵成

4.1 启动Setup Assistant

打开终端,输入:

roslaunch moveit_setup_assistant setup_assistant.launch

界面起来后,第一步就是加载你的URDF文件。我个人习惯把机器人模型放在my_robot_description/urdf/下,这样路径清晰。点击“Create New MoveIt Configuration Package”,然后选择你的URDF。

💡 我的经验: 如果你用的是xacro,记得先转换成纯URDF再加载。我曾经直接加载xacro,结果解析报错,排查了半天才发现是xacro参数没传进去。

4.2 自碰撞矩阵生成

这一步很多人直接点“Generate Collision Matrix”就完事了。但你知道吗?默认的采样密度可能漏掉一些危险位形。

我建议把采样点数从默认的10000提高到30000。虽然计算时间会长一点,但生成的碰撞矩阵更可靠。尤其是你的机器人有细长连杆时,低密度采样很容易漏报。

⚠️ 注意: 自碰撞矩阵不是万能的。如果你修改了机器人模型(比如换了夹爪),一定要重新生成。我曾经因为偷懒没重新生成,结果新夹爪和手臂发生了干涉,还好是在仿真里发现的。

4.3 虚拟关节配置

虚拟关节用来描述机器人基座和世界坐标系的关系。如果你的机器人是固定基座,选“fixed”;如果是移动机器人,选“planar”或“floating”。

我记得第一次做移动机械臂时,选了“floating”,结果规划时基座乱飘。后来才明白,对于差速底盘,用“planar”更合适——只允许x、y平移和yaw旋转。

类型自由度适用场景
fixed0固定基座机械臂
planar3 (x, y, yaw)差速/全向移动底盘
floating6 (x, y, z, roll, pitch, yaw)无人机、水下机器人

4.4 末端执行器定义

定义末端执行器时,关键是选对“父链接”和“末端链接”。比如你有一个二指夹爪,父链接通常是机械臂最后一个关节的link,末端链接是夹爪的指尖link。

这里有个坑:如果你定义了末端执行器,但后续在规划组里没把它包含进去,MoveIt会报错。我习惯在定义完末端执行器后,立刻检查规划组是否包含了它。

🔧 实用技巧: 在“End Effectors”页面,可以给末端执行器指定一个“推荐抓取位姿”。这样在抓取规划时,MoveIt会自动优先使用这个位姿,省去手动调整的麻烦。

4.5 控制器配置文件生成

这是最容易出问题的一步。Setup Assistant会自动扫描你的URDF中的传动(transmission)标签,然后生成对应的控制器配置。但自动生成的不一定完全正确。

我遇到过好几次,它把joint的位置控制接口和速度控制接口搞混了。所以生成后,一定要打开config/controllers.yaml检查一下。

# 典型的控制器配置片段
controller_list:
  - name: arm_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    joints:
      - joint1
      - joint2
      - joint3
      - joint4
      - joint5
      - joint6

检查每个joint的名字是否和URDF中一致,action_ns是否正确。如果你用的是ROS2 Control,还需要额外配置ros2_control.xacro。

4.6 生成配置包

所有步骤完成后,点击“Generate Package”。选择一个输出目录,我通常放在~/ros_ws/src/下。生成后,记得用catkin_make或colcon build编译一下。

嗯,这里还要提醒一句:生成的配置包中,config/目录下的joint_limits.yaml和kinematics.yaml可能需要根据你的实际硬件微调。比如关节速度限制,默认值往往偏保守。

📌 避坑指南: 我曾经生成配置包后直接运行demo.launch,结果机器人一动不动。后来发现是控制器名字和launch文件里的名字对不上。所以生成后,建议先跑一下roslaunch your_robot_moveit_config demo.launch,看看能不能正常加载。

好了,到这一步,你已经有了一个完整的MoveIt配置包。但今天先消化这些,把Setup Assistant的每个按钮都点一遍,你会有更深的体会。