Skip to content

feat(g1): add PICO SONIC WebXR teleoperation - #3721

Draft
TomCC7 wants to merge 93 commits into
mainfrom
cc/feat/pico-teleop-sonic
Draft

feat(g1): add PICO SONIC WebXR teleoperation#3721
TomCC7 wants to merge 93 commits into
mainfrom
cc/feat/pico-teleop-sonic

Conversation

@TomCC7

@TomCC7 TomCC7 commented Aug 27, 2026

Copy link
Copy Markdown
Member

Summary

  • route PICO WebXR body tracking through a specialized G1 SONIC teleoperation task
  • keep SONIC balancing active while the WebXR deadman switches between operator and planner references
  • make hardware and MuJoCo control activation wait for a complete low-level command
  • add the runnable unitree-g1-sonic-webxr-teleop blueprint and native MuJoCo visualization path

Dependencies

This draft integrates the three prerequisite branches for end-to-end simulation testing.

Validation

  • 400 affected tests passed; 6 optional-dependency tests skipped as expected
  • Ruff passed on changed source
  • mypy passed on the changed source modules
  • blueprint registry generation and blueprint-kwargs validation passed
  • live PICO + Motion Tracker test passed with:
    uv run dimos --simulation mujoco --viewer none run unitree-g1-sonic-webxr-teleop
    • G1 stood and remained balanced
    • WebXR engagement drove the SONIC reference
    • motion was visible in the native MuJoCo viewer

Local runtime note

ONNX Runtime falls back to CPU when the CUDA execution provider is unavailable.

TomCC7 and others added 30 commits June 4, 2026 13:41
GEAR-SONIC planner+encoder+decoder ported from the Matrix parity
reimplementation into a ControlTask claiming all 29 joints. All 27
locomotion modes RPC-reachable via task_invoke; twist via the standard
duck-typed hook; upper-body targets are encoder hints only (never
post-decoder overrides). Armature-derived SONIC PD gains carried over
exactly, including the doubled ankle/waist entries. Blueprint
unitree-g1-sonic-wbc with the standard sim/real dual backend.

Verified standalone against raw MuJoCo: 40 s continuous choreography
(walk 4 m, squat, boxing, dance) with zero falls and zero NaN at
0.23 ms/step policy latency on CPU onnxruntime.
Groot-style URDF static robot + joint-state overrides, entity key matching
zenoh's stripped topic naming (world/g1_joints). Guarded off under
DIMOS_TRANSPORT=zenoh: callable factories in rerun_config do not survive
zenoh module-deploy serialization (msgpack -> dicts -> validation reject);
applies to any blueprint, works under LCM.
SONIC's native protocol as a first-class task input: wire codec for the
1280-byte packed-header format (round-trip verified against NVIDIA's own
builders), command/planner/pose topic routing polled non-blocking from
compute(), StreamedMotionMerger ported faithfully (sliding window,
catch-up, protocol v1/v2/v3, encode-mode selection), SMPL + wrist encoder
fields for mode 2, wire-order 17-DoF upper-body targets with velocities,
direct planner commands overriding twist mapping, g1_debug state PUB.

E2E verified in sim against the live blueprint driven ONLY by NVIDIA's
sender code: planner-mode walk, then protocol-v1 streamed-motion playback
of the macarena reference clip - 110 planner + 110 pose messages, zero
decode errors, zero tick errors, no falls (base z 0.79 at end).
TomCC7 and others added 30 commits August 26, 2026 12:00
PICO WebXR omits its platform-reserved menu button, so controller packets contain six buttons. Treat the trailing menu slot as optional instead of rejecting otherwise valid joystick input.
# Conflicts:
#	dimos/teleop/webxr/extensions.py
#	dimos/teleop/webxr/test_module.py
…eat/pico-teleop-sonic

# Conflicts:
#	dimos/robot/test_all_blueprints.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants