枢纽
机器人Unitree G1
数据集LAFAN1
上真机
物理感知
实时
输入模态proprioception

统一行走 / 奔跑 / 跌倒恢复:用一个状态门切换 AMP 判别器

Yidan Lu, Yichao Zhong, Liu Zhao, Wanyue Li, Peng Lu(香港大学)。arXiv:2605.18611,2026 年 5 月。 真机 Unitree G1 验证 · motion priorhumanoidAMP 谱系 T04

🧠 一句话心智模型:人形机器人传统做法是「走、跑、爬起来」用三个控制器 + 一个状态机串起来——又笨又脆。这篇论文的做法极简:仍然只用一个策略网络,但训练时给它配「两个老师」(两个 AMP 判别器:一个教走路+跑步,一个教爬起来),用一根重力轴的阈值决定当前这一步该听哪个老师。部署时没有任何模式切换,一个 ONNX 模型 50Hz 跑到底。

🎯 为什么重要:状态机驱动的多模态运动,又脆又难调

人形机器人要在真实环境里跑,至少要会三件事:稳定走路、高速奔跑、跌倒爬起。传统架构把这三件事交给三个独立控制器,再用手工状态机串起来。这套做法在工业界沿用至今(如 Unitree 官方 SDK),但有三个老大难:

核心矛盾:走路-跑步-恢复是运动学本质完全不同的三种行为——前两个是周期性速度跟踪,后一个是多接触姿态重定向(roll、爬、推地)。若强行用同一个 AMP 判别器覆盖三者,全局参考分布要么抓不到高速奔跑的统计、要么把恢复动作混进走路让两种都退化。但若用三个独立策略 + 状态机模式边界处会脆断,过渡动作要手工调。

近年 RL 学界证明: AMP(Adversarial Motion Priors)能用几段参考动作把风格注入策略,无需手工 reward;端到端 RL 也能学会 fall recovery。但「AMP 怎么覆盖多个截然不同的行为模式」这个问题一直没有干净的答案。

💡 核心思想:单一策略 + 状态相关 AMP 门控

论文的解法一句话能说清:策略只有一份,判别器有两份。训练时每一步先用一个「状态门」决定当前 transition 交给哪个判别器打分;部署时门直接砍掉,只留策略。

单一 actor 策略 $\pi_\theta$ 3 层 MLP,输入 384-dim,输出 29 个关节角 任务奖励 $R_t^{task}$ 速度跟踪 + 平滑 + 姿态 + 能耗 + 安全 AMP 奖励 $R^{AMP}$ $-\log(1-D_\phi)$ $R^{total} = R^t + \lambda_{amp} R^{AMP}$ 恢复判别器 $D_\phi^{rec}$ fallAndGetUp2 参考片段 速度条件判别器 $D_\phi^{loco}(\cdot|\hat{v}_t)$ walk + run 联合分布 状态门 $g(s_t)$ $|g_z+1|>0.6$ ? rec : loco 每一步 transition 二选一送给判别器
图 1(据论文 Fig.1 重绘):单一策略 $\pi_\theta$ 同时接受任务奖励和 AMP 奖励。AMP 奖励由两个判别器中的一个提供——由状态门 $g(s_t)$ 根据当前姿态(具体是重力向量 $g_z$)决定。门只在训练时存在。

门的定义极简——一个固定阈值,不学

$$z_t = g(s_t) = \begin{cases} \text{rec} & \text{if } |g_z + 1| > 0.6 \\ \text{loco} & \text{otherwise}\end{cases}$$

$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
统一连续性从「跌倒 → 行走 → 奔跑」单策略一气呵成,无需运行时模式指令
关键洞察:论文最值得记住的不是某个绝对数字(毕竟 LAFAN1 + G1 的 baseline 比较,没有跨方法的成功率对照表),而是「3 段参考片段 + 1 个策略 + 1 个不学的阈值」就足够了。这和很多「为每个技能训一个专家策略 + 复杂仲裁器」的工作形成鲜明对比——作者的真正论点是「先验的结构分离 > 先验的数据多样性」。这才是这篇短文的精神。

🌐 在领域中的位置

DeepMimic(单片段参考,强监督) AMP(多片段,对抗式风格奖励) ASE / CALM(运动潜在空间组合) 状态相关 AMP 门控(本文)⭐ 端到端 humanoid 运动统一控制器

本文在 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)本身就是核心证据。