Skip to main content

BVH Playback on Unitree G1

Use this tutorial to replay an offline BVH motion on a physical Unitree G1. This path does not use Pico tracking.

BVH file -> retarget -> RL policy -> g1_bridge_sdk -> G1

For realtime Pico control, use Pico Sim2Real.

1. Install Runtime Dependencies

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

2. Choose The Network Interface

For wired PC-to-G1 deployment, connect the PC to the robot by Ethernet, run ifconfig, and use the interface connected to G1:

real_robot.network_interface=enp130s0

For onboard deployment, eth0 is usually correct.

3. Run BVH Playback

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

The default sim2real.yaml uses input.provider=bvh and playback.pause_on_end=true, so the final pose is held when the motion reaches the end.

Remote Controls

ButtonAction
StartEnter STANDING
YEnter playback / MOCAP
APause / resume playback
BReplay from frame 0
XReturn to STANDING
L1+R1Emergency stop (DAMPING)

Playback Behavior

  • Y starts the BVH motion from the current playback position.
  • A pauses at the current reference pose and resumes from the same timeline.
  • B resets playback to frame 0 and restarts the policy/reference state.
  • If playback.pause_on_end=true, the final pose is held until B replays or X returns to STANDING.

Common Parameters

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

# Real G1 DDS interface
real_robot.network_interface=enp130s0

# Pause at the final BVH frame
playback.pause_on_end=true

# Smooth transition from standing/current robot state into playback
transition_duration=2.0

# Resume blend for offline playback
pause_resume_transition_duration=1.0

# Control loop rate
policy_hz=50

Troubleshooting

SymptomLikely CauseFix
No LowState receivedWrong network interfaceCheck Ethernet wiring and real_robot.network_interface
Robot enters STANDING but not playbackBVH validation failedCheck input.bvh_file and retarget logs
Playback ends and robot holds poseplayback.pause_on_end=truePress B to replay or X for STANDING
B does nothingNot in offline BVH MOCAP modeEnter MOCAP with Y first