OmniH2O:用「 kinematic pose」当万能接口,让人形机器人随心而动
🎯 为什么重要:人形机器人「数据收集」与「全身协调」两大瓶颈
人形机器人要成为「通用智能的物理载体」,最大障碍有两个:
① 数据从哪来?人形任务千变万化,固定的机械臂数据集(如 Open X-Embodiment)根本不覆盖人形全身操作。要收集真机数据,必须先有易用的遥操作接口——但传统方案要 MoCap、要外骨骼,又贵又难扩展。
② 上下半身必须协调:稳定站立时要做精细的手部操作。之前的工作要么只管下肢走路,要么把上下肢解耦——结果是「下肢晃来维持平衡,上肢就抖」。需要端到端的全身策略。
OmniH2O 的破局思路是:把「控制接口」和「底层控制」彻底解耦。底层策略只懂一件事——「跟踪一个 kinematic pose 目标」。上层不管你是 VR、是语言、是 GPT-4o 还是 LfD 策略,最后都翻译成 pose 目标喂给底层。这样:
- 接口随便换,底层不动;
- 收集数据时只用 VR,便宜可扩展;
- 训练自主策略时,把图像→pose 的映射学会就行,底层 motor skill 复用。
💡 核心思想: kinematic pose 作「通用接口」 + 师生蒸馏
关键技术难点是:学生策略只能拿到真机能给的信息(关节角、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:
| 方法 | 状态维度 | Sim2Real | Success ↑ | Eg-mpjpe ↓ (mm) |
|---|---|---|---|---|
| Privileged teacher(上界) | 913 | ✗ | 94.77% | 126.51 |
| H2O(前作) | 138 | ✓ | 87.52% | 148.13 |
| OmniH2O(本文) | 1665 | ✓ | 94.10% | 141.11 |
真机动作跟踪(20 段站立动作,Table 2)——误差砍半:
| 方法 | Eg-mpjpe ↓ (mm) | Empjpe ↓ (mm) | Evel ↓ |
|---|---|---|---|
| H2O(前作) | 87.33 | 53.32 | 5.87 |
| OmniH2O(本文) | 47.94 | 41.87 | 2.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/10 | 5.63E-3 |
| DP-DDIM(扩散) | 7.75/10 | 1.9E-3 |
| DP-DDPM(扩散) | 8/10 | 5.25E-4 |
🌐 在领域中的位置
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 响应慢、不能直接生成低层动作的问题。