MoveIt PlanningScene 是 MoveIt 中表示当前机器人和环境的规划场景,包含机器人模型状态、碰撞对象、附着物体和碰撞检查所需的上下文。
它让规划器或 MoveIt Servo 能在同一套场景里判断机器人是否会自碰撞、是否会碰到环境物体,以及当前状态是否满足规划约束。
核心问题
运动规划和实时控制不能只知道机器人关节角,还需要知道:
- 机器人每个 link 的当前空间位置。
- 环境中有哪些 collision objects。
- 哪些 link 之间允许接触,哪些必须避开。
- 夹爪是否附着了物体,以及附着物体如何参与碰撞。
PlanningScene 负责把这些信息组织成可查询的场景状态。
核心机制
PlanningScene 通常基于 URDF、SRDF、当前 MoveIt RobotState 和外部环境更新构建。它可用于:
- 自碰撞检查:机器人 link 之间是否相交。
- 环境碰撞检查:机器人或附着物体是否碰到外部 collision objects。
- 距离查询:离碰撞还有多远,用于速度缩放或风险提示。
- 约束评估:判断状态是否满足规划相关约束。
在 MoveIt Servo 中,PlanningScene 是碰撞检查和安全缩放的重要输入。
工程用途
- MoveIt 规划前判断起点和路径是否有效。
- Servo 周期中检查接近碰撞时是否需要降速或停机。
- 把感知系统输出的障碍物加入机器人可查询的环境模型。
- 管理抓取后附着在末端执行器上的物体。
边界与常见坑
- PlanningScene 只和它收到的场景同步一样准确;感知延迟或漏建模会导致碰撞风险漏掉。
- collision mesh 和 visual mesh 可能不同,不要用 RViz 看起来没碰撞来替代真实碰撞检查。
- frame_id 不一致会让环境物体出现在错误位置。
- 允许碰撞矩阵配置过宽会掩盖真实自碰撞风险。