MoveIt RobotState 是 MoveIt 中表示机器人当前状态的核心对象,保存关节变量、派生 link transform、附着物体状态和与 robot model 相关的状态计算结果。
它不是硬件驱动本身,而是 MoveIt 内部对“机器人现在处于什么配置”的模型化表示。
核心问题
规划、IK、碰撞检查和 servo 都需要一个一致的当前状态:
- 当前每个 active joint 的位置是多少?
- 给定这些关节值,每个 link 的位姿是多少?
- 当前状态是否越过关节限位?
- 某个 planning group 的起始状态和末端 frame 在哪里?
MoveIt RobotState 把这些信息和 robot model 绑定起来,让上层组件可以做 FK、约束检查和碰撞检查。
核心机制
RobotState 通常由 robot model 加上当前 joint values 构成。更新关节值后,需要确保派生 transform 被更新,才能让 link pose、group state、collision body 等查询反映最新状态。
在 MoveIt Servo 中,当前 RobotState 是实时命令求解和安全检查的基础。Pose 或 Twist command 最终都要结合当前状态才能算出下一步 joint command。
工程用途
- 作为 MoveIt 规划请求的 start state。
- 作为 IK 求解的 seed 或当前状态。
- 给 MoveIt PlanningScene 的碰撞检查提供机器人姿态。
- 在 Servo 中判断 joint bound、奇异接近和命令更新方向。
边界与常见坑
- RobotState 是软件快照,不等于控制器或硬件的实时真值;同步延迟会影响 servo 和碰撞检查。
- 设置 joint values 后如果没有更新派生 transform,link pose 查询可能仍是旧值。
- planning group、base frame、tip frame 不一致会让状态查询看似正确但对应错对象。
- RobotState 不替代日志、状态机或执行反馈;它只是 MoveIt 内部的状态表达。