ros2 MoveIt 运动规划

第 8 章 MoveIt 运动规划

学习目标

  • 理解 MoveIt 是什么、解决什么问题
  • 认识 move_group、规划场景、运动学、碰撞检测等核心概念
  • 安装 MoveIt 2 并用官方 Panda 机械臂演示完成一次"规划→执行"
  • 理解 MoveIt 规划出的轨迹如何与仿真/真机衔接

1. MoveIt 是什么

MoveIt 是 ROS 里最主流的机械臂运动规划框架 。它解决的问题是:给机械臂一个目标(比如"把末端放到桌面上方 30 厘米处"),MoveIt 自动算出一条无碰撞、关节运动平滑的轨迹,并交给控制器执行。

典型的 MoveIt 任务链:

text 复制代码
目标位姿 ──► 运动学求解 ──► 路径搜索(OMPL)──► 碰撞检测/轨迹优化
        ──► 轨迹(JointTrajectory)──► 控制器(ros2_control)──► 机器人/仿真

2. 核心概念

概念 说明
move_group MoveIt 的中枢节点,所有规划请求都发给它
规划组(Planning Group) 一组关节的组合,如"panda_arm"(7 个关节)、"hand"(手爪)
规划场景(Planning Scene) 机器人及其周围环境的实时状态:障碍物、碰撞体
运动学(Kinematics) 关节角度 ↔ 末端位姿的换算(正运动学/逆运动学 IK)
碰撞检测 检查轨迹上的每个点是否与自身或环境碰撞
OMPL 内置的路径规划算法库(RRT、RRTConnect 等)
MotionPlanning 面板 RViz 里的插件,交互式拖拽目标、规划、执行

MoveIt 只是规划:它输出关节轨迹,本身不直接驱动电机。执行轨迹的是控制器(ros2_control + 驱动插件),MoveIt 通过话题把轨迹发给控制器。这正好可以和 Gazebo 衔接(见第 5 节)。

3. 安装 MoveIt 2

在容器里安装(依赖较多,约几百 MB,耐心等待):

bash 复制代码
sudo apt update
sudo apt install -y ros-jazzy-moveit

验证:

bash 复制代码
ros2 pkg list | grep moveit | head

4. 启动 Panda 机械臂演示

MoveIt 官方演示自带 Franka Panda 机械臂配置:

bash 复制代码
ros2 launch moveit_resources_panda_moveit_config demo.launch.py

会弹出 RViz 窗口,中间是 Panda 机械臂,左侧是 MotionPlanning 面板。这个演示只做运动规划(没有物理仿真),机械臂的关节状态由 MoveIt 自己管理。

先看看系统里多了什么:

bash 复制代码
ros2 node list            # 应该能看到 move_group
ros2 topic list | grep -E 'planning|display'

/display_planned_path 用于在 RViz 中显示规划出的轨迹,/planning_scene 是规划场景数据。

第一次规划与执行

在 RViz 的 MotionPlanning 面板里操作:

  1. 左侧面板 Planning Group 选择 panda_arm
  2. 在 3D 视图里,机械臂末端(夹爪)附近会出现坐标轴/拖动标记(Interact 模式)
  3. 用鼠标拖动末端的目标位置,或者用面板里的 Set Goal 微调
  4. 点击 Plan:MoveIt 计算一条无碰撞轨迹,绿色轨迹预览出现
  5. 点击 Execute:机械臂按轨迹移动

面板里还有这些常用功能:

  • Goal State :从预设的目标关节状态里选(如 ready、extended)
  • Add/Remove 障碍物:在场景里放障碍物,观察规划如何避障
  • 拖拽末端:开启 Interact 模式后,按住坐标轴的箭头/圆环拖动

如果面板不在:菜单 Panels → Add New Panel → MotionPlanning。

尝试避障

