← Back to project

SONIC on AgiBot X2: Current System and Verified Bug Ledger

Retargeting, training, evaluation, collision adaptation, and MuJoCo deployment | verified through 2026-07-31
SONICAgiBot X2GMR v4evaluationsim2simbug audit

1 | Current verdict

SONIC works well on X2. The audited 50k mesh-foot checkpoint completes 480/512 motions (93.75%) on the fixed primary ruler. The former 38% result was an evaluator bug, not a model ceiling.
121,486
GMR v4 MotionLib clips
93.75%
best primary success
44.29 mm
best checkpoint success MPJPE-L
44k
latest sphere checkpoint fully tested

The active system is X2-native at the robot, data, state, action, and rollout layers. The only remaining g1 label is a compatibility key inside old serialized SONIC checkpoints. The current project-local sphere continuation has reached iteration 46.2k on Weka as observed at report build time, but 44k remains the newest sphere checkpoint with completed eval and MuJoCo tests.

2 | System contract

BONES-SMPL
human motion source
GMR X2 v4
29-DOF IK; virtual toes only here
MotionLib
121,486 clips; physical head; no toe bodies
SONIC
X2 policy in IsaacLab
Deployment
planner -> GMR -> X2 policy -> MuJoCo
LayerAuthoritative choiceExplicit exclusion
RetargetBONES-SMPL -> GMR X2 v4, pelvis/leg scale 0.787, virtual toe target at [0.10, 0, -0.073] mSOMA and SOMA/GMR grafts are closed; do not revive them
Training robot29 actuated DOFs, physical head retained, two neck DOFs fixed, X2 wrist_roll endpointsNo toe marker, toe joint, toe mass, or extra policy body slot
Corpus121,486 qpos clips and matched MotionLib clips at 50 HzNo v3 blanket FOOT_OFFSET or metadata-only FPS change
TrainingSONIC PPO/FSQ architecture, X2 asset/gains/order, X2-native dataHoloMotion is optional research, not a replacement justified by the invalid 38%
DeploymentOfficial learned G1 kinematic planner -> online GMR v4 -> X2 SONIC -> MuJoCoThis is not a native learned X2 planner and not a physics-aware planner

Compared with the previous 0.9 production-like retarget corpus, v4 median horizontal root speed is 0.883x, or 11.7% slower. This is a morphology/calibration change, not an artificial duration change.

3 | Final evaluation protocol

Primary contract: paper-listed termination / fixed robot encoder / official runtime / corrected X2 mapping.
ComponentExact setting
Motions512 unique frozen v4 motions; 128 environments x four loops; start at frame zero
PolicySONIC im_eval, deterministic act_inference
EncoderPublic use_encoder=x2; legacy serialized state-dict key g1 only inside the compatibility resolver
Failure termsroot Z error > 0.25 m; ankle/wrist_roll endpoint Z error > 0.25 m; root orientation error > 1 rad
SuccessMotion reaches timeout without an earlier failure
Paper/source correctionfoot_pos_xyz=null, removing the release merge's extra 0.2 m full ankle-XYZ term
Runtime retainedSeed 0, startup physics DR, observation corruption, and trimesh microterrain; no pushes or reset/motion augmentation
MetricsSMPLSim-equivalent formulas; success-only and all-motion scopes are both reported
Seed 0 does not mean nominal physics or bitwise deterministic CUDA. The 512-motion set is an internal X2 regression ruler, not SONIC's private paper split. SONIC reports MPJPE-L, not MPJPE-G, and does not state which callback scope produced its table.

4 | Primary 512-motion scorecard

CheckpointSuccessProgressSuccess MPJPE-LAll MPJPE-LAll MPJPE-G
Mainline 50k480/512 (93.75%)95.32%44.29 mm47.56 mm249.64 mm
Mainline 26k477/512 (93.16%)94.54%41.90 mm45.79 mm426.18 mm
Mainline 34k477/512 (93.16%)94.96%43.59 mm46.89 mm372.22 mm
Mainline 42k476/512 (92.97%)94.83%42.93 mm46.92 mm286.69 mm
No-rescale 15.9k465/512 (90.82%)92.49%40.70 mm45.38 mm429.05 mm
Anchor-v2 8k465/512 (90.82%)93.15%46.31 mm51.08 mm299.83 mm
G1 warm-start 12.3k464/512 (90.62%)93.60%43.45 mm48.04 mm501.43 mm
v4 scratch 2.2k412/512 (80.47%)87.13%57.39 mm63.67 mm419.75 mm

