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

Extreme Parkour:低成本四足直接从深度图像跑酷

Xuxin Cheng*, Kexin Shi*, Ananye Agarwal, Deepak Pathak(CMU)。arXiv:2309.14341 (2023-09)。 项目页 · 开源 · locomotionsim-to-realRL 线索 T01

🧠 一句话心智模型:让一只廉价、电机噪声大、只有一个低频深度相机的 Unitree A1,用单个神经网络直接吃深度图像 → 输出关节角度指令,跳过它身高的 2 倍高、跳过它身长的 2 倍宽、跑倾斜坡、用前两只脚倒立走。秘诀不在硬件,而在奖励函数和蒸馏——用「内积式统一奖励」让多种极限行为自动涌现,用「双重蒸馏」让策略自己决定朝哪走。

🎯 为什么重要:「精确动作 + 廉价硬件」的传统死结

跑酷对人都不容易——错一步就摔。对机器人更难,因为:

核心矛盾:经典方法要跑酷,必须把所有东西都测准——感知精度高、地形已知、MPC 仔细规划。这意味着只能在实验室预定好的赛道里玩。
但人类跑酷选手和新手用的「传感器」(眼睛、肌肉)是一样的——差异不在硬件,在「学习」
那能否让一个廉价、不准的机器人也学会?这就是本文要回答的。

这里有两个具体的技术难题,跑步和走路时不突出,但跑酷时致命:

  1. 方向自由度:跳过宽缝时,朝向差几度就摔。如果让人用遥控器指定朝向,太慢、太不准——必须让策略自己看图决定朝哪跳
  2. 多样行为合一:跳高、跳远、倒立、跑坡——动作性质天差地别,怎么塞进同一个神经网络?

💡 核心思想:内积奖励 + 双重蒸馏

Phase 1 · 教师(仿真 + 特权信息) 本体感觉 关节/IMU Scandots 仿真下扫描点 特权!真机没有 Oracle 朝向 从 waypoint 算 特权!真机没有 Actor π + ROA 适应模块 RL 训练(PPO),统一内积奖励 学会:高跳 / 远跳 / 倒立 / 跑坡 单一网络,行为自动涌现 Phase 2 · 学生(DAgger 蒸馏) 深度图像 RealSense D435 10 Hz, 58×87 ConvNet + GRU 同时输出两个量: 深度潜特征 + 预测朝向 θ_pred MTS:θ_pred 偏离 oracle > 0.6 时用 oracle 否则用预测(避免 student 漂移失败) 可部署策略(深度 → 动作 + 朝向)✓ Jetson NX 上跑 50 Hz 蒸馏
图 1:Extreme Parkour 的两阶段训练。Phase 1 在仿真里用「特权信息」训出强策略;Phase 2 蒸馏到只靠深度图像,同时蒸馏动作和朝向。

核心哲学是:「不要告诉机器人怎么做,告诉它『目标在哪』就够了」。奖励不写「先迈左脚再蹬右脚」,只写「朝目标前进 + 别踩边缘 + 可选风格」——剩下的让 RL 自己涌现出最优动作。

🛠️ 让一切涌现的三个关键设计

设计公式 / 做法为什么关键
① 内积式速度奖励rtracking = min(⟨v, d̂w⟩, vcmd)世界系下算(不是机器人本体系)本体系下算会被策略作弊——原地转身也算「前进」。世界系下算就强制真的朝目标去。内积形式让任意方向都能统一表达
② 边缘惩罚rclearance = −Σ ci · M[pi],脚落在距边缘 5cm 内就扣分没有它,策略为省力会贴着缝边走——仿真过得去,真机会滑下去摔
③ 风格内积奖励rstylized = W·(0.5·⟨v̂fwd, ĉ⟩ + 0.5)²,倒立时 ĉ = [0,0,−1]同一个公式既支持四足走,也支持倒立——开关 W 训练时随机、部署时遥控
④ 双重蒸馏(关键创新)Phase 2 不仅蒸馏动作,还蒸馏朝向预测。用 MTS(mixture of teacher and student)避免 student 漂移跳倾斜坡需要瞬间变向,人遥控跟不上节奏。必须让策略自己看图决定朝哪
⑤ Scandots 而非高程图特权信息用原始 scandots(扫描点),不用高程图,也不用障碍物抽象高程图噪声大、抽象丢几何信息;scandots 通用、能泛化到任意地形
🔮 直觉:为什么「内积奖励」这么有威力?
传统奖励要写「朝北 1 m/s」——把方向硬编码。内积奖励写「朝目标方向 的分量越大越好」——方向是个变量,由 waypoint 决定。所以同一个奖励既能跑直线(waypoint 在前),又能跑弯道(waypoint 在侧面),还能在倾斜坡上「先斜着跳上第一块再立刻转向」——这种动态变向任何手写奖励都写不出来。

