⏱ ~43 min

概念辨析 · 机器人真机部署的安全与工程

这是最常被忽视却最关键的「工程素养」:真机部署不只是「跑 policy」,还有安全、硬件保护、故障恢复。实验室里 RL policy 摔坏机器人的事屡见不鲜。

真机部署六层递进图:①空载(0% 暴露)②悬空(10%)③低速地面(30%)④正常运行(60%)⑤长期运行(80%)⑥无人值守(100%)—— 每层含暴露程度、保护措施、验证方法、耗时,底部水平渐进色条从绿到红显示暴露程度递增

本页内容

基础解释

一句话直觉

让机器人别摔、别砸人、别烧自己。像给新车装保险杠、安全气囊和急停按钮。

是什么·为什么

真机部署不只是把策略跑起来。还要加层层保护。

为什么重要:机器人贵。一台人形几万美元,一只灵巧手十几万美元。策略失控几秒可能毁硬件。人也安全。人形摔倒可能砸到人。力矩超限可能甩飞零件。

最底层·硬件保护:每个关节设最大力矩,超限断电。设位置速度限位。监控电机温度。物理急停按钮。这一层不可妥协。

中间层·安全过滤器:在策略和电机之间加一道关。策略输出异常命令时,把它拉回到合法范围。让策略自由探索,但保证不出危险。

感知层·力和接触:检测异常力。撞到东西或被卡住时减速或停。

监控层·状态检测:用姿态传感器看有没有摔倒。一旦检测到,触发摔倒恢复策略。

行为兜底:策略输出异常时(比如出现非数、超范围),切到回家姿态。紧急情况缓慢坐下。

最上层·人监督:始终有人在旁边。手按急停。远程无线急停。

部署阶梯:仿真训得再好也不能直接上真机。要按空载、悬空、低速、正常、长期这个阶梯走。每升一档都可能暴露仿真没料到的偏差,跳一步可能毁硬件。

核心大白话:硬件不可妥协,软件层层兜底,人始终在场。

一句话类比:安全部署之于机器人,像驾校之于新司机。系安全带、装急停、教练坐副驾。

为什么必须懂

  • 机器人贵:H1 $90k、Shadow Hand $100k+。RL policy 失控几秒可能毁硬件
  • 人安全:人形摔倒可能砸到人。力矩超限可能甩飞零件
  • 论文要 demo:真机 demo 必须稳定,否则审稿人/合作方看不到效果
  • 复现别人代码:直接跑别人 policy 不做保护 = 自杀

真机部署的六层安全

层 1 · 硬件保护(最底层)

  • 力矩限制:每个关节设最大力矩,超限自动断电(防止 RL 输出爆炸值烧电机)
  • 位置/速度限制:关节不能超物理范围
  • 温度监控:电机过热自动停
  • 急停按钮:物理红色急停,能瞬间断电

这是最不可妥协的。所有 RL policy 在上真机前,必须先在底层加这些硬限制。

层 2 · Safety Filter / Shield(CBF 数学见下节)

在 RL policy 和电机之间加一层安全过滤器

  • 输入:RL 输出的「候选动作」$u_\text{RL}(x)$
  • 检测 $u_\text{RL}(x)$ 是否会让系统离开「安全集」$\mathcal{C}$
  • 不安全则解一个 QP 把 $u_\text{RL}$ 投影到「安全动作集」$u^\star$
  • 代表:Control Barrier Function (CBF)、Reachability-based shield

「Agile but Safe」[He et al. RSS 2024, arXiv:2401.17583] 就是这个思路——学一个 agile policy 做敏捷动作,再学一个 recovery policy 在边界状态下接管,两者由一个 reach-avoid value network 切换。注意:ABS 用的是 HJ 可达性、不是下面讲的 CBF(见「Safe RL」一节末尾的辨析)。

层 3 · 力/接触感知

  • 检测异常力(撞到东西、被卡住)
  • F/T 传感器、电流监测
  • 异常时减速或停

层 4 · 状态监控

  • IMU 检测摔倒(突然倾斜)
  • 关节编码器检测超速
  • 一旦检测到 fall,触发 fall recovery(如 PHC 的 fall recovery policy、Getting-Up)

层 5 · 行为兜底

  • RL policy 输出异常时(NaN、超范围),切到安全的「回家」行为
  • 紧急情况下保持当前姿态或缓慢坐下

层 6 · 操作员监督

  • 始终有人在旁边,手按急停
  • 远程 kill switch(无线)

