深度⏱ ~3 min
里程碑
⭐ 为何重要

整合外感知(视觉/lidar)与本体感知并用 teacher-student,让 ANYmal-C 在森林、雪地、工地等野外真实环境长时间部署,速度与鲁棒性大幅提升。它是 perceptive locomotion 走向野外工业级部署的里程碑,定义了『仿真训 teacher → 真机 student』的范式,被后续 DreamWaQ、Extreme Parkour、Parkour-in-the-Wild 普遍沿用。

机器人ANYmal
上真机
物理感知
实时
输入模态vision,proprioception

论文:Miki, Lee, Hwangbo, Wellhausen, Koltun, Hutter(ETH Zürich RSL;Hwangbo 时在 KAIST;Koltun 在 Intel Intelligent Systems Lab). Learning robust perceptive locomotion for legged robots in the wild. Science Robotics Vol.7 Issue 60, 2022 (eabk2822). arXiv:2201.08117. 🌐 · 真机平台:ANYmal C 四足。

一句话直觉

让四足机器人靠眼睛和身体感觉,在真正的野外稳健行走。

雪地、瓦砾、楼梯、草地都能以接近人步行的速度通过。

ANYmal-C 之于机器人,就像老手走夜路。

眼睛看得见时信眼睛,看不见时自动退化到只靠手脚触觉

是什么·为什么

要解决的问题:让四足机器人在真正的野外稳健行走。

2022 年前的工作分两类。

要么只靠身体感觉——踩到才知道地面是什么。

速度被限。

要么用视觉。

但深度传感器在反光、透明、植被、阳光直射下经常失效。📎

核心洞察:视觉不可靠是常态而非例外。

控制器必须学会"什么时候信视觉、什么时候不信"。📎

ANYmal-C 的转身:挂一个 belief encoder

它把视觉和身体感觉融合。

关键是个 attention gate。

它学会在视觉被噪声污染时自动关掉视觉信号。

训练用 teacher-student 蒸馏

teacher 看特权信息:接触摩擦、外力。

student 只看真机能看到的。

方法核心(大白话):训两个网络,一前一后。

teacher 是个"作弊者",在仿真里偷看真机测不到的物理量。

脚踩在哪、地面多滑、有什么外力推它——它全看得到。

靠这份小抄学会最稳的走法。

student 只看真机能给的:自己的关节角加一份地面高度图。

它偷看不到,于是去模仿 teacher 的动作,把本事抄过来。

为什么不直接从头训 student?

因为 student 手上是"半盲"问题。

真机传感器给的是间接、带噪、还不全的线索。

从零用强化学习学,又慢又不稳。

先让 teacher 学会走,再把本事蒸馏给 student。

这就绕开了"半盲从零学"的难点。

student 还多一个旋钮,就是 attention gate。

它学会在相机不可信时把相机信号调小。

调到只剩身体感觉。

玻璃、雪、植被糊住相机时,机器人靠身体感觉继续走,不会摔。

"信不信眼睛"是学出来的,逐刻渐变,不是硬开关。

📎

你会看到:ANYmal C 真机零 fine-tune。

下到地下洞穴与隧道课程,爬 17 cm 楼梯与 20 cm 平台。

过雪地、泥地、草地,登顶瑞士 Etzel 山——比官方人步参考时间还快。

两种传感器(激光雷达 / 深度相机)能让同一 policy 切换。📎

但它学不会什么:它的动作建立在步态先验(CPG)上。

每条腿踩着一个固定节奏的步子,policy 只在节奏上做微调

稳健行走、过台阶、爬坡它都行。

但跳跃、倒立、飞跨大间隙这种剧烈动态动作,这套节奏框架撑不住。

这个缺口要靠后续工作补。

Extreme Parkour 去掉步态先验,用纯强化学习学极限动作,补上了它。📎

怎么做

三阶段 pipeline

Stage 1:仿真里训 teacher,看特权信息。

Stage 2:仿真里训 student,蒸馏 teacher。

Stage 3:student 零样本部署 ANYmal C,不 fine-tune。📎

为什么不直接训 student?POMDPRNN 从零学慢且不稳。

两阶段把"学最优行为"和"学估计隐藏状态"解耦。

Teacher 看 3 类输入

本体感觉——command、姿态、速度、关节位置与速度(含短历史)、CPG phase。

视觉——208 维 height samples,每只脚周围 5 个半径环采样的高度向量。

特权状态(只有 teacher 看,50 维)——接触、摩擦、外力、airtime 等。📎

Student 看什么:本体感觉 + 带参数化噪声的 height samples,去掉所有特权。

