Q1:能直接装到我自己的机器人上吗?
不能直接装。开源的是 LeCAR-LAB/human2humanoid 的训练代码(retargeting + privileged teacher + DAgger student),需要 Unitree H1 + Inspire 灵巧手 + VR 头显,加上 AMASS 数据库自己 retargeting 训一遍。🌐真机 policy 权重只部分开源。
论文:Tairan He†, Zhengyi Luo†, Xialin He†(†共一), Wenli Xiao, Chong Zhang, Weinan Zhang, Kris Kitani, Changliu Liu, Guanya Shi et al. OmniH2O: Universal and Dexterous Human-to-Humanoid Whole-Body Teleoperation and Learning. Carnegie Mellon University(LeCAR Lab)+ Shanghai Jiao Tong University。arXiv:2406.08858, 2024;正式收录 ICML 2025 (PMLR v270 he25b)。🌐
让人用动作实时遥控人形机器人。秘诀是规定一套"姿态接口",无论什么输入都先翻译成它。📎像 USB-C 的接口分层思想,把异构输入归一到一层几何姿态。注意:它不含力/触觉,且只跟头+双手 3 个点。这里"姿态"指每个身体部位的位置和朝向。
要解决的问题:让人用全身动作远程操控人形机器人。还要能从遥操数据学自主技能。📎
老办法的痛点:2024 年中之前的接口各做各的。有的只抓摄像头看到的躯干。有的得穿动捕服。有的只能控单只手。📎每种输入对应一套目标空间,数据跨不了机器人。
转身一·统一姿态接口:规定一个统一的中间表示——所有刚体的位置和朝向。它叫"运动学姿态"。📎无论你戴头显、用摄像头还是穿外骨骼,都先把人的动作翻译到这套姿态。一份训练数据从此能跨硬件复用。
转身二·老师教学生:先在仿真里训一个"老师"策略。老师有特权——能看到每个刚体的真实速度和参数,所以学得快。再用老师"教"出一个能上真机的"学生"。教法是学生走到哪、老师就在那里给标准答案,学生跟着对齐。
这一步真正难的是训老师。老师要靠二十多项精心设计的奖励才训到 94.77%。蒸馏本身反而简单。关键是有一个已解的老师,给逐状态稠密标签。
还能串起来:遥操轨迹还能直接拿来训练自主技能。一份接口、一条"采数据 → 学技能"的闭环。
一句话类比:OmniH2O 之于人形遥操,像 USB-C 的接口分层。把异构输入归一到一层几何姿态。但目前不含力/触觉,且只跟头+双手 3 个点。
核心机制·两个策略:训一个老师、一个学生。📎老师在仿真里有特权信息(每个刚体的真实速度、动力学参数)。它用 PPO 训到 94.77% 成功率。学生部署到真机没这些特权,靠"看老师怎么做"学。蒸馏几乎无损——student 94.10% vs teacher 94.77%。📎
关键设计·特权老师 + DAgger 蒸馏:student 能到 94% 的前提是先有一个用特权信息训到 94.77% 的老师。老师在仿真里看得到每个刚体的真实速度和动力学参数。它配 20+ 项 reward 工程(见下「Reward 分三类」)才训成。这是这页真正难、真正贵的部分。有了已解的老师,蒸馏怎么交付就是 DAgger。📎学生不在固定数据集上学,在仿真里不停 rollout。学生走到哪、老师就在那里给"标准答案"。具体做法是把学生状态反推回特权状态、让老师给出参考动作。loss 是两者动作的平方距离(DAgger loss):
$$\mathcal{L}=\|a^{\text{priv}}_t - a_t\|_2^2$$
读法:等号右边是"老师给的目标动作"和"学生实际输出"之差的 L2 范数平方。这是 DAgger 思路——on-policy 收集学生失败状态、再让老师标注。它不是固定数据集的行为克隆。同结构 student 没有老师监督、直接吃稀疏 RL reward 只能到 47%。📎⚠️ 因果别讲反:47%→94% 的跃升主要归功于有一个已解的特权老师给逐状态稠密标签。DAgger 只是标签投递方式。换 BC、换 GAIL 之类只要能从已解老师取标签,都会拿到接近的数。光有 DAgger 形式、没特权老师,根本无从蒸馏。
关键设计·只跟 3 个点:学生跟踪的不是全关节角,而是头+两手 3 个点的位置。📎消融:3 点、8 点、22 点成功率都在 94% 附近。3 点(VR 可得)几乎无损。
跺脚病怎么治的:前作 H2O 用"脚空中时间"做奖励,机器人就原地跺脚刷分。📎OmniH2O 改用"每步最大脚高度"做奖励。把每步脚抬起超过 25 cm 的部分作为正向信号、权重 1000。这鼓励"要么静止、要么大步走"。配合课程式 penalty 调整:episode 短时减 penalty 让 RL 探索,长时加 penalty 收敛到稳定。
常见误区(先抛一个):觉得 student 一定丢精度——其实几乎追平 teacher。决定 student 成败的不是输入少了多少。关键是有没有一个训好的特权老师给逐状态稠密标签。DAgger 只是交付方式。
老师和学生具体看什么(数字来自 Appendix Table 1/2):
| Policy | 状态维 | Sim2Real | Succ ↑ | Eg-MPJPE (mm) ↓ | Empjpe (mm) ↓ |
|---|---|---|---|---|---|
| Privileged teacher | 913 | ✗ | 94.77% | 126.51 | 70.68 |
| H2O | 138 | ✓ | 87.52% | 148.13 | 81.06 |
| OmniH2O | 1665 | ✓ | 94.10% | 141.11 | 77.82 |
📎。Student 状态维 = 25 步历史 × 63 + 当前 90 = 1665;teacher 状态维 = 913。注:PDF Fig.3 caption 写「26 history step × 63」(含当前帧),按 25 历史 + 1 当前理解;1665 = 25×63 + 90。
问题形式化与接口定义:任务形式化为 goal-conditioned RL 的 MDP $\mathcal{M}=\langle \mathcal{S},\mathcal{A},\mathcal{T},R,\gamma\rangle$,状态 $s_t=(sp_t, sg_t)$(proprioception + goal),动作 $a_t$ 是 PD 控制器目标关节角,用 PPO 最大化 $\mathbb{E}\sum_{t=1}^{T}\gamma^{t-1}r_t$。📎关键决定:显式定义硬件无关的 kinematic pose 作为目标空间
$$q_t \triangleq (\theta_t, p_t),\qquad \dot{q}_t \triangleq (\omega_t, v_t)$$
记号约定:$\hat{\cdot}$(戴帽)= VR/pose generator 输入空间,$\bar{\cdot}$(戴横)= MoCap 数据集真值,无修饰 = 仿真或真机值。这一层处在异构输入(视觉/VR/外骨骼)与机器人具体动力学之间——两边都能稳定映射到它。
Retargeting + 可行性过滤:训练数据来自 AMASS(约 14K 序列),按 H2O 的 retargeting pipeline 映射到 humanoid 骨架。📎H2O 已知"不停小碎步无法静止站立"缺陷,OmniH2O 用「standing / squatting」增广解决——对每个序列额外生成「固定下半身+根位置」的稳定变体,让训练分布含足够静止/蹲姿(Appendix H 消融确认)。
Reward 分三类(共 20+ 项,Appendix E/F):
Reward curriculum(论文 Sec. E):对每个 reward 项 $r_{t,i}$ 定义 scale $s_{t,i}=\min(s_{\text{current}}, 1)$ 当 $r_{t,i}\ge0$,否则 $s_{t,i}=s_{\text{current}}$;$s_{\text{current}}$ 当平均 episode 长度 $<40$ 时乘 0.9999,$>120$ 时乘 1.0001,上界 1。本质:episode 短时减弱 penalty 让 RL 探索,长时增强 penalty 收敛到稳定行为。
Domain Randomization(Appendix Table 16):摩擦 $U(0.2,1.1)$、base CoM offset $U(-0.1,0.1)$ m、link mass $U(0.7,1.3)\times$ 默认、PD gain $U(0.75,1.25)\times$ 默认、torque RFI $0.1\times$ limit、control delay $U(20,60)$ ms、motion reference offset ±2 cm;外部扰动每 5 s 推 1 m/s;地形 mix(flat/rough/low obstacles)。
关键消融(Table 1/2):
真机结果(20 个站立序列):OmniH2O Eg-MPJPE 47.94 mm(H2O 87.33 mm),Empjpe 41.87 mm(H2O 53.32 mm)——约 H2O 的一半误差。📎
OmniH2O-6 数据集:VR teleop 采集 6 任务(Catch-Release / Squat / Rock-Paper-Scissors / Hammer-Catch / Boxing / Basket-Pick-Place),30 Hz 同步 RGBD 头戴相机 + 头/手 motion goal(相对根坐标系)+ 电机关节目标。简单任务约 5 分钟数据、复杂任务约 10 分钟(合计约 40 分钟真机示教)即可训 LfD 自主策略。
灵巧手控制:与全身 policy 解耦。VR 估手姿态 → 直接 IK 解算关节目标 → 喂现成的低层 hand controller。不进 RL(手自由度太多,PD 控制已够),但接口仍属 kinematic pose 范畴,可替换为 MoCap glove 或 RGB 估手。📎
局限:
图谱定位:OmniH2O 是 T07 人形遥操栈的枢纽节点。📎它把 2024 年中全身遥操从"每篇论文一个 ad-hoc 接口"推向"一个接口接所有输入",是 HOVER、Bunny-VisionPro、Open-TeleVision、HumanPlus 共享前提。更关键的是它跑通了"teleop 采集 → 自主技能学习"闭环——teleop 轨迹直接作为 IL 数据、用同一 kinematic pose 表示训练自主技能,首次在全身+灵巧手级别跑通,这正是 GR00T N1、Helix 依赖的数据管道。
演化谱系(pivot / 后继):
副产品·人形 RL 工程包:max-feet-height-per-step reward + reward curriculum + DAgger student-teacher,这套 trick 被后续 humanoid RL 工作大量复用。[未确认]
Open problems:
"DAgger 蒸馏就是行为克隆" —— 错。行为克隆在固定数据集上学;DAgger 是 on-policy:student 在仿真里 rollout 到哪、teacher 就在那里标注,重点收集 student 的失败状态。📎
DAgger 是"学生边走边问老师",不是"学生刷老师留下的题库"。
"全身 teleop 一定要 MoCap 才能稳" —— 错。OmniH2O student 只跟 3 个 VR 点,且不显式喂全局线速度——去掉线速度后 real 反而更稳(VIO/MLP 估计噪声大)。📎
让 policy 从 25 步历史里隐式估速度,比显式估计更稳。
"student 一定丢精度 vs teacher" —— 错。这里 student 94.10% 几乎追平 teacher 94.77%,远超 H2O 87.52%。📎
决定精度的是有没有一个训好的特权老师给逐状态稠密标签(DAgger 只是交付方式、不是主角),不是"输入少了多少"。
"历史步数越多越好" —— 不一定。5/25/50 步成功率都在 94% 附近,0 步 93.8%(仅低 0.3 个百分点,真正下降的是运动质量 MPJPE)。📎同结构没老师、直接用 RL 训 student 反而崩到 47%——这不是"历史长度"问题,是"没有特权老师监督"问题。
历史长度有 sweet spot;决定成败的是有没有特权老师,不是历史窗口。
"OmniH2O 是 NVIDIA / UCSD 的工作" —— 不准确。它是 CMU(LeCAR Lab)牵头、CMU + SJTU 合作的产物,通讯作者是 CMU 的 Guanya Shi,3 位共一(Tairan He / Zhengyi Luo / Xialin He)均挂 CMU。🌐
纯学术机构合作,不是某工业实验室主导。
用 USB-C 或自己的类比,用自己的话解释:OmniH2O 的"姿态接口"为什么能让一份训练数据跨硬件复用?
💡 参考答案
OmniH2O 里的"老师"和"学生"分别是什么?为什么不能直接训一个能上真机的学生,要先训一个有特权的老师?
💡 参考答案
把 student 从 47% 训到 94%,真正功劳最大的是哪一步?是 DAgger 吗?
💡 参考答案
USB-C 类比哪里和 OmniH2O 不像?
💡 参考答案
OmniH2O 把遥操和学自主技能串成一条线,为什么这件事重要?
💡 参考答案
不能直接装。开源的是 LeCAR-LAB/human2humanoid 的训练代码(retargeting + privileged teacher + DAgger student),需要 Unitree H1 + Inspire 灵巧手 + VR 头显,加上 AMASS 数据库自己 retargeting 训一遍。🌐真机 policy 权重只部分开源。
手的自由度太多(Inspire 每只手约 12 DoF,双手约 24 DoF),塞进全身 RL 会让训练不稳。VR 估手姿态 → 直接 IK 解算 → 喂现成 hand controller,PD 控制已经够用。接口仍属 kinematic pose,未来可以替换为 MoCap glove 或 RGB 估手。📎
行为克隆(BC):先有一批固定数据集(专家轨迹),学生只在那上面学,学生遇到的"没见过"的状态没法补救。DAgger:学生 on-policy 在仿真里 rollout,每次学生走到一个新状态,老师就给那个状态标注正确动作。重点是不断收集学生的"失败状态"。OmniH2O 的 DAgger 还多一步——把 student 的非特权状态反推回 teacher 的特权状态,让 teacher 给标注。
够。消融显示 3 / 8 / 22 点成功率都在 94% 附近。📎全身关节冗余由 policy 从 25 步历史里隐式补全。但极端姿态(比如舞蹈、杂技)可能映射出非自然全身动作——这是 3 点接口的代价。
论文未明示 RL 训练所用 GPU 型号(待核)。📎可以确定的是:AMASS 14K 序列的 retargeting + feasibility filter 是 CPU/工程密集,是非显存瓶颈——别把"RL 训练单卡可跑"误读成"整条流水线轻量"。