Control Barrier Function (CBF) · Safety Filter 的数学

这是层 2 的核心数学工具,是当前唯一有强保证的 RL-safe-deployment 范式(其它 safety filter 多为启发式)。

1. 安全集与 CBF 定义

定义安全集为状态空间的一个子集:

$$\mathcal{C} \triangleq \{x \in \mathbb{R}^n \mid h(x) \geq 0\}, \qquad \partial\mathcal{C} = \{x \mid h(x) = 0\} \tag{CBF-1}$$

其中 $h: \mathbb{R}^n \to \mathbb{R}$ 是连续可微的「barrier function」。$\mathcal{C}$ 内部 $h>0$ 安全、边界 $h=0$ 危险、外部 $h<0$ 失败。

例:机器人与障碍距离 $d(x)$,则 $h(x) = d(x)^2 - d_\text{safe}^2$,$\mathcal{C}$ 是「距离 ≥ $d_\text{safe}$」的状态集。

控制系统 $\dot x = f(x, u)$($u$ 是控制输入)下,$h$ 是 CBF 当且仅当存在一个「class $\mathcal{K}$」函数 $\alpha$(连续严格增、$\alpha(0)=0$)使得:

$$\sup_{u \in \mathcal{U}}\big[\,L_f h(x) + L_g h(x)\,u\,\big] \geq -\alpha\big(h(x)\big), \quad \forall x \in \mathcal{C} \tag{CBF-def}$$

其中 $L_f h = \nabla h \cdot f$、$L_g h = \nabla h \cdot g$ 是李导数。

直观含义:在 $\mathcal{C}$ 内的每个状态,都存在一个合法控制 $u$ 能让 $h$ 的下降速度 $\dot h$ 不低于 $-\alpha(h(x))$——即「至少以 $\alpha(h(x))$ 速率被推回 $\mathcal{C}$ 中心」。

2. CBF-based Safety Filter(QP 形式)

把 RL 输出 $u_\text{RL}(x)$ 当 nominal control,safety filter 解一个二次规划(QP)找最近的合法控制 $u^\star$:

$$u^\star(x) = \arg\min_{u \in \mathcal{U}} \;\tfrac{1}{2}\big\|u - u_\text{RL}(x)\big\|^2 \tag{CBF-QP}$$

$$\text{s.t.}\quad L_f h(x) + L_g h(x)\,u \geq -\alpha\big(h(x)\big)$$

关键性质(Ames et al. 2019):如果 $h$ 是 valid CBF,则 CBF-QP 总是可行(约束永远有解),且前向不变性(forward invariance)——$x(0) \in \mathcal{C} \Rightarrow x(t) \in \mathcal{C}, \forall t \geq 0$。即从安全集出发永不离开。

直觉:QP 把 $u_\text{RL}$ 投影到「让 $h$ 不掉太快」的半空间——平时不动 RL 输出(远离边界),近边界时把控制拉回来。

3. 高阶 CBF(HOCBF)· 处理相对阶 >1

机器人关节二阶系统 $\ddot q = u$ 对位置约束 $h(q)$ 的相对阶是 2——一阶 $\dot h = \nabla h \cdot \dot q$ 不显含 $u$,CBF-QP 不直接可用。需要高阶 CBF

定义 $\psi_0(x) = h(x)$、$\psi_1(x) = \dot h(x) + \alpha_1(h(x))$、$\psi_2(x) = \ddot h(x) + \alpha_2(\psi_1(x))$(前两阶 + class-$\mathcal{K}$ 修正),把约束改成 $\psi_2(x, u) \geq 0$。

更通用的非线性 Hitting Fraction(NHF,也称 Relaxed CBF)写法让 $\alpha$ 随 $h$ 自适应:

$$\dot h(x) \geq -\gamma(h(x)) \cdot h(x), \qquad \gamma(h) = \begin{cases} \gamma_0 & h \geq h_\text{th} \\ \gamma_0 \cdot (h/h_\text{th})^p & h < h_\text{th} \end{cases} \tag{NHF}$$

$h$ 远离边界($h \geq h_\text{th}$)时 $\gamma$ 固定(弱约束、给 RL 自由);接近边界($h < h_\text{th}$)时 $\gamma$ 急剧变小(强约束、强行把状态拉回)。这就是「在边界附近才生效」的安全 filter,避免平时过度限制 policy。(待核:NHF 在 legged RL 部署里的具体工作案例)

