PAPER DEEP DIVE
野地徒步:面向人形机器人的可扩展感知跑酷框架
提出端到端感知跑酷框架,将原始深度图与本体感受直接映射为关节动作,结合地形边缘检测、足部体积点防边缘滑落机制与平坦区域采样抑制奖励作弊,全尺寸人形机器人实测最高 2.5 m/s 穿越复杂非结构化地形。
野地徒步:面向人形机器人的可扩展感知跑酷框架
论文:Hiking in the Wild: A Scalable Perceptive Parkour Framework for Humanoids
链接:arXiv:2601.07718 | 机构:清华大学交叉信息研究院(IIIS)、上海期智研究院、清华大学计算机系 | 平台:29 自由度人形机器人(Unitree G1 构型) | 代码:project-instinct/InstinctLab(已开源,含训练与部署全链路)
一句话总结:这是一套单阶段、端到端的人形机器人感知跑酷框架——用 GPU 并行光线投射在仿真中合成带噪声的深度图,配合地形边缘惩罚、平坦斑块目标采样和对抗动作先验,让机器人仅凭 60 Hz 机载深度相机和本体感受就零样本迁移到真实世界,在楼梯、高台、草坡与深沟上以最高 2.5 m/s 的速度奔跑穿越。
研究背景与动机
让双足机器人在野外走路,听起来像是"再训一个步态策略"的问题,但作者在第一段就点破了本质区别:跟踪预定义动作像是在背诵一段背熟的套路,而真正的徒步要求机器人主动感知地形、适应不规则、处理未知。近几年人形控制进展惊人——跳舞、后空翻、模仿人类动作都已成为常规操作——但这些都发生在平整地面和受控环境里。一旦把机器人放进杂草、碎石、台阶和沟壑组成的真实世界,问题立刻变成了感知与足落点的博弈。
盲走(blind locomotion)是这个问题上最成熟的基线。只依赖本体感受的策略对接触力做出反应,走草地、踩碎石都相当稳健。但"反应式"三个字决定了它的天花板:机器人只能在碰撞发生之后才做出应对。看不见深沟、看不见高台,一脚踩空就是灾难性摔倒。要安全地在野地行走,机器人必须从"反应式稳定"转向"前瞻式规划"——也就是学会往前看。
把外感知接入运动控制,目前的做法分两类,各有各的瓶颈。第一类用激光雷达构建高程图(2.5D 地图)或体素栅格,这类方法严重依赖精确的状态估计;而野外定位传感器天然漂移,激光雷达频率低、快速运动时还有运动畸变,高动态场景基本不可用。第二类用深度图像重建高度图,但它们大多只在楼梯、斜坡这类结构化场景验证过,无法扩展到未见过的野外地形,且由于相机安装高度定制化,代码往往不开源,社区难以复现。还有一类工作用"虚拟障碍"做边缘惩罚,但都是逐个场景手工设计的,换个地形就要重新调参。
本文的出发点是把这些瓶颈一次性拆掉:不要地图、不要外部定位、不要中间高度图表示,把原始深度图像和本体感受直接喂给一个单阶段强化学习策略,输出关节动作。为了让这条端到端链路真的能训出来、真的能安全部署,作者围绕三个关键痛点分别设计了机制——足落在边缘上的滑落风险、随机速度指令引发的"奖励作弊"、以及仿真深度与真实深度之间的分布差距。
值得强调的是部署成本:整个系统用的是 Unitree G1 出厂自带的 Intel RealSense D435i 深度相机,没有任何硬件改装;策略以 50 Hz 跑在机载 Jetson Orin NX 上,深度采集以 60 Hz 异步运行。换句话说,这套方法的复现门槛是"买一台标准版机器人",这对社区扩散相当友好。
方法详解
1. POMDP 建模:观测、动作与奖励
问题被形式化为部分可观测马尔可夫决策过程(POMDP),用 PPO 训练、非对称演员-评论家架构。演员观测包含本体感受与感知两部分:基座角速度 $\boldsymbol{\omega}_{t}\in\mathbb{R}^{3}$、投影重力 $\mathbf{g}_{t}\in\mathbb{R}^{3}$、速度指令 $\mathbf{c}_{t}\in\mathbb{R}^{3}$、关节位置 $\mathbf{q}_{t}\in\mathbb{R}^{29}$、关节速度 $\dot{\mathbf{q}}_{t}\in\mathbb{R}^{29}$、上一时刻动作 $\mathbf{a}_{t-1}\in\mathbb{R}^{29}$,以及深度图像序列。完整演员观测写成:
$$\mathbf{o}_{t}^{a}=\left\{\left(\boldsymbol{\omega}_{i},\mathbf{g}_{i},\mathbf{c}_{i},\mathbf{q}_{i},\dot{\mathbf{q}}_{i},\mathbf{a}_{i-1}\right)\right\}_{i=t-h+1}^{t}+\mathcal{H}_{t}$$
其中 $\mathcal{H}_{t}$ 是深度图像的历史序列(后文详述其跨步采样方式)。评论家额外获得无噪声观测和基座线速度 $\mathbf{v}_{t}\in\mathbb{R}^{3}$,这是仿真训练中常见的特权信息设计。动作空间是 29 维目标关节位置,力矩由 PD 控制计算:
$$\boldsymbol{\tau}_{t}=k_{p}(\mathbf{a}_{t}-\mathbf{q}_{t})-k_{d}\dot{\mathbf{q}}_{t}$$
PD 增益沿用 BeyondMimic 的配置。总奖励由四项组成:任务跟踪、正则化、安全约束与 AMP 风格奖励,$R=r_{\text{task}}+r_{\text{reg}}+r_{\text{safe}}+r_{\text{amp}}$。回合终止条件包括超时、越出地形边界、躯干非法接触、姿态失稳和根节点高度不足——这些硬约束把物理上不可行的探索尽早剪掉,加速收敛。
2. 以自我为中心的深度仿真:让仿真深度"像"真实深度
端到端感知策略能否零样本迁移,关键在于仿真里的深度图和真实相机拍出来的深度图是否同分布。作者的解法是定义两条变换管线 $\mathcal{F}_{sim}$ 与 $\mathcal{F}_{real}$,把两个域的原始深度都映射进同一个统一感知空间 $\mathcal{O}$,目标是让处理后的分布对齐:$P(\mathcal{F}_{sim}(d_{sim}))\approx P(\mathcal{F}_{real}(d_{real}))$。

