4、MoveIt2配置助手:使用MoveIt Setup Assistant生成SRDF与配置文件
说实话,很多新手拿到机器人模型第一件事就是直接写代码。我当年也这么干过,结果折腾两天,关节限位写错、碰撞矩阵漏配,仿真里机器人直接「鬼畜」了。后来我学乖了——用MoveIt Setup Assistant(简称MSA),十分钟搞定SRDF和配置文件,省下的时间够喝三杯咖啡。
这一章,我就带你走一遍MSA的完整流程。你跟着点就行,别跳步骤。
4.1 启动MSA:别搞错版本
先确认你装的是MoveIt2。ROS1的MSA和ROS2的不通用,我见过有人拿ROS1的助手配ROS2项目,结果生成的YAML格式全错。
启动命令很简单:
ros2 launch moveit_setup_assistant setup_assistant.launch.py
启动后你会看到这个界面:
核心选择:
- Create New MoveIt Configuration Package — 从零新建,选这个
- Edit Existing MoveIt Configuration Package — 修改已有配置,后期调参用
我们选第一个。然后加载你的URDF文件。注意,MSA只认.urdf或.xacro,我习惯用xacro,因为参数化方便。
我的习惯:把URDF文件放在机器人功能包的urdf/目录下,路径别带中文和空格。Windows用户尤其注意,ROS2对路径符号敏感。
4.2 配置SRDF:核心三步
SRDF(Semantic Robot Description Format)是MoveIt的「语义层」。说白了,URDF告诉系统「机器人长什么样」,SRDF告诉系统「机器人能怎么动」。
MSA里配置SRDF,我总结为三步:
- 定义规划组(Planning Groups)
- 设置预设位姿(Poses)
- 配置碰撞矩阵(Collision Matrix)
4.2.1 定义规划组
规划组就是一组关节或连杆的集合。比如六轴机械臂的六个关节组成一个arm_group,夹爪的两个关节组成gripper_group。
在MSA左侧点击Planning Groups,然后点Add Group。你会看到:
| 参数 | 说明 | 我的建议 |
|---|---|---|
| Group Name | 规划组名称 | 用英文小写+下划线,如arm_group |
| Kinematic Solver | 运动学求解器 | 选KDL,稳定;精度要求高用TRAC-IK |
| Group Type | 组类型 | 串联臂选Chain,夹爪选Group |
| Base Link | 基座连杆 | 选机器人固定基座,如base_link |
| Tip Link | 末端连杆 | 选最后一个关节的子连杆,如tool0 |
我曾经踩过的坑:Tip Link选成了关节本身而不是连杆。结果运动学求解一直报错,查了半天才发现是Link和Joint搞混了。记住:Tip Link必须是Link,不是Joint。
4.2.2 设置预设位姿
预设位姿就是一些常用的关节角度组合。比如home(归零位)、vertical(竖直位)。
在Poses标签页,点Add Pose,然后手动输入每个关节的角度值。我建议至少设三个:
- home — 所有关节归零
- ready — 机械臂前伸,准备抓取
- folded — 折叠收纳,用于避障
这些位姿在后续的Start State和Goal State里可以直接调用,省得每次手动调。
4.2.3 配置碰撞矩阵
碰撞矩阵决定了哪些连杆之间不需要做碰撞检测。默认MSA会生成一个全检测的矩阵,但那样计算量太大。
我的做法是:
- 点击Collision Matrix标签
- 点Regenerate Default Collision Matrix
- MSA会自动分析,把永远不会碰撞的连杆对标记为Disabled
比如机械臂的基座和第三关节,中间隔着两个关节,永远碰不上。禁用后,规划速度能快30%。
小技巧:生成后手动检查一下。我遇到过MSA把相邻连杆也禁用了,结果仿真里两个连杆穿模。相邻连杆必须保留碰撞检测。
4.3 生成配置文件
配置完SRDF,MSA会自动生成一堆文件。我挑几个重要的说:
| 文件/目录 | 作用 | 是否常用 |
|---|---|---|
config/ |
存放所有YAML配置文件 | 是 |
config/kinematics.yaml |
运动学求解器参数 | 是 |
config/ompl_planning.yaml |
OMPL规划器参数 | 是 |
config/joint_limits.yaml |
关节限位(速度、加速度) | 是 |
config/fake_controllers.yaml |
仿真控制器配置 | 调试用 |
launch/ |
启动文件 | 是 |
srdf/ |
生成的SRDF文件 | 是 |
生成后,我习惯先打开config/joint_limits.yaml看一眼。MSA默认的速度和加速度值偏保守,我会根据实际电机参数调大一些。比如:
joint_limits:
joint_1:
has_velocity_limits: true
max_velocity: 1.5 # 默认0.5,我调到1.5
has_acceleration_limits: true
max_acceleration: 0.8 # 默认0.2,我调到0.8
注意别调太大,否则规划出来的轨迹电机跟不上,实际跑起来会抖动。
4.4 验证配置:别急着关
生成完别急着关MSA。右下角有个Generate Package按钮,点完会生成一个完整的MoveIt配置包。然后我建议立刻做两件事:
- 加载到Rviz里看看 — 用
ros2 launch your_robot_moveit_config demo.launch.py,看模型是否正常显示,规划组能否拖动 - 试一个简单规划 — 在Rviz里拖拽末端,点Plan,看能不能算出轨迹
如果规划失败,八成是碰撞矩阵配错了,或者关节限位太紧。回去MSA里改,别在YAML里手动改,容易改漏。
核心要点:MSA生成的配置包是一个「模板」,不是「成品」。你后面做联合仿真时,还要手动修改controllers.yaml和ros2_control配置。但SRDF部分,MSA一次搞定,别自己手写。
4.5 本章知识图谱
下面这张图总结了MSA的完整工作流,从URDF到配置包,每一步的输入输出都标清楚了。你可以把它贴在工位旁边,以后配新机器人时照着走。