Q1:HOVER 能直接装到我自己的机器人上吗?
不能直接装。开源的是 MarkFzp/hover 训练代码,需要 Unitree H1 + AMASS 数据库自己 retargeting + PPO 训 oracle + DAgger 蒸馏 student。🌐换机器人要重新走一遍 oracle 训练。
论文: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 内固定激活子集。
统一指令空间·三类原子模式:📎
上半身和下半身各自独立激活模式,可多选——比如下半身能同时启用 joint-angle + root-tracking(HumanPlus 模式正是这样)。
按单选近似粗略算 3×3 = 9 大类组合。
再加 sparsity mask 在每个模式内屏蔽维度,实际 >15 种部署模式(Fig.1 列出对照)。
这覆盖了 ExBody/H2O/OmniH2O/HumanPlus 所有前作的指令空间。
两层 mask 的具体形式:
学生的指令是三件套逐元素相乘:原始任务指令、mode mask、sparsity mask。
每 bit 独立采自 Bernoulli(0.5)。
episode 开始采一次、整 episode 固定。📎
老师 vs 学生的输入差别:
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 三大类,共数十项。📎
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):📎
结论:generalist 不仅没拉胯,反而普遍优于 specialist。
Q2 实验·HOVER vs 从零训多模式 RL baseline:baseline 用同样的 mask 随机化、但用 RL 从零训(不蒸馏)。HOVER 收敛更快、性能更好——证明 oracle distillation 是关键。📎
Q3 真机部署 + 多模式切换:📎
为什么 mask 必须在 episode 内固定:mask 每步随机变会让 policy 在一个 episode 内看到截然不同的指令分布,学不出稳定的 state→action 映射。📎这是 mask 机制能 work 的前提。
局限:
图谱定位:HOVER 是 T07 人形遥操栈的"接口统一层"。📎
ExBody / H2O / OmniH2O / HumanPlus 每个 specialist 都是一套接口;HOVER 把它们全部覆盖、还略胜,证明 generalist 在 humanoid 控制上可行。
后续 humanoid-VLA 系(GR00T N1、π0)反复借鉴 mask 蒸馏的工程范式。
演化谱系:
副产品·mask 蒸馏范式:mode mask + sparsity mask 在 episode 内随机、让单一网络学到任意 command 子集的鲁棒响应。
这个 idea 后续被 humanoid-VLA 系(GR00T N1、π0)反复借鉴。[未确认]
Open problems:
如何把 task policy 和 motion controller 合一仍是开放问题。[未确认]
BeyondMimic / Extreme Parkour 的方向。
ANYmal-C 的 GRU 式循环结构能否迁移到 humanoid 待验证。
"HOVER 训了 15+ 个独立 skill" —— 错。
"15+ modes" 是 mode × sparsity 笛卡尔积的组合,单一网络处理所有组合。📎
mask 机制让一个网络等价于多个 specialist,不是分别训了 15 个。
"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)仍需另接。📎
HOVER 用一个网络替代 ExBody/H2O/OmniH2O/HumanPlus 四个 specialist。它靠什么机制让单一网络同时支持这么多不同的指令格式?(提示:想想指令是怎么被"裁剪"的。)
💡 参考答案
HOVER 分两步训。Step 1 的老师看得到特权信息和完整参考,Step 2 的学生看不到。学生是怎么从老师那里学的?
💡 参考答案
用"瑞士军刀"或你自己举的类比,用大白话解释:HOVER 怎么做到"换设备不重训"?
💡 参考答案
HOVER 的 mask 每个 episode 开始采一次、整 episode 固定。想想如果 mask 每步都重新随机采会怎样?
💡 参考答案
HOVER 比 ExBody specialist 表现更好,这违反"专精胜过通才"的直觉。从前文找一条线索解释为什么这里反而通才更强。
💡 参考答案
不能直接装。开源的是 MarkFzp/hover 训练代码,需要 Unitree H1 + AMASS 数据库自己 retargeting + PPO 训 oracle + DAgger 蒸馏 student。🌐换机器人要重新走一遍 oracle 训练。
mode mask 选模式类别(位置、关节角、根速度)——上半身、下半身各自选,可多选。比如下半身可同时启用 joint-angle + root-tracking(这就是 HumanPlus 模式)。
sparsity mask 在已激活模式内再屏蔽具体维度——比如上半身 position 模式下只激活"左手"或"两手+头"。
两层叠加才有 15+ 种实际部署模式。📎
论文给出的现象是 HOVER 在每种模式下至少 7/12 metric 优于 specialist(ExBody 模式 8/12 更优)。📎
合理解释:统一训练让数据更多、正则更强,specialist 反而陷入过拟合。
"专精胜过通才"的直觉在这里反过来——前提是统一数据足够覆盖。
这是论文默认设置,episode 内固定。📎
激进的好处:student 见过最随机的指令子集组合,部署鲁棒。
代价:训练早期更难收敛——这是 oracle distillation 必须的另一个原因(直接 RL 训不动)。
部分重叠。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 控制线的迭代。🌐