规划Kinova机械臂
bash
ros2 launch moveit2_tutorials demo.launch.py
启动后会打开:
- RViz 可视化界面
- MoveGroup 规划节点
- PlanningScene 场景
- 虚拟控制器
1. MoveIt 的规划本质
MoveIt 的核心任务:
text
给定:
起始状态
↓
目标状态
求解:
一条无碰撞运动轨迹
MoveIt 内部主要流程:
text
当前关节状态
↓
目标状态 / 目标位姿
↓
逆运动学 IK
↓
碰撞检测
↓
OMPL 路径搜索
↓
轨迹时间参数化
↓
发送控制器执行
2. 规划夹爪
- 选择Planning Group为 gripper,Planning Group 决定哪些关节参与规划
- 选择Start State为Colse或者current为规划起点,Goal State为Open,Open、Close、Home等状态来源于SRDF predefined pose
- 点击Plan规划查看轨迹
- 点击Execute执行

3. 规划机械臂
- 选择Planning Group为 manipulator,Planning Group 决定哪些关节参与规划
- 选择Start State为current为规划起点,Goal State通过拖动交互 Marker(Rviz小球)设置末端目标位姿
- 点击Plan规划查看轨迹
- 点击Execute执行
点击 Plan 后MoveIt 会:
- 获取当前状态
- 求解目标 IK
- 检查碰撞
- 使用 OMPL 搜索路径
- 生成轨迹
- 在 RViz 显示轨迹
点击Execute 后会: 将轨迹发送给 ros2_control 控制器,demo使用 fake controller
- 不会驱动真实机器人
- 只是更新 RViz 中的机器人状态
4. MoveIt 的规划对象
| 名词 | 本质 |
|---|---|
| Joint State | 关节角 |
| Pose | 末端位姿 |
| Planning Group | 可运动关节集合 |
| Planning Scene | 世界状态 |
| Collision Object | 碰撞物体 |
| Trajectory | 时间轨迹 |
5. 关节空间 vs 笛卡尔空间
Joint Space Planning:规划关节角变化
- 快
- 稳定
- 默认模式
Cartesian Planning:末端走直线
- 适合抓取
- 更容易失败
- 计算更复杂
6. 规划失败原因
| 原因 | 说明 |
|---|---|
| IK 无解 | 目标不可达 |
| 自碰撞 | 手臂撞自己 |
| 环境碰撞 | 撞桌子 |
| 时间不足 | Planning Time 太短 |
| Goal 与 Start 相同 | 无需规划 |
7. Commands 命令区
| 按钮 | 作用 | 典型使用场景 |
|---|---|---|
| Plan | 仅执行运动规划,不控制机器人运动 | 调试轨迹是否可达 |
| Execute | 执行最近一次成功规划的轨迹 | 已完成规划后执行 |
| Plan & Execute | 自动完成规划并立即执行 | 最常用 |
| Stop | 停止当前轨迹执行 | 紧急停止 |
| Clear Octomap | 清除三维占据栅格地图中的障碍物数据 | 深度相机误检测后恢复规划 |
初次启动时,由于尚未生成轨迹,
Execute和Stop按钮通常为灰色。
8. Query 查询区
- Planning Group: gripper
- 选择规划组,当前选中的是
gripper(夹爪) - 规划组是在 SRDF 里定义的关节集合,比如
manipulator、gripper等 - 这里选择
gripper,意味着规划器只会为夹爪的关节生成轨迹
- 选择规划组,当前选中的是
- Start State:
current- 规划的起点状态,
current表示使用机器人当前的实际关节位置作为起点 - 也可以下拉选择保存的姿态(比如
open、close)
- 规划的起点状态,
- Goal State:
current- 在 RViz 中拖动末端交互 Marker 后,MoveIt 会自动更新目标状态
- Goal State 下拉框主要用于选择预定义命名姿态(Named State)
9. Options 选项区
基础规划参数
| 参数 | 作用 |
|---|---|
| Planning Time (s): 5.0 | 规划器最多用 5 秒找路径,超时就返回失败 |
| Planning Attempts: 10 | 规划器独立运行的次数,MoveIt 会从多个候选轨迹中选择结果 |
| Velocity Scaling: 0.10 | 轨迹速度缩放比例,不改变路径形状,仅影响执行速度 |
| Accel. Scaling: 0.10 | 轨迹加速度缩放比例,使运动更平滑 |
高级选项(复选框)
| 选项 | 作用 |
|---|---|
| Use Cartesian Path | 使用笛卡尔插值生成末端直线轨迹,适用于抓取、插入、放置等任务 |
| Collision-aware IK | IK 求解时同时检查碰撞,避免生成自碰撞或环境碰撞姿态 |
| Approx IK Solutions | 允许使用近似逆运动学解,提高求解成功率,但末端位姿可能存在误差 |
| External Comm. | 外部通信,用于连接外部规划器或控制器,将Plan、Execute、select_planning_group等等接口以topic的形式提供 |
| Replanning | 轨迹执行过程中重新规划(比如动态避障),会增加计算量 |
| Sensor Positioning | 可以通过接入 3D 的 LiDAR 或者深度相为机械臂构建基于"Octomap"的周围环境 |
10. 可视化内容
| 可视化内容 | 显示形式 | 控制选项 | 默认状态 |
|---|---|---|---|
| 场景机器人本体 | 正常机器人模型 | Scene Robot → Show Robot Visual |
✅ 显示 |
| 规划轨迹 | 轨迹动画 / 多帧机器人模型 | Planned Path → Show Robot Visual |
✅ 显示 |
| 起点状态 | 半透明机器人模型 | Planning Request → Query Start State |
❌ 隐藏 |
| 目标状态 | 半透明目标机器人模型 | Planning Request → Query Goal State |
✅ 显示 |
MoveIt RViz 插件会同时显示当前机器人状态、目标状态以及规划生成的轨迹,便于观察运动过程与碰撞情况。