Kinova机械臂运动规划入门指南
Kinova机械臂的运动规划是学习MoveIt的经典入门场景。启动开发环境只需运行一条命令:
ros2 launch moveit2_tutorials demo.launch.py
启动成功后,你会看到四个核心组件同时加载上线:
- RViz可视化交互界面
- MoveGroup运动规划节点
- PlanningScene规划场景
- 虚拟控制器(Fake Controller)
1. MoveIt规划的核心原理
MoveIt的核心任务非常直观——给定一个起始状态,再设定一个目标状态,然后求解出一条无碰撞的可行运动轨迹。整个规划流程大致如下:
当前关节状态 → 目标状态/目标位姿 → 逆运动学IK求解 → 碰撞检测 → OMPL路径搜索 → 轨迹时间参数化 → 发送至控制器执行
每一个环节都有明确的职责分工,后续章节我们将逐一详细拆解。
2. 规划夹爪开合
操作夹爪的步骤非常简单明了:
- 在Planning Group下拉框中选中
gripper,该组决定了哪些关节参与运动规划。 - 将Start State设为
Close或current作为起始点,Goal State设为Open。注意:Open、Close、Home等预定义姿态均来源于SRDF文件。 - 点击Plan预览生成的轨迹,确认无误后点击Execute执行。
3. 规划机械臂运动
机械臂的规划过程略有不同,但基本逻辑一致:
- Planning Group选择
manipulator。 - Start State选择
current,目标位姿通过拖动RViz中的交互小球(Marker)来设定。 - 点击Plan预览轨迹,确认后点击Execute执行。
点击Plan之后,MoveIt内部会依次完成:获取当前关节状态 → 求解目标IK → 碰撞检测 → OMPL路径搜索 → 生成轨迹 → 在RViz中显示。而点击Execute时,轨迹会被发送给ros2_control控制器。由于演示环境使用的是虚拟控制器(Fake Controller),因此不会驱动真实机器人,只会更新RViz中的机器人状态显示。
4. MoveIt规划中的关键对象
理解以下几个核心术语对掌握MoveIt规划非常有帮助:
| 术语 | 核心含义 |
|---|---|
| Joint State | 机器人各关节的角度值 |
| Pose | 末端执行器的位置与姿态 |
| Planning Group | 可参与运动的关节集合 |
| Planning Scene | 当前世界环境的完整状态 |
| Collision Object | 场景中的碰撞物体 |
| Trajectory | 带时间戳的完整运动路径 |
5. 关节空间规划 vs 笛卡尔空间规划
机械臂规划有两种常见模式:
关节空间规划(Joint Space Planning):直接规划关节角度的变化轨迹。优点是速度快、稳定性高,也是MoveIt的默认规划模式。
笛卡尔规划(Cartesian Planning):让末端执行器沿直线运动。适用于抓取、放置等任务,但容易因运动学约束失败,计算复杂度也更高。
6. 规划失败的主要原因
当规划不出轨迹时,通常由以下几类原因引起:
| 原因 | 详细说明 |
|---|---|
| IK无解 | 目标位姿超出了机械臂的可达范围 |
| 自碰撞 | 机械臂自身部件之间发生碰撞 |
| 环境碰撞 | 机械臂与工作台、障碍物等环境物体碰撞 |
| 规划时间不足 | 设定的Planning Time过短,未能找到路径 |
| 起始与目标相同 | 无需规划,直接跳过 |
7. Commands命令区功能详解
命令区的几个按钮各有明确职责:
| 按钮 | 作用 | 典型使用场景 |
|---|---|---|
| Plan | 仅执行运动规划,不驱动机器人运动 | 调试轨迹是否可达、是否无碰撞 |
| Execute | 执行最近一次成功规划的轨迹 | 已完成规划后正式执行 |
| Plan & Execute | 自动完成规划并立即执行 | 日常开发中最常用的操作 |
| Stop | 立即停止当前轨迹的执行 | 紧急情况下的安全停止 |
| Clear Octomap | 清除三维占据栅格地图中的障碍物数据 | 深度相机误检测导致规划失败后恢复环境 |
8. Query查询区参数说明
查询区主要用于设置规划的起点与目标:
- Planning Group:当前选中的是
gripper(夹爪)。规划组由SRDF文件定义,例如manipulator、gripper等。选择哪个组,规划器就只为该组包含的关节生成运动轨迹。 - Start State:通常选择
current,表示使用机器人当前的关节位置作为起始点。也可以从下拉菜单中选择已保存的命名姿态(如open、close)。 - Goal State:拖动RViz中的末端交互Marker后,MoveIt会自动更新目标状态。下拉框主要用于选择预定义的命名姿态(Named State)。
9. Options选项区参数解读
基础规划参数如下:
| 参数 | 作用说明 |
|---|---|
| Planning Time (s): 5.0 | 规划器最多允许5秒内找到路径,超时则返回失败 |
| Planning Attempts: 10 | 规划器独立运行的尝试次数,从多个候选轨迹中择优 |
| 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. RViz可视化内容详解
RViz中可以观察到的几种可视化元素:
| 可视化内容 | 显示形式 | 控制选项 | 默认状态 |
|---|---|---|---|
| 场景机器人本体 | 正常机器人模型 | Scene Robot → Show Robot Visual | ✅ 显示 |
| 规划轨迹 | 轨迹动画/多帧机器人叠加显示 | Planned Path → Show Robot Visual | ✅ 显示 |
| 起点状态 | 半透明机器人模型 | Planning Request → Query Start State | ❌ 隐藏 |
| 目标状态 | 半透明目标机器人模型 | Planning Request → Query Goal State | ✅ 显示 |
