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

用低成本四足 + 单深度相机,在仿真里用大规模 RL 训出一个直接从图像到动作的 policy,实现跳大间隙(2× 体长)、跳高墙(2× 身高)、倒立行走、跑倾斜坡道等极限 parkour,训练时长 <20 小时。它打破了『腿足机器人不能跨越身体尺度障碍』的边界,是 perception-driven legged RL 的标志性突破,启发了 ANYmal Parkour、Parkour in the Wild、DreamPolicy 等一整条 agile-locomotion 谱系。

机器人Unitree A1
上真机
物理感知
实时
输入模态vision

论文:Cheng, Shi, Agarwal, Pathak. Extreme Parkour with Legged Robots. ICLR 2024(2023.09 arXiv 首发). arXiv:2309.14341. 🌐 · 真机平台:Unitree A1 四足。

一句话直觉

让小四足机器人学会跳两倍身高、跨两倍体长、倒立走。

秘诀是:一个 policy 全包。

方向机器人自己判断。

Extreme Parkour 之于机器人,就像跑酷运动员之于常人。

一个身体什么极限动作都干,方向感也靠身体自己。

是什么·为什么

要解决的问题:让一台只配一颗深度相机的小四足学会接近极限的跑酷。

跳 2× 身高、跨 2× 体长、跑倾斜坡、倒立走。

全部一个 policy 输出。📎

老办法:ETH 路线把感知拆成多相机加激光雷达

融合成 elevation map。

policy 拆成多个 specialist 切换。

比如 jump、climb、crouch、agile。

感知精确但昂贵,skill 是离散切换的。

Extreme Parkour 的转身:单相机、单一 policy。

不依赖 elevation map。

不做障碍类型 abstraction。

多极限 skill 从一个 reward 涌现。📎

方向机器人自己从深度图推断。

跳倾斜坡这种空中急转向,人遥控根本来不及。

方法核心(大白话):一个 policy、一个 reward,极限动作自己涌现。

reward 是一条打分规则,用"内积"写成。

大白话说就是:你的运动方向跟目标方向有多对齐。

这条规则很通用,同一套打分能同时奖励跳得高、跨得远、倒立走。

不同地形逼出不同的极限动作。

不用为每个动作单独训一个 specialist。

方向由机器人自己定,不是人遥控。

一个小网络读深度相机,预测该往哪走。

跳倾斜坡时空中急转向,人按遥控器反应不过来,必须让机器人自己判。

训练分两阶段。

teacher 在仿真里用特权信息学动作,特权信息就是真实地形点云。

student 只看真机的深度相机。

它靠模仿 teacher 的动作、并预测方向来学。

最后上真机的是 student。

📎

你会看到:Unitree A1 跳上 0.5 m 高的 box。

约 hip 高的 2 倍。

跳过 0.8 m 宽 gap,前后足距 2 倍。

能从四足无缝切换到前二足倒立。

甚至无视觉下倒立下楼梯。

单显卡训不到 20 小时,全开源。📎

怎么做

两阶段 teacher-student 框架

Phase 1:teacher 在仿真里用 RLPPO)训练,看特权信息。

Phase 2:student 通过蒸馏学 action 和 heading(朝向)。

这就是 dual distillation——同时蒸馏动作和方向。📎

创新点不在框架本身(已有套路)。

在 reward 设计和 dual distillation。

unified reward·三件事(这是论文真正的方法贡献):

  1. velocity tracking 用世界系内积:

$r_\text{tracking} = \min(\langle v, \hat{d}_w\rangle, v_\text{cmd})$。

v 是世界系速度。

d_hat_w 是当前位置指向下一 waypoint 的单位向量。

以往在 base frame 跟踪。

policy 会钻空子——"转身绕过障碍"也算完成。

世界系内积直接惩罚绕路。

  1. feet clearance penalty:

$r_\text{clearance} = -\frac{1}{4}\sum_{i=0}^{4} c_i \cdot M[p_i]$。

c_i 是第 i 只脚是否触地。

M 是离地形边缘 5 cm 内为 1 的指示函数。

这一项让脚避开边缘,是 sim-real 关键。

  1. stylized reward 做倒立(Eq. 4)。

形如 W · (0.5·⟨v_fwd_hat, c_hat⟩ + 0.5)^2

W 是 0/1 开关,训练时随机、部署时遥控。

这个 trick 让一个 policy 既会四足走又会倒立。

dual distillation

action 蒸馏用 DAgger

student 自己步进环境。

teacher 在 student 走出的轨迹上给 action 标签。

heading 蒸馏用 BC + MTS(Mixture of Teacher and Student)。📎