在 RViz 的 MotionPlanning 面板场景区添加一个障碍物(如一个 box),把它放在机械臂运动路径中间,再次 Plan------观察 MoveIt 绕开障碍物的轨迹。这就是"无碰撞规划"最直观的演示。

5. MoveIt 与 Gazebo 如何衔接

演示里机械臂是"悬浮"的,轨迹只让 RViz 里的模型动了。在真实开发中,MoveIt 的输出要经过:

text 复制代码
MoveIt(规划轨迹)
   │ 发布到控制器对应的轨迹话题(如 /panda_arm_controller/joint_trajectory)
   ▼
ros2_control(控制器管理器)
   │ 驱动硬件接口
   ▼
机器人硬件 或 Gazebo 仿真中的模型

在 Gazebo 里跑 MoveIt 需要额外配置:机械臂的 URDF/SDF、ros2_control 的控制器配置(joint_state_broadcaster、joint_trajectory_controller)、以及把传感器数据(关节状态)反馈给 MoveIt。这套"MoveIt + Gazebo + ros2_control"完整链路属于进阶内容,第 10 章会给出学习路线。

常见问题

现象 原因与解决办法
package 'moveit_resources_panda_moveit_config' not found MoveIt 未装完或终端没 source;重新执行安装命令并 source /opt/ros/jazzy/setup.bash
RViz 里没有机械臂模型 等待几秒;确认 launch 没有报错;必要时重启 RViz
找不到 MotionPlanning 面板 Panels → Add New Panel → MotionPlanning
规划失败(红字) 目标姿态超出关节范围,或与自身/障碍物碰撞;把目标拖回安全位置再试
点击 Execute 后机械臂不动 演示中执行依赖 MoveIt 的仿真控制器,确认 ros2 node list 里有控制器相关节点;若仍未解决,重启 launch
机械臂抖动/穿模 规划场景与显示模型不同步,重启演示即可(演示环境本身用于教学)

练习题

  1. 用 Interact 模式把 Panda 末端拖到不同位置,分别规划并执行 5 次,观察轨迹形态差异。
  2. 添加一个障碍物 box 挡住机械臂,规划并执行,观察避障效果;然后把障碍物移除再规划,对比轨迹。
  3. 在 MotionPlanning 面板的 Goal State 里选择不同的预设状态,执行后观察关节角度的变化(先 ros2 topic list | grep joint 找到关节状态话题,通常是 /joint_states,再 ros2 topic echo 查看)。
  4. 思考:MoveIt 在 Gazebo 仿真和真机上执行时,各需要哪些额外组件?(提示:控制器、反馈传感器)
相关推荐
天树星智源9 小时前
相机轨迹为什么对不上:问题不在控制模块,而在两段噪声不是同一份
论文阅读·机器人·大模型
Wanda121410 小时前
机器人与机电一体化3D数字孪生机器-Day7
人工智能·3d·机器人·数字孪生
ergevv12 小时前
如何使用 NIS 判断观测是否可靠:从卡尔曼滤波推导到机器人实践
机器人·卡尔曼滤波·nis·观测可靠性
todoitbo1 天前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
dghongcheng1 天前
喷涂机器人品牌推荐:六轴 vs 协作机器人怎么选
机器人·喷涂·喷漆设备·自动喷涂线·自动喷涂
todoitbo1 天前
Q1 MuJoCo 模型里的 49 项传感器定义与 60 维数据:一次关节和 IMU 输出核验
人工智能·ai·机器人·1024程序员节·启元机器人
SteveSenna1 天前
aubo学习:启动真实机械臂
机器人
Wanda12141 天前
机器人与机电一体化3D数字孪生机器-Day6
unity·机器人·数字孪生·1024程序员节
真的想上岸啊1 天前
笔记3:思小伴 搭载 EEG 脑电专注力监测的多功能儿童陪伴桌宠
机器人
硅谷秋水1 天前
AdaRSI 论文分析
人工智能·机器学习·语言模型·机器人