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,我总结为三步:

  1. 定义规划组(Planning Groups)
  2. 设置预设位姿(Poses)
  3. 配置碰撞矩阵(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会生成一个全检测的矩阵,但那样计算量太大。

我的做法是:

  1. 点击Collision Matrix标签
  2. 点Regenerate Default Collision Matrix
  3. 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配置包。然后我建议立刻做两件事:

  1. 加载到Rviz里看看 — 用ros2 launch your_robot_moveit_config demo.launch.py,看模型是否正常显示,规划组能否拖动
  2. 试一个简单规划 — 在Rviz里拖拽末端,点Plan,看能不能算出轨迹

如果规划失败,八成是碰撞矩阵配错了,或者关节限位太紧。回去MSA里改,别在YAML里手动改,容易改漏。

核心要点:MSA生成的配置包是一个「模板」,不是「成品」。你后面做联合仿真时,还要手动修改controllers.yaml和ros2_control配置。但SRDF部分,MSA一次搞定,别自己手写。

4.5 本章知识图谱

下面这张图总结了MSA的完整工作流,从URDF到配置包,每一步的输入输出都标清楚了。你可以把它贴在工位旁边,以后配新机器人时照着走。

MoveIt Setup Assistant 工作流程图 MoveIt Setup Assistant 配置流程 URDF / Xacro 文件 MoveIt Setup Assistant 规划组 · 预设位姿 · 碰撞矩阵 运动学求解器 · 关节限位 SRDF 语义描述文件 MoveIt 配置包 kinematics.yaml · ompl_planning.yaml joint_limits.yaml · fake_controllers.yaml Rviz 验证 · 试规划 ⚠️ 关键提醒 Tip Link 必须是 Link 相邻连杆保留碰撞检测 生成后立刻在Rviz验证 💡 我的习惯 用 xacro 管理URDF 至少设3个预设位姿