里程碑
机器人Unitree H1 + Inspire dexterous hands
数据集AMASS
上真机
实时
输入模态vision,language,proprioception

OmniH2O:用「 kinematic pose」当万能接口,让人形机器人随心而动

Tairan He, Zhengyi Luo, Xialin He, Wenli Xiao, Chong Zhang, Weinan Zhang, Kris Kitani, Changliu Liu, Guanya Shi(CMU + SJTU)。arXiv:2406.08858 (2024-06)。 项目页 · 开源 · humanoid teleoperationloco-manipulation

🧠 一句话心智模型:把人怎么「告诉机器人做什么」抽象成一个统一中间表示—— kinematic pose(关节位置 + 旋转)。这样同一个底层策略,可以接受 VR 头显、RGB 相机、口头指令、GPT-4o、甚至模仿学习策略的任意输入。人能做的它都能做:打球、浇水、写字、打包、和人对打拳击——而且只靠头+双手 3 个点就能驱动全身。

🎯 为什么重要:人形机器人「数据收集」与「全身协调」两大瓶颈

人形机器人要成为「通用智能的物理载体」,最大障碍有两个:

核心矛盾
数据从哪来?人形任务千变万化,固定的机械臂数据集(如 Open X-Embodiment)根本不覆盖人形全身操作。要收集真机数据,必须先有易用的遥操作接口——但传统方案要 MoCap、要外骨骼,又贵又难扩展。
上下半身必须协调:稳定站立时要做精细的手部操作。之前的工作要么只管下肢走路,要么把上下肢解耦——结果是「下肢晃来维持平衡,上肢就抖」。需要端到端的全身策略。

OmniH2O 的破局思路是:把「控制接口」和「底层控制」彻底解耦。底层策略只懂一件事——「跟踪一个 kinematic pose 目标」。上层不管你是 VR、是语言、是 GPT-4o 还是 LfD 策略,最后都翻译成 pose 目标喂给底层。这样:

  • 接口随便换,底层不动;
  • 收集数据时只用 VR,便宜可扩展;
  • 训练自主策略时,把图像→pose 的映射学会就行,底层 motor skill 复用。

💡 核心思想: kinematic pose 作「通用接口」 + 师生蒸馏

通用接口层:都翻译成 kinematic pose 目标 VR 头显(头+双手) RGB 相机 口头指令(→MDM) GPT-4o(视觉) LfD 策略(图像→pose) MoCap / 外骨骼(可选) kinematic pose 目标 3 点:头 + 左右手位置(VR 友好) OmniH2O 底层策略(不变) Student:sim-to-real 25 步历史 × 63 维本体感觉 无全局速度(不需 MoCap) Teacher:特权策略 913 维(含全局速度等) DAgger 蒸馏 → Student
图 1:OmniH2O 的三层架构。上层随便换接口,中间用 kinematic pose 做统一表示,底层是同一个师生蒸馏出的 sim-to-real 策略。

关键技术难点是:学生策略只能拿到真机能给的信息(关节角、IMU),拿不到仿真里的「全局线速度」——而线速度又是之前 H2O 工作的必需输入,只能在测试时用 MoCap 补。OmniH2O 的破局:用 25 步历史隐式估计线速度,彻底干掉 MoCap 依赖。

🛠️ 让全身策略既稳又能干的 4 个关键设计

设计具体做法为什么必要
① 数据集偏置(stable 变体)AMASS 重定向到 H1 后,为每段动作额外合成「站桩版」「蹲马步版」(固定根位置 + 下肢不动)原始 AMASS 多是走路跑步——策略学会「不停小碎步」。加 stable 变体让策略学会站稳了再操作
② 「每步最大脚高」奖励 + 课程奖励每一步最高脚位,而不是「脚空中时间」或「脚抬高度」之前的「脚空中时间」奖励会让机器人原地跺脚维持平衡;「最大脚高」让 RL 自己学到「该走时大步走、该站时别动」
③ 历史代替线速度学生策略输入:25 步历史的关节角、关节速度、根角速度、根重力方向、上次动作真机无法测全局线速度(VIO 噪声大、会跳变)。25 步历史让 MLP 隐式学到速度——摆脱 MoCap 依赖
④ 3 点目标,而非全身运动目标只用头 + 左右手 3 个点的位置(VR 原生输出)VR 头显只给这 3 个点。3 点 vs 22 点消融:成功率仅差 0.6%(94.10% vs 94.72%),但接口通用性大增

训练流程:先在仿真里用 PPO 训特权教师(913 维状态,含全局速度)→ 再用 DAgger 把教师蒸馏到学生(1665 维 = 25 步×63 历史 + 90 单步,单步含 27 维目标,见 PDF Table 6)。为什么不用 RL 直接训学生?因为输入维度太高(1665 维),RL 探索不开;DAgger 用教师的动作当监督,学得又快又稳。

