第六阶段:结论、真正的创新点与研究方向

前五阶段已经把代码链路拆开了。第六阶段不再继续“讲代码”,而是把这些局部重新组合成一个研究系统

SONIC 到底解决了什么问题?它为什么这样设计?哪些部分是真正的研究贡献?哪些只是工程实现?如果沿着这个方向继续做,最值得研究什么?

这一阶段压缩成下面这棵树:

Phase 6:SONIC 的研究理解
│
├── 6.1 它到底在解决什么问题
│      └── 异构运动来源 → 统一 latent → 通用 whole-body controller
│
├── 6.2 SONIC 的核心创新
│      ├── Universal Token
│      ├── latent alignment
│      ├── token-conditioned policy
│      └── VLA / motion / teleop 的统一接口
│
├── 6.3 真正的数据闭环
│      └── Motion → Token → PPO → Decoder → Robot
│
├── 6.4 为什么这个设计有效
│      ├── representation
│      ├── policy
│      └── deployment
│
├── 6.5 目前架构的关键限制
│      ├── token 空间依赖 checkpoint
│      ├── VLA-token 对齐
│      ├── 29-D body / 14-D hand 接口分裂
│      ├── latent 离散化的信息损失
│      └── sim-to-real / embodiment gap
│
└── 6.6 最值得继续做的研究
       ├── Universal Token 学习
       ├── VLA-token co-training
       ├── latent-conditioned WBC
       ├── hand / embodiment generalization
       └── token-level adaptation / online control

6.1 SONIC 真正解决的是什么问题?

先不要把问题理解成:

“SONIC 是一个更好的 G1 控制器。”

这个理解太窄。SONIC 更核心的问题其实是:

机器人上层越来越容易产生各种不同形式的运动意图,但底层 whole-body controller 不应该为每一种上层表示重新设计一套。

例如上层可以产生:

SMPL motion
     │
     ├── 3D human motion
     │
Teleoperation
     │
     ├── VR body targets
     │
Motion generation
     │
     ├── future joint trajectories
     │
VLA
     │
     ├── 64-D motion token
     │
     ▼
  SONIC
     │
     ▼
G1 whole-body control

传统方式容易变成:

SMPL → controller A
Teleop → controller B
Motion planner → controller C
VLA → controller D

这会导致一个非常现实的问题:上层 representation 一变,底层控制器也要跟着重新适配。

SONIC 的思路是把中间层抽象出来:

不同 motion representation
          ↓
    Universal Token
          ↓
  Universal Controller
          ↓
     Robot Action

所以它真正追求的是:

把“运动表示”和“机器人控制”解耦。

这也是为什么前面看到的 UniversalTokenModule 是整个 repo 最关键的研究模块。


6.2 第一核心创新:Universal Token

前面已经知道它不是简单的 VQ-VAE,它的基本结构可以写成:

xm⟶Emhm⟶Qz⟶Da x_m \overset{E_m}{\longrightarrow} h_m \overset{Q}{\longrightarrow} z \overset{D}{\longrightarrow} a xmEmhmQzDa

其中:

  • xmx_mxm:某一种 motion modality
  • EmE_mEm:对应 modality encoder
  • hmh_mhm:连续 latent
  • QQQ:FSQ
  • zzz:64-D universal token
  • DDD:共享/对应的 decoder
  • aaa:G1 body action

这里真正重要的是:不同 modality 有自己的 encoder

例如:

G1 motion ────────> E_g1 ──┐
                            │
Teleop ───────────> E_tele ┤
                            ├──> latent → FSQ → token
SMPL ─────────────> E_smpl ┘

但是最终进入的是同一个 latent/token space。

所以:

E_g1(x_g1)       ≈
E_tele(x_tele)   ≈  shared latent
E_smpl(x_smpl)   ≈

这就是为什么 repo 里面会有下面这么多 aux loss:

G1SmplLatentLoss
G1TeleopLatentLoss
TeleopSmplLatentLoss
ReencodedSmplG1LatentLoss

它们不是附带的小 loss,它们实际上在训练:

“不同运动描述应该能够被压缩成同一个控制语义。”


6.3 第二核心创新:latent alignment

这一点我认为是理解 SONIC 最重要的一层。假设同一个动作:

“抬右手”

可以有三种描述(或者说三种来源):

SMPL:
人体关节轨迹

Teleop:
VR target / orientation

G1 motion:
G1 joint trajectory

SONIC 希望:

ESMPL(xSMPL)≈ETeleop(xTeleop)≈EG1(xG1) E_{SMPL}(x_{SMPL}) \approx E_{Teleop}(x_{Teleop}) \approx E_{G1}(x_{G1}) ESMPL(xSMPL)ETeleop(xTeleop)EG1(xG1)