关键设计·attention-gated GRU belief encoder📎

belief = GRU(本体感觉, 视觉 latent, 隐状态)。

gate 输出 $\alpha = \sigma(\text{MLP}(\text{belief}))$,96 维 attention。

过滤后视觉 = 视觉 latent ⊙ α。

最终 belief = MLP(belief) + 过滤后视觉。

GRU 用 2 层 × 50 hidden,不堆大。

gate 学"何时信视觉"——视觉被噪声污染时 α 趋 0,policy 自动退化到纯本体感觉。

这就是 graceful degradation 的机制来源。

两个监督 lossDAgger 式采数据(用 student rollout),同时最小化两个 loss:📎

行为克隆 loss:$\|a_\text{student} - a_\text{teacher}\|^2$。

重建 loss:强制 belief 能重建真实地形与特权信息。

常见误区(先抛一个,完整版见末尾):"belief encoder 越大越好"。

论文用 2 层 × 50 hidden 极简配置就够,关键是 reconstruction loss + gate 机制。

堆大反而过拟合

仿真器:RaiSim。teacher 阶段并行 1000 envs。student 阶段并行 300 envs。📎

深度

Action 设计(Sec.S5,CPG-inspired):每条腿一个 phase 偏移 + 12 个残差关节目标。

base 频率固定。

nominal foot trajectory 用解析 IK 转成 nominal joint target,policy 输出在 nominal 上加 residual。

这是为了让 RL 不必从零学步态——也是它学不出跳跃与 parkour 的根本原因。

Teacher 网络(Sec.S6):3 个 MLP 分支。

exteroceptive encoder 把 208 维 height samples 压成 24×4=96 维 latent。

privileged encoder 把 50 维特权压成 latent。

main MLP 输入(本体感觉, 视觉 latent, 特权 latent)输出 action。

hidden layers {256, 160, 128},LeakyReLU。

PPO + Gaussian policy 训练。

Reward(Sec.S7):$r = 0.75(r_{lv}+r_{av}+r_{lvo}) + r_b + 0.003 r_{fc} + 0.1 r_{co} + 0.001 r_j + 0.08 r_{jc} + 0.003 r_s + 10^{-6} r_\tau + 0.003 r_\text{slip}$。

command-following 分段:$v_\text{des} \cdot v > |v_\text{des}|$ 时给 1.0,否则高斯衰减。

其余项惩罚正交速度、姿态、joint torque/velocity/acceleration、foot slip、shank/knee 碰撞

Sec.S7 给出全部 10 项的闭式公式与权重(量纲敏感,如 $r_\tau = 10^{-6}$ 需照抄);legged_gym 仓库的 anymal.* 配置可作为参考实现。📎

两套 curriculum(Sec.4)

terrain curriculum——particle filter 在线调地形参数(坡度、台阶高度),始终"略难但可达成"。

disturbance/reward curriculum——domain randomization 与部分 reward 项 magnitude 乘以 $c_{k+1} = (c_k)^d$,$0 < d < 1$。

注意:论文未提"adversarial motion training"或对抗式扰动;扰动是 random force/torque,不是 learned adversary。📎

Height sample noise model(Sec.4):3 类 mapping condition 按 60/30/10 比例每 episode 选。

  1. nominal noise(地图好)。
  2. 大 per-foot offset(pose drift 或 deformable terrain)。
  3. 大 per-scan-point noise(完全 occlusion / mapping failure)。

方差由参数 $z \in \mathbb{R}^{8\times 4}$ 控制,本身也走 curriculum。

还按 cell 加额外 offset 模拟植被/雪。

部署(Sec.S5)

传感器——2 个 Robosense Bpearl dome 激光雷达,或 4 个 Intel RealSense D435 深度相机。

同一 policy 不改一行代码、不 fine-tune 就能切换。

elevation map——robot-centric 2.5D,20 Hz 更新,GPU 加速(Fankhauser 风格 + drift compensation + ray casting)。

policy 50 Hz,从最新 elevation map 采样 height。

PyTorch 训练,部署在机载。

实验(Sec.3)

地下环境——DARPA Subterranean Challenge 的 tunnel / urban / cave 三类课程(team Cerberus 部署),4 台 ANYmal 累计探索 >1700 m,零失败。📎

楼梯与平台——17 cm 高 × 29 cm 深的楼梯、20 cm 高的平台/方块。proprioception-only baseline(Lee 2020)从 20 cm 步高开始频繁失败(前腿卡住),而本文 controller 可靠跨到 30.5 cm 步高;遮蔽传感器时仍能走。📎

