3. 配置MoveIt2 Setup Assistant

配置MoveIt2 Setup Assistant 学习卡片

任务目标

本案例将使用 MoveIt Setup Assistant(MSA)为 Panda 机器人生成 SRDF(语义机器人描述格式)文件及配套的 MoveIt 配置包。完成本案例后,你将得到一个可直接用于运动规划与避障仿真的 panda_moveit_config 包。

环境准备

本案例基于 ROS2 Humble 与 MoveIt2,需确保已安装以下依赖:

sudo apt install ros-humble-moveit ros-humble-moveit-setup-assistant
# 获取 Panda 机器人 URDF(若未安装)
sudo apt install ros-humble-panda-moveit-config  # 仅用于获取URDF源文件

操作流程

MSA 是图形化工具,核心操作路径如下:

  1. 启动 MSA:终端执行 ros2 run moveit_setup_assistant moveit_setup_assistant,选择 Create New MoveIt Config Package。
  2. 加载 URDF:点击 Browse 选择 Panda 的 URDF 文件(路径示例:/opt/ros/humble/share/panda_moveit_config/robots/panda.urdf.xacro)。若使用 xacro 文件,MSA 会自动调用 xacro 解析为纯 URDF。
  3. 生成自碰撞矩阵:进入 Self-Collisions 页,采样密度保持默认 10000,点击 Generate Collision Matrix。等待计算完成后,矩阵将列出所有无需检测的碰撞对。
  4. 添加虚拟关节:在 Virtual Joints 页点击 Add,配置:Virtual Joint Name 填 virtual_joint,Child Link 选 panda_link0,Parent Frame 选 world,Joint Type 选 planar(或 floating,取决于是否需6D基座)。
  5. 定义规划组:在 Planning Groups 页添加两个组:
    • arm_group:Kinematic Chain 类型,Base Link 选 panda_link0,Tip Link 选 panda_link8,Add Kin. Chain 后填入 panda_arm 作为规划组名。
    • hand_group:Joint Model Group 类型,将 panda_finger_joint1 与 panda_finger_joint2 加入,命名 hand。
  6. 预定义位姿:在 Robot Poses 页为 arm_group 添加 home 位姿(所有关节值设为 0),为 hand_group 添加 open(关节值 0.04)与 close(关节值 0.0)。
  7. 配置末端执行器:在 End Effectors 页添加:End Effector Name 填 panda_hand,Group 选 hand,Parent Link 选 panda_link8。
  8. 生成配置包:点击 Generate Config Package,选择输出目录(如 ~/ws_moveit/src/),包名保持 panda_moveit_config。等待生成完成。

验证方法

生成后,在终端验证配置包完整性:

cd ~/ws_moveit
colcon build --packages-select panda_moveit_config
source install/setup.bash
ros2 launch panda_moveit_config demo.launch.py

通过标准:RViz 正常启动,无红色报错;左侧 MotionPlanning 面板中 Planning Group 下拉框可选 arm_group 与 hand;使用 Interact 拖拽机械臂末端时,规划场景中无碰撞模型误报;在 Poses 下拉框中选择 home 后点击 Update,机械臂能平滑运动至零位。

关键文件说明

生成的 panda_moveit_config 包中,核心产物为 config/panda.srdf,其内容片段如下(实际生成时碰撞矩阵与位姿数据更完整):

<robot name="panda">
  <group name="arm_group">
    <chain base_link="panda_link0" tip_link="panda_link8"/>
  </group>
  <group name="hand">
    <joint name="panda_finger_joint1"/>
    <joint name="panda_finger_joint2"/>
  </group>
  <end_effector name="panda_hand" parent_link="panda_link8" group="hand"/>
  <virtual_joint name="virtual_joint" type="planar" parent_frame="world" child_link="panda_link0"/>
  <disable_collisions link1="panda_link1" link2="panda_link2" reason="Adjacent"/>
</robot>

该 SRDF 文件与 config/ 目录下的 joint_limits.yaml、kinematics.yaml 共同构成 MoveIt 的完整配置输入。若需调整碰撞检测精度,可重新运行 MSA 并修改采样密度后再次生成。