深度⏱ ~3 min
里程碑
⭐ 为何重要

把遥操作、loco-manipulation、自主行走等多种控制模式通过 policy distillation 蒸馏进同一个 whole-body policy,是『通用人形控制器』方向的代表。它正面回答了『一个模型能否同时管移动与操作』的问题,是 OmniH2O 之后人形 whole-body control 走向统一化的关键一步,为后续通用 humanoid foundation controller 提供范式。

机器人Unitree G1/H1
数据集AMASS
上真机
物理感知
实时
输入模态proprioception

论文:Tairan He, Wenli Xiao, Toru Lin, Zhengyi Luo, Zhenjia Xu, Zhenyu Jiang, Jan Kautz, Changliu Liu, Guanya Shi, Xiaolong Wang, Linxi "Jim" Fan, Yuke Zhu(通讯 Fan/Zhu;UCSD / NVIDIA / CMU / UC Berkeley / UT Austin). HOVER: Versatile Neural Whole-Body Controller for Humanoid Robots. arXiv:2410.21229, 2024(ICRA 2025)。🌐 · 硬件平台:Unitree H1(19 DoF)。

一句话直觉

让一个网络替代一摞全身控制器。

秘诀是用 mask 决定哪些指令维度生效。

HOVER 之于人形控制,就像瑞士军刀之于工具箱。

一把刀替代一堆专用刀,还能边走边换刀片。

是什么·为什么

要解决的问题:2023–2024 涌现了一批人形全身控制器,各管一摊。

ExBody 管上半身关节。H2O 管 8 个点位置。

OmniH2O 管头和两手。HumanPlus 管全身关节。

每个都自定一套指令格式。📎

老办法的痛点:换一种遥操设备就要重训一遍 policy

VR 手柄、键盘、动捕服、外骨骼、Vision Pro 各对应一种指令。

ExBody 模式训的机器人不能临时切到 OmniH2O 模式去握手。📎

HOVER 的转身:所有这些控制器底层都在做同一件事——跟踪动作参考。

区别只是"指令维度的子集不同"。📎

所以可以设计一个统一指令空间。

用 mask 决定激活哪些维度。

蒸馏出一个能处理任意 mask 组合的策略。

方法核心(大白话):分两步训。

Step 1,仿真里训一个"满血老师"。

老师能看到所有特权信息。

比如每个身体部位的真实速度、动力学参数。

它还看得到完整参考动作。

老师学怎么用这些信息做出最优动作。

Step 2,训一个"学生"。

学生只看真机能拿到的东西。

就是关节角、关节速度、最近半秒历史。

学生的指令还要过两道 mask。

第一道叫 mode mask。

它决定上半身和下半身各激活哪些指令类别。

位置、关节角、根速度可多选——比如下半身能同时盯关节角和根速度。

第二道叫 sparsity mask。

它在已激活类别里再随机屏蔽一些维度。

学生走一步,老师在同一状态给标准答案。

学生对齐老师的动作。

每个 episode 开始随机抽一次 mask。

整个 episode 固定不变。

这让学生学会"任意指令子集都能用"。

部署时换设备不需要重训。

上层只发当前可用的指令和 mask。

学生推理一次给全 19 维动作。

📎

为什么 generalist 不拉胯

HOVER 在 ExBody 模式下略胜 ExBody specialist。

survive 99.1% vs 99.1%。全局位姿误差 Eg-mpjpe 185 vs 275(降 33%)。📎

原因可能是统一训练数据更多、正则更强。

specialist 反而是过拟合的浪费。

一句话类比:HOVER 之于人形控制,就像瑞士军刀之于工具箱。

mask 就是刀柄上的旋钮。

决定这把刀现在当剪刀、螺丝刀还是开瓶器。

专业刀胜在专精。

瑞士军刀胜在"一把顶一捆、随时切换"。

你会看到:行走中从 ExBody 切到 H2O 模式不摔。

Vision Pro 遥操时随机 mask 掉头或手,仍平滑追踪。

一个网络同时支持 15+ 种部署模式。📎

怎么做

核心机制·两层 mask + DAgger 蒸馏📎

HOVER 把"多模式"折进一个网络。

靠 mask 在 episode 内固定激活子集。

统一指令空间·三类原子模式📎

  1. Kinematic Position:某些点的 3D 世界位置(头、手、脚、肘、肩)。
  2. Joint Angle:每个电机关节的角度。
  3. Root Tracking:根的线速度、高度、roll/pitch/yaw。

上半身和下半身各自独立激活模式,可多选——比如下半身能同时启用 joint-angle + root-tracking(HumanPlus 模式正是这样)。

