第4章 配置MoveIt助手:Setup Assistant使用流程
说实话,很多刚接触MoveIt的朋友,第一步就被Setup Assistant劝退了。界面全是英文,选项又多,一不小心生成的文件就跑不起来。我最早带项目时也在这上面栽过跟头——生成的自碰撞矩阵漏了一对连杆,结果规划出来的轨迹直接和机器人本体“打架”。
这一章,我就带你完整走一遍Setup Assistant的核心流程。咱们不搞花架子,每一步我都会告诉你实际项目中容易踩的坑。
4.1 启动Setup Assistant
打开终端,输入:
roslaunch moveit_setup_assistant setup_assistant.launch
界面起来后,第一步就是加载你的URDF文件。我个人习惯把机器人模型放在my_robot_description/urdf/下,这样路径清晰。点击“Create New MoveIt Configuration Package”,然后选择你的URDF。
4.2 自碰撞矩阵生成
这一步很多人直接点“Generate Collision Matrix”就完事了。但你知道吗?默认的采样密度可能漏掉一些危险位形。
我建议把采样点数从默认的10000提高到30000。虽然计算时间会长一点,但生成的碰撞矩阵更可靠。尤其是你的机器人有细长连杆时,低密度采样很容易漏报。
4.3 虚拟关节配置
虚拟关节用来描述机器人基座和世界坐标系的关系。如果你的机器人是固定基座,选“fixed”;如果是移动机器人,选“planar”或“floating”。
我记得第一次做移动机械臂时,选了“floating”,结果规划时基座乱飘。后来才明白,对于差速底盘,用“planar”更合适——只允许x、y平移和yaw旋转。
| 类型 | 自由度 | 适用场景 |
|---|---|---|
| fixed | 0 | 固定基座机械臂 |
| planar | 3 (x, y, yaw) | 差速/全向移动底盘 |
| floating | 6 (x, y, z, roll, pitch, yaw) | 无人机、水下机器人 |
4.4 末端执行器定义
定义末端执行器时,关键是选对“父链接”和“末端链接”。比如你有一个二指夹爪,父链接通常是机械臂最后一个关节的link,末端链接是夹爪的指尖link。
这里有个坑:如果你定义了末端执行器,但后续在规划组里没把它包含进去,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可能需要根据你的实际硬件微调。比如关节速度限制,默认值往往偏保守。
roslaunch your_robot_moveit_config demo.launch,看看能不能正常加载。
好了,到这一步,你已经有了一个完整的MoveIt配置包。但今天先消化这些,把Setup Assistant的每个按钮都点一遍,你会有更深的体会。