3. 配置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 是图形化工具,核心操作路径如下:
- 启动 MSA:终端执行
ros2 run moveit_setup_assistant moveit_setup_assistant,选择 Create New MoveIt Config Package。 - 加载 URDF:点击 Browse 选择 Panda 的 URDF 文件(路径示例:
/opt/ros/humble/share/panda_moveit_config/robots/panda.urdf.xacro)。若使用 xacro 文件,MSA 会自动调用xacro解析为纯 URDF。 - 生成自碰撞矩阵:进入 Self-Collisions 页,采样密度保持默认
10000,点击 Generate Collision Matrix。等待计算完成后,矩阵将列出所有无需检测的碰撞对。 - 添加虚拟关节:在 Virtual Joints 页点击 Add,配置:
Virtual Joint Name填virtual_joint,Child Link选panda_link0,Parent Frame选world,Joint Type选planar(或floating,取决于是否需6D基座)。 - 定义规划组:在 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。
- arm_group:
- 预定义位姿:在 Robot Poses 页为
arm_group添加home位姿(所有关节值设为 0),为hand_group添加open(关节值 0.04)与close(关节值 0.0)。 - 配置末端执行器:在 End Effectors 页添加:
End Effector Name填panda_hand,Group选hand,Parent Link选panda_link8。 - 生成配置包:点击 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 并修改采样密度后再次生成。