$\text{obs}_\theta = \begin{cases} \theta_\text{pred} & \text{若 } |\theta_\text{pred} - \hat{d}_w| < 0.6 \\ \hat{d}_w & \text{否则}\end{cases}$。

意思是 student 还没学好时别让它带歪 teacher 标签。

常见误区(先抛一个,完整版见末尾):"vision encoder 用 reconstruction loss 预测 teacher 的 heightmap"。

PDF 正文无此说法。

Phase 2 只有 DAgger(action)+ BC(heading),没有任何重建 loss。

skill 多样性靠 Phase 1 unified inner-product reward + curriculum 涌现。

术语·ROA:ROA = Regularized Online Adaptation。

由 Fu / Cheng / Pathak 等人在 Deep Whole-Body Control 线提出(本文 ref [9][10])。

它与 RMA(ref [18],Kumar 等)同属 Pathak 组,共享"用历史编码器估环境"的 idea。

但训练范式不同。

ROA 是单阶段,编码器与策略一起用 RL 联训。

RMA 是两阶段,先 teacher RL,再监督学 φ。

本文用 ROA 做 adaptation module,从 observation history 估环境参数。📎

深度

unified reward 的精确公式(Eq. 2–4)📎

tracking:$r_\text{tracking} = \min(\langle v, \hat{d}_w\rangle, v_\text{cmd})$,世界系内积。

clearance:$r_\text{clearance} = -\frac{1}{4}\sum_{i=0}^{4} c_i \cdot M[p_i]$,5 cm 边缘带。

stylized:$r_\text{stylized} = W (0.5 \langle \hat{v}_\text{fwd}, \hat{c}\rangle + 0.5)^2$,W 是 handstand 开关。

inner-product 形式让所有 reward 共用一套设计原则——论文称 universal reward design principle。

Phase 1 teacher 输入

proprioception x + scandots m(密集扫描点云,[2] 提出的特权地形表示,不是 elevation map 也不是 heightmap)+ waypoint 给的 oracle heading d_hat_w + walking flag W + commanded speed v_cmd

teacher 用 Regularized Online Adaptation(ROA)训 adaptation module,从 observation history 估环境参数。

ROA 出自 Fu / Cheng / Pathak 的 DWC 线(ref [9][10]),与 RMA(ref [18])同组但不同范式:ROA 单阶段 RL 联训,RMA 两阶段 teacher-φ 监督。📎

terrain curriculum:tilted ramps / gaps / hurdles / high step 按难度递增排列。

机器人走过一半长度升难度,走不到 v_cmd · T 就降。

这是 RL 探索的关键,没它学不会高跳。

Phase 2 dual distillation 细节

action 走 DAgger——actor 从 Phase 1 deepcopy 初始化减小 distribution drift。

heading 走 BC + MTS——student 预测 yaw 角 theta_pred

与 oracle 偏离 < 0.6 rad 用预测,否则用 oracle。

两个深度 backbone 都没有预训练,MTS 是稳定化 trick。

部署细节(决定 sim-real)📎

A1:12 关节,站立 hip joint 高 26 cm,body 长 40 cm。

Intel RealSense D435 头部,10±2 Hz 采深度。

计算:Jetson NX,depth backbone 10 Hz、base policy 50 Hz,UDP 通信。

强制 latency:深度 0.08 s,proprioception 0.016 s——消除 jitter 让 policy 看到的输入分布稳定。

深度预处理:裁掉左侧死像素、downsample 到 58×87。

训练成本:单 RTX 3090,<20 小时。基于 legged_gym / Isaac Gym。

实验·精确数字

high jump(Fig. 4):A1 跳上 0.5 m 高 gym box(hip 高 26 cm,约 2× hip height)。

对比:人类跳高纪录 2.45 m ≈ 2.5× 人类 hip height。

long jump(Fig. 5):跳过 0.8 m 宽 gap(前后足距约 2×)。

handstand(Fig. 6):四足↔前二足无缝切换。

能草地缓坡 handstand walk,甚至无视觉下 handstand 下楼梯。📎

baseline 对比(Tab. 2/3)📎

NoInner(去内积 reward,用 base-frame 跟踪):hurdle 学到"绕过去",step 上 0.14 vs 0.99 MXD。

NoClear(去 edge penalty):仿真 MXD 略高 0.99 vs 0.98,但 edge violation 高约 3×(Total MEV 0.08 vs 0.03),真机不稳。

Noisy(用 noisy elevation map 替代 scandots):方差极大,靠腿碰撞感知地形。

