← Back to project

X2 SONIC · full-corpus retarget

BONES-SEED → AgiBot X2 via GMR · validated to 1.3° vs v3 · 2026-07-10
retargetdatahumanoidGMR

1 · What this is

Porting NVIDIA SONIC (whole-body motion tracking) to the AgiBot X2 Ultra (29 DOF, head-fixed, joint-aligned 1:1 with the Unitree G1). The policy is warm-started from the released G1 checkpoint; the bet for generalization is data diversity — retargeting the full BONES-SEED human-motion corpus onto X2, not just locomotion.

Human motion (SMPL) is retargeted to X2 with GMR (per-frame inverse kinematics). We wired X2 into GMR as a first-class robot (MJCF + tuned IK config with the wrist fix + registration) and confirmed the pipeline reproduces the team's production x2_native_v3 dataset.

2 · X2 robot in motion

The retargeted result rendered on the actual X2 mesh (MuJoCo). Eleven clips spanning the corpus — locomotion, a jump, several dances, a two-hand lift, a crouch-and-operate, exercise, and gestures — showing the same diverse human motions driving the real robot. The head is welded (fixed joints, 29 DOF) with its real 1.72 kg mass, matching the training URDF; GMR retargeting is kinematic, so the data is unaffected by head mass either way.

sideways walk
high jump
hiphop box-step
pirouette
crouch + operate
exercise
clap
hi-five
phone talk
body stretch
salsa step

3 · Fidelity — human vs X2

Skeleton view of the same clips: left = human SMPL source, right = retargeted X2 joints. The legs and torso transfer cleanly; arm fidelity is bounded by X2's real embodiment limits (shoulder adduction ~3°).

sideways walk
high jump
hiphop box-step
pirouette
crouch + operate
exercise
clap
hi-five
phone talk
body stretch
salsa step

4 · Quality gate — what we filter (5.7%)

We remove only genuine retarget flips — isolated discontinuous joint spikes — and keep everything else, including fast-but-smooth motion the robot simply tracks with lag. 5.7% removed, 94.3% kept.

The distinction is discontinuity, not speed. A retarget flip is an isolated velocity spike (a joint teleporting through its range in one frame — physically impossible). A fast dance drives the wrist past its small motor's speed cap, but smoothly — that is the legitimate fidelity ceiling SONIC is built to handle, so it stays. We verified both ends: the wrist-angle/velocity traces below show the flip (left, isolated 40 rad/s spike) vs the fast dance (right, smooth sustained oscillation).

Removed — flips (red border):

jog + wrist flip (9.4x)
put-down + flip (8.5x)
crawl + flip (7.9x)
jog + boundary flip (4x)

Kept — fast-but-smooth (green border):

victory dance (2.8x)
fright funk (2.8x)
hiphop walk-it-out (2.8x)
wrist angle (top) + velocity (bottom); left=flip 9.4x isolated spike, right=fast dance 2.8x smooth

5 · Validation vs ground truth

Our portable pipeline reproduces production x2_native_v3 to 1.28° mean per-joint and 1 mm root position — field-by-field over 304 frames.

Field-by-field difference vs the v3 ground-truth entry for walk_ff_stop_360_003__A071:

fieldmean |diff|max
dof (29 joints)1.28°9.7°
root_trans_offset0.001 m0.013 m
root_rot0.0020.021
pose_aa0.42°9.7°

Residual (mostly wrist/shoulder yaw) comes from a minor SMPL-X model serialization + MuJoCo version difference — negligible. Below: human source vs a no-model bypass vs the production-faithful path (legs match to ~4°; the bypass diverges on arms by ~18°, so real data uses the production path).

human (top) / no-model bypass (mid) / production path (bottom)

6 · Scale

metricvalue
Source corpus (NVIDIA-filtered BONES-SEED)131,455 clips = 65,748 unique + 65,707 mirrors
Retargeted (unique)65,425 clips
After quality gate (flips removed)61,677 clips (94.3%)
Category mix (unique)52.6% locomotion + dance / manipulation / sport / gesture / everyday
Throughput~4 clips/s @ 120-way → full corpus in ~4–5 h
Per-entry size108 KB → ~7 GB full corpus

Mirrors are left-right flips — generated by reflection rather than re-retargeted, so only the 65k uniques go through GMR.

7 · Takeaways

auto-generated · X2 SONIC data pipeline · 11-clip gallery from the 200-clip validation batch