4. 离散时间 CBF(实际部署需要)

实际控制是离散的(每 $\Delta t$ 一步),连续 CBF 不直接成立。离散时间 CBF(D-CBF)用 Euler 离散:

$$h\big(x + \Delta t \cdot f(x, u)\big) \geq (1 - \alpha \Delta t)\,h(x) \tag{D-CBF}$$

(一阶 Taylor 近似 $h(x_{k+1}) \approx h(x_k) + \Delta t\, \dot h$ 推出)。$0 < \alpha \Delta t < 1$ 保证 $(1-\alpha\Delta t) \in (0,1)$,即 $h$ 不下降。D-CBF 的 QP:

$$u^\star_k = \arg\min_u \tfrac{1}{2}\|u - u_\text{RL}(x_k)\|^2 \quad\text{s.t.}\quad h(x_k) + \Delta t\, L_f h(x_k) + \Delta t\, L_g h(x_k)\, u \geq (1-\alpha\Delta t)\, h(x_k) \tag{D-CBF-QP}$$

实际部署用 D-CBF,连续 CBF 只是理论分析工具。

5. 应用实例:速度避障 CBF

最常用的 CBF 是「相对速度避障」。设机器人位置 $p$、障碍 $o$、相对位置 $r = p - o$、相对速度 $\dot r = \dot p - \dot o$。取 barrier:

$$h(x) = \|r\|^2 - D_\text{safe}^2, \qquad \dot h = 2 r^\top \dot r \tag{VO-CBF}$$

CBF-QP 约束 $\dot h \geq -\alpha h$ 变成 $2 r^\top (\dot p - \dot o) \geq -\alpha(\|r\|^2 - D_\text{safe}^2)$。当机器人接近障碍($h \to 0$),QP 强制让相对速度指向「远离障碍」方向。这是 Velocity Obstacle + CBF 的标准组合。

6. CBF 的局限

  1. 必须能写出 $h(x)$:对复杂任务("别打翻杯子"),定义 $h$ 本身就是难题。需要从任务 spec 自动综合 CBF(Learning CBF 是活跃方向)。
  2. 保守:QP 总把控制往安全集中心拉,可能压制 RL 学的敏捷动作。NHF(上面)部分缓解。
  3. 相对阶高的系统难调:HOCBF 链式约束容易震荡、需 fine-tune $\alpha_1, \alpha_2$。
  4. 观测噪声下不保证:CBF 假设 $x$ 精确可知,真机有噪声时 forward invariance 不再保证。需要 robust CBF(带 noise margin)。
  5. 不解决 fall recovery:CBF 保证「不进 unsafe」,但若已经进 unsafe(被外力推倒),CBF 不教如何起来——需要 RL fall recovery policy 配合。

RL policy 真机部署的标准流程


1. 仿真训练 → 仿真验证(成功率、稳定性)
2. 仿真→真机 domain randomization / system ID 校准(见 C-sim2real-methods.md)
3. 真机「空载测试」:电机不接负载,看 policy 输出合理
4. 「悬空测试」:机器人吊起来,看动作形态对
5. 「低速测试」:低增益 PD + 慢动作,确认安全
6. 「正常测试」:正常 PD + 完整动作,操作员随时急停
7. 「长期测试」:连续运行,监控温度/磨损

跳过任何一步都可能出事。常见事故:直接上 step 6 导致机器人甩飞。

Sim-to-Real 部署的几个工程坑

  1. 延迟不匹配:仿真里 policy 推理瞬时,真机有 5-30ms 延迟。要在仿真训练时模拟延迟(domain randomization 加 motor delay)
  2. 观测归一化:仿真观测的统计量(mean/std)和真机不同。policy 输入归一化层要用真机统计量重新校准
  3. action 限幅:仿真 action 可能超真机物理范围,要在 policy 输出加 tanh 限幅
  4. PD 增益:真机 PD 增益和仿真不同(电机响应差异),要 system identification 校准
  5. 传感器噪声:仿真观测干净,真机有噪声。训练时加观测噪声(DR)

RL 真机部署的统计要求

  • 多次 seed:至少 3-5 个 seed,报告 mean ± std
  • 多次 trial:每个 policy 跑 10+ 次,看鲁棒性
  • 长时间运行:不只看 30 秒 demo,要看几分钟持续稳定性
  • 失败分析:记录失败原因(fall / 异常力 / policy 发散),不是只报成功率

论文里常省略的工程细节