然后经过 FSQ:

z=Q(h) z = Q(h) z=Q(h)

最终:

D(z,st)→at D(z,s_t) \rightarrow a_t D(z,st)at

于是 decoder 不需要知道:

“这个 token 原来是 SMPL 还是 Teleop?”

它只需要知道:

这个 token 表示什么运动意图。


6.4 为什么这里一定要有 FSQ?

这也是一个很值得研究的点。

如果没有量化:

h∈R64 h\in\mathbb{R}^{64} hR64

那上层系统和 SONIC 之间传输的就是一个连续 64-D latent。

有了 FSQ:

h→Q(h)→z h \rightarrow Q(h) \rightarrow z hQ(h)z

当前配置:

num_fsq_levels = 32
max_num_tokens = 2

所以可以理解成:

token 1: 32-level vector
token 2: 32-level vector

总共:

2×32=64 2\times32=64 2×32=64

这里的 64 是向量维度,不是“64 个离散 token”。

这个区别非常重要。

FSQ 带来的好处之一是:

让上层 VLA 和下层 controller 之间拥有一个相对明确、有限结构的接口。

于是 VLA 不需要预测 29 joint positions,而是直接预测 64-D motion token,然后由 SONIC 负责把它变成:

29-D whole-body action

这实际上是在做一种:

semantic action abstraction


6.5 第三核心创新:Policy 不直接学 motion,而是学 token-conditioned control

到这里,把 PPO 接起来。SONIC 的 policy 可以抽象成:

at∼πθ(at∣zt,st) a_t \sim \pi_\theta(a_t|z_t,s_t) atπθ(atzt,st)

其中:

  • ztz_tzt:Universal Token
  • sts_tst:当前机器人 proprioception
  • ata_tat:29-D body action
        Universal Token
              │
              ▼
       ┌─────────────┐
state ─>   Policy    │
       └─────────────┘
              │
              ▼
         29-D action

注意这里的关键变化。普通 locomotion policy 是 at=π(st)a_t=\pi(s_t)at=π(st),而SONIC是:

机器人当前状态告诉 policy “我现在在哪里”;token 告诉 policy “我要往哪里运动”。

这使 SONIC 从一个固定技能 controller,变成了一个:

latent-conditioned whole-body controller


PPO 本身并不是 SONIC 最核心的创新。它解决的是:

如何让机器人真的执行这个 latent 所代表的运动。

所以研究贡献层次大概应该这样排:

第一层:Universal representation

不同运动来源能否进入统一 latent?

第二层:latent-conditioned control

同一个 controller 能否根据 latent 执行不同 motion?

第三层:deployment interface

VLA 能否直接产生这个 latent?

第四层:PPO

怎样把这个 latent 变成稳定的物理控制?


6.7 整个 SONIC 的真正闭环

现在把前五阶段全部压缩成一条链。

训练阶段

             Motion Dataset
                   │
        ┌──────────┼──────────┐
        ▼          ▼          ▼
       G1        Teleop      SMPL
        │          │          │
        ▼          ▼          ▼
      E_g1      E_tele      E_smpl
        │          │          │
        └──────────┼──────────┘
                   ▼
             latent h
                   │
                  FSQ
                   │
                   ▼
           Universal Token z
                   │
          ┌────────┴────────┐
          ▼                 ▼
      alignment          decoder
          │                 │
          │                 ▼
          │            29-D action
          │                 │
          └──────┐          │
                 ▼          ▼
                PPO / Isaac Lab
                       │
                       ▼
                  G1 control

这里有两个学习目标:

Representation objective

Llatent L_{latent} Llatent

让:

G1 ≈ Teleop ≈ SMPL

Control objective

LPPO L_{PPO} LPPO

让:

token + state → physically valid action

最终:

L=LPPO+λLaux L = L_{PPO} + \lambda L_{aux} L=LPPO+λLaux

也就是前面看到的:

PPO loss
+
g1 reconstruction
+
latent alignment
+
cycle consistency

6.8 VLA 处于什么位置?

完整链路是:

                VLA
                 │
          78-D action interface
                 │
       ┌─────────┴─────────┐
       │                   │
   64-D token           14-D hand
       │                   │
       ▼                   ▼
 SONIC decoder        Dex3 interface
       │
       ▼
 29-D body action
       │
       ▼
      G1

因此 VLA 是:

VLA → motion abstraction
             ↓
         SONIC
             ↓
       whole-body control

这其实是一个非常有意义的系统分工:

VLA

负责:

“我要做什么动作?”

SONIC

负责:

“怎样让 G1 身体真的完成这个动作?”

Robot low-level control

负责:

“怎样把这个动作稳定地执行到电机?”

