统一行走 / 奔跑 / 跌倒恢复:用一个状态门切换 AMP 判别器
🎯 为什么重要:状态机驱动的多模态运动,又脆又难调
人形机器人要在真实环境里跑,至少要会三件事:稳定走路、高速奔跑、跌倒爬起。传统架构把这三件事交给三个独立控制器,再用手工状态机串起来。这套做法在工业界沿用至今(如 Unitree 官方 SDK),但有三个老大难:
近年 RL 学界证明: AMP(Adversarial Motion Priors)能用几段参考动作把风格注入策略,无需手工 reward;端到端 RL 也能学会 fall recovery。但「AMP 怎么覆盖多个截然不同的行为模式」这个问题一直没有干净的答案。
💡 核心思想:单一策略 + 状态相关 AMP 门控
论文的解法一句话能说清:策略只有一份,判别器有两份。训练时每一步先用一个「状态门」决定当前 transition 交给哪个判别器打分;部署时门直接砍掉,只留策略。
门的定义极简——一个固定阈值,不学:
$g_z$ 是投影重力向量的 z 分量(直立时 $\approx -1$,倒下时 $\approx 0$ 或正)。阈值 0.6 对应身体倾斜约 37°。这个位置正好落在 $g_z$ 经验分布的低密度区间,所以分得干净,不用学。
🛠️ 三个让「单一策略 + 多判别器」work 的关键设计
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 两个判别器分工 | $D_\phi^{rec}$ 只看 fallAndGetUp2 参考片段;$D_\phi^{loco}$ 同时看 walk 和 run 片段 | 恢复动作和走路/跑步的运动学差异太大,硬塞给一个判别器会让它把「爬」的统计混进「跑」里,两边都退化。结构分离 > 参考片段多样性 |
| ② 速度条件把 walk/run 塞进一个判别器 | $D_\phi^{loco}$ 接受归一化速度 $\hat{v}_t = \min(v_x^{cmd}/v_{\max}, 1)$ 作为额外输入;参考采样按 $(1-\hat{v}_t)$ 概率抽 walk、$\hat{v}_t$ 概率抽 run | 这样不用为走路和跑步各训一个判别器、各训一个策略。一个判别器在 $\hat{v}$ 的连续插值下产生平滑风格一致的奖励,无模式跳变 |
| ③ 门只用 projected gravity 的单阈值 | $|g_z + 1| > 0.6$(约 37° 倾斜)就路由到 rec,否则到 loco | $g_z$ 是双峰分布(要么直立要么倒),阈值天然落在低密度区,所以一个不学的阈值就够。不需要学习分类器,部署时这个门直接从代码里删掉 |
学的门控分类器在训练时会被策略「刷分」——策略会故意生成让分类器误判的状态来骗取奖励(reward hacking)。固定阈值则不可欺骗:机器人要么真的躺到 37° 以上(确实摔了),要么没躺到(确实没摔)。这是把「模式边界」从「学出来的模糊面」固化成「物理上的硬阈值」,反而更鲁棒。
📊 结果:单一 ONNX 策略 50Hz,从摔倒到奔走一气呵成
| 维度 | 数字 / 现象(来自原文) |
|---|---|
| 机器人 | Unitree G1 humanoid(29 个铰链 + 自由骨盆) |
| 训练 | Isaac Lab 仿真 + PPO,3 层 MLP(输入 384-dim = 4 帧 × 96-dim 堆叠) |
| 参考片段 | 仅 3 段 LAFAN1 片段:walk1_subject1 / run1_subject2 / fallAndGetUp2_subject2 |
| AMP 权重 | $\lambda_{amp} = 0.5$ |
| 速度范围 | 正常模式 $[-0.5, 1.0]$ m/s;快速模式 $[-1.5, 3.0]$ m/s |
| 部署频率 | 导出 ONNX,50 Hz 实机部署,C++ FSM 读关节、发 PD 位置目标 |
| SIM-TO-REAL | 无 sim-to-real 微调,无 domain randomization fine-tuning,仅标准训练时参数随机化 |
| 验证场景 | 结果 |
|---|---|
| 速度跟踪(正常) | 在 $[-0.5, 1.0]$ m/s 命令下稳定跟踪;行走呈现规律 heel-toe 接触周期 |
| 速度跟踪(快速) | 在 $[-1.5, 3.0]$ m/s 跑步步态呈现步幅加大、双支撑相缩短,与 run 参考片段一致 |
| 跌倒恢复 - 俯卧(prone) | 成功从面朝下姿态恢复到直立 stance |
| 跌倒恢复 - 仰卧(supine) | 成功从面朝上姿态恢复到直立 stance |
| 统一连续性 | 从「跌倒 → 行走 → 奔跑」单策略一气呵成,无需运行时模式指令 |
🌐 在领域中的位置
本文在 AMP 谱系里的位置很特殊:它不改 AMP 的核心算法,而是把「用哪一个判别器」变成状态相关。这与 ASE 那种「学一个潜在空间」的思路正交——你完全可以把两者组合。它也呼应了同时期的「Unified Humanoid Fall-Safety Policy」(Xu, Bahl, Pathak 2025)等工作的共同方向:少模式切换、多行为统一。关联线索:T04 运动先验谱系。
❓ 常见误区
这个状态门看起来太简单了,真的不需要学吗?
作者论证得很清楚:$g_z$ 的经验分布是双峰的(直立 $g_z \approx -1$,倒地 $g_z \approx 0$),37° 倾斜对应的 $|g_z+1|=0.6$ 落在低密度区。固定阈值既准确又对噪声鲁棒。学习分类器反而会被策略 reward hacking。这种「能不学就不学」的克制是这篇论文的精神。
「快速模式」要操作员显式指令——这不就是模式切换吗?
作者明确说这是「审慎的安全约束」("reflecting a deliberate safety constraint"),不是技术限制。也就是说:策略本身能跑 3 m/s,但出于安全考虑要操作员显式授权才进入。这和「策略不会切换走路/跑步/恢复」是两回事——后者是自动的,前者是人为授权的。
没有跨方法的成功率对比表,怎么知道这个方法好?
这篇是系统/方法论文,卖点是「极简架构就能做到 walk + run + recovery 三合一」。它的对比更多是架构层的:传统三策略 + FSM 的复杂度 vs 单策略的简洁。真机演示(俯卧/仰卧恢复 + 行走 + 奔跑的完整 rollout)本身就是核心证据。