平地行走——本文 controller 1.2 m/s,baseline 0.6 m/s(论文未给雪/泥/草地混合野外的速度区间,仅此平地数字)。📎

瑞士 Etzel 山远足小径——2.2 km 长、120 m 爬升、最大坡度 38%,ANYmal 用 31 分钟登顶,快于官方标识的人类参考时间 35 分钟。📎

局限

  1. 仍基于步态先验(CPG):action 是 phase offset + residual,不是直接 torque/target。

翻越、跳、parkour 等动态动作学不出来——这正是 Extreme Parkour、ANYmal-D Parkour 后续解决的方向。📎

  1. height samples 表示限制感知范围:208 维围绕 4 只脚的采样,看不到远处地形,无法做长距离规划。
  2. 2.5D elevation map 无法表达软地形:植被、雪仍靠 noise model 近似,遇水洼/玻璃仍会失败。
  3. reward 公式公开但权重量纲敏感:Sec.S7 给了 10 项的闭式公式与权重,但量纲敏感(如 $r_\tau = 10^{-6}$),复现要照抄;legged_gym 仓库的 anymal.* 配置可作为参考实现。
  4. GRU 隐藏量仅估"局部":长程不确定性(如 SLAM drift 累积)无法建模。

研究者视角

图谱定位:ANYmal-C 是 T01(sim2real)的感知分水岭,也是 T12(agile locomotion)的感知起点。📎

建立在 privileged learning [Chen et al. 2020]、Lee et al. 2020(自适应 curriculum + TCN)、Hwangbo et al. 2019(actuator network)之上。

RMA [Kumar et al. 2021] 是同期对照——RMA 走"在线 adaptation module"路线,ANYmal-C 走"teacher-student + recurrent distillation"路线。🌐

直接引出

  • Walk-These-Ways [Margolis 2022]:command vector 多模式。
  • Extreme Parkour [Cheng 2023]:去掉 CPG,纯 RL 学极限动作。🌐
  • ANYmal Parkour [Hoeller et al. 2024]:极限越障,感知侧强化。

belief encoder 的扩散:用 attention gate 显式控制"信不信视觉",把 sensor fusion 从启发式变成可端到端学的模块。

后续 humanoid RL(OmniH2O 的 privileged critic、HumanPlus 的 hit-refine)都借鉴了这个思路。[未确认]

GRU 2×50 极简配置的证明:belief estimation 不需要大模型,关键是 supervised auxiliary loss(reconstruction)+ gate 机制。

Open problems

  1. 长程不确定性建模:GRU 隐隐藏量只能估"局部地形 + 摩擦 + 外力",SLAM drift 累积等长程不确定性无法建模。[未确认]
  2. 软地形表达:2.5D elevation map 表达不了可变形地形(水洼、玻璃、深泥),仍是开放问题。
  3. 传感无关的感知抽象:当前靠 elevation map 抽象掉传感器差异;真正 raw point cloud 的 policy 还不成熟。

常见误区

"用对抗式扰动训练 robustness" —— 误读。

论文未提 adversarial motion training;扰动是 random force/torque,来自 domain randomization。

稳定性来自 domain randomization + curriculum + gate 机制,不是 learned adversary。📎

"belief encoder 越大越好" —— 错。

论文用 GRU 2 层 × 50 hidden 的极简配置就够。

关键是 reconstruction loss + gate 机制;堆大 hidden 反而过拟合。📎

"student 直接在真机数据上 fine-tune" —— 错。

student 在仿真里蒸馏 teacher,真机零 fine-tune 部署。

sim2real 靠 domain randomization + height sample noise model + gate 的 graceful degradation。

"去掉 reconstruction loss 也行" —— 错。

消融(Sec.S9)证明 reconstruction loss 是 belief 收敛的关键。

没有它 belief 学不到真实地形与特权的表示,gate 也会失效。

"ANYmal-C 能学跳跃和 parkour" —— 错。

action 是 CPG phase offset + residual,动态动作学不出来。

极限动作要等去掉 CPG 的 Extreme Parkour、ANYmal Parkour 才解决。📎

检查点

Q1

ANYmal-C 训了 teacher 和 student 两个网络。teacher 在仿真里能"偷看"到哪些 student 看不到的量?为什么真机上的 student 拿不到这些?

💡 参考答案

  • teacher 偷看的是"特权信息":脚的接触状态、地面摩擦、外力/扭矩、airtime 等(仿真里能直读的物理量)。
  • student 拿不到的原因:这些量在真机上没有传感器能直接测——真机只能给关节角、IMU、相机/雷达地形图。'特权'就是"仿真能直读、真机读不到"。
  • 对照:这是 teacher-student 范式要解决的核心矛盾——用仿真里的全知训练,换真机上的半盲部署。