Mainline 50k is the winner by success, average completion progress, and global tracking. The no-rescale checkpoint has lower local MPJPE-L but worse success and much worse global error, so MPJPE-L alone is not a checkpoint selector.

For paper context only, SONIC reports 23.2 mm MPJPE-L in its main result, 27.5/26.3 mm for its 32-GPU FSQ-32-32 ablation, and 23.8/22.5 mm for its 128-GPU robot encoder. X2's 44.29/47.56 mm successful/all-motion values are higher (worse), and the embodiment, data, scale, and test set differ.

5 | From-scratch and reward lineage

IntervalReward profileReason
0 to 10kX2 reform: anchor weight 2.0; body linear-velocity std 0.3Stronger global anchoring and tighter speed tracking for early X2 learning
10k onwardOfficial: anchor weight 0.5; body linear-velocity std 1.0Return to upstream reward weighting while preserving the corrected X2 embodiment and data
Sphere 42k onwardOfficial profileContact adaptation only; no lateral reward merged

The first official-reward continuation eval was 459/512 at 11.1k; 20k reached 467/512 (91.21%), 93.90% progress, 45.52 mm successful MPJPE-L, 49.19 mm all-motion MPJPE-L, and 360.64 mm all-motion MPJPE-G. This newer from-scratch mesh continuation reached 50k on disk; its final primary-protocol evaluation is not asserted here.

All points use the same 512-motion primary ruler. The reward profile changes exactly at 10k; lower MPJPE-L is better.

6 | Verified bug ledger

This ledger consolidates transcript decisions, project memory, source inspection, and generated artifacts. Superseded files/results are retained only when they are useful forensic evidence.

IssueFailure modeStatusResolution / boundary
X2 wrist torque transcription2.2 instead of 4.8 Nm; wrist control was artificially weak.FixedX2 actuator constants now match URDF/MJCF.
G1/X2 joint orderingSix warm-start joints were not semantically aligned: waist pitch/roll and both wrist yaw/roll pairs.FixedDeterministic permutation at the checkpoint boundary; X2 remains 29 DOF.
G1 hand endpoint hardcodeG1 uses wrist_yaw as its terminal link; X2's true endpoint is wrist_roll.FixedReward, termination, contact subsets, eval metrics, and mass randomization use wrist_roll.
Empty reward body selectionG1 wrist patterns selected zero X2 bodies and produced NaN reward reductions on every rank.FixedConfigured X2 names plus fail-fast validation for empty subsets.
Physically headless X2 assetsAn old model removed the head mass while the intended embodiment only fixes neck DOFs.DeletedPhysical head retained; neck yaw/pitch fixed. Old headless files are not valid inputs.
Foot endpoint/ankle offsetv3 treated the ankle as the foot and used a blanket FOOT_OFFSET/world-foot patch.Replacedv4 uses calibrated X2 scale and massless, jointless, geometry-free virtual toe targets during GMR only.
Stale GMR production configA copied patch could silently restore the pre-wrist-fix mapping.FixedCanonical v4 config is the source of truth; stale alternatives are excluded.
Frame-rate relabelingSmoothing could lower effective bandwidth without actually resampling, while metadata was relabeled.FixedFrame rate changes require real resampling; v4 GMR/MotionLib output is 50 Hz.
Custom 38% evaluatorIt checked root XY and full 3D endpoints, then was mislabeled as SONIC success.DeletedOfficial im_eval state machine is used; 38% is invalid as a policy score or framework ceiling.
Release eval config mergeOmegaConf retained training foot_pos_xyz, adding an unpublished 0.2 m full ankle-XYZ termination.ControlledPrimary protocol explicitly sets foot_pos_xyz=null; released-code results remain separately labeled.
Mixed encoder evalUnset use_encoder sampled robot, teleop, and SMPL encoders.FixedPrimary eval requests use_encoder=x2 and maps only the serialized key to legacy g1.
SMPLSim metric dependencyThe external package was unavailable in the eval image.FixedVendored formula matches SMPLSim b5c0872 exactly in deterministic parity tests.
Planner stitching freezeClipped old indices were reused, freezing 130 of 299 frames.FixedAbsolute timeline stitching produced 0 frozen frames in the 1,099-frame regression.
MuJoCo action clippingDeployment fed unclipped policy actions although Isaac clips them to +/-20 before env.step.FixedThe policy output and next last_action observation are clipped identically; false 42k/42.4k fall conclusions were withdrawn.
Planner token profileThe runner defaulted to local 16-token long horizon; 0.1 s RUN replans collapsed/skated the G1 reference.FixedDefault is official 9/10/11-token behavior. Long is diagnostic only; G1 and X2 references are now recorded together.
Data conversion schedulingA grouped 128-task conversion stopped when one interruptible replica was preempted.FixedConversion uses independent interruptible jobs; grouped execution remains appropriate for synchronous training.