按单选近似粗略算 3×3 = 9 大类组合。

再加 sparsity mask 在每个模式内屏蔽维度,实际 >15 种部署模式(Fig.1 列出对照)。

这覆盖了 ExBody/H2O/OmniH2O/HumanPlus 所有前作的指令空间。

两层 mask 的具体形式

  • Mode mask:选定上半身、下半身各自激活哪些原子模式(可多选;每 body region 对每个原子模式各一个 bit)。
  • Sparsity mask:在已激活模式内再随机屏蔽具体维度。

学生的指令是三件套逐元素相乘:原始任务指令、mode mask、sparsity mask。

每 bit 独立采自 Bernoulli(0.5)。

episode 开始采一次、整 episode 固定。📎

老师 vs 学生的输入差别

  • 老师(特权):所有刚体的位置、朝向、线/角速度、last action + 完整参考(绝对姿态 + 一阶差分)。
  • 学生(真机可观测):仅关节角、关节速度、base 角速度、重力向量。

stack 最近 25 步(0.5 s @ 50 Hz)+ masked 指令。📎

学生看不到全局位置和朝向——那是特权。

DAgger 蒸馏 loss:学生在仿真 rollout 到一个状态。

从学生状态反推对应的老师状态。

老师输出标准动作。

loss 是两者动作差的平方:

$$\mathcal{L} = \|\hat{a}_t - a_t\|_2^2$$

读法:右边是老师给的目标动作 â_t 和学生实际输出 a_t 之差的 L2 范数平方。

这是 DAgger 思路——on-policy 收集学生状态、老师即时标注。📎

关键设计·motion retargeting:把 AMASS 适配到 humanoid 三步。

forward kinematics 算 keypoint。

fit SMPL 到 humanoid 骨架。

gradient descent 把 AMASS 序列重定向。

得到 feasible motion 数据集 Q̂。📎这一步沿用 H2O 的 retargeting pipeline。

常见误区(先抛一个):"generalist 一定不如 specialist"——错。

HOVER 在四个模式下都接近或略胜 specialist。

统一训练数据多、正则更强,specialist 反而是过拟合。📎

深度

Oracle 的奖励设计:penalty + regularization + task 三大类,共数十项。📎

  • Penalty(硬约束 + 平滑):torque limits / DoF pos/vel/accel limits 大负权重(−2.5e2、−1.25e2 等);action rate / torque / DoF vel 平滑(−1e−4 ~ −6.25)。
  • Regularization(步态):feet air time / stumble / in-the-air / feet orientation / feet contact force / slippage / max feet height per step。
  • Task reward(tracking):DoF position / body position / body velocity / body rotation / body angular velocity / root velocity / root rotation——权重 +8 ~ +3e1。
  • 训练用 PPO + 沿用 OmniH2O 的 domain randomization📎

oracle 是满血特权 + 全 reference 的 motion imitator,能 99.3% survive(Table III)。

网络结构:策略、价值、oracle 都用 3 层 MLP [512, 256, 128](沿用 OmniH2O 结构)。📎student 与 oracle 同构便于初始化。

硬件与频率:Unitree H1,19 DoF,51.5 kg,1.8 m。📎仿真 IsaacGym,policy 50 Hz。

Q1 实验·HOVER 是否 ≥ specialist(Table III,5 seeds):📎

  • ExBody mode:HOVER 在 12 个 metric 中 8 个更优、3 个劣化、survive 持平。Eg-mpjpe 185 vs 275(降 33%)、Empjpe 63.9 vs 83.1、Eupper-j 0.148 vs 0.166 都更小;但 Eacc 反而 3.01 vs 2.63、Eroot-vel / Eroot-y 微弱劣化——并非"全面碾压"。
  • HumanPlus mode:HOVER survive 98.9% vs 98.4%;多数 tracking 误差更小,但 Eacc / Eroot-vel / Eroot-h / Eroot-y 仍劣化。
  • H2O mode / OmniH2O mode:HOVER 同样略胜。
  • Oracle survive:99.3% ± 0.203。

结论:generalist 不仅没拉胯,反而普遍优于 specialist。

Q2 实验·HOVER vs 从零训多模式 RL baseline:baseline 用同样的 mask 随机化、但用 RL 从零训(不蒸馏)。HOVER 收敛更快、性能更好——证明 oracle distillation 是关键。📎

Q3 真机部署 + 多模式切换📎

  • 20 段 standing motion 量化追踪:HOVER 在 12 个 metric 中 11 个优于 specialist。
  • 模式切换 demo:行走中从 ExBody mode 切到 H2O mode 不摔;转身倒走中从 HumanPlus mode 切到 OmniH2O mode 不摔;Vision Pro teleop 中随机 mask 掉 head / hands,仍平滑追踪。
  • 还展示 root pitch tracking、full-body kinematic tracking(动态跑步动作)。