RL 论文很少写这些(reviewer 不关心),但复现时关键:

  • PD 增益怎么调(往往要数小时)
  • safety filter 怎么实现(CBF-QP 多用 OSQP/CVXPY,但工业部署常用 C++ 内联)
  • 数据记录/回放(debug 必备)
  • 机器人维护(润滑、电池、传感器校准)

Safe RL(学术方向)

学术界有「Safe RL」方向,但和工程实践有差距:

  • Constrained MDP / CMDP:在 MDP 里加约束(期望 cost $\leq$ threshold),用 Lagrangian 或 CPO 学满足约束的策略:

$$\pi^\star = \arg\max_\pi \mathbb{E}\!\left[\sum_t \gamma^t r_t\right] \quad \text{s.t.}\quad \mathbb{E}\!\left[\sum_t \gamma^t c_t\right] \leq d \tag{CMDP}$$

  • CBF + RL:用 control barrier function 作 hard constraint,policy 在 CBF-QP filter 后执行(见上节)。
  • Reachability-based RL:用 Hamilton-Jacobi 可达性分析离线算 unsafe 集,policy 在 unsafe 集边界被截断。
  • Risk-sensitive RL:优化 CVaR(最坏情况)而非期望:

$$\pi^\star = \arg\max_\pi \mathrm{CVaR}_\alpha\!\left[\sum_t \gamma^t r_t\right] \tag{Risk-RL}$$

  • Offline RL:不用在线试错(避免真机风险)。

:这些理论方法在真实人形/灵巧手上很少真正部署。学术上目前最有影响的「RL + 安全兜底」组合是 Agile but Safe [He et al. RSS 2024, arXiv:2401.17583]——但它走的不是 CBF-QP 路线,而是 HJ 可达性:离线学一个 reach-avoid value 网络,运行时若 value 跌破阈值就切到 recovery policy。CBF/QP 在真机 locomotion 上真正大规模落地的公开案例仍偏少,更多停留在仿真与原型阶段。

真机安全清单

  • 跑任何新 policy 前,加硬件保护(力矩/位置/温度/急停)
  • 第一次上真机,悬空测试
  • 操作员手不离急停
  • 记录所有真机数据(rosbag/自定义 log)
  • 长时间运行前,先短时间(30s)验证
  • 准备「回家」行为作为兜底
  • 团队成员都受过安全培训
  • 写出至少一个 CBF(如速度避障)作 layer-2 filter,在仿真验证它能把 RL 失控拉回来,再上真机

拿到新机器人的前 15 步操作清单(工程实战)

这是 ETH RSL / Stanford / Berkeley / UCSD LeCAR 等实验室的实战经验整理,不是论文里的内容——论文不会写这些,但不做这些你根本跑不起来。

第 1-3 步:硬件验收

  1. 全关节检查:手动转动每个关节(断电状态),检查机械限位、异常摩擦、松动。记录每个关节的被动运动范围
  2. 传感器校准:IMU 零偏校准(静止 60s 平均)、关节编码器零位校准(回到机械零位并设零)、力/扭矩传感器标定(如有)
  3. 通信检查:确认 CAN/EtherNet 通信延迟 < 1ms,无丢包。在 100 Hz 控制频率下测试持续 10 分钟无掉线

第 4-7 步:SysID(详见 C-sim2real-methods.md 实操指南)

  1. 电机标定:悬空机器人,对每个关节施加阶跃电流,拟合 $\tau = K_t i_q - b\dot{q} - f_c \text{sign}(\dot{q})$
  2. PD 增益确定:从仿真继承($K_p \approx 55, K_d \approx 0.8$ for Unitree),真机上微调
  3. 摩擦测量:sim-real trajectory match 法(最实用)或斜面法快速估计
  4. 质量/惯量:称重 + URDF nominal + DR $U(0.7, 1.3)$

第 8-10 步:安全配置

  1. 硬件保护设死:关节力矩限幅 $\tau_{max}$(电机规格的 80%)、速度限幅、温度监控阈值、急停按钮接线验证
  2. Safety filter 实现:至少实现「关节位置超限→PD 回零」「IMU 倾角 > 45°→停机」两个硬编码规则
  3. 回家行为:实现一个「所有关节缓慢回 nominal 站立姿态」的 fallback policy(不走 RL,走简单插值)