Q2

用"老手走夜路"或你自己举的类比,用自己的话解释:belief encoder 里的 gate 是怎么决定"现在该不该信眼睛"的?为什么是一个渐变的旋钮,而不是直接开关切掉视觉?

💡 参考答案

  • gate(旋钮)= 学出来的、逐时刻调整的可信度权重 α,不是手工设定的阈值。
  • 视觉脏(反光/透明/植被/雪)时 α 自动趋小,把视觉信号衰减掉,policy 退化到只靠身体感觉(proprioception)——这就是 graceful degradation。
  • 为什么渐变不用开关:硬切换会让 policy 的输入分布瞬间跳变、导致不稳;渐变(α 连续从 1 到 0)让 belief 平滑过渡。
Q3

为什么不直接让 student 在真机传感器上从头学,而要先训一个 teacher、再让 student 去模仿?直接从头学卡在哪?

💡 参考答案

  • 直接从头学卡在:student 手上是"半盲"的 POMDP 问题——真机传感器给的是间接、带噪、残缺的线索,还要同时学'最优行为'和'从残缺观测估隐藏状态'两件事,RNN 从零学慢且不稳。
  • teacher-student 蒸馏把这两件事拆开:teacher 全知地学会最优行为,student 只需模仿 teacher 的动作 + 重建地形,把'学最优'和'学估计'解耦。
  • 关键:绕开的是'残缺信息下从零学隐藏状态估计'的样本与稳定性瓶颈,不是绕开 sim-real gap 本身(那靠 DR + noise model)。
Q4

相机被雪、玻璃、植被糊住时,ANYmal-C 靠什么继续走而不摔?这个"退化"是怎么实现的?

💡 参考答案

  • 靠身体感觉(proprioception):关节角、IMU、命令、速度——这些不依赖外部相机,始终可用。
  • 实现机制:attention gate 在视觉被噪声污染时输出 α→0,把视觉 latent 关掉(或调小),belief 只剩本体感觉分支。
  • 关键是这个'退化'是训练时就学好的(noise model + reconstruction loss 让 gate 学会识别脏视觉),不是部署时临时切换。
Q5

ANYmal-C 的动作建立在步态先验(CPG)上。这个设计让它学不到什么能力?后续哪条工作路线补上了这个缺口?

💡 参考答案

  • 学不到的能力:剧烈动态动作——跳跃、倒立、飞跨大间隙。因为 CPG 锁死了固定步态节奏,policy 只能在节奏上做 residual 微调。
  • 后续工作:Extreme Parkour(Cheng et al. 2023)去掉 CPG / 步态先验,用纯 RL + unified reward 学极限动作,补上了这个缺口。
  • 对照:这是 T12 敏捷线索从 ANYmal-C(稳走感知起点)到 Extreme Parkour(敏捷分水岭)的演进逻辑。

FAQ

Q1:ANYmal-C 能在真机上工作吗?

能。Science Robotics 论文的核心就是真机野外部署:地下洞穴与隧道、瑞士 Etzel 山、雪地。

零 fine-tune 部署,靠 teacher-student 蒸馏 + domain randomization。📎

Q2:为什么 gate 用 attention 而不是直接 mask?

mask 是硬切换,会让 policy 输入分布突变导致不稳。

attention 是软门控,α 渐变让 belief 平滑过渡。

消融(Sec.S9)证明 gate 是稳定训练的关键。📎

Q3:GRU 为什么只用 2 层 × 50 hidden,不堆大?

belief estimation 只需估"局部地形 + 摩擦 + 外力"这些低维隐藏量。

大 hidden 反而过拟合,且推理慢。

关键是 supervised reconstruction loss 提供训练信号,不是模型容量。📎

Q4:ANYmal-C 和 RMA 什么关系?

两者都解决"真机拿不到特权信息"的问题,机制不同。

ANYmal-C:teacher-student 蒸馏 + recurrent belief encoder(离线学估计)。

RMA:在线 adaptation module(运行时推断)。

ANYmal-C 更稳定易训,RMA 适应更实时——后续工作常把两者组合。📎

Q5:为什么我的复现训不出野外稳健性?

先查三处:(1) teacher 是不是看全了 50 维特权信息(contact、friction、external force、airtime);(2) student 有没有训 reconstruction loss(这是 belief 收敛的关键);(3) height sample noise model 有没有按 60/30/10 三种 condition 走 curriculum。📎