为什么 mask 必须在 episode 内固定:mask 每步随机变会让 policy 在一个 episode 内看到截然不同的指令分布,学不出稳定的 state→action 映射。📎这是 mask 机制能 work 的前提。

局限

  1. 仍依赖 oracle imitator:oracle 本身要在仿真用大规模 AMASS + PPO 训,离了高质量 retargeted motion 数据集就不行。📎
  2. 学生输入是 25 步 history stack(无 RNN:context 有限,长程不确定性建模弱于 ANYmal-C 的 GRU
  3. 未做高动态 / parkour 类动作:实验聚焦 standing motion 和 locomotion,没展示 jump/flip/parkour(这是 BeyondMimic / Extreme Parkour 的方向)。
  4. command space 不含 task goal:HOVER 是低层 controller,上层 task policy(VLA 或 HIT-like)仍需另接。
  5. "15+ modes" 实际是组合:是 mode × sparsity 笛卡尔积,不是 15 个独立训练的 skill。论文未列全部 15+ 模式的精确清单。

研究者视角

图谱定位:HOVER 是 T07 人形遥操栈的"接口统一层"。📎

ExBody / H2O / OmniH2O / HumanPlus 每个 specialist 都是一套接口;HOVER 把它们全部覆盖、还略胜,证明 generalist 在 humanoid 控制上可行。

后续 humanoid-VLA 系(GR00T N1、π0)反复借鉴 mask 蒸馏的工程范式。

演化谱系

  • 建立在:OmniH2O(oracle 结构 + domain randomization + 25 步 proprio history)、H2O、ExBody、HumanPlus、DAgger [Ross et al. 2011]、AMASS。
  • 同期/后续:BeyondMimic(可扩展 tracking + diffusion)、Humanoid-VLA、GR00T N1(一个模型多技能 + 多模式)、ASAP(残差 sim2real)。

副产品·mask 蒸馏范式:mode mask + sparsity mask 在 episode 内随机、让单一网络学到任意 command 子集的鲁棒响应。

这个 idea 后续被 humanoid-VLA 系(GR00T N1、π0)反复借鉴。[未确认]

Open problems

  1. command space 不含 task goal:HOVER 是纯低层 controller。

如何把 task policy 和 motion controller 合一仍是开放问题。[未确认]

  1. 高动态动作:未展示 jump/flip/parkour。

BeyondMimic / Extreme Parkour 的方向。

  1. 长程 context:25 步 history 无 RNN,长程不确定性建模弱。

ANYmal-C 的 GRU 式循环结构能否迁移到 humanoid 待验证。

常见误区

"HOVER 训了 15+ 个独立 skill" —— 错。

"15+ modes" 是 mode × sparsity 笛卡尔积的组合,单一网络处理所有组合。📎

mask 机制让一个网络等价于多个 specialist,不是分别训了 15 个。

"generalist 一定不如 specialist" —— 错。

HOVER 在所有四个模式下接近或略胜 specialist。

统一训练数据多、正则更强,specialist 反而是过拟合。📎

"mask 每步随机变" —— 错。

mask 在 episode 开始采一次、整 episode 固定。

每步变会让 policy 在一个 episode 内看到截然不同的指令分布,学不出稳定映射。📎

"学生也看特权信息" —— 错。

学生只看真机可观测:$q, \dot q, \omega^\text{base}, g$ + 25 步 history + masked 指令。

看特权信息会让 distillation 失效——部署时拿不到。📎

"HOVER 是一个 VLA" —— 错。

HOVER 是低层 whole-body controller,不含 task goal、不做视觉理解。

上层 VLA(GR00T N1 / π0 / HIT-like)仍需另接。📎

检查点

Q1

HOVER 用一个网络替代 ExBody/H2O/OmniH2O/HumanPlus 四个 specialist。它靠什么机制让单一网络同时支持这么多不同的指令格式?(提示:想想指令是怎么被"裁剪"的。)

💡 参考答案

  • 核心:mask 机制。HOVER 设计一个统一指令空间,包含所有模式可能用到的维度;用 mask 决定每个 episode 内激活哪些维度。
  • 两层 mask:mode mask 决定上半身/下半身各听哪一类指令(位置、关节角、根速度);sparsity mask 在选定类别里再随机屏蔽具体维度。
  • 关键:mask 在 episode 开始采一次、整 episode 固定——让一个网络等价于多个 specialist,而不是分别训了 15+ 个。
Q2

HOVER 分两步训。Step 1 的老师看得到特权信息和完整参考,Step 2 的学生看不到。学生是怎么从老师那里学的?

💡 参考答案

  • DAgger 式蒸馏:学生在仿真里 rollout 一步,从学生当前状态反推对应的老师状态,老师在那个状态给标准动作。
  • 学生对自己的动作和老师的标准动作做对齐(loss 是两者差的平方);学生见到的指令是过 mask 的残缺指令,老师见到的是完整参考。
  • 关键区分:学生不看特权信息(部署时拿不到),靠老师当监督信号把这些特权信息的'效果'蒸出来;mask 每个 episode 随机抽,让学生学会处理任意指令子集。
Q3

用"瑞士军刀"或你自己举的类比,用大白话解释:HOVER 怎么做到"换设备不重训"?

💡 参考答案

  • 瑞士军刀类比:HOVER 之于人形控制就像瑞士军刀之于工具箱——一把刀替代一堆专用刀。
  • 映射:mask = 刀柄旋钮,决定这把刀现在当剪刀/螺丝刀/开瓶器。换设备 = 换一种 mask 配置;上层只发当前可用的指令和 mask,学生推理一次给全 19 维动作。
  • 关键:换设备不需要重训是因为统一指令空间涵盖了所有设备的指令格式;mask 让一个网络等价于一捆 specialist。
Q4

HOVER 的 mask 每个 episode 开始采一次、整 episode 固定。想想如果 mask 每步都重新随机采会怎样?

💡 参考答案

  • 后果:学生在单个 episode 内会看到截然不同的指令分布(这步全开、下步全关),学不出稳定的 state→action 映射。
  • 本质:policy 需要指令语义在一段时间内稳定,才能学到'当前指令代表什么、怎么响应';每步变让指令失去时序含义。
  • 对照:固定 mask = 这一段时间内指令格式不变,policy 才能稳定跟踪;切换发生在 episode 之间(如行走中切模式)。
Q5

HOVER 比 ExBody specialist 表现更好,这违反"专精胜过通才"的直觉。从前文找一条线索解释为什么这里反而通才更强。

💡 参考答案

  • 线索:统一训练数据更多 + 正则更强——HOVER 在所有模式上联合训练,见过的数据比单一 specialist 多。
  • 对照:specialist 反而是过拟合——只在一种指令格式上训,泛化差;HOVER 的 mask 随机化本身就是强正则。
  • 关键:'专精胜过通才'的直觉前提是数据/正则等同;HOVER 的统一训练让通才见到更多数据,反转了这个前提。

FAQ

Q1:HOVER 能直接装到我自己的机器人上吗?

不能直接装。开源的是 MarkFzp/hover 训练代码,需要 Unitree H1 + AMASS 数据库自己 retargeting + PPO 训 oracle + DAgger 蒸馏 student。🌐换机器人要重新走一遍 oracle 训练。

Q2:mode mask 和 sparsity mask 有什么区别?

mode mask 选模式类别(位置、关节角、根速度)——上半身、下半身各自选,可多选。比如下半身可同时启用 joint-angle + root-tracking(这就是 HumanPlus 模式)。

sparsity mask 在已激活模式内再屏蔽具体维度——比如上半身 position 模式下只激活"左手"或"两手+头"。

两层叠加才有 15+ 种实际部署模式。📎

Q3:为什么 generalist 能赢 specialist?

论文给出的现象是 HOVER 在每种模式下至少 7/12 metric 优于 specialist(ExBody 模式 8/12 更优)。📎

合理解释:统一训练让数据更多、正则更强,specialist 反而陷入过拟合。

"专精胜过通才"的直觉在这里反过来——前提是统一数据足够覆盖。

Q4:mask 每 bit 独立 Bernoulli(0.5) 是不是太激进?

这是论文默认设置,episode 内固定。📎

激进的好处:student 见过最随机的指令子集组合,部署鲁棒。

代价:训练早期更难收敛——这是 oracle distillation 必须的另一个原因(直接 RL 训不动)。

Q5:HOVER 和 OmniH2O 是同一组人吗?

部分重叠。HOVER 通讯作者是 Linxi Fan(NVIDIA)与 Yuke Zhu(UT Austin)。HOVER 第一作者 Tairan He 同时是 OmniH2O 的第一作者,共同作者 Xiaolong Wang(UCSD)、Zhengyi Luo 等也出现在 OmniH2O / PHC / UHC 等前作的作者列表中。

所以 HOVER 直接复用 OmniH2O 的 oracle 结构、domain randomization、25 步 proprio history——是同一条 humanoid 控制线的迭代。🌐