第 11-13 步:仿真验证

  1. 仿真训完 policy:用标定后的参数 + DR 跑 5000+ episodes,success rate > 95%
  2. Sim-real trajectory replay:在真机上录一条安全轨迹 $(s, a, s')$,在仿真里回放比较 state divergence
  3. 悬空测试:吊起机器人,用 RL policy 驱动关节运动,看动作形态是否合理(最基本:关节方向对不对、有没有振铃)

第 14-15 步:真机部署

  1. 低速地面测试:放地面,低 PD gain($K_p \approx 20$),慢速行走(0.2 m/s),操作员手按急停,持续 30s
  2. 正式实验:正常 PD gain,正常速度,多人围观 + 急停 + 录制,至少 10 次取成功率

常见事故 & 教训

事故原因教训
关节反方向运动URDF 关节符号和真机不一致悬空测试时第 1 个要检查的
突然剧烈抖动PD gain 太大 或 policy 输出超范围加 action clipping + 限幅
机器人摔倒断电电池没电 / 突然断电始终监控电压 > 20%
电机过热冒烟长时间大力矩输出温度监控 + 自动降力矩
仿真 OK 真机直接摔sim-real gap 大于预期trajectory replay 先验证 gap
复盘:误区、检查点与 FAQ

常见误区

"仿真训得成功就直接上真机" —— 错。要按流程:空载、悬空、低速、正常、长期。跳一步可能出事。

仿真成功只是必要条件,真机部署有独立的工程流程。

"安全过滤器会拖累策略性能" —— 部分对。过滤器平时不动策略,只在边界附近才介入。设计合理影响很小。

好的过滤器是"平时隐身,关键时拉一把"。

"摔倒恢复不重要,只要别摔倒" —— 错。再稳的策略也可能被外力推倒。没有摔倒恢复就只能人来扶。

防摔和摔倒后爬起来是两套独立能力,缺一不可。

检查点

Q1

真机部署前必须加的硬件保护有哪几项?

💡 显示参考答案
  • 关节最大力矩限位、位置速度限位、电机温度监控、物理急停按钮。
  • 入门层「硬件保护」段。
Q2

安全过滤器层在做什么?

💡 显示参考答案
  • 在策略和电机之间加一道关,把异常命令拉回合法范围;让策略自由探索但不越界。
  • 入门层「安全过滤器」。
Q3

"给新车装保险杠、安全气囊和急停"这个类比里,三项分别对应机器人哪一层保护?

💡 显示参考答案
  • 保险杠=硬件保护;安全气囊=行为兜底/状态检测;急停=人监督急停。
  • 直觉层 类比三层映射。
Q4

为什么仿真训得再好,真机也要按"悬空-低速-正常"流程来?

💡 显示参考答案
  • 仿真和真机总有偏差;每升一档(空载/悬空/低速/正常/长期)都可能暴露新问题,跳步可能毁硬件。
  • 入门层「部署阶梯」已补。
Q5

假如策略输出突然变成非数,应该怎么办?

💡 显示参考答案
  • 切到回家姿态或缓慢坐下;非数/超范围输出必须兜底,不能直接发到电机。
  • 入门层「行为兜底」段。

FAQ

Q1:什么是安全过滤器?

一层在策略和电机之间的程序。策略输出先经过它。它检查这个输出安不安全。不安全就改成最近的安全动作。常见实现叫控制障碍函数。

Q2:摔倒后怎么起来?

专门的摔倒恢复策略。通常是另一个强化学习策略。从趴地姿态回到站立。和正常行走策略分开训。

Q3:长期运行要看什么指标?

电机温度、电池电压、关节误差、摔倒次数。任何一个超阈值都要停。短时间成功不代表长期稳。


深度辨析 → site/concepts/C-safety-and-deployment.html

相关

  • 概念:C-rl-to-control-bridge.md(RL+传统控制结合 = safety filter)、C-sim2real-methods.md(sim-to-real 含安全考虑)
  • 线索:T01-sim2real-locomotion.md(sim-to-real 工程)
  • 论文:P-ExtremeParkour-2023.md(parkour 安全挑战)、P-RMA-2021.md(在线适应 = 部署时安全)
  • 安全 filter 代表作:Agile but Safe [He et al. RSS 2024, arXiv:2401.17583](CMU LeCAR-Lab,双策略 agile + recovery,policy 切换由 reach-avoid value 网络决定,方法上属 HJ 可达性而非 CBF;笔记 P-AgileButSafe-2024.md 待补)
  • 理论基础:Ames et al. 2019 "Control Barrier Functions: Theory and Applications"(CBF 经典综述)。