📊 关键结果:2 倍身高 / 2 倍身长 / 倒立 / 37° 坡

硬件 / 训练数字
机器人Unitree A1(12 关节),大腿高 26 cm,身长 40 cm
传感器Intel RealSense D435(深度 10±2 Hz)
车载计算Jetson NX;策略 50 Hz,深度 10 Hz;UDP 通信
延迟深度 80 ms 固定,本体感觉 16 ms 固定
训练成本单卡 RTX 3090,不到 20 小时

涌现的极限动作(Table 1 + 文中数字)——以「相对机器人尺寸」度量:

任务本文 (A1)对比
高跳(相对身高)2.0×(跳上 0.5 m 箱子)人类跳高记录 2.45 m ≈ 2.5× 髋高
远跳(相对身长)2.0×(跨 0.8 m 缝)
倾斜坡37°前作均 ×(做不到)
倒立走(前两腿)(含下楼梯、草坡)前作均 ×

跨方法对比(Table 1)——「Climb / Gap」都按「相对身高/身长的倍数」记:

方法机器人Climb ↑Gap ↑RampHandstand
Rudin et al.ANYmal C1.10.75××
Hoeller et al.(并发)ANYmal C21.5××
Zhuang et al.(并发)A11.61.5××
Extreme Parkour(本文)A12237°

仿真消融(Table 2,256 个机器人 30s,MXD↑ / MEV↓)——证明每个设计都不可或缺:

设置MXD ↑MEV ↓发生了什么
完整方法0.98 ± 0.090.03 ± 0.18
NoInner(去掉内积奖励)0.75 ± 0.360.04 ± 0.20遇到台阶只会「撞 + 弹回」
NoClear(去掉边缘惩罚)0.99 ± 0.060.08 ± 0.32位移高但脚踩边缘,真机会摔
Noisy(模拟高程图噪声)0.82 ± 0.290.20 ± 0.50大方差,靠腿撞感知地形

蒸馏消融(Table 3)——双重蒸馏接近 oracle 上界:

设置MXD ↑MEV ↓
Oracle(直接喂真值朝向)0.94 ± 0.190.10 ± 0.32
本文(预测朝向 + MTS)0.92 ± 0.190.09 ± 0.33
Both(纯预测,无 MTS)0.12 ± 0.070.26 ± 0.57
Mask(掩掉朝向)0.05 ± 0.070.00 ± 0.00
关键洞察: Extreme Parkour 不是靠「更大的网络」或「更贵的机器人」——它用的是 2021 年的 A1、单张 3090 训 20 小时。它赢在把「指定具体动作」改成「指定目标方向」,让所有具体动作(起跳、收腿、落地)从 RL 中自动涌现;又通过蒸馏朝向解决了「人遥控跟不上」的死结。

🌐 在领域中的位置

经典 MPC + 高程图(只能实验室赛道) Legged Locomotion in Challenging Terrains (Agarwal 2022,scandots 蒸馏) Extreme Parkour 2023(内积奖励 + 双重蒸馏)⭐ ANYmal Parkour / 视觉跑酷系列(更复杂地形、更长时程)

Extreme Parkour 是「学习驱动跑酷」的标志性里程碑——把端到端 RL 推到了「硬件极限」级别的能力。它的「内积统一奖励 + 双重蒸馏」范式被后续大量四足/双足工作继承。关联线索:T01 运动控制谱系

❓ 常见误区

它真的「直接从像素」吗?没有建图?

是的。Phase 2 的策略输入只有深度图像 + 本体感觉,没有显式的高程图、点云融合、或障碍物抽象。ConvNet-GRU 直接从深度图提特征,再和本体感觉拼接输出动作。这是它能泛化到未见地形的关键。

Scandots 是什么?为什么是「特权」?

Scandots 是仿真器里直接从机器人位置向四周扫描得到的距离点云。它精确、稠密、无噪声——真机没有这种传感器。所以 Phase 1 用它当特权输入训出强策略,Phase 2 再蒸馏到只用深度图。

为什么不能用遥控器指定朝向?

跑倾斜坡时,策略需要「先以某个特定角度跳上第一块坡、落地后立刻大角度转向跳第二块」——论文原文说这种瞬间变向「对人来说不可能提供」。NoDir 消融(人用遥控器给朝向)显示:在人还能跟上的 hurdle、gap 上偶尔成功,但一旦需要瞬间大角度变向(尤其是倾斜坡)就几乎全失败。

倒立走是怎么学出来的?没专门设计吧?

对。只是把风格奖励 rstylized 的目标向量 ĉ 设成 [0,0,−1](指向「上方」),开关 W 一打开,RL 自己就探索出了「重心前移 → 后腿蹬地 → 倒立 → 微调平衡」的整套动作。作者特别强调——这些子动作没有一个是手写的。