MoveIt 启动配置
本文档介绍 IB-Robot 中的 MoveIt 2 启动配置系统,该系统为 moveit_planning 控制模式提供运动规划功能。有关 MoveItGateway 节点的 IK 求解和约束处理信息,请参阅 10.1。有关 5DOF 运动学约束的详细信息,请参阅 10.2。
目的与范围
MoveIt 启动配置系统在机器人以 moveit_planning 控制模式启动时,协调 MoveIt 2 组件的启动。它处理:
基于控制模式条件性包含 MoveIt 节点
参数从
robot_configYAML 传播到 MoveIt 启动文件MoveIt 规划组、运动学求解器和控制器的配置
可选的运动规划 RViz 可视化
此系统将 robot_config 单一数据源模式与 MoveIt 的配置需求连接起来,确保关节定义、链接名称和规划组参数在整个工作空间中保持一致。
启动架构概述
MoveIt 启动系统使用两级架构:robot_config 中的启动构建器条件性地包含 robot_moveit 包中的主 MoveIt 启动文件。
来源: src/robot_config/robot_config/launch_builders/moveit.py:1-79, src/robot_moveit/launch/so101_moveit.launch.py:1-134
配置参数
robot_config YAML 部分
robot_config YAML 中的 moveit: 部分定义传递给启动系统的 MoveIt 特定参数:
参数 |
类型 |
描述 |
示例 |
|---|---|---|---|
|
string |
MoveIt 规划组名称 |
|
|
string |
基座坐标系 |
|
|
string |
末端执行器链接名称 |
|
|
string |
用于 5DOF 约束的肩部链接 |
|
机器人配置示例:
src/robot_config/config/robots/so101_single_arm.yaml:37-43
这些参数由启动构建器提取并作为启动参数传播。
来源: src/robot_config/config/robots/so101_single_arm.yaml:37-43, src/robot_config/robot_config/launch_builders/moveit.py:46-68
启动参数
so101_moveit.launch.py 声明以下控制 MoveIt 行为的启动参数:
启动文件包含流程
以下图表显示参数如何从 robot_config 流向 MoveIt 节点:
来源: src/robot_config/robot_config/launch_builders/moveit.py:40-78, src/robot_moveit/launch/so101_moveit.launch.py:56-90
MoveItConfigsBuilder 使用
启动文件使用 moveit_configs_utils 中的 MoveItConfigsBuilder 加载和合并配置文件:
src/robot_moveit/launch/so101_moveit.launch.py:61-70
配置文件映射:
构建器方法 |
配置文件 |
用途 |
|---|---|---|
|
|
机器人运动学模型 |
|
|
规划组、末端执行器 |
|
|
IK 求解器配置 |
|
|
速度/加速度限制 |
|
|
控制器映射 |
|
|
OMPL 规划器配置 |
节点配置
move_group 节点
核心 MoveIt 规划服务使用合并的配置参数启动:
src/robot_moveit/launch/so101_moveit.launch.py:79-90
关键参数:- moveit_config.to_dict():所有配置文件合并 - use_sim_time:与 is_sim 启动参数同步 - publish_robot_description_semantic:将 SRDF 发布到 /robot_description_semantic - pilz_cartesian_limits_path:额外的 Pilz 规划器限制
RViz2 可视化节点
RViz 根据 display 参数条件性启动:
src/robot_moveit/launch/so101_moveit.launch.py:94-105
RViz 配置从 src/robot_moveit/config/lerobot/so101/moveit.rviz:1-1 加载,包括:- 用于交互式规划的 MotionPlanning 插件 - RobotModel 显示 - PlanningScene 可视化 - TF 坐标树
moveit_gateway 节点
自定义网关节点从 robot_config 接收参数:
src/robot_moveit/launch/so101_moveit.launch.py:107-120
参数使用 PythonExpression 构建,将空格分隔的 joint_names 字符串拆分回列表:
运动学配置
5DOF 机械臂支持最关键的配置文件是 kinematics.yaml:
src/robot_moveit/config/lerobot/so101/kinematics.yaml:1-7
position_only_ik: True
此参数对 5DOF 机械臂 IK 求解至关重要。启用时:
KDL 求解器使用
ChainIkSolverPos而非ChainIkSolverPos_NR优化仅针对位置精度,忽略姿态
姿态约束仍可通过
Constraints消息应用,但用于验证而非优化显著提高 5DOF 机械臂的 IK 成功率
有关 5DOF 运动学约束的详细说明,请参阅 10.2。
来源: src/robot_moveit/config/lerobot/so101/kinematics.yaml:1-7, src/robot_moveit/docs/moveit_gateway.md:32-58
控制模式集成
MoveIt 启动根据控制模式条件性包含:
src/robot_config/robot_config/launch_builders/moveit.py:29-34
此设计确保 MoveIt 节点仅在需要时启动,减少其他控制模式下的资源消耗。
来源: src/robot_config/robot_config/launch_builders/moveit.py:15-78
配置文件依赖图
来源: src/robot_moveit/launch/so101_moveit.launch.py:58-90, src/robot_config/robot_config/launch_builders/moveit.py:40-78
启动命令示例
基本 MoveIt 启动(带 RViz)
ros2 launch robot_config robot.launch.py \
robot_config:=so101_single_arm \
control_mode:=moveit_planning
此命令启动:- move_group 节点(运动规划服务)- 带 MoveIt 插件的 rviz2 - moveit_gateway 节点(IK 求解器接口)
无头 MoveIt 启动(不带 RViz)
ros2 launch robot_config robot.launch.py \
robot_config:=so101_single_arm \
control_mode:=moveit_planning \
moveit_display:=false
moveit_display 参数作为 display 参数转发到 so101_moveit.launch.py。
带 MoveIt 的仿真
ros2 launch robot_config robot.launch.py \
robot_config:=so101_single_arm \
control_mode:=moveit_planning \
use_sim:=true
为所有 MoveIt 节点设置 use_sim_time:=True 以与 Gazebo 时钟同步。
参数映射表
下表显示参数如何从 robot_config 提取并映射到 MoveIt 启动参数:
robot_config 路径 |
转换 |
启动参数 |
消费节点 |
|---|---|---|---|
|
direct |
|
|
|
direct |
|
|
|
direct |
|
|
|
direct |
|
|
|
|
` joint_names` |
|
|
boolean |
|
` move_group`, |
|
boolean |
|
|
来源: src/robot_config/robot_config/launch_builders/moveit.py:46-68, src/robot_moveit/launch/so101_moveit.launch.py:26-54
故障排除
MoveIt 启动文件未找到
症状:启动期间警告消息:
[robot_config] WARNING: MoveIt launch file not found at .../so101_moveit.launch.py
[robot_config] Continuing without MoveIt...
原因:robot_moveit 包未构建或安装。
解决方案:
cd ~/IB_Robot
colcon build --packages-select robot_moveit
source install/setup.bash
来源: src/robot_config/robot_config/launch_builders/moveit.py:73-76
缺少 MoveIt 配置参数
症状:启动失败,提示:
[moveit_gateway-X] rclpy._exceptions.ParameterNotDeclaredException: Parameter 'arm_group_name' is not declared
原因:robot_config YAML 中缺少 moveit: 部分。
解决方案:在机器人配置中添加 moveit: 部分:
robot:
moveit:
arm_group_name: arm
base_link: base
ee_link: gripper
shoulder_link: shoulder
来源: src/robot_config/config/robots/so101_single_arm.yaml:37-43
关节名称不匹配
症状:MoveIt 规划因关节名称无效而失败。
原因:robot_config 中的 joints.arm 与 URDF 或 SRDF 中的关节名称不匹配。
解决方案:使用以下命令验证一致性:
# 检查 URDF 关节
ros2 topic echo /robot_description --once | grep -A 5 "joint name"
# 检查 robot_config
cat src/robot_config/config/robots/so101_single_arm.yaml | grep -A 5 "joints:"
确保关节列表完全匹配。
来源: src/robot_config/robot_config/launch_builders/moveit.py:47-49
IK 求解器频繁失败
症状:MoveIt 规划对大多数目标返回 NO_IK_SOLUTION。
原因:5DOF 机械臂的 kinematics.yaml 中未设置 position_only_ik: True。
解决方案:验证运动学配置:
src/robot_moveit/config/lerobot/so101/kinematics.yaml:6
此参数对 5DOF 机械臂至关重要。详情请参阅 10.2。
来源: src/robot_moveit/config/lerobot/so101/kinematics.yaml:1-7, src/robot_moveit/docs/moveit_gateway.md:32-58