先记住一句话
策略负责提出意图,执行栈负责按时、连续、受约束地实现意图,并在观测陈旧、网络断开、动作异常或接触危险时安全降级。
1. 一条典型部署链路
camera/state capture
→ timestamp + preprocess
→ policy client ──RPC── policy server / GPU
→ denormalize + frame transform
→ action buffer / scheduler
→ IK / WBC / low-level controller
→ actuator + safety monitor
→ logs and next observation每一箭头都可能排队、丢包或使用不同 clock。日志必须把数据 age 和版本带到底,而不是只在 server 记录 model latency。
2. Policy 与 controller 的职责边界
| Policy | Controller / safety layer |
|---|---|
| 任务语义、目标对象、动作意图 | 轨迹插值、rate/acceleration/jerk 限制 |
| EEF/关节 action chunk | IK、WBC、碰撞与关节限位 |
| 根据新观测重规划 | 高频 tracking、力限、watchdog |
| 预测不确定性/价值 | 停止、退让、请求人类 |
安全约束不能只靠训练数据“学出来”。模型外的确定性 limit 和监控提供最后防线,也让不同 policy 的比较更安全。
3. Action buffer 的状态机
- FILLING:等待初始 chunk,机器人保持安全姿态。
- RUNNING:按 timestamp 消费 action,并异步请求下一 chunk。
- LOW:buffer 即将耗尽,可降速或提前重规划。
- STALE:新 chunk 基于过旧观测,拒绝或缩短执行。
- FAULT:网络、NaN、越界或 watchdog 触发,进入安全停止。
不要用“如果 list 空了就 hold last action”代替状态机;速度/力矩命令被无限保持可能危险。
4. 必做的动作校验
- 数值 finite、维度和 embodiment ID 正确。
- 反归一化后在训练统计与物理上下限内。
- 目标 pose/关节可达,IK 有解且不越关节限位。
- 相邻 action 的速度、加速度和 jerk 合理。
- 预测 frame、控制 frame 和单位匹配。
- collision、self-collision、workspace、force/torque 约束通过。
5. 不确定性与停止策略
可用 ensemble disagreement、diffusion sample variance、OOD detector、value/success predictor、视觉质量和 controller tracking error 组合风险分数。阈值应在 held-out failure 上校准。高不确定时的动作必须预先定义:减速、重新观察、退回已知姿态、请求人类,而不是让模型自由 improvisation。
6. 部署版本必须可回滚
model checkpoint、normalization stats、data schema、pre/postprocessor、controller gains、calibration 和 prompt/template 是一个原子 release。只更新权重而沿用旧 stats 会产生静默事故。每次 rollout 写入完整 version bundle,可复现并一键 rollback。
7. 故障注入比祈祷有效
- 增加 50–500 ms latency 与随机 jitter。
- 冻结/丢弃某一路 camera,或注入黑帧。
- 中断 policy server / RPC。
- 让对象滑落、被人移动、抓取失败。
- 给 state/action 一个接近限位的起点。
检查系统是否在规定时间内进入正确降级状态,并确认日志足够解释原因。
8. 四个部署预算
例 1:端到端 age
曝光 12 ms、传输 18 ms、排队 25 ms、推理 70 ms、RPC 10 ms、buffer 等待 15 ms,动作执行时观测 age=$12+18+25+70+10+15=150$ ms。
例 2:速度限幅
当前位置 0.40 m,policy 下一 50 ms 目标 0.44 m,隐含速度 $(0.44-0.40)/0.05=0.8$ m/s。若上限 0.3 m/s,本周期最大位移仅 $0.3×0.05=0.015$ m,目标需 clip 到 0.415 m。
例 3:watchdog
Controller 500 Hz,每 tick 2 ms;规定 20 ms 未收到新 setpoint 进入 hold,等价于连续丢 10 ticks。速度命令不得在超时后无限沿用。
例 4:风险融合
OOD 0.7、碰撞预测 0.2、tracking error 0.1,权重 0.5/0.3/0.2,risk=$0.35+0.06+0.02=0.43$。阈值 0.4 时应进入减速/重观察,而不是继续执行。
安全层修改或拒绝动作时必须回写日志。否则后训练看不到 actor 的危险提议,也无法区分“policy 成功”与“controller 挽救”。
自测
1. 为什么不能无限 hold last action?
最后动作可能是速度/力矩命令,持续执行会造成漂移或危险接触。
2. 部署 release 为什么包含 normalization stats?
权重只在特定输入/输出变换语义下有效,stats 错会直接改变物理动作。
3. 安全层动作为何要回写?
后续诊断和学习需要区分 actor proposal 与真正执行的动作及其后果。
官方与原始资料
ROS 2 Real-time Programming 说明实时循环的系统约束;RT-2 展示 VLA 的真实机器人闭环评测。