7 | Lateral drift A/B

A short 10k to 10.2k A/B used 12 original/mirrored forward walks. Control kept the 10k reward; treatment added only lateral-velocity tracking. The hard term (weight 1.0, std 0.1) reduced median endpoint |Y| by about 26% and modestly improved cross-track and lateral-velocity RMS. The soft term (weight 0.5, std 0.2) worsened endpoint and cross-track error.

Decision: the hard reward is promising aggregate evidence, not a production fix. It had motion-specific outliers and was not merged into the official-reward mainline. Mirroring the dataset is not equivalent to physics-side symmetry augmentation; X2 flip maps remain unimplemented.
Trajectory metrics computed by the same project-local analysis function for all three arms.
Per-motion trajectory summary. Aggregate improvement and outliers must be read together.

8 | Lateral treatment examples

Improved case A036. The lateral term reduces drift on this motion.
Outlier A021. The same treatment is not uniformly better, which is why it was not merged.

9 | Foot collision geometry and sphere adaptation

The original X2 training foot uses one triangle-mesh collision per foot. The project-local treatment uses 12 symmetric spheres per foot: ten sole samples plus two toe-edge samples. Official SONIC G1 training uses seven cylinders per foot; its MotionLib reference asset uses four spheres. Therefore, 12 spheres is a standard primitive-contact strategy and symmetric by construction, but it is not an upstream SONIC default.

Sphere 44k resultValueInterpretation
Released-code eval success450/512 (87.89%)Matching sphere physics, but includes release termination behavior; not directly comparable to the 93.75% primary table
Progress91.03%Same released-code sphere run
Success / all MPJPE-L39.52 / 43.25 mmLower local pose error does not establish higher success under another protocol
20 s slow walk0 falls; 3.65 m forwardStable after action-clip fix
Direction residual-0.474 m lateral; -1.30 deg yaw vs referenceSphere contacts improve some yaw probes but do not eliminate lateral tracking error
Parsed at true scale from the repository URDF/MJCF assets. Virtual GMR toe targets are separate and never enter these training collision models.

10 | Action clipping correction

Earlier 42.3k/42.4k sphere runs reported 12 falls and suggested later training had regressed. The MuJoCo runner was missing Isaac's manager-environment action clip. After clipping the policy output to +/-20 before both control and the next last_action observation, the 44k sphere policy completed the matched slow-walk probe with zero falls.

40k mesh policy with the corrected +/-20 action contract.
42.4k sphere policy after the same deployment correction.

11 | Planner reference bug and corrected run

The WASD stack uses SONIC's learned G1 kinematic planner, then online GMR to produce X2 references. A local long profile forced 16 output tokens (about 106 frames at 50 Hz). In RUN mode the planner replans every 0.1 s, so repeatedly feeding back this long horizon collapsed the G1 root height and created skating/floating references. The old run claimed 23.13 m of reference travel in 14 s while the robot barely moved; that result is invalid.

The runner now defaults to the official 9/10/11-token behavior, records G1 and X2 references side by side, and retains long only as a named diagnostic. With the corrected profile, G1 reference root Z stays 0.694-0.789 m, X2 reference root Z stays 0.593-0.676 m, and the 44k sphere policy travels about 6.18 m in the six-second RUN probe with zero falls.

Corrected official-profile run: online GMR reference (left) and 44k sphere SONIC rollout (right). Remaining foot clearance is a kinematic GMR/contact-lock limitation, not the former root-collapse bug.

12 | Jump limitation

A geometry-controlled high-jump probe measured true collision-surface clearance. All three X2 variants produced zero frames with both feet more than 1 mm above ground: 42k mesh, 42k sphere out-of-distribution, and 10.2k sphere-trained. Peak simultaneous clearance was approximately -0.08 mm, +0.014 mm, and +0.001 mm respectively.