因此:

semantic intelligence
        ↓
motion representation
        ↓
whole-body control
        ↓
motor execution

这就是 SONIC 的系统价值。


6.9 目前架构的五个限制

这一部分非常重要,因为它直接决定你的研究方向。

限制 1:Universal Token 并不是天然 universal

当前:

SMPL
Teleop
G1
   ↓
SONIC checkpoint

它们共享的是某一个 checkpoint 学到的 latent space

因此:

64-D token 并不是一个全机器人界通用标准。

换一个 SONIC checkpoint,token semantics 可能就发生变化。

所以:

zSONIC−A≠zSONIC−B z_{SONIC-A} \neq z_{SONIC-B} zSONICA=zSONICB

即使两者都是 64-D。


6.10 限制 2:VLA 必须学会这个 latent space

当前 deployment 的一个非常关键的事实:

VLA
 ↓
64-D motion token
 ↓
SONIC decoder

也就是说 VLA 输出的 token 必须和 SONIC decoder 所理解的 latent space 对齐。

所以这里实际上存在一个隐藏接口:

FVLA(o)→ZSONIC F_{VLA}(o) \rightarrow Z_{SONIC} FVLA(o)ZSONIC

如果 VLA 和 SONIC 没有共同训练/对齐:

VLA token
     ≠
SONIC token

那么 decoder 就会收到一个“合法维度但错误语义”的 token。

这其实是整个架构里非常值得研究的问题:

如何稳定地学习 VLA → Universal Token 的跨模型接口?


6.11 限制 3:body 和 hand 现在仍然是两条路径

当前:

64 token
   ↓
SONIC
   ↓
29 body

而:

14 hand
   ↓
Dex3

因此整个系统还不是完全统一的:

body → latent-conditioned policy

hand → direct action interface

从研究角度看,这其实是一个很明显的 future work。

理想结构可能是:

VLA
 │
 ▼
Universal whole-body latent
 │
 ├── body
 ├── left hand
 └── right hand
        │
        ▼
 unified controller

当然,这会显著增加训练难度。


6.12 限制 4:FSQ 本身可能造成 information bottleneck

现在:

h→z h\rightarrow z hz

中间存在离散化。好处是 token 更容易成为上层接口。

但代价是:

I(h;z)<I(h;h) I(h;z)<I(h;h) I(h;z)<I(h;h)

也就是说 token 可能丢失一些 motion information。

于是会出现一个很值得研究的问题:

64-D FSQ token 到底是不是最优 bottleneck?

可以研究:

32-D
64-D
128-D

以及:

continuous latent
vs
FSQ latent

最终看:

motion reconstruction
control success
VLA alignment
latency
token robustness

之间的 trade-off。


6.13 限制 5:latent space 和 physical embodiment 仍然绑定

当前最终还是:

token
 ↓
G1 decoder
 ↓
29 body action

所以它虽然解决了:

SMPL / Teleop / G1

之间的 representation mismatch,

但还没有完全解决:

G1
Humanoid B
Humanoid C
Robot D

之间的 embodiment mismatch。

真正更进一步的 universal controller 应该考虑:

a=π(z,s,e) a = \pi(z,s,e) a=π(z,s,e)

其中:

  • zzz:motion intent
  • sss:robot state
  • eee:embodiment information

这样:

same motion token
        │
   ┌────┼────┐
   ▼    ▼    ▼
   G1   H1   H2

理论上可以产生不同机器人对应的动作。

这就从:

Universal Token

进一步走向:

Universal Motion Representation + Embodiment-conditioned Controller

我认为这是一个非常自然的研究延伸。


6.14 如果沿这个方向做研究,我会优先考虑什么?

如果你的目标是把 SONIC 变成自己的研究起点,而不是单纯复现,我会按下面的优先级考虑。

Research Direction A:VLA → Universal Token 对齐

这是我认为最直接、最贴近当前系统的方向。

现在:

VLA
 ↓
64-D token
 ↓
SONIC

可以研究:

L=LVLA+λ1Ltoken+λ2Lcontrol L = L_{VLA} + \lambda_1 L_{token} + \lambda_2 L_{control} L=LVLA+λ1Ltoken+λ2Lcontrol

让 VLA 不仅学习:

language → action

而是学习:

language + vision
        ↓
universal motion token
        ↓
SONIC

核心问题:

VLA 是否可以把 Universal Token 当成一种新的 action representation?

这会直接连接:

VLA + representation learning + whole-body control


6.15 Research Direction B:学习更好的 Token

这是更偏 representation learning 的方向。

现在:

motion
 ↓
encoder
 ↓
FSQ
 ↓
64-D token

可以研究:

FSQ
VQ
continuous latent
hierarchical latent
temporal token
semantic token

