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