🔮 直觉:为什么「历史」能代替「线速度」?
线速度 = (位置变化) / (时间)。给 25 步历史的关节位置,一个 MLP 完全可以隐式算出这个差分。更妙的是,历史还能提供趋势(加速 / 减速)和周期性(步态相位)——这些都是单帧线速度给不了的信息。所以消融里「无显式线速度 + 历史」反而比「带 MLP/GRU 神经估计器的线速度」更准(47.94mm vs MLP 估计器 50.93mm / GRU 估计器 49.75mm;VIO 版直接摔倒无法完成测试,见 PDF Table 2(a))。

📊 关键结果:真机误差砍半,接口任意切换

训练规模数字
机器人Unitree H1 + 灵巧手
训练数据AMASS 重定向后 14,000 段动作(含 stable 变体)
实机测试20 段站立动作
数据集OmniH2O-6:6 个任务,40 分钟真机遥操作演示
控制频率策略 50 Hz,PD 控制器 200 Hz

仿真动作跟踪(14k AMASS 序列,Table 1)——OmniH2O 接近特权教师上界,远超前作 H2O:

方法状态维度Sim2RealSuccess ↑Eg-mpjpe ↓ (mm)
Privileged teacher(上界)91394.77%126.51
H2O(前作)13887.52%148.13
OmniH2O(本文)166594.10%141.11

真机动作跟踪(20 段站立动作,Table 2)——误差砍半:

方法Eg-mpjpe ↓ (mm)Empjpe ↓ (mm)Evel ↓
H2O(前作)87.3353.325.87
OmniH2O(本文)47.9441.872.20
OmniH2O-w-linvel (VIO)直接摔倒,无法完成测试

真机能力展示——同一个策略,多种用法:

用法演示
VR 遥操作挥拍击球、浇水、毛笔写字、蹲下拾物、连续出拳、递送篮子
RGB 遥操作第三人称相机估算人体 pose → 同样驱动
语言指令「举左手」「T-Pose」「向前走 0.5m」→ MDM 生成动作 → OmniH2O 跟踪
GPT-4o 自主看人头戴相机画面 → 选择动作原语 → 执行(按颜色出拳、识别人体姿态打招呼)
鲁棒性人从各角度推打、踢踹 → 自维持稳定;草地、斜坡、碎石户外地形

OmniH2O-6 数据集 + LfD(Table 3,4 个任务 × 10 次平均)——数据集含 6 任务,定量评测取其中 4 个(Catch-Release / Squat / Hammer-Catch / Rock-Paper-Scissors),证明「遥操作数据 → 自主策略」可行:

方法成功率(10 次试验)MSE Loss
BC(ResNet)1/105.63E-3
DP-DDIM(扩散)7.75/101.9E-3
DP-DDPM(扩散)8/105.25E-4
关键洞察:OmniH2O 不是「把某一件事做得更好」,它的贡献是统一接口 + 可扩展数据收集。一旦把「理解要做什么」(语义智能)和「知道怎么做」(物理智能)用 kinematic pose 这座桥接通,就能把 LLM/GPT-4o、扩散动作生成、模仿学习全部接入——为人形基础模型铺路。

🌐 在领域中的位置

H2O 2024(RGB pose 遥操作,需 MoCap) OmniH2O 2024(统一 pose 接口 + 历史)⭐ Mobile ALOHA / HumanPlus / iDP3(人形 + 遥操作 + LfD) 人形基础模型(VLA + 全身控制)

OmniH2O 是「人形遥操作 + 学习」的基础设施级工作。它的「 kinematic pose 通用接口」和「无 MoCap 部署」让数据收集成本骤降;配套的 OmniH2O-6 数据集是首个开源的真机人形全身操作数据集。后续的 HumanPlus、Mobile ALOHA、iDP3 都继承了这套思路。

❓ 常见误区

OmniH2O 是一个策略还是多个策略?

底层只有一个策略 πOmniH2O——它接受 pose 目标 + 本体感觉历史,输出关节目标。上层可以接 VR、语言、GPT-4o、LfD——这些只是产生 pose 目标的不同方式,底层完全不变。这就是「通用接口」的含义。

只用头 + 双手 3 个点够吗?身体其他部位怎么办?

底层策略会从这 3 个点 + 本体感觉历史推断出全身应该怎么动。比如手举高了,腿自然要调整重心。消融显示:3 点 vs 22 点,成功率 94.10% vs 94.72%,差距极小——但 3 点让 VR 这种廉价设备也能驱动。

为什么 H2O 要 MoCap、OmniH2O 不要?

H2O 把「全局线速度」作为策略输入,而真机测线速度只能靠 MoCap。OmniH2O 把这个输入换成25 步历史,让 MLP 自己隐式估计速度——不需要任何外部设备。这是它能「in-the-wild 部署」的关键。

GPT-4o 怎么控制机器人?它又不能输出动作。

GPT-4o 不直接生成动作,而是从若干预定义的「动作原语」中选一个(比如「左拳」「右拳」「挥手」),原语本身是一段 pose 序列。选完之后由 OmniH2O 底层执行。这种设计绕开了 GPT-4o 响应慢、不能直接生成低层动作的问题。