图 2:深度处理流程。上行是仿真管线 $\mathcal{F}_{sim}$ 对合成数据的退化处理,下行是真实世界管线 $\mathcal{F}_{real}$ 的清洗流程,二者输出汇入同一感知空间。
仿真侧的深度图不是渲染出来的,而是用 NVIDIA Warp 实现的 GPU 并行光线投射器合成的。给定相机光心 $\mathbf{p}_{c}\in\mathbb{R}^{3}$ 与朝向 $\mathbf{R}_{c}\in SO(3)$,对每个像素 $(i,j)$ 沿射线方向 $\mathbf{v}_{i,j}$ 求与场景几何 $\mathcal{G}$(地形网格 + 机器人可视网格)的首个交点,得到径向距离:
$$d_{i,j}=\min\{\tau\mid\mathbf{p}_{c}+\tau\mathbf{v}_{i,j}\cap\mathcal{G}\neq\emptyset\}$$
再把径向距离投影到相机主轴 $\mathbf{n}_{c}$ 上,转成 RGB-D 传感器输出的正交深度:$z_{i,j}=d_{i,j}\cdot(\mathbf{v}_{i,j}\cdot\mathbf{n}_{c})$。这一步细节很重要——许多实现直接把射线距离当深度喂给策略,与真实相机的成像模型不一致,会在边角像素引入系统性偏差。
拿到理想深度后,仿真管线用六步随机退化模拟真实传感器的缺陷:裁剪缩放、随距离注入高斯噪声(仅对有效量程 $[d_{min},d_{max}]$ 内的像素,$z'_{i,j}=z_{i,j}+\epsilon,\ \epsilon\sim\mathcal{N}(0,\sigma^{2})$)、用结构掩膜合成双目失配的"白色无效区"、高斯模糊模拟运动模糊、裁剪归一化到 $[0,1]$,最后以概率 $P_{ood}$ 整帧替换为随机高斯噪声,模拟传感器瞬时故障。最后这条 OOD 扰动是防御性设计:策略必须学会在"眼睛突然瞎了一帧"时靠本体感受和历史帧撑住平衡。真实世界管线则反过来做清洗:裁剪缩放、对零值"黑洞"区域做深度修补、高斯模糊压制高频抖动。
时间维度上,深度输入采用跨步采样(strided sampling)聚合历史:缓冲 $m$ 帧、时间步长为 $\ell$,再加一帧延迟模拟传感器时延:
$$\mathcal{H}_{t}=\{I_{t-k\cdot\ell}\mid k=0,1,\dots,m-1\}$$
这样只处理 $m$ 帧就能看到 $(m-1)\cdot\ell$ 步的时间跨度。高速奔跑时地形变化极快,稠密历史既冗余又吃算力,稀疏而长程的视野让策略能估计地形轮廓趋势和自身相对速度,提前调整步态——消融实验会证明这个设计在小障碍物场景是决定性的。
3. 地形边缘接触惩罚:用几何约束逼出安全足落点
这是全文最有工程巧思的部分。训练中机器人会自发地把脚踩在台阶边缘附近以省力气——这对四足尚可容忍,但人形稳定裕度小,半只脚悬在楼梯棱上往往直接滑落摔倒。此前的端到端工作用"虚拟障碍"惩罚边缘接触,但都是逐个场景手工搭建的,不可扩展。本文的方案是把边缘检测变成对任意三角网格都适用的自动流程。
边缘检测器比较相邻面片的二面角,超过阈值 $\tau$ 的公共边即判为尖锐边缘,随后贪心地拼接碎段、过滤噪声,把每条边缘段膨胀成半径 $r$ 的圆柱体,再组织成空间碰撞栅格 $\mathcal{S}$ 供并行查询。整个流程在算法 1 中给出,输入是三角网格 $\mathcal{M}=(\mathcal{V},\mathcal{F})$、尖锐度阈值、圆柱半径和栅格分辨率,输出是空间碰撞栅格。这一设计意味着换任何地形都不需要人工标注或调参——作者专门用石头阵和木桩阵两种全新地形验证了零样本泛化。

图 3:多种地形上自动检测出的边缘。台阶棱、沟壑沿口、平台边界都被几何规则自动标出,无需人工特征工程。
机器人的每只脚内部则分布一组"体积点"$\mathcal{P}$。训练时用 NVIDIA Warp 做大规模并行距离查询,计算每个点相对边缘碰撞栅格的穿透深度 $\mathbf{d}_{i}$,惩罚项同时考虑穿透量和该点的运动速度 $\mathbf{v}_{i}$:
$$r_{vol}=-\sum_{i=1}^{|\mathcal{P}|}\|\mathbf{d}_{i}\|\cdot(\|\mathbf{v}_{i}\|+\epsilon)$$
其中 $\epsilon=10^{-3}$ 保持数值稳定。这个公式的含义是:脚在边缘附近"蹭"得越快、陷得越深,惩罚越重。它比单纯惩罚静态穿透更有效,因为它专门打压"高速刮擦边缘"这种最危险的接触模式。策略由此隐式学会把脚掌中心放在平坦安全的位置,而不需要任何显式足落点规划。

图 4:分布在足部碰撞体内的体积点。每个点独立查询与边缘栅格的穿透关系,构成对足-边缘接触状态的稠密监控。
4. 基于位置的速度指令:用平坦斑块消灭奖励作弊
训练感知跑酷策略有个隐蔽的坑:如果速度指令是均匀随机采样的,机器人很快学会原地转圈刷速度跟踪奖励,而不是真的翻越障碍——这就是"奖励作弊"。改奖励函数只能缓解,改成目标点指令又失去对速度的控制,而且随机采的目标点可能落在不可达的位置上。本文的解法是分两步:先找物理上可达的目标,再由目标反推速度指令。
第一步沿用 IsaacLab 的思路在网格上找"平坦斑块":随机采样候选点,以半径 $r$ 光线投射取周围一圈高度 $H$,只有当高度差满足 $\max(H)-\min(H)<\delta$ 时才接受该点。这保证目标永远落在稳定地面上,而不是陡坡或够不着的地方。第二步周期性地选一个斑块作为导航目标,设目标在机器人基座系下的位置为 $\mathbf{p}_{target}^{B}=[x_{g},y_{g}]^{T}$,速度指令按下式生成:
$$v_{x}=\text{clip}(k_{v}\cdot x_{g},0,v_{max}),\qquad \omega_{z}=\text{clip}(k_{\omega}\cdot\text{atan2}(y_{g},x_{g}),-\omega_{max},\omega_{max})$$
$k_{v}$、$k_{\omega}$ 是线速度和角速度刚度系数,速度上限 $(v_{max},\omega_{max})$ 按地形类别自适应调整。由于头部相机只看前方,侧向速度 $v_{y}$ 恒为零。还有一个容易被忽略的细节:纯位置指令会让机器人几乎学不会原地转向(目标总在远处),所以作者专门划出一小部分智能体在平地上接收 $v_{x}=0$、随机 $\omega_{z}$ 的纯转向指令,补齐机动能力。

图 5:不同地形上的平坦斑块采样结果。被接受的斑块都位于局部平坦、物理可达的区域,充当训练期间的导航目标。
5. 对抗动作先验:MPC、动捕与 LAFAN 的混合数据集
为了让步态自然、能力全面,框架沿用 AMP(Adversarial Motion Priors)训练风格奖励。参考数据集 $\mathcal{D}$ 以 50 Hz 采集自三个来源:MPC 控制器生成的合成行走(提供稳定基线)、NOKOV 动捕系统采集的人类动作(包含攀爬高台、上下楼梯等高难动作,用 GMR 重定向到机器人)、以及从 LAFAN 数据集挑选的高速奔跑片段。为避免模式坍缩,行走与奔跑策略用不同数据集分开训练:行走集 $\mathcal{D}_{walk}$ 共 379.62 秒,奔跑集 $\mathcal{D}_{run}$ 仅 1.54 秒。
判别器的输入不是常见的单帧状态对,而是 $n$ 帧历史序列 $\mathbf{S}_{t}=[\mathbf{s}_{t-n},\dots,\mathbf{s}_{t}]$,其中 $\mathbf{s}_{t}=(\mathbf{v}_{t},\boldsymbol{\omega}_{t},\mathbf{g}_{t},\mathbf{q}_{t},\dot{\mathbf{q}}_{t})$,以捕捉动作的时序特征。判别器用最小二乘损失训练:
$$L_{D}=\mathbb{E}_{\mathcal{M}}[(D(\mathbf{S})-1)^{2}]+\mathbb{E}_{\mathcal{P}}[(D(\mathbf{S})+1)^{2}]$$
风格奖励取二次形式:$r_{t}=\max\left[0,1-0.25(D(\mathbf{S}_{t})-1)^{2}\right]$。相比二元交叉熵加对数奖励,MSE 加二次奖励给出更平滑、不饱和的梯度,避免梯度消失,让策略向参考动作流形收敛得更稳。数据集还做了对称增广以扩充多样性。
6. 整体训练-部署链路
flowchart TB
subgraph TRAIN["训练 (Isaac Sim + RTX 4090)"]
MESH[Terrain trimesh] --> RAY[GPU ray-caster]
RAY --> SIM["F_sim: noise + blur + OOD dropout"]
MESH --> EDGE[Edge detector]
EDGE --> GRID[Cylinder spatial grid]
MESH --> FP[Flat patch sampling]
FP --> CMD[Position-based velocity command]
FOOT[Foot volume points] --> RVOL[r_vol penetration penalty]
GRID --> RVOL
SIM --> MOE[MoE actor policy]
CMD --> MOE
AMP[AMP: MPC + mocap + LAFAN] --> MOE
end
subgraph DEPLOY["部署 (零样本, 无外部定位)"]
CAM[D435i 60Hz depth] --> REAL["F_real: crop + inpaint + blur"]
REAL --> MOE
MOE --> PD[PD control] --> G1[G1 29 joints]
end
整条链路的关键在于训练与部署的观测接口严格一致:仿真侧用退化管线把理想深度"做旧",真实侧用清洗管线把原始深度"修好",两者在统一感知空间里会合,策略因此无需任何微调即可直接上机。策略骨干采用专家混合(MoE)架构处理高维深度输入和多地形技能,把深度处理频率顶到 60 Hz——这是后文高动态动作(如奔跑冲上高台)得以成立的带宽前提。
7. 开源代码与论文的对应
代码已在 GitHub 的 project-instinct/InstinctLab 开源,且与论文方法的对应相当直接。体积点惩罚的实现在 source/instinctlab/instinctlab/envs/mdp/rewards/volume_points.py,核心逻辑与论文公式 (3) 一致——计算穿透深度的范数,乘以点速度范数加小常数后求和:
penetration_depth = torch.norm(penetration, dim=-1)
in_obstacle = (penetration_depth > tolerance).float()
points_vel_norm = torch.norm(points_vel, dim=-1)
velocity_times_penetration = in_obstacle * (points_vel_norm + 1e-6) * penetration_depth
return torch.sum(velocity_times_penetration, dim=-1)
边缘检测器在 source/instinctlab/instinctlab/terrains/virtual_obstacle/edge_cylinder.py:直接调用 trimesh 的 face_adjacency_angles 取二面角,按阈值筛出尖锐边,再构建 CylinderSpatialGrid,与算法 1 的三步流程一一对应。位置式速度指令在 tasks/parkour/mdp/commands/pose_velocity_command.py,其中明确要求地形提供 flat_patches["target"],否则抛错——这正是平坦斑块采样作为指令前置条件的工程体现。
实验结果
训练在 NVIDIA Isaac Sim / Isaac Lab 上进行,单张 RTX 4090,本体感受与深度历史均为 8 帧。部署平台是 29 自由度人形机器人,机载 Jetson Orin NX 以 50 Hz 跑 onnxruntime 推理,深度相机用出厂 RealSense D435i:原始 480×270、60 Hz,下采样到 64×36 后裁剪成 36×18 喂给策略。实验围绕三个问题展开:能否高效训练并零样本部署?边缘惩罚是否真的提升落足安全且可扩展?各组件贡献几何?

图 6:零样本迁移的真实场景快照:(a)(b) 奔跑冲上/冲下高台,(c) 草坡奔跑,(d)(e) 上下楼梯,(f) 跨越深沟。
真机成绩相当硬核:最高奔跑速度 2.5 m/s,登上 32 cm 高台,跨越 50 cm 宽的深沟。每种地形与步态组合做 10 次试验统计成功率,几乎所有场景保持高成功率;长时稳定性测试中,机器人连续上下多段楼梯与平地行走 4 分钟,无摔倒、无人工干预。作者特别指出,60 Hz 的高频深度感知是"奔跑冲上高台"这类动作的关键使能——低延迟的环境反馈让策略能实时微调姿态应对地形变化。
边缘惩罚的量化评估在仿真中进行:每种地形跑 10000 步、1000 个并行机器人,统计成功率与"平均足部着陆面积百分比"(脚掌落在地形表面上的面积占比)。结果如下:
| 地形 | 成功率(本文) | 成功率(无边缘惩罚) | 着陆面积(本文) | 着陆面积(无边缘惩罚) |
|---|---|---|---|---|
| 上楼梯 | 100.00% | 100.00% | 0.99 | 0.98 |
| 下楼梯 | 99.95% | 99.82% | 0.94 | 0.87 |
| 深沟 | 100.0% | 99.94% | 0.96 | 0.94 |
| 小箱体 | 99.09% | 93.17% | 0.96 | 0.95 |
单看成功率差距似乎不大,但要注意机器人每个回合有相当比例时间走在平地上,因此均值被拉高了——在小箱体这种边缘密集的场景,成功率从 93.17% 提到 99.09%,下楼梯着陆面积从 0.87 提到 0.94,改善集中在真正危险的区域。图 9 展示了无惩罚时踩中楼梯棱瞬间滑落摔倒的画面,这类接触会把机器人直接推进分布外状态;边缘惩罚把这种风险在训练阶段就压了下去。可扩展性验证同样亮眼:石头阵与木桩阵两种训练中未见的地形,边缘检测器无需任何人工调参就精确标出所有边缘。
消融实验在九种地形上系统拆解了四个组件的贡献(10000 步 × 1000 机器人,指标为成功率与平均到达时间):
| 方法 | 小箱体成功率 | 下楼梯成功率 | 上楼梯成功率 | 深沟成功率 | 小箱体到达时间 |
|---|---|---|---|---|---|
| 完整方法(Ours) | 99.09% | 99.95% | 100.0% | 100.0% | 8.03 s |
| 去掉深度历史 | 1.66% | 99.49% | 99.93% | 100.0% | 11.68 s |
| 去掉位置式指令 | 90.68% | 100.0% | 99.74% | 100.0% | 11.32 s |
| 去掉 MoE(换等参 MLP) | 84.51% | 99.68% | 100.0% | 100.0% | 10.98 s |
| 去掉 AMP | 0.00% | 99.94% | 100.0% | 99.94% | – |
小箱体这一列信息量最大。去掉深度历史后成功率从 99.09% 崩到 1.66%——单帧深度根本来不及预判小障碍,跨步历史是感知带宽的命门。去掉 AMP 更极端,直接归零:纯任务奖励训出的步态跨不上小箱体,动作先验不只管"好看",它实质性地扩展了策略的能力边界。去掉位置式指令和 MoE 分别掉到 90.68% 和 84.51%,且各配置的到达时间普遍变慢(8.03 s → 11 s 上下),说明这些组件不是锦上添花,而是共同支撑了"又快又稳"的穿越能力。
局限性
作者自述的限制主要在指令系统:头部前视相机决定了只控制前进与朝向,侧向速度 $v_{y}$ 恒为零,机器人无法横向移动;纯位置指令天然不利于学习原地转向,需要靠额外的平地转向智能体子集来补救。这限制了系统在狭窄空间、需要侧步调整的场景中的灵活性。
从读者视角还有两点值得指出。其一,奔跑数据集 $\mathcal{D}_{run}$ 只有 1.54 秒,高速步态的风格约束其实建立在极薄的样本上,奔跑质量的可持续性值得追问;而且策略经过针对高速与特定地形的后训练(post-training),零样本的边界到底在哪里没有完全披露。其二,实验以成功率为主指标,缺少与同类感知运动方法在相同地形上的定量对比,也缺少能耗与跌倒恢复的讨论;边缘检测依赖训练时的网格几何,真实部署靠深度图感知边缘的等效性如何,文中没有单独验证。
总结与展望
这篇论文的价值不在于单点突破,而在于把感知跑酷的整条工程链路做成了可复现的开源系统:光线投射深度合成 + 双向对齐管线解决了仿真-真实深度分布差;二面角边缘检测 + 足部体积点把"踩边缘"这个学习式控制的老毛病变成了对任意网格自动生效的软约束;平坦斑块目标把速度指令从随机采样变成物理可达的导航问题。三件事叠加,换来 2.5 m/s 的野外奔跑、32 cm 高台、50 cm 深沟和无改装硬件的零样本部署。
对社区的启示是明确的:感知运动策略的瓶颈正在从"网络结构"转向"训练信号的质量"——更真实的传感器模拟、更几何化的安全约束、更物理可行的指令分布,比堆网络参数更有效。随着这类开源框架的成熟,"买一台标准机器人 + 一块 4090"复现野外徒步将不再是奢望。



