P-ExtremeParkour-2023 · Extreme Parkour with Legged Robots
作者 / 机构:Xuxin Cheng, Kexin Shi, Ananye Agarwal, Deepak Pathak / Carnegie Mellon University(CMU)
发表:ICLR 2024(2023.09 arXiv 首发,arXiv:2309.14341v1)
arxiv:2309.14341 · 代码:https://github.com/chengxuxin/extreme-parkour · 项目页:https://extreme-parkour.github.io/
在线索中的位置:属于 [T12 · Agile Locomotion] 转折 2 / 分水岭;与 T01 仅在 sim-to-real 维度交叉(T01 转折 6 把它定位为「DR + 蒸馏 + history 适应」的极限工程化)。
一句话定位:第一个用单深度相机 + 单一 unified policy 让 Unitree A1 学会跳 2× 身高(0.5m)、跨 2× 体长(0.8m)、跑倾斜坡、倒立走的工作。核心机制是 dual distillation:teacher 看特权 scandots + waypoint heading,student 只看本体感受 + 单张深度图;student 不仅蒸馏 action,还要自己从深度图预测 heading(yaw)方向——因为 parkour 中诸如「跳倾斜坡」必须在空中急转向,人类无法实时给命令。
动机
2023 年之前的四足 parkour 走两条路。ETH 路线(如 Hoeller et al. 2023 / ANYmal Parkour)把感知拆成多相机 + LiDAR 融合 elevation map,policy 拆成 jump/climb/crouch/agile 多个 specialist;感知精确但昂贵、skill 是离散切换的。另一条是直接 end-to-end depth policy(如 [47] 并发工作),但仍依赖复杂的 sim-to-real 蒸馏 pipeline(先 soft penetration 再 hard constraint),并用简化的障碍 abstraction(type/width/height/distance)当特权视觉。
Extreme Parkour 要回答的问题是:一台执行器不精确的小四足(A1)、只配一颗前向 Intel RealSense D435 深度相机(10±2Hz)、用单一 unified policy、不依赖 elevation map、不依赖障碍类型 abstraction,能不能学会接近极限的 parkour?
三个具体挑战:(a) 单深度相机在 10Hz、有 0.08s 强制延迟下,信息稀疏且噪声大;(b) parkour 要求机器人自己决定方向——例如跳倾斜坡,第一步要以非常特定角度跳上第一段、然后立即改方向,人类用遥控器根本来不及给;(c) 多极限 skill 共用一个 policy + 一个 reward。
方法核心:dual distillation + 统一内积 reward
整个 pipeline 是一个两阶段 teacher–student 框架(Fig. 2),创新点不在 teacher-student 框架本身(这是 [2, 43, 23] 已有套路),而在于:(1) unified inner-product reward 让多 skill 从一个 reward 涌现;(2) dual distillation——student 不仅要学 action,还要学「怎么自己决定方向」。
Phase 1:privileged teacher(看 scandots + waypoint heading)
teacher 在 Isaac Gym 仿真里用 RL(PPO)训练,输入是:proprioception $x$ + scandots $m$(密集扫描点云,[2] 提出的特权地形表示,不是 elevation map 也不是 heightmap)+ waypoint 给的 oracle heading $\hat d_w$ + walking flag $W$ + commanded speed $v_\text{cmd}$。
teacher 用 Regularized Online Adaptation (ROA) [9, 10] 训一个 adaptation module,从 observation history 估环境参数。
ROA = Regularized Online Adaptation(Fu et al. [9][10],RMA [18] 路线的延续——单阶段在线估计环境参数的 adaptation 技术)。常见误读 "Reach-on-Access" 是错的,PDF 正文无此说法;论文里的「两阶段」特指 Phase 1(teacher RL)/ Phase 2(student 蒸馏),不是 Reach/Access。
unified reward 的三件事(这是论文真正的方法贡献):
1. velocity tracking 用 inner-product,在世界坐标系(Eq. 2)。以往 [2] 在 base frame 跟踪速度,parkour 场景下机器人会钻空子——「转身绕过障碍」也算完成 base-frame 跟踪。Extreme Parkour 改成
$$r_\text{tracking} = \min(\langle v, \hat d_w\rangle, v_\text{cmd})$$
其中 $v \in \mathbb{R}^2$ 是世界系速度,$\hat d_w = \frac{p - x}{\|p-x\|}$ 是当前 robot 位置 $x$ 指向下一个 waypoint $p$ 的单位向量。世界系 + 内积让 reward 直接惩罚「绕路」,逼 policy 学「跨过去」而不是「绕过去」。
2. feet clearance penalty(Eq. 3)。inner-product reward 让 policy 倾向「贴边走」以省能量,这在仿真里能跑通但真机危险。加一项
$$r_\text{clearance} = -\sum_{i=0}^{4} c_i \cdot M[p_i]$$
$c_i$ 是第 $i$ 只脚是否触地(0/1),$M$ 是离地形边缘 5cm 内为 1 的指示函数。这一项让脚避开边缘,是 sim-real 关键。
3. stylized reward(Eq. 4)做 handstand:
$$r_\text{stylized} = W \cdot \left(0.5 \cdot \langle \hat v_\text{fwd}, \hat c\rangle + 0.5\right)^2$$
$\hat v_\text{fwd}$ 是机器人本体向前的单位向量,$\hat c$ 是期望方向(handstand 取 $[0,0,-1]^\top$),$W \in \{0,1\}$ 是开关。这个 trick 让一个 policy 既会四足走又会倒立——$W$ 训练时随机、部署时遥控。inner-product 形式让所有 reward 共用一套设计原则(论文称「universal reward design principle based on inner-products」)。
terrain curriculum:tilted ramps / gaps / hurdles / high step 按难度递增排列,机器人走过一半长度就升难度,走不到 $v_\text{cmd} T$ 就降难度。
Phase 2:dual distillation——action 蒸馏 + heading 蒸馏
Phase 1 policy 部署不了,因为:(a) 真机没有 scandots,只有深度图;(b) 真机没有 waypoint oracle,必须自己从地形推断方向。Phase 2 用 DAgger 蒸馏 action、用 BC 蒸馏 heading。
action 蒸馏(DAgger):把 scandots 输入换成 convnet + GRU 处理深度图(同 RMA [2] 架构)。关键:用 student 自己预测的 action 步进环境(不是 teacher),actor 网络从 phase 1 deepcopy 初始化以减小 distribution drift。teacher 在 student 走出的轨迹上提供 ground-truth action 标签——这是经典 DAgger。
heading 蒸馏(BC + MTS):深度 backbone 没有预训练,直接用 student 预测的 heading 当观测会让 distribution 漂移过大、teacher 给错标签。论文提出 Mixture of Teacher and Student (MTS):
$$\text{obs}_\theta = \begin{cases} \theta_\text{pred} & |\theta_\text{pred} - \hat d_w| < 0.6 \\ \hat d_w & \text{otherwise} \end{cases}$$
student 预测的 yaw 角 $\theta_\text{pred}$ 和 waypoint oracle $\hat d_w$ 差小于 0.6 rad 时用预测,否则用 oracle。这是「student 还没学好时别让它带歪 teacher 标签」的稳定化 trick。
Phase 2 蒸馏只有 DAgger(action)+ BC(heading)两条路——PDF 正文无任何重建 loss / privileged reconstruction head / 隐式技能开关。skill 的多样性(跳/跨/倒立)完全靠 phase 1 的 unified inner-product reward + curriculum 涌现,靠显式 walking flag $W$ 切换步态。
部署细节(决定 sim-real)
- A1:12 关节,站立时 thigh joint 高 26cm、body 长 40cm。Intel RealSense D435 在头部,10±2Hz 采深度。
- 计算:Jetson NX,depth backbone 10Hz、base policy 50Hz,UDP 通信。
- 强制 latency:深度图 latency 固定 0.08s($<0.08$ 就 sleep 补齐),proprioception latency 固定 0.016s。这是 sim-real 关键——消除 jitter 让 policy 看到的输入分布稳定。
- 深度预处理:裁掉左侧死像素、downsample 到 58×87。
- 训练成本:单 RTX 3090,<20 小时训完。基于
legged_gym/ Isaac Gym,全开源。
实验结果:A1 跳 2× 身高的精确数字
High jump(Fig. 4):A1 跳上 0.5m 高的 gym box(hip joint 高 26cm,2× hip height)。论文专门对比:人类跳高纪录 2.45m ≈ 2.5× 人类 hip height。动作分解:接近 → stride length 收短、前后脚对准障碍 → 后腿高扭矩/高速蹬地起跳、同时前腿伸展 clear 障碍顶 → 前腿搭顶拉身 → 后腿 tucked 收紧过边 → 切回稳定 walk。
Long jump(Fig. 5):跳过 0.8m 宽 gap(前后足距的 2×)。前后脚都对齐边缘最大化距离 → 后腿后蹬产生前上速度、同时前伸前腿 → 腾空时前腿伸展、后腿并拢 → 双前腿落远端 → 切回正常 gait。
Handstand(Fig. 6):四足↔前二足无缝切换。前倾把重心移前腿 → 后腿适度上踢到垂直 → 后腿 neutral pose + 微调维持平衡。能在草地缓坡上 handstand walk,甚至无视觉下 handstand 下楼梯(靠 proprioception 应对突然下沉)。
baseline 对比(Tab. 2, Tab. 3):
- NoInner(去掉内积 reward,用 base-frame velocity 跟踪):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 上限(student 看 oracle heading),「Both」(一直看预测)和「Mask」(heading mask 为 0)都因 distribution drift 训不出低 loss。
- 真机:5 trials/terrain,最难关比 NoClear / NoDir baseline 高 20–80% 成功率。
为什么重要
- 首次单相机 + 单 policy + 单 reward 达多极限 skill:跳 2× 身高、跨 2× 体长、跑倾斜坡、倒立。所有 skill 由一个 unified policy 输出,仅用 $W$ 开关切步态,没有 specialist 切换、没有障碍类型 abstraction。
- 「机器人自己决定方向」的范式:heading 由 student 从深度图自预测,不依赖人遥控。这是 parkour 走向「自主」的关键——以前所有 parkour 都要人给方向命令,倾斜坡之类需要空中急转向的场景人根本给不了。
- 训练成本低、全开源:<20h 单 3090,
legged_gym基座。parkour 从「ETH 专属」走向「社区可复现」的节点。 - dual distillation 范式扩散:后续 ANYmal Parkour(强化感知侧)、Parkour-in-the-Wild(多专家蒸馏 + RL fine-tune)、Robot Parkour Learning [47] 等几乎都继承了「teacher 看特权 + student 蒸馏」的骨架,只是把「单 policy unified」换成「多 specialist 蒸馏」。
局限
- 单深度相机在弱纹理/反光场景失效:玻璃门、暗光下深度图噪声大,student 退化。
- unified reward 的 stylized 项只能切一个额外步态:$W$ 是 0/1 开关,扩展到更多离散 skill 要重新设计 reward。
- 不解决剧烈动作的 sim-real gap:本文仍是 DR + ROA + 强制 latency 的工程化路线,跳大间隙时接触瞬间的 sim 偏差仍会被运动学放大。真正的 sim-real 突破要等到 ASAP(T01 转折 6 / T12 转折 6)。
- 无 fall recovery:parkour 一旦失误(踩空、撞墙)就摔,这是 T12 转折 7(Fall Recovery)才系统补上的能力。
- scandots 仍是「简化地形表示」:scandots 是 [2] 提出的稀疏点,简化了但仍是 abstraction;真正 raw point cloud 的处理要等后续点云 policy 工作。
复现要点
- 基座:
legged_gym+ Isaac Gym,单 RTX 3090,<20 小时。原仓库chengxuxin/extreme-parkour直接可用。 - reward 三件套:inner-product velocity tracking(世界系!)+ feet clearance(5cm 边缘带)+ stylized(inner-product 同形式,$W$ 开关)。reward 形式必须严格统一为内积——这是「universal reward design principle」的核心。
- terrain curriculum:tilted ramps / gaps / hurdles / high step 按难度递增,过半长度升、不到 $v_\text{cmd} T$ 降。这是 RL 探索的关键,没有它学不会高跳。
- Phase 2 蒸馏:actor 从 phase 1 deepcopy 初始化;action 走 DAgger(student 步进环境 + teacher 给标签);heading 走 BC + MTS(预测偏离 oracle > 0.6 rad 时退回 oracle)。
- 强制 latency:depth 0.08s、proprioception 0.016s,部署时严格补齐。这是 sim-real 的隐形关键。
- 真机坑:A1 不同批次电机扭矩-电流曲线差异显著影响跳跃落点;建议在 DR 里加「电机一致性」随机化。
- 预期难度:中。仿真复现 1–2 周;真机稳定跳跃 2–4 周电机标定。
相关
- 建立在:Learning to Walk in Minutes [Rudin et al. 2021, arXiv:2109.11978](
legged_gym基座);RMA [Kumar et al. 2021, arXiv:2107.04034](在线 adaptation 路线起点,PDF [18]);ROA = Regularized Online Adaptation(Fu et al. PDF [9][10],RMA 路线的延续);[2](scandots + teacher-student vision 框架);DAgger [Ross et al. 2011]。 - 引出:ANYmal Parkour [Hoeller et al. 2023, arXiv:2306.14874](感知侧强化的对照路线,Science Robotics 2024);Parkour-in-the-Wild [Rudin et al. 2025, arXiv:2505.11164](多专家蒸馏 + RL fine-tune)。
- 本仓库笔记交叉引用:T12-agile-locomotion.md(转折 2);与 T01-sim2real-locomotion.md 转折 6 仅在 sim-to-real 维度重叠。