碰撞检查(Collision Checking)是基于机器人与环境的几何模型,判断当前状态、候选轨迹或实时命令是否会导致自碰撞或碰到外部物体的过程。
它是运动规划、MoveIt Servo 和机器人安全策略中的基础能力,但它依赖模型和场景是否准确。
核心问题
IK 或 servo 求得一个关节命令,只说明几何目标可能可达,不说明运动过程中不会撞到机器人自己、桌面、夹持物或人。碰撞检查补上的是空间安全约束:
- 当前姿态是否已经碰撞?
- 下一步命令是否更接近碰撞?
- 路径上的中间状态是否穿过障碍物?
- 是否需要降速、拒绝命令或重新规划?
核心机制
MoveIt 中的碰撞检查通常依赖 URDF/SRDF 提供的 collision geometry、allowed collision matrix、当前 MoveIt RobotState 和 MoveIt PlanningScene 中的环境物体。
检查可分为:
- 自碰撞:机器人 link 之间是否相交。
- 环境碰撞:机器人或附着物体是否碰到场景物体。
- 距离检查:尚未碰撞但距离过近时,用于提前降速。
工程用途
- 规划前验证起点和目标状态。
- 轨迹规划时过滤无效路径。
- 实时 servo 中接近碰撞时缩放速度或停止。
- 调试 URDF collision mesh、工具偏置和环境感知同步。
边界与常见坑
- 碰撞检查不是力传感器;模型中没有的物体不会被检查到。
- collision mesh 过粗会误报,过细会拖慢实时检查。
- 场景更新延迟会让检查结果落后于真实世界。
- 只检查离散状态可能漏掉高速运动中的中间碰撞。
- 允许碰撞配置错误会让本该禁止的接触被静默放行。