例如把一个动作拆成:

z_global
    +
z_local

或者:

z_intent
    +
z_style
    +
z_dynamics

这样可能得到:

“走过去”
+
“挥手”
+
“快一点”

这样的 compositional motion representation。

这比单纯增加 token dimension 更有研究价值。


6.16 Research Direction C:Temporal Token

当前 token 本质上还是当前控制时刻对应的 motion representation。

但机器人动作本质上是时间序列:

zt:t+H z_{t:t+H} zt:t+H

所以可以进一步研究:

single token
      ↓
token sequence
      ↓
temporal controller

例如:

zt,zt+1,...,zt+H z_t,z_{t+1},...,z_{t+H} zt,zt+1,...,zt+H

然后 policy 学:

at=π(st,zt:t+H) a_t=\pi(s_t,z_{t:t+H}) at=π(st,zt:t+H)

这会和当前 SONIC 的:

future reference frames

自然衔接。

尤其值得研究:

token horizon 到底应该多长?

当前 repo 的 default / low-latency 已经给了一个非常好的实验入口:

~200 ms
vs
~80 ms

这其实已经暗示:

latency 和 motion horizon 存在明显 trade-off。


6.17 Research Direction D:真正的 whole-body hand integration

现在:

29 body
+
14 hand

还是两个接口。

可以进一步研究:

z→{abody,ahand} z \rightarrow \{a_{body},a_{hand}\} z{abody,ahand}

甚至:

z→a43 z\rightarrow a_{43} za43

统一输出。

更进一步:

same token
      ↓
body + hand
      ↓
contact-aware control

例如:

抓杯子

不应该只是:

arm trajectory
+
finger trajectory

而应该考虑:

hand contact
arm posture
torso balance
foot placement

这才是真正的 whole-body manipulation。


6.18 Research Direction E:Embodiment Generalization

这是更长期、也更有潜力的方向。

当前:

z→G1 z\rightarrow G1 zG1

可以改成:

(z,s,e)→a (z,s,e)\rightarrow a (z,s,e)a

例如:

               Universal Token
                     │
          ┌──────────┼──────────┐
          ▼          ▼          ▼
         G1        Robot B     Robot C
          │          │          │
          ▼          ▼          ▼
       action      action      action

这样 Universal Token 真正成为:

robot-independent motion language

而不只是:

G1-specific latent interface。


6.19 总结

SONIC 压缩成一句研究逻辑:

SONIC 把异构运动表示压缩到一个共享的 Universal Token 空间,再学习一个 token-conditioned whole-body controller,使上层 VLA、motion generation、teleoperation 等系统能够通过统一的运动接口驱动机器人。

然后再展开:

                ┌── SMPL
                ├── Teleop
                ├── G1 motion
                └── VLA
                     │
                     ▼
             Universal Token
                64-D FSQ
                     │
                     ▼
        Token-conditioned Policy
                     │
                   PPO
                     │
                     ▼
             29-D G1 Body
                     │
              ┌──────┴──────┐
              ▼             ▼
           arms/body       hands
              │             │
              ▼             ▼
             G1          Dex3

6.20 核心结论

经过前面六个阶段,整个 repo 可以浓缩成这六句话:

① Universal Token 是 SONIC 的表示层。

不同 motion modality 经过不同 encoder,进入共享 latent/token 空间。

② FSQ 把这个 latent 变成一个适合系统接口的离散化表示。

当前核心配置是 2×32 = 64-D,不是 64 个 token ID。

③ PPO 学的是 token-conditioned controller。

π(a∣s,z) \pi(a|s,z) π(as,z)

token 决定运动意图,state 决定当前机器人状态。

④ VLA 的 78-D action 不是机器人 78 个关节。

78
├── 64 motion token → SONIC → 29 body
└── 14 hand action  → Dex3

其中 29-D body 已经包括双臂。

⑤ SONIC 的部署核心不是重新训练一个 C++ controller。

训练好的:

Universal Token + policy

被导出为 TensorRT/ONNX,在 50 Hz policy loop 中运行,再由 500 Hz command writer 发送到 G1。

⑥ token 中间层

不是 PPO 本身,也不只是 TensorRT 部署。真正值得追的是:

Motion / VLA→Universal Token→Whole-body Control \boxed{ \text{Motion / VLA} \rightarrow \text{Universal Token} \rightarrow \text{Whole-body Control} } Motion / VLAUniversal TokenWhole-body Control

也就是:

如何学习一个既能被 VLA 理解、又能被机器人控制器执行、同时还能跨 motion modality / embodiment 泛化的统一运动表示。

这其实已经从“复现 SONIC”自然走到了一个比较完整的研究问题。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