蒸馏 baseline:MTS 接近 Oracle 上限;"Both"(一直看预测)和"Mask"(heading mask 为 0)都因 drift 训不出。

真机:5 trials/terrain,最难关比 NoClear / NoDir baseline 高 20–80% 成功率。

局限

  1. 单深度相机在弱纹理/反光场景失效:玻璃门、暗光下深度图噪声大,student 退化。📎
  2. unified reward 的 stylized 项只能切一个额外步态W 是 0/1 开关,扩展到更多离散 skill 要重设计 reward。
  3. 不解决剧烈动作的 sim-real gap:本文仍是 DR + ROA + 强制 latency 的工程化路线。

跳大间隙时接触瞬间的 sim 偏差仍会被运动学放大。真正突破要等 ASAP。

  1. 无 fall recovery:parkour 失误就摔。
  2. scandots 仍是简化地形表示:真正 raw point cloud 的处理要等后续点云 policy 工作。

研究者视角

图谱定位:Extreme Parkour 是 T12(agile locomotion)的转折 2 / 分水岭。📎

建立在 Learning to Walk in Minutes [Rudin et al. 2021](legged_gym 基座)、Fu / Cheng / Pathak 的 DWC 线 [9][10](ROA = Regularized Online Adaptation 来源)、[2](scandots + teacher-student vision 框架)、DAgger [Ross et al. 2011] 之上。RMA [18] 是同组更早的两阶段前作。

直接引出

  • ANYmal Parkour [Hoeller et al. 2023, arXiv:2306.14874]:感知侧强化的对照路线,多 specialist。🌐
  • Parkour-in-the-Wild [Rudin et al. 2025, arXiv:2505.11164]:多专家蒸馏 + RL fine-tune。
  • SoloParkour、PIE 等。

dual distillation 范式扩散:后续 parkour 工作几乎都继承了"teacher 看特权 + student 蒸馏"骨架。

只是把"单 policy unified"换成"多 specialist 蒸馏"。

关键贡献的再定位📎

  1. 首次单相机 + 单 policy + 单 reward 达多极限 skill。
  2. "机器人自己决定方向"的范式——heading 由 student 自预测,不依赖人遥控。
  3. 训练成本低、全开源——parkour 从"ETH 专属"走向"社区可复现"的节点。

Open problems

  1. 单深度相机的感知鲁棒性:玻璃门、暗光、弱纹理下深度图噪声大。[未确认]
  2. 多离散 skill 的统一 rewardW 是 0/1 二元开关,扩展到 N 个离散 skill 需重设计 reward 形式。
  3. 剧烈动作的 sim-real:接触瞬间 sim 偏差被运动学放大,DR + 强制 latency 不够。

ASAP 的 residual delta 路线是新方向。

  1. fall recovery:parkour 失误即摔,缺自恢复能力。

常见误区

"vision encoder 用 reconstruction loss 预测 teacher 的 heightmap" —— 错。

PDF 正文 Phase 2 蒸馏只有 DAgger(action)+ BC(heading),无任何重建 loss。

skill 多样性靠 Phase 1 unified inner-product reward + curriculum 涌现。📎

"ROA 就是 RMA" —— 不准确。

ROA = Regularized Online Adaptation,出自 Fu / Cheng / Pathak 的 DWC 线(本文 ref [9][10])。

它与 RMA(ref [18],Kumar 等)同属 Pathak 组、共享"历史编码器估环境"的 idea,但训练范式不同。

ROA 单阶段(编码器与策略一起 RL 联训),RMA 两阶段(先 teacher RL 再监督学 φ)。

本文的"两阶段"指 Phase 1 teacher RL / Phase 2 student 蒸馏,与 RMA/ROA 本身的阶段数是两件事。

"teacher 看的是 heightmap" —— 错。

teacher 看的是 scandots,[2] 提出的稀疏点云特权表示。

论文明确对比"不用 elevation map"是卖点之一。

"有 Implicit Alert 隐式技能开关" —— 错。

skill 切换的机制是显式 walking flag W ∈ {0,1}(handstand 开关),由遥控器控制。

不存在 implicit alert。

"去掉 feet clearance penalty 不影响真机" —— 错。

NoClear baseline 仿真 MXD 略高但 edge violation 高约 3×(Total MEV 0.08 vs 0.03),真机不稳。

clearance penalty 是 sim-real 关键,不是奖励 shaping 的可选项。📎

检查点

Q1

Extreme Parkour 用一个 policy、一个 reward 就学会跳、跨、倒立。这个 reward 是怎么设计的,能让同一套打分同时奖励完全不同的极限动作?

