Skip to main content

Sim2Real Deployment

Deploy Teleopit to control a physical Unitree G1 robot via g1_bridge_sdk (C++ DDS bridge).

tip

For Pico 4 / Pico 4 Ultra VR deployment, see the complete Pico VR Tutorial.

Input Sources

SourceConfigDocumentation
Pico 4 / Pico 4 Ultra--config-name pico4_sim2realPico VR
Offline BVH filesDefault configThis page

Prerequisites

Hardware:

  • Unitree G1 (29 DOF)
  • Unitree wireless remote controller
  • Network connection between robot and control PC
  • Pico 4 headset, or offline BVH motion files

Software:

git submodule update --init --recursive
bash scripts/setup/setup_g1_bridge.sh
pip install -e '.[sim2real]'

For Pico path, also run: bash scripts/setup/setup_pico4.sh

Offline BVH Playback

python scripts/run/run_sim2real.py \
controller.policy_path=track.onnx \
real_robot.network_interface=eth0 \
input.bvh_file=data/sample_bvh/aiming1_subject1.bvh

Remote Controller Mapping

ButtonAction
StartEnter STANDING
YEnter playback / MOCAP
APause / Resume
BReplay from start
XReturn to STANDING
L1+R1Emergency stop (DAMPING)

Control Modes

ModeData FlowUse Case
STANDINGDefault pose -> RL policy -> jointsStartup, recovery, waiting
MOCAPPico/BVH -> retarget -> RL policy -> jointsTeleoperation / playback
DAMPINGSend damping commandEmergency stop

State Machine

                     +-----------------------------+
| L1+R1 E-stop (any state) |
v |
[IDLE] --Start--> [STANDING] --Y--> [MOCAP] --X--> [STANDING]
^ |
+----------Y------------+
^ |
+------------------Start---------------------------+
[DAMPING]

Pico MOCAP Sub-states

When using input.provider=pico4, the MOCAP mode has additional sub-states:

  • ACTIVE: Normal live mocap tracking
  • PAUSED: Freeze reference pose; robot maintains balance but stops following
  • RESUMING: Clear realtime reference buffer, rebuild yaw/pivot alignment, smooth transition back to live mocap

Common Parameters

# Adjust control frequency
policy_hz=30

# Specify BVH file
input.bvh_file=data/sample_bvh/aiming1_subject1.bvh

# Pico timeout
input.pico4_timeout=30

# Pause/resume transition
pause_resume_transition_duration=1.5
pause_resume_warmup_steps=3

# Network interface
real_robot.network_interface=enp3s0

Standalone Standing Test

A minimal script for quick hardware and policy verification, independent of the main framework:

python scripts/run/standalone_standing.py \
--policy track.onnx \
--network-interface eth0

Supports --dry-run for safe timing benchmarks without sending motor commands.