一句话定位
CoRL 2023 Oral(Best Systems Paper Award Finalist,top 3):用「软动力学预训练 + 硬动力学微调」两阶段 RL、不用任何参考动作数据,为五个专家技能(爬高、跨沟、匍匐、侧倾挤缝、奔跑)各训一个特权策略,再用 DAgger 蒸馏成单个纯视觉(egocentric depth)的跑酷策略,端到端部署到 Unitree A1 / Go1 低成本四足机器人,全程只用板载感知、板载算力和板载电源。
背景与定位
跑酷(parkour)是腿式运动的一个「grand challenge」:机器人要在复杂环境中高速奔跑、攀爬、跳跃。论文把已有路线分成两类且都不够用:(1)多样但盲视的运动技能——靠动物 MoCap 模仿或复杂 reward,能生成多样动作但没有 egocentric 视觉,无法自主感知并切换技能;(2)视觉但专用的技能——每个技能单独设计复杂 reward、手工调参,不 scalable。作者主张自主跑酷同时需要「视觉」与「多样」,因此提出一个单一端到端视觉策略,用一个极简 reward、无参考动作即可覆盖多种技能。
方法脉络属于腿式运动 sim-to-real 的特权-学生蒸馏范式(teacher-student / privileged learning,源自 RMA [Kumar 2021] 与 “Learning by Cheating”):先在仿真里用特权信息训「会作弊」的专家,再蒸馏到只用板载传感器的学生。与同期 extreme-parkour-legged-robots(CMU/UCSD,single-stage RL + 硬约束 + 内在 reward)是并行且互补的两条跑酷路线;与 walk-these-ways、real-world-humanoid-locomotion-rl 同属大规模并行 RL + 域随机化的腿式运动谱系。核心方法创新是把直接配点法(direct collocation)的软约束思想搬进 RL:让障碍在预训练阶段「可穿透」,从而绕开难探索问题的局部最优。
模型架构
Policy backbone:无 VLM,纯从头训练的小网络。分两类。
- 专家技能策略(5 个:πclimb / πleap / πcrawl / πtilt / πrun)——GRU + MLP。
- 输入(除 GRU 隐状态外):本体感知
s_proprio ∈ R^29(roll、pitch、base 角速度、各关节位置与速度)、上一动作a_{t-1} ∈ R^12、特权视觉信息e_vis(机器人到前方障碍距离、障碍高度、障碍宽度、4 维 one-hot 障碍类别)、特权物理信息e_phy(地面摩擦、base 质心、电机强度等,用于域适应)。 - 结构:单层 GRU,hidden 256 → MLP
[512, 256, 128],ELU 激活 → 输出 12 维、tanh。动作范围 −1~1,乘 action scale(hip 0.4,thigh/knee 0.6)。 - Action head:连续目标关节位置
a_t ∈ R^12,经 PD 控制器(Kp=50、Kd=1)转成力矩。
- 输入(除 GRU 隐状态外):本体感知
- 蒸馏后的跑酷策略(πparkour)——CNN + GRU + MLP。
- CNN 深度编码器:channels
[16, 32, 32]、kernel[5, 4, 3]、stride[2, 2, 1]、MaxPool、输出 embedding 128 维。 - 输入:本体感知 + 上一动作 + 深度图 latent(
I_depth48×64 经小 CNN);不再有任何特权信息。 - RNN:GRU 单层 hidden 256;MLP
[512, 256, 128],ELU。 - Memory/consistency:用 GRU 而非 MLP 是关键——爬高与跨沟需要「短期记忆」(前腿上障碍后仍需记住障碍几何来控后腿);消融显示 MLP 版完全学不会 climb/leap。
- CNN 深度编码器:channels
- 感知配置:深度图 48×64;板载深度刷新 10Hz,策略 50Hz 运行、异步取用最新深度 latent;力矩上限 25Nm(clip 目标关节位置实现)。
数据
- 无任何参考动作 / MoCap 数据——只用仿真 rollout + 极简 reward,这是相对模仿动物路线的核心区别。
- 仿真环境:IsaacGym Preview 4。训练专家时构建大地形图 800 条 track(20×40 网格),每列 track 首尾相连、难度线性递增;同排 track 同难度但非关键配置不同。蒸馏时随机采样障碍类型/属性组成 40 track × 每 track 20 障碍 的地形。
- 障碍属性范围(Table 1,训练 / 测试,单位米):
- Climb 障碍高度:训练
[0.2, 0.45],测试[0.25, 0.5] - Leap 沟宽:训练
[0.2, 0.8],测试[0.3, 0.9] - Crawl 净空:训练
[0.32, 0.22],测试[0.3, 0.2] - Tilt 通道宽:训练
[0.32, 0.28],测试[0.3, 0.26] - 其他固定:爬障碍 0.8m 宽 0.8m 长;跨沟 0.8m 宽 0.8m 深;匍匐障碍 0.8m 宽 0.3m 长;侧倾通道 0.6m 长。
- Climb 障碍高度:训练
- 动作/技能标注(蒸馏监督):仿真里对每个 state 已知障碍类型,故直接指派对应专家(如高障碍→πclimb)监督学生,无需人工标注。
- 域随机化(Table 9,sim-to-real):附加质量
[1.0,3.0]kg、质心 x[-0.05,0.15]/y[-0.1,0.1]/z[-0.05,0.05]、摩擦系数[0.5,1.0]、电机强度[0.9,1.1]、前向深度延迟[0.2,0.26]s、相机位置 x0.27±0.01/y0.0075±0.0025/z0.033±0.0005、相机 pitch[0,5]°、FoV[85,88]°、本体感知延迟[0.0375,0.0475]s。 - 深度图 sim-to-real 预处理:仿真侧加 depth clipping + 像素级高斯噪声 + 随机 artifacts;真实侧 depth clipping + hole-filling + 空间/时间滤波。
训练方法
两阶段 RL + 蒸馏,全程只用一个极简通用技能 reward:
r_skill = r_forward + r_energy + r_alive,其中
r_forward = −α1|v_x − v_x^target| − α2|v_y|² + α3·e^{−|ω_yaw|}r_energy = −α4·Σ_j |τ_j·q̇_j|²(用电机功率的平方压均值与方差;沿用 [Fu 2021] 最小化机械能→步态涌现的思路)r_alive = 2- 各技能目标速度约 1 m/s;实际
v_x^target:Running 0.8、Climbing 1.2、Leaping 1.5、Crawling 0.8、Tilting 0.5 m/s。
Stage 1 — 软动力学预训练(受直接配点启发):把障碍设为可穿透,机器人可违反物理直接穿过,避开硬约束下卡在障碍前的局部最优。加穿透 reward r_penetrate = −Σ_p (α5·1[p] + α6·d(p))·v_x——在机器人碰撞体上采样碰撞点,1[p] 记穿透体积、d(p) 记穿透深度;髋/肩(含电机)附近多采点以更强惩罚;乘 v_x 防止「冲刺穿墙」刷分。配自动课程:按上一 episode 的穿透 reward 与阈值比较,难度分 s(0→1,步长 0.05)逐步加减,障碍属性 = (1−s)·l_easy + s·l_hard。用 PPO 优化 r_skill + r_penetrate。
Stage 2 — 硬动力学微调:预训练近收敛后,切到真实硬约束(不可穿透),仅用 r_skill 用 PPO 微调;奔跑技能无障碍,直接硬约束训练、跳过 Stage 1。
Stage 3 — 蒸馏(DAgger):把 5 个用特权信息的专家蒸馏成单一纯视觉 πparkour;divergence 用 tanh 输出策略的 binary cross-entropy loss。教师与学生均为有状态(stateful)网络。
惩罚项超参(Tables 3–7):α1=α2=1;α3 = climb 0.1、其余 0.05;能量 α4 = climb/leap 2e-6、crawl 2e-5、tilt/run 1e-5;穿透 α5=α6 = climb 1e-2、leap 4e-3、crawl 6e-2、tilt 3e-3、run 0。 PPO 超参(Table 10):clip 0.2、GAE λ 0.95、LR 1e-4、γ 0.99、min policy std 0.2、4096 并行环境、每 batch 24 步、5 epoch、4 mini-batch。
Infra(训练 / 推理工程)
- 训练:每个专家技能——软动力学 1×Nvidia 3090 训 12h + 硬动力学 6h。蒸馏——4 台机器、各 1×Nvidia 3090,共享 NFS:3 台加载当前模型、采集学生轨迹并跑专家监督,1 台加载最新轨迹训练学生。精度未披露(默认 fp32)。
- 推理 / 部署:Unitree A1(及 Go1)+ Nvidia Jetson NX 板载算力 + Intel RealSense D435 深度相机。ROS1 / Ubuntu 18.04;Unitree SDK 收发机器人状态与指令 100Hz。策略推理固定 50Hz;CNN 视觉编码器异步脚本 10Hz 出深度 latent,经 ROS 消息传主脚本。深度用 librealsense 采 240×424,裁左 60/右 46 像素后降采样到 48×64。电机瞬时最大力矩 33.5Nm,部署力矩上限 25Nm;含 roll/pitch 限位、力矩估计限、遥控急停保护。
评测 benchmark
仿真(Table 2,max distance 3.6m,100 trials × 3 seeds,测试集障碍比训练更难)——成功率(%) / 平均距离(m),列序 Climb·Leap·Crawl·Tilt·Run:
| 方法 | Climb | Leap | Crawl | Tilt | Run |
|---|---|---|---|---|---|
| Blind | 0 / 1.53 | 0 / 1.86 | 13 / 2.01 | 0 / 1.62 | 100 / 3.6 |
| MLP | 0 / 1.59 | 1 / 1.74 | 63 / 3.27 | 43 / 2.31 | 100 / 3.6 |
| No Distill | 0 / 1.57 | 0 / 1.75 | 73 / 2.76 | 0 / 1.86 | 100 / 3.6 |
| RMA [8] | – | – | – | 74 / 2.7 | – |
| Ours (parkour policy) | 86 / 2.37 | 80 / 3.05 | 100 / 3.6 | 73 / 2.68 | 100 / 3.6 |
| Oracles w/o Soft Dyn | 0 / 1.54 | 0 / 1.73 | 93 / 3.58 | 86 / 1.73 | 100 / 3.6 |
| Oracles(特权,本文完整版) | 95 / 3.60 | 82 / 3.59 | 100 / 3.6 | 100 / 2.78 | 100 / 3.6 |
关键结论:
- 视觉不可或缺:Blind 版 climb/leap/tilt 成功率全 0,crawl 仅 13%。
- 软动力学预训练使探索成为可能:跨 climb/leap/crawl/tilt 平均成功率约 95%;RND 与 Oracles w/o Soft Dyn 在最难的 climb/leap 上完全学不动(0%)。
- GRU 记忆使能:MLP 学不会 climb/leap。
- 蒸馏对 sim2real 有效:RMA 只能蒸馏它训练过的单一技能(tilt 74%),无法把多专家合成一个策略;No Distill 直接从视觉训则学不会 climb/leap/tilt。
真实世界(A1,室内定量,每技能 10 trials,对比 Blind / MPC 默认 / MPC 特殊模式):
- 爬 0.40m(1.53× 机器人高)→ 80% 成功
- 跨 0.60m 沟(1.5× 机器人长)→ 80% 成功
- 匍匐 0.2m 净空(0.76× 机器人高)→ 90% 成功
- 侧倾挤过 0.28m 缝(< 机器人宽) 本文方法在所有技能上均优于基线。户外:跨越河边两块相距 0.6m 的石凳、连续爬每级 0.42m 的台阶、匍匐钻过野营车、应对湿滑草地。涌现「重试」行为:爬高失败后机器人会自己后退腾出助跑空间再试——未编程、由简单 reward 自然涌现(仿真与真实均观察到)。
创新点与影响
- 贡献:(1) 一个开源跑酷学习系统(IsaacGym 环境 + rsl_rl 算法),供社区训练/部署 agile locomotion;(2) 面向难探索问题的两阶段 RL——软动力学预训练(可穿透 + 穿透 reward + 自动课程)+ 硬动力学微调,把直接配点的软约束思想引入腿式 RL;(3) 用极简 reward、无参考动作即可自动、系统地生成 5 种跑酷技能并蒸馏为单一视觉策略;(4) 泛化到 A1、Go1(后续代码扩到 Go2)两种低成本机器人,全程板载感知/算力/电源。
- 影响:把「高动态、视觉驱动、多技能自主切换」的四足跑酷做到了低成本硬件上,成为此后一系列 parkour / agile locomotion 工作的对照基线与代码底座;与并行的 extreme-parkour-legged-robots 共同确立了 CoRL’23 的跑酷双雄。
- 作者自陈局限:仿真环境需手工构建——只有把带新障碍/外观的新环境加进仿真才能学新技能,限制了新技能的自动获取。未来方向:用 3D 视觉/图形从大规模真实数据自动构建多样仿真环境;以及直接从含语义的 RGB(而非深度图)学 agile locomotion。
- 项目页披露的失败样例:爬不上 0.8m(3× 机器人高)超高障碍;低摩擦平台跨沟时后腿打滑、前冲动量不足;爬又高又软的障碍失败。
原始链接
- arXiv:https://arxiv.org/abs/2309.05665 (v2, 2023-09-12;CoRL 2023)
- PDF:https://arxiv.org/pdf/2309.05665
- 项目主页:https://robot-parkour.github.io/
- 代码:https://github.com/ZiwenZhuang/parkour
- 视频:https://youtu.be/M7lDCSF0KP0
一手源存档(sources/)
- robot-parkour-learning—github-readme — GitHub README(Oral / Best Systems Paper Finalist、仓库结构、A1/Go1/Go2 训练与部署入口)
- robot-parkour-learning—project-page — 项目主页(三阶段方法叙述、涌现重试行为、失败样例)
- arXiv 原文 PDF:https://arxiv.org/pdf/2309.05665 (arXiv 原文 PDF,不入 git)