The X2 policy tracks much of the jump pose but does not enter sustained flight. Because this failure already occurs in simulation and survives a collision-geometry change, it is not explained by sim-to-real gap or foot mesh alone. Likely contributors are X2 morphology/actuation, reference contact inconsistency, reward/termination pressure, and insufficient aerial-motion coverage. No single cause is proven yet.
High-jump ablation: 42k mesh, the same policy under sphere contacts, and sphere-adapted 10.2k. Visual lift is not counted as flight unless both collision surfaces clear the floor.

13 | Retarget gallery

These clips visualize the v4 reference layer, not policy rollouts. They demonstrate the breadth passed into MotionLib and expose residual kinematic artifacts before reinforcement learning.

GMR v4 walk reference with calibrated X2 leg scale and toe targets.
GMR v4 dance reference.
GMR v4 jump reference. A kinematic jump reference does not guarantee policy flight.
GMR v4 backward jog reference.

14 | Reward behavior in IsaacLab

This side-by-side keeps the GMR walking reference and IsaacLab environment aligned while comparing the 10k X2-anchor boundary against the 20k official-reward continuation. The official continuation improves local tracking over time but relaxes direct global velocity pressure; longitudinal speed alone is not the success criterion.

10k X2-anchor reward versus 20k official-reward continuation on the same GMR walk reference in IsaacLab.

15 | Open caveats and next gates

Open itemWhat is knownRequired gate
46.2k sphere continuationCheckpoint exists on Weka; training uses the official reward profileExport and run the same primary 512 protocol plus matched MuJoCo direction/jump probes
Sphere production choice44k is stable in corrected MuJoCo and can improve yaw; primary-protocol ranking is missingDo not replace mesh baseline until primary success, drift, and jump gates all pass
JumpingNo tested X2 variant achieves >1 mm two-foot flightAudit aerial data/contact labels and controlled reward/actuation ablations
Direction biasHard lateral reward helps aggregates but has outliers; spheres do not fully remove residualImplement X2 physics-side symmetry/flip maps, then repeat paired original/mirrored tests
Online referenceOfficial planner profile is stable; GMR remains kinematic with no contact lockAdd contact-aware postprocessing or train a native X2 planner if interactive quality requires it
ArmatureUniform 0.03 is still an unverified placeholderObtain vendor motor/reflected-inertia ground truth before sim-to-real claims
Mass assetsGMR MJCF 43.4749 kg; Isaac URDF 41.9665 kg; deployment MuJoCo 41.9665 kg after pelvis fixKeep the kinematic GMR asset separate from the dynamics authority

Mirrored corpus doubling is data symmetry, not simulator symmetry augmentation. HoloMotion remains a bounded future comparison. SOMA is closed. The public report contains no credentials, private tokens, or raw chat excerpts.

16 | Reproducibility map

ClaimRepository evidence
Primary eval contract and scorecarddocs/x2_sonic_official_eval_20260725.md; logs_rl_beaker/eval_v4/*robot_paper*
Upstream/X2 semantic auditdocs/sonic_upstream_audit_20260724.md
Retarget and embodiment rulesCLAUDE.md; x2_sonic_training/gear_sonic_x2/PLANNING.md; project memory
Sphere 44k evallogs_rl_beaker/eval_v4/sphere-44000_v4_512_metrics/metrics_eval.json
Corrected MuJoCo walkartifacts/x2_mujoco_regression/sphere_044000_clip20_metrics.json
Planner profile diagnosticartifacts/x2_sphere_44k_run/run_mode3_speed1p8_official_diag.npz; scripts/run_x2_sonic_mujoco.py
Jump flight metricartifacts/x2_jump_checkpoint_ablation/high_jump_flight_metrics.json
Lateral reward A/Bartifacts/lateral_ablation_10200/; sonic_x2_lateral_vel*.yaml
Foot geometrygear_sonic_x2/visualize_foot_collisions.py; parsed URDF/MJCF assets

Frozen eval manifest SHA256: 05c108fdf04bb98b0dd4b1a6f99cc29776437d70c43b7b419769a9829e3d2a11. This page is the current status authority through 2026-07-31; older Hub reports remain historical snapshots and may contain explicitly superseded conclusions.

Evidence consolidated from source, project memory, metrics artifacts, and generated visualizations. Public milestone report; no credentials included.