SONIC: Supersizing Motion Tracking for Natural Humanoid Whole-Body Control
核心问题:人形控制为什么难以扩展?
SONIC 的论点:运动追踪(motion tracking)是人形控制的可扩展基础任务—— 它提供逐帧监督信号、可复用人类动作捕捉数据、天然与奖励工程解耦, 因此能像 LLM 一样随数据/模型/算力增长而稳定提升。
现有人形控制器的扩展性困境:每个新行为都需要手工设计奖励函数(locomotion 的奖励对 dancing 毫无用处), 对抗性模仿方法(AMP/ASE)在数据多样性增加时判别器易崩溃,导致 scaling 无法带来持续提升。
运动追踪的突破口:人类动作捕捉数据集(walking / running / dancing / fighting / tool-use …) 已经在数十年的研究中积累到规模——每帧都有明确的目标姿态,监督信号天然稠密, 模型收到的是"你现在离目标姿态有多远"的精确梯度,不需要稀疏奖励 shaping。
| 论文全称 | Supersizing mOtion tracking for Natural humanold Control(SONIC) |
| 数据规模 | 700 小时人类动作捕捉 → 过滤后 611 小时,100M+ 帧(50 fps),33 大类运动 |
| 模型规模 | 1.2M → 42M 参数 |
| 计算规模 | 2K → 21K GPU 小时(128 GPU 训练) |
| 追踪结果 | 99.6% 成功率(test-content OOD),99.2% sim-to-real 成功率 |
| 项目页 | nvlabs.github.io/GEAR-SONIC/ |
SONIC 是 MotionWAM 的底层运动引擎。MotionWAM 的 Motion DiT 预测的"全身运动 latent $m_t$", 其中的离散部分 $k_t$ 就是 SONIC 的 universal token;SONIC 负责把这个 token 解码成 29-DoF 关节命令。 MotionWAM = 上层感知-推理(Video DiT + Motion DiT)+ 下层运动执行(SONIC)。
通用控制策略:多编码器 + FSQ 量化器 + 双解码器
SONIC 的核心设计是一个通用控制策略(Universal Control Policy), 通过多专用编码器将异构的运动命令来源(机器人/人类/混合)统一映射到同一个量化 token, 再由单一策略解码为关节命令。整个系统架构如下:
2.1 状态空间
策略在每时刻接收两类输入:
| $s_t^p$(本体感受) | 关节角度 $q_t$、关节速度 $\dot{q}_t$、根节角速度 $\omega_t$、重力向量 $g_t$、上一步动作 $a_{t-1}$;拼接 10 步历史作为时序上下文 |
| $s_t^g$(运动命令) | 三选一:机器人运动 $g_r$(joint positions + velocities)/ 人类运动 $g_h$(3D SMPL 关节)/ 混合运动 $g_m$(上身 keypoint + 下身机器人运动) |
所有量均在机器人局部坐标系下表示,采用 6D 旋转表示(Zhou et al. 2019)确保旋转不变性。
2.2 三种专用编码器
三种编码器均为 MLP,将各自输入映射到共享 latent 空间——这是跨模态对齐的关键。
2.3 双解码器
FSQ Universal Token:通用运动隐变量
SONIC 引入有限标量量化(Finite Scalar Quantization, FSQ)把连续 latent 压成一个 universal token $\mathbf{z}$,让来自不同输入模态(机器人 / 人类 / 混合)的运动命令 在同一个离散 token 空间里统一表达,单一策略用这个 token 驱动全身。
3.1 为什么选 FSQ 不选 VQ-VAE?
| VQ-VAE 的问题 | Codebook Collapse:大量 codebook 槽位空置不用,只有少数几个被激活。 需要额外的 commitment loss + EMA codebook 更新来缓解,训练不稳定, 且这些辅助损失与 PPO 优化不兼容(梯度干扰)。 |
| FSQ 的优势 | 没有独立 codebook,直接用有界 tanh + 四舍五入把连续值卡到离散档位。 straight-through 梯度估计天然兼容 PPO,无需额外 EMA 或 commitment loss, 训练全程稳定,在所有模型规模下未出现不稳定。 |
3.2 Token 的结构
| Token 数量 | 2 个 token(每个独立量化) |
| 每 token 维度 | $D_z$(论文验证了多种配置) |
| 每维度档位 | $L_z$ 档(MotionWAM 中使用 32 档) |
| 取值范围 | $[-1, 1]$ 均匀分 $L_z$ 档:$\{-1, -\frac{L_z-2}{L_z}, \ldots, 1\}$ |
| 梯度 | Straight-through estimation(前向 round,反向直接传梯度) |
把连续的声音频率量化为 12 个半音——FSQ 就在做类似的事:把连续的全身运动意图量化成 有限个离散"运动档位"。瓶颈化(只准 $L_z$ 档)是有意为之: 逼模型把全身运动压成紧凑、跨模态可复用的表示。 实验证明,预测 universal token 比直接预测 SMPL 姿态 产生更平滑、更安全的机器人行为(后者会有抖动和方向控制问题)。
3.3 训练目标(联合四项损失)
- $\mathcal{L}_{\text{ppo}}$
- 标准 PPO 强化学习损失。奖励 = 追踪误差(关节位置/速度/方向)+ 末端执行器位置 + 反抖动惩罚 + 足部加速度惩罚(促进平滑落地)。
- $\mathcal{L}_{\text{recon}} = \sum_{i \in \{r,h,m\}} \|\mathcal{D}_r(\mathbf{z}_i) - g_r\|^2$
- 重建损失:三种编码器路径产生的 token 都能被 $\mathcal{D}_r$ 重建回机器人运动。当输入是人类运动 $g_h$ 时,这就是 retargeting loss——让模型学会"把人类动作翻译成机器人可执行的版本"。
- $\mathcal{L}_{\text{token}} = \|z_r - z_h\|^2 + \|z_r - z_m\|^2$
- Token 对齐损失:强制三种编码器对同一底层运动产生相似 token,确保统一 token 空间真的统一。
- $\mathcal{L}_{\text{cycle}} = \|\mathcal{E}_r(\mathcal{D}_r(z_h)) - z_r\|^2$
- 循环一致性:从人类 token $z_h$ 重建出机器人运动,再重新编码成机器人 token,应该等于原始 $z_r$。强化跨模态翻译的质量。
运动追踪需要平衡稳定性(不摔倒)和精度(跟上参考姿态),单纯行为克隆无法保证物理可行性。 PPO 在物理仿真(Isaac Lab)中训练,自然获得稳定步态和接触动力学, 再用辅助损失(recon/token/cycle)约束 latent space。 PPO 梯度穿过 FSQ 的 straight-through estimator 更新编码器和量化器, 四项损失联合优化,端到端一个训练循环完成。
可扩展性:三轴 Scaling 曲线
SONIC 在三个维度上系统验证了 scaling law(Fig. 2):数据规模、模型规模、算力规模。 所有测试集均隐藏于训练,用追踪成功率(Success Rate)和 MPJPE-L(关节位置误差)衡量。
与基线的对比
test-content(OOD)成功率;SONIC MPJPE-L = 23.2mm,BeyondMimic = 39.1mm(41% 降低)
Sim-to-Real 迁移
| 测试条件 | 123 条多样运动序列,真实 Unitree G1 |
| 真实 vs 仿真成功率 | 99.2% (real) vs 100.0% (sim) |
| MPJPE-L 上身 | 22.2mm (real) vs 21.8mm (sim),gap 极小 |
| MPJPE-L 足部 | 53.7mm (real) vs 29.0mm (sim),足部接触动力学差异最大 |
运动追踪的监督信号是稠密逐帧的——每一帧都告诉模型"你离目标姿态差了多少"。 对比 AMP/ASE(判别器随数据增加易崩溃),或任务特定奖励工程(每个行为需要重设计), 运动追踪的学习信号始终有效,所以 scaling 带来持续提升。 这也是 LLM 用 next-token prediction 能 scale 的同等道理:稠密监督 + 明确标签 = 可扩展任务。
下游应用:一个 Token Space 支撑所有接口
Universal token 的威力在于:不修改策略权重,只换上游的运动生成模块, 同一个 SONIC 就能支撑完全不同的控制接口。
① 互动导航控制(Kinematic Planner)
实时生成运动规划,支持 0–6 m/s 速度、360° 方向、多种风格(步行/奔跑/醉步/受伤步态)。 Planner 推理 <5ms(笔记本),每 100ms 重规划一次,保证高响应性。 还支持蹲下(骨盆高度 0.3–0.8m)、跪姿、匍匐(肘膝爬行,全向 0–0.5 m/s)。
② VR 全身遥操作(Whole-Body Interface)
PICO 头显 + 两个踝关节 tracker + 手柄 → SMPL 全身姿态 → 人类编码器 $\mathcal{E}_h$ → token。 覆盖完整身体动力学(侧展、前伸、单腿跪、劈叉、功夫步……)。 同时也支持"三点遥操"(只有头 + 双腕 keypoint,下身由 Planner 自动生成)。
③ 视频遥操作(Video Teleoperation)
单目摄像头实时估计人体姿态(≥60 FPS),通过 $\mathcal{E}_h$ 转为 token 驱动机器人。 无需专用 MoCap 硬件,高保真姿态和时序的精确模仿。
④ 文字/音乐控制(Multi-Modal,GEM 生成器)
GEM(Generative Embodied Motion)从自然语言或音乐生成目标运动, SONIC 追踪执行。"Acts like a monkey" / "Punches with his left arm" / 根据节拍和旋律跳舞——无需重新训练控制器,只需换运动生成模块。
⑤ VLA 驱动 Loco-Manipulation(GR00T N1.5)
将 GR00T N1.5 VLA 模型接到 SONIC universal token 接口, VLA 预测 78 维动作(64 维 universal token + 14 维手部关节)。 5 个 Loco-Manip 任务平均 75% 成功率,包括: 开踏板垃圾桶(需要精准单脚踩踏板 + 另一脚平衡,70%), 可乐罐扔垃圾桶(5 技能串联,60%)。
VLA 任务成功率(GR00T N1.5 + SONIC)
与 MotionWAM 的关系:SONIC 作为底层运动引擎
MotionWAM 不重新发明底层控制——它把 SONIC 的 universal token 直接作为 Motion DiT 的预测目标,把 SONIC 本身当作解码器(decoder)。 两篇工作是垂直分工:SONIC 负责"从 token 到身体运动", MotionWAM 负责"从视觉+语言到 token"。
| SONIC 的 universal token $\mathbf{z}$ | 对应 MotionWAM 中的 $k_t$($m_t$ 的离散部分,2 token × 32 levels × $D_z$ dim) |
| MotionWAM 的 $m_t^{\text{cont}}$ | SONIC 覆盖不到的灵巧手通道(夹爪 / 灵巧手),MotionWAM 额外追加的连续部分 |
| SONIC 的 $\mathcal{D}_c$ | MotionWAM Stage 3 公式 (6) 中的 SONIC 解码步骤:$(m_t^{\text{cont}}, k_t) \xrightarrow{\text{SONIC}} \mathbf{a}_t$ |
| Stage 3 遥操作流水线 | PICO VR → SMPL 24 关节 → SONIC retarget → 29-DoF 关节命令(50 Hz),和 SONIC §2.4 VR 遥操作接口一致 |
SONIC 缺乏对安全性和能耗的正式处理,在极端动态运动下(如急速换向 6→-6 m/s)追踪器可能失衡。 足部接触精度(sim-to-real gap 最大:53.7mm real vs 29.0mm sim)仍是最大挑战。 上层 VLA(如 MotionWAM)如果依赖 SONIC,也继承了这些限制。