💡 参考答案

  • reward 用'内积'形式写成——本质是衡量'机器人运动方向与目标方向的对齐程度',是通用几何量、不针对某个具体动作。
  • 正因为规则通用(不绑死跳/跨/倒立任一具体动作),同一套打分能同时驱动多种 skill:不同地形逼出不同极限动作。
  • 对照老办法:ETH 路线为每种动作写专门 reward / 训专门 specialist;EP 的 unified reward 把它们合一。
Q2

跳倾斜坡时机器人在空中要急转向。为什么方向不能由人遥控给,必须让机器人自己判断?

💡 参考答案

  • 核心:空中急转向发生在毫秒级、身体姿态剧烈变化,人按遥控器的反应速度跟不上。
  • 机制:让一个小网络读深度相机,自己预测该往哪走(heading),替代人遥控。
  • 对照:action(动作)层面仍可由策略自己出;这里说的是方向/朝向命令这一路必须自预测。
Q3

Extreme Parkour 训练分两阶段:teacher 在仿真里,student 上真机。teacher 能看到什么 student 看不到的"特权信息"?为什么不直接让 student 从头学?

💡 参考答案

  • 特权信息:仿真里才能给的真实地形几何——本文具体是 scandots(密集扫描点云),真机深度相机没法直接还原成这种干净表示。
  • 为什么不直接训 student:student 手上只有带噪、间接的深度图,从零学'看地形 + 做极限动作'太难;先用全知的 teacher 学会动作,再让 student 蒸馏(模仿动作 + 预测方向),把'学动作'与'学感知'解耦。
  • 关键:最后上真机的是 student,teacher 只在仿真里当'教练'。
Q4

用"跑酷运动员"或你自己举的类比,用自己的话解释:Extreme Parkour 是怎么用"一个 policy + 一个 reward"同时学会多个极限动作的?

💡 参考答案

  • 一个 policy = 一个'身体/控制中枢'同时应对所有动作,不是多个专门大脑切换。
  • 一个 reward = 一套通用评分原则(内积/方向对齐),多种 skill 从这套原则 + 不同地形涌现,不是为每个动作单独写评分。
  • 方向自决:机器人自己从深度图判方向,不是外部命令。
Q5

ETH 路线为不同动作各训一个 specialist 再切换;Extreme Parkour 只用一个 policy。单 policy 是怎么让跳、跨、倒立都出现的?相比 specialist 切换,这条路省了什么?

💡 参考答案

  • 怎么出现:同一套通用 reward + 不同地形/课程,把不同极限动作逼出来——skill 是'涌现'的,不是预先划分的模块。
  • 省了什么:省掉'每动作训一个 specialist + 设计切换逻辑'的工程量;也避免了切换瞬间的不连续/摔跤风险。
  • 代价(可选):一个 policy 要同时表征多种 skill,对 reward 设计与 curriculum 要求更高(这点 直觉层/入门层 只需点到'需要通用 reward'即可)。

FAQ

Q1:Extreme Parkour 能在真机上工作吗?

能。Unitree A1 真机跳上 0.5 m box、跳过 0.8 m gap、倒立走。

靠 DR + ROA + 强制 latency 的工程化 sim-real 路线。📎

Q2:为什么必须强制 latency(深度 0.08 s、proprioception 0.016 s)?

消除 jitter 让 policy 看到的输入分布稳定。

仿真里观测是同步的,真机各传感器有不同的固定延迟。

强制成仿真里见过的最大延迟,是 sim-real 的隐形关键。📎

Q3:unified reward 怎么用一个 reward 同时学跳、跨、倒立?

所有 reward 项都用 inner-product 形式(universal reward design principle)。

tracking 用世界系内积防绕路;clearance 惩罚贴边走;stylized 用内积做倒立姿态。

skill 的多样性靠 curriculum 涌现,靠 W 开关切步态。📎

Q4:Extreme Parkour 和 ANYmal-C 什么关系?

ANYmal-C 是 T01 感知分水岭(CPG + belief encoder,稳走但学不出极限动作)。

Extreme Parkour 去掉 CPG,纯 RL 学极限动作。

两者是 T12 敏捷线索的前后节点:ANYmal-C 是感知起点,Extreme Parkour 是敏捷分水岭。

Q5:为什么我的复现训不出高跳?

先查三处:(1) reward 是不是世界系内积(不是 base-frame);(2) terrain curriculum 有没有"过半长度升、不到 v_cmd·T 降"的 schedule;(3) 强制 latency 在部署 pipeline 里有没有补齐(深度 0.08 s、proprioception 0.016 s)。📎