安全约束:真机探索要有硬护栏
关节限位、速度 clamp、紧急停止应放在策略外;约束 RL 是研究方向,工程上 hard guard 优先。

1. 只在 reward 里罚碰撞,不够
探索阶段 policy 会试 crazy 动作——大扭矩、越界关节、冲进 workspace 外。上次真机 first motion,policy 输出关节角超出软限位两度,若没有硬件限位和软件 clamp,就不是调参能收场的。把 collision 写成 penalty,agent 仍可能「碰一下换大回报」——尤其 sparse reward 或 penalty 相对 success 不够大时。Reward 里的 penalty 是软引导;真机必须有 独立于 policy 的安全层,不能指望 learned constraint 永远成立——Lagrangian multiplier 可能暂时 violate,hard clamp 不会。
2. 工程分层:由外到内
最外层:硬件 e-stop、关节硬限位(非 ML,不可被软件绕过)。中间层:软件 velocity/torque clamp、workspace bounding box、碰撞检测触发减速。最内层才是 RL policy。Policy 输出 ,安全层投影 到可行集——Shield/filter 在 policy 外,latency 和 sim-real 一致性是 deploy 的前置条件。
Sim 与 real 的 必须一致,否则 sim 里学的是「先 violate 再靠 filter 拉回」,real 上 filter 参数不同就崩。Sim 里 disable safety「为了学更快」训出来的 policy 禁止直接上真机——会依赖 violate-then-recover,而 real 没有 recover 路径,一次 violate 可能终止 episode 或触发 e-stop。
3. 约束 RL 与产线分工
CMDP 把 reward 与 cost 分开:优化 reward subject to 。Lagrangian PPO/CPO 在线学 multiplier,研究友好——论文里 constraint satisfaction 曲线好看,真机仍建议 hard clamp 兜底。Learned Lagrangian 可能暂时 violate constraint;产线不能赌 multiplier 永远及时拉回。
Research stack 与 production stack 分层不同,别混为一谈。探索只在 sim 放开;deploy 用 deterministic policy + 更紧 clamp,录 torque/velocity 确认没贴限。Cost 与 reward 分离写进 spec:PM 看的 success rate 和 engineering 看的 constraint violation 不是同一个 scalar。
4. 延迟与 first motion 协议
Safety filter latency 应 benchmark ms;太慢则 effective control rate 下降,与 train 不符——policy 以为 100 Hz 控制,实际 50 Hz 有效。First motion:空载、低速、小 workspace;policy swap 后重复,不假设 sim weights 直接 full speed。真机 first motion 要有 checklist,不是「load checkpoint 按 play」。
Incident review 模板四列对齐:policy 输出 → post-filter 输出 → 实际 actuator → 是否 teleop override。四列不对齐,分不清是 policy 越界、filter 失效还是 actuator 饱和。
5. Unit test 与 sim-real 一致
Unit test 安全层:1000 个 random 越界 action,输出必在限内——filter 不是摆设,要 CI 跑。Sim 训练启用与真机相同 clamp;参数文档化 sim/real 差异。Eval 关 exploration 但忘记 safety filter——eval 通过、真机第一动就 violate,是常见 deploy 事故。
6. 失败模式
只在 reward 里加 collision penalty,不够大时 agent 仍碰。安全层和 sim 不一致。Exploration 只在 sim 放开但 deploy 忘记收紧 clamp。Filter 参数 sim 用宽限、real 用严限,policy 学的是 sim 宽限下的边缘行为。
7. 案例:sim 无 guard 训出 violate-then-recover
Sim 里为加速训练 disable joint limit clamp,policy 学会「先冲出限位再靠 PD 拉回」——sim 里 PD 无限力可 recover。真机同样动作触发 hardware limit 或 e-stop,无 recover。Incident:first motion 关节撞限,根因是 sim 训练路径无 guard。修复:sim 启用与真机相同 clamp 重训,或 sim2real 前至少 fine-tune with guard。
8. 验收
- Unit test:random 越界 action,输出必在限内。
- Sim 训练启用与真机相同 clamp;参数文档化。
- 录真机 video 查 near-limit 行为。
- 探索与 deploy safety 配置分文件,code review 禁止 sim-only 无 guard。
- Filter latency benchmark 写入 README timing 表。
- Incident review 四列模板进 post-mortem 流程。
9. 与 reward penalty 的分工
Reward 里的 collision penalty 教 agent「尽量不碰」;hard clamp 保证「绝不会越界」——两者分层,不可互相替代。Penalty 不够大时 agent 仍会试碰;只有 penalty 没有 clamp,真机第一次 violate 可能就 hardware stop。Spec 里写清:train 时 sim 是否启用与 deploy 相同的 ;若 train 无 clamp、deploy 有 clamp,policy 学的是 sim 无约束下的边缘行为。CPO/Lagrangian 论文里的 constraint satisfaction 曲线是 research metric;产线 sign-off 看的是 hard clamp unit test 100% pass 与真机 near-limit 录像。Exploration 只在 sim 放开是数据策略,不是「sim 可以不安全」——sim 仍应有 clamp,只是容限可略宽于 deploy。
10. 录包与 first motion
真机 first motion checklist:空载、低速、小 workspace、deterministic policy、与 sim 相同的 。事故袋四列时间对齐:policy 输出、post-filter、actuator、teleop override——缺任一对不齐,分不清 policy 越界还是 filter 失效。Filter latency benchmark 写入 README;>1 ms 则 effective control rate 下降。Sim 无 guard 训出的 weights 禁止直接 load 真机——会依赖 violate-then-recover。Research 的 CPO/Lagrangian 曲线与产线 sign-off 分开:产线看 hard clamp unit test 100% pass 与 near-limit 录像。Team wiki 写清 research stack 与 production stack 分层,新人别混读。Reward penalty 与 hard clamp 分工:penalty 教 agent 尽量不碰,clamp 保证绝不会越界——产线 sign-off 看 unit test 与 near-limit 录像,不是 Lagrangian 曲线。Exploration 只在 sim 放开时 sim 仍应有 clamp,只是容限可略宽于 deploy——无 guard 训出的 policy 禁止直接上真机。
相关
也可以看看
johan's blog