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 内部的状态表达。

相关术语