3. 配置MoveIt2 Setup Assistant

任务目标

本案例将使用 MoveIt Setup Assistant 为一只自定义六轴机械臂生成 MoveIt2 配置包。完成本案例后,你将得到一个可直接用于后续运动规划与控制的 ROS2 功能包,包含机器人描述、SRDF(语义机器人描述格式)、运动学求解器、碰撞矩阵及规划组定义等核心配置。

前置条件

  • 已安装 ROS2 Humble 或 Rolling 发行版
  • 已安装 MoveIt2(sudo apt install ros-${ROS_DISTRO}-moveit)
  • 已安装机械臂 URDF/XACRO 文件(本案例使用自定义六轴机械臂 arm.urdf.xacro)

启动 Setup Assistant

首先加载机械臂描述文件到 ROS 参数服务器,然后启动 MoveIt Setup Assistant 图形界面:

# 终端1:加载URDF到参数服务器
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(xacro arm.urdf.xacro)"

# 终端2:启动Setup Assistant
ros2 run moveit_setup_assistant moveit_setup_assistant

配置步骤

  1. 创建新配置包:点击 Create New MoveIt Configuration Package,浏览并选择机械臂 URDF/XACRO 文件路径。
  2. 自碰撞矩阵:点击 Self-Collisions → Generate Collision Matrix,使用默认采样密度(10,000 对)生成碰撞矩阵。
  3. 虚拟关节:在 Virtual Joints 中添加一个虚拟关节,将机械臂基座连接到世界坐标系(world),类型选择 planar 或 fixed(根据实际安装方式)。
  4. 规划组:在 Planning Groups 中创建名为 arm_group 的规划组,类型选 Kinematic Chain,基座链接选 base_link,末端执行器链接选 tool0。添加 arm_group 后,点击 Add Kin. Chain 完成。
  5. 预定义位姿:在 Robot Poses 中添加 home 位姿(所有关节为 0)和 vertical 位姿(如关节2为 -90°),用于后续规划测试。
  6. 末端执行器:若机械臂有夹爪,在 End Effectors 中定义;本案例无夹爪,可跳过。
  7. 被动关节:若存在弹簧或被动关节,在此声明;本案例无,跳过。
  8. 控制器:在 Controllers 中点击 Add Controller,选择 arm_group,插件选 joint_trajectory_controller/JointTrajectoryController,并填写关节名称(需与 URDF 中一致)。
  9. 模拟器:在 Simulation 中勾选 ros2_control 和 Gazebo(若需要),生成对应的配置文件。
  10. 生成配置包:在 Configuration Files 中设置包名(如 arm_moveit_config),选择保存路径,点击 Generate Package。

验证配置包

生成完成后,使用以下命令验证配置包是否可正常加载和运行:

# 启动demo(含RViz可视化)
ros2 launch arm_moveit_config demo.launch.py

# 在RViz中应看到机械臂模型,MotionPlanning面板可正常显示

通过判定标准:

  • RViz 中正确显示机械臂三维模型,无红色报错
  • MotionPlanning 面板中 Planning Group 下拉框可选 arm_group
  • 拖动交互标记(InteractiveMarker)时,机械臂能实时响应并显示规划轨迹
  • 点击 Plan & Execute 按钮,机械臂能完成从当前位置到目标位姿的运动规划

关键生成文件说明

配置包生成后,核心文件结构如下(以 arm_moveit_config 为例):

arm_moveit_config/
├── config/
│   ├── arm.srdf                    # 语义机器人描述(规划组、碰撞矩阵)
│   ├── kinematics.yaml             # 运动学求解器配置(默认KDL)
│   ├── joint_limits.yaml           # 关节限位(从URDF自动提取)
│   ├── moveit_controllers.yaml     # 控制器配置
│   └── ros2_controllers.yaml       # ros2_control控制器配置
├── launch/
│   ├── demo.launch.py              # RViz演示启动文件
│   ├── move_group.launch.py        # move_group节点启动
│   └── setup_assistant.launch.py   # 重新打开Setup Assistant
├── CMakeLists.txt
└── package.xml

若需修改配置(如更换运动学求解器为IKFast或TRAC-IK),可直接编辑 kinematics.yaml 中的 solver_plugin 字段,然后重新启动 move_group 节点即可生效。

常见问题

  • RViz中模型显示为灰色/不可交互:检查 demo.launch.py 中是否加载了正确的 SRDF,以及 move_group 节点是否成功启动(终端无报错)。
  • 规划失败:确认 joint_limits.yaml 中的关节限位与 URDF 一致,且 home 位姿在关节限位范围内。
  • 控制器无法加载:检查 ros2_controllers.yaml 中的关节名称是否与 URDF 中的 joint 名称完全匹配(包括大小写)。