Cross-Embodiment Transfer of a Frozen Humanoid Whole-Body Controller via Analytic Codec and LoRA Adapters
A frozen, publicly released whole-body controller (GEAR-SONIC, trained on the Unitree G1) drives the AgiBot X2 Ultra โ every encoder, the token bottleneck, and the motion prior untouched. A closed-form joint-space codec plus LoRA adapters on one decoder (0.25% of the platform's parameters), trained overnight on one 8-GPU node โ about 2% of the platform's cited training compute.
The result is not parity but reversal: on out-of-distribution content the transfer beats the tracker natively trained for the X2 (69.0% vs 59.0% success) โ while in-distribution benchmarks cannot tell the two apart. The same recipe, codec removed, specializes the platform on its own body with zero forgetting.
New in v0.2 (2026-09-12): the reversal survives hardware โ an 18-minute untethered rough-terrain walk (grass, ramp, curb, pebbles; no e-stop, tilt p99 9.0ยฐ, three โฅ20ยฐ excursions each recovered within 0.8 s) where the native line showed close-call imbalance on the same ground minutes later, running hotter. Plus: the platform's human-pose (SMPL) input path recovered to incumbent parity with a 0.3 sampling share, and the embodiment floor's actuator share anatomized โ including a reward-margin pathology in which a 0.8 margin silently re-imposed a 19.2 Nยทm "hardware" ceiling.
How it works
Relaxed walk โ incumbent vs zero-shot vs adapted
Gangam dance โ incumbent vs zero-shot vs adapted
Results at a glance
| model | novel500 (in-dist) | hard300v3 (tail) | PHUMA (OOD) | PHUMA survival |
|---|---|---|---|---|
| incumbent (native X2) | 96.4 / 33.6 / 43.8 | 70.0 / 40.6 / 56.0 | 59.0 / 42.6 / 67.4 | 87.4 |
| transfer (selected) | 96.2 / 33.1 / 42.9 | 72.3 / 39.9 / 55.8 | 69.0 / 41.7 / 60.6 | 90.7 |
Evaluation under the SONIC paper's criterion
Success rate (%)
| set | stock G1 (own body) | 39k incumbent (X2) | 43k incumbent (X2) | 16k frozen core (X2) | 35k frozen core (X2) | 40k frozen core (X2) |
|---|---|---|---|---|---|---|
| novel500 (in-distribution) | 97.8 | 97.2 | 97.8 | 98.0 | 98.0 | 96.6 |
| hard300v3 (in-distribution tail) | 89.0 | 73.3 | 72.3 | 77.7 | 76.7 | 75.7 |
| PHUMA 1,931 (out-of-distribution) | 86.8 | 66.2 | 66.1 | 76.7 | 71.0 | 68.5 |
| Pico captures via the SMPL encoder (27) | 40.7 | 66.7 | 51.9 | 37.0 | 59.3 | 59.3 |
Tracking error (MPJPE-L, mm, successful clips only)
| set | stock G1 (own body) | 39k incumbent (X2) | 43k incumbent (X2) | 16k frozen core (X2) | 35k frozen core (X2) | 40k frozen core (X2) |
|---|---|---|---|---|---|---|
| novel500 (in-distribution) | 26.9 | 34.3 | 33.6 | 31.9 | 32.7 | 32.4 |
| hard300v3 (in-distribution tail) | 35.3 | 41.5 | 39.9 | 38.6 | 39.4 | 39.0 |
| PHUMA 1,931 (out-of-distribution) | 32.8 | 43.4 | 43.7 | 41.6 | 41.3 | 41.3 |
| Pico captures via the SMPL encoder (27) | 40.4 | 42.4 | 46.1 | 51.5 | 43.2 | 42.4 |