Extreme Parkour:低成本四足直接从深度图像跑酷
🎯 为什么重要:「精确动作 + 廉价硬件」的传统死结
跑酷对人都不容易——错一步就摔。对机器人更难,因为:
但人类跑酷选手和新手用的「传感器」(眼睛、肌肉)是一样的——差异不在硬件,在「学习」。
那能否让一个廉价、不准的机器人也学会?这就是本文要回答的。
这里有两个具体的技术难题,跑步和走路时不突出,但跑酷时致命:
- 方向自由度:跳过宽缝时,朝向差几度就摔。如果让人用遥控器指定朝向,太慢、太不准——必须让策略自己看图决定朝哪跳。
- 多样行为合一:跳高、跳远、倒立、跑坡——动作性质天差地别,怎么塞进同一个神经网络?
💡 核心思想:内积奖励 + 双重蒸馏
核心哲学是:「不要告诉机器人怎么做,告诉它『目标在哪』就够了」。奖励不写「先迈左脚再蹬右脚」,只写「朝目标前进 + 别踩边缘 + 可选风格」——剩下的让 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 ↑ | Ramp | Handstand |
|---|---|---|---|---|---|
| Rudin et al. | ANYmal C | 1.1 | 0.75 | × | × |
| Hoeller et al.(并发) | ANYmal C | 2 | 1.5 | × | × |
| Zhuang et al.(并发) | A1 | 1.6 | 1.5 | × | × |
| Extreme Parkour(本文) | A1 | 2 | 2 | 37° | ✓ |
仿真消融(Table 2,256 个机器人 30s,MXD↑ / MEV↓)——证明每个设计都不可或缺:
| 设置 | MXD ↑ | MEV ↓ | 发生了什么 |
|---|---|---|---|
| 完整方法 | 0.98 ± 0.09 | 0.03 ± 0.18 | 稳 |
| NoInner(去掉内积奖励) | 0.75 ± 0.36 | 0.04 ± 0.20 | 遇到台阶只会「撞 + 弹回」 |
| NoClear(去掉边缘惩罚) | 0.99 ± 0.06 | 0.08 ± 0.32 | 位移高但脚踩边缘,真机会摔 |
| Noisy(模拟高程图噪声) | 0.82 ± 0.29 | 0.20 ± 0.50 | 大方差,靠腿撞感知地形 |
蒸馏消融(Table 3)——双重蒸馏接近 oracle 上界:
| 设置 | MXD ↑ | MEV ↓ |
|---|---|---|
| Oracle(直接喂真值朝向) | 0.94 ± 0.19 | 0.10 ± 0.32 |
| 本文(预测朝向 + MTS) | 0.92 ± 0.19 | 0.09 ± 0.33 |
| Both(纯预测,无 MTS) | 0.12 ± 0.07 | 0.26 ± 0.57 |
| Mask(掩掉朝向) | 0.05 ± 0.07 | 0.00 ± 0.00 |
🌐 在领域中的位置
Extreme Parkour 是「学习驱动跑酷」的标志性里程碑——把端到端 RL 推到了「硬件极限」级别的能力。它的「内积统一奖励 + 双重蒸馏」范式被后续大量四足/双足工作继承。关联线索:T01 运动控制谱系。
❓ 常见误区
它真的「直接从像素」吗?没有建图?
是的。Phase 2 的策略输入只有深度图像 + 本体感觉,没有显式的高程图、点云融合、或障碍物抽象。ConvNet-GRU 直接从深度图提特征,再和本体感觉拼接输出动作。这是它能泛化到未见地形的关键。
Scandots 是什么?为什么是「特权」?
Scandots 是仿真器里直接从机器人位置向四周扫描得到的距离点云。它精确、稠密、无噪声——真机没有这种传感器。所以 Phase 1 用它当特权输入训出强策略,Phase 2 再蒸馏到只用深度图。
为什么不能用遥控器指定朝向?
跑倾斜坡时,策略需要「先以某个特定角度跳上第一块坡、落地后立刻大角度转向跳第二块」——论文原文说这种瞬间变向「对人来说不可能提供」。NoDir 消融(人用遥控器给朝向)显示:在人还能跟上的 hurdle、gap 上偶尔成功,但一旦需要瞬间大角度变向(尤其是倾斜坡)就几乎全失败。
倒立走是怎么学出来的?没专门设计吧?
对。只是把风格奖励 rstylized 的目标向量 ĉ 设成 [0,0,−1](指向「上方」),开关 W 一打开,RL 自己就探索出了「重心前移 → 后腿蹬地 → 倒立 → 微调平衡」的整套动作。作者特别强调——这些子动作没有一个是手写的。