XHugWBC:一个策略,控制一整座「人形机器人动物园」
🎯 为什么重要:每出一台新人形,就要重训两个月
过去三年,人形机器人公司像雨后春笋——Unitree G1/H1-2、Booster T1、Fourier N1、Agibot X2、Dobot Atom、EngineAI PM01、Leju Kuavo……每家的 DoF 数、关节排列、腰/臂/头有无、连杆动态都不一样。但学界主流的 whole-body control(WBC)方案长这样:
更糟的是,以往想做 cross-embodiment 的工作(MetaMorph、MorAL、URA、HOVER 等)都假设:
- 状态-动作空间已经对齐(你假设所有机器人都有同样的关节向量);
- or 形态差异很小(比如四足之间);
- or 用一个高维 descriptor 序列描述机器人,让网络去硬学。
这些假设在人形上全部崩盘:人形的 DoF 从 12(纯双腿)到 32(全自由度)跨度巨大,髋关节可能是 R-P-Y / Y-P-R / R-Y-P 不同排列,腰可能 0/1/3 DoF,手腕可能锁死……
💡 核心思想:让「训练分布」覆盖「所有可能的合理人形」
XHugWBC 的赌注是:如果训练时见过足够多「物理合法」的随机人形,真机器人就只是分布内的一个样本。但要让这个赌注成立,必须解决三个工程问题。下面是它的整体管线(论文 Fig.2):
🛠️ 三个工程关键:让「跨机器人训练」真的不崩
| 设计 | 心智 | 为什么必要 |
|---|---|---|
| ① 物理一致的化身工厂 | 用伪惯性矩阵 $J=LL^\top$(Cholesky)参数化每个刚体,扰动在无约束 $\mathbb{R}^{10}$ 中进行;$J'=L'L'^\top$ 永远正定 | naive 随机化会让惯性矩阵失去物理意义(质量分布违反三角不等式),仿真器数值爆炸、策略学到的动态根本不可能出现在真实硬件上——sim-to-real 直接失败 |
| ② 32 维语义全局关节地址 | 定义 $N_{\max}=32$ 个有语义的「插槽」(左髋/右肩/腰yaw/...),每台机器人的关节按角色填入对应位置,无此关节则填 0;附带一个二值「可控」指示 $I^{(t)}$ | 策略输入维度恒定为 32,与具体机器人解耦;同时保留了「这个关节是什么角色」的语义信息(不是 descriptor 序列那样让网络硬学) |
| ③ 邻接矩阵 + Hybrid-mask Transformer | 从机器人 URDF 抽出 kinematic tree(parallel linkage 折叠掉),得到 $N_{\max}\times N_{\max}$ 邻接矩阵 $A$;Transformer 第一层按 $A$ 做掩码注意力,后续层解除 mask 全局交换 | 让网络先尊重局部拓扑(左肘只跟左肩/左腕亲近)再全局协调;比纯 MLP(忽略结构)和纯 GCN(丢失全局)都好 |
朴素做法:把每个 link 当盒子,独立随机化 mass / 长宽高。但这会产生「重心在体外」「转动惯量为负」这种物理不可能的刚体。仿真器(Isaac Gym)会硬撑着跑下去,但策略学到的「踢腿时机」是基于这些垃圾动态的——一到真机就翻车。XHugWBC 用 Cholesky 参数化保证 $J\succ 0$,所有化身都物理合法,这是它能在 7 台真机上零样本存活的地基。
📊 结果:12 仿真 + 7 真机,100% 存活
| 维度 | 数字(原文溯源) |
|---|---|
| 仿真覆盖 | 12 台不同人形(含训练时未见过的机器人) |
| 真机覆盖 | 7 台真机人形:Booster T1, Fourier N1, Unitree G1 (23/29 DoF 两版), Agibot X2, Dobot Atom, Unitree H1-2 |
| 零样本存活率 | 所有评估机器人 100% survival(Tab.1, Tab.2) |
| Generalist vs Specialist 回报 | generalist ≈ 85% specialist;generalist 微调后 +10% over specialist(§4.2) |
| 关键追踪误差(generalist) | $E_{vx}$=0.084 m/s, $E_{vy}$=0.116 m/s, $E_\omega$=0.160 rad/s, $E_h$=0.044 m(Tab.1) |
跨机器人 baseline 对比(Fig.5 zero-shot survival):
| 方法 | 表现 |
|---|---|
| XHugWBC(本文) | 所有测试机器人接近 100% 存活 |
| MetaMorph(图 + MLP) | 多数机器人显著下降——高维 descriptor 难学 |
| MorAL(模块化 MLP + 形态输入) | 大部分机器人性能掉得更狠 |
| Naive Random(盒子近似 + 随机化) | 只在小范围内(质量分布相似的)能迁移 |
Sim-to-real gap(vx=0.6 m/s 直行 10s 的相对误差差 |E_real - E_sim|/E_sim,Tab.2):
| 机器人 | 仿真 (m/s) | 真机 (m/s) | 相对 Gap |
|---|---|---|---|
| Booster T1 | 0.052 | 0.069 | 32.69% |
| Fourier N1 | 0.064 | 0.093 | 45.31% |
| Unitree G1 (23 DoF) | 0.051 | 0.065 | 27.45%(最小) |
| Unitree G1 (29 DoF) | 0.047 | 0.062 | 31.91% |
| Agibot X2 | 0.061 | 0.098 | 60.61% |
| Dobot Atom | 0.063 | 0.131 | 107.93%(最大) |
| Unitree H1-2 | 0.065 | 0.117 | 80.00% |
🌐 在领域中的位置
XHugWBC 站在「通用人形控制器」路线的当前 SOTA:第一个在 7 台真机上证明零样本通用的 generalist WBC。它与 BFM(行为基础模型)思路对偶——BFM 跨任务共享一个底座,XHugWBC 跨硬件共享一个底座。两者结合(一个跨任务、跨机器人的「超人形基础模型」)是显然的下一步。
❓ 常见误区
85% 不如 specialist,那为什么还要用 generalist?
两条理由:(1) 零样本 85% 已经能开箱即用,避免新机器人数月训练;(2) 用 generalist 做初始化微调,收敛比 from-scratch 快得多,最终还能超过 specialist 10%——因为 generalist 在训练分布里学到了跨形态的通用先验,相当于隐式做了 multi-task 正则。
为什么不直接用 MetaMorph 的图 + descriptor?
MetaMorph 把 link 惯性、joint range 等原始数字塞给网络,希望它自己学。但人形形态差异巨大,descriptor 维度高、信噪比低,网络学不出有用表示。XHugWBC 反过来——用图结构(邻接矩阵)显式告诉网络拓扑,而把动态参数留给随机化覆盖。这是「先验 + 数据」的分工。
32 个全局 joint 槽位够吗?
对人形够。模板定义覆盖:双腿(髋3 + 膝1 + 踝2 ×2 = 12)+ 腰(roll/yaw/pitch 3)+ 双臂(肩3 + 肘1 + 腕3 ×2 = 14)+ 头(3)= 32。最少 12(仅双腿)、最多 32(全自由度)都能映射进来。如果将来要做手指/灵巧手,得扩槽位。
teleop 那部分是真的「跨任务」吗?
不是。论文里的 loco-manipulation(捡玩具、开门,Fig.7)是上身外部控制 + 下身 XHugWBC:用一个二值指示 $I^{(t)}$ 切换「上身听 teleop / 上身归 WBC」,下身始终维持平衡。这是「上身长任务、下身通用 WBC」的组合,不是 XHugWBC 本身做了长程任务规划。
它能直接用在双足之外(四足、轮式)吗?
不能。模板是「人形」先验:双足 + 双臂 + 头。如果换四足, kinematic tree 完全不同,全局地址定义得重做。这是一个「人形动物园」内的通用模型,不是「所有移动机器人」的通用模型。