E1 · With gantry
5 minRun the boxing replay with the pelvis on the gantry.
Done when: python3 kit/reproduzir.py ~/fth/movimentos/boxe_g1.npz | tail -2 → erro médio de junta: 0.3° and queda: não.
Lesson 4 · 15 min
Having the motion in the robot's format is not the same as making it perform it. If you send only the angles to the motors, it imitates for a second and falls: nobody is handling balance. In this lesson you play the boxing in MuJoCo with and without a gantry, measure each joint's error, and see what BeyondMimic, GMT and SONIC solve.
Start the lesson
Goal: play the motion in MuJoCo with and without a gantry and explain why a tracking policy is needed.
Click each block.
Virtual gantry = the base is put back at the reference pose at every step, like a robot hanging in the first test.
Click on each one. All of them train on a GPU; here they are shown, not run.
Tracks dynamic motions (spinning, running, cartwheel) and uses a guided diffusion policy for tasks without specific training (arXiv 2508.08241, Aug/2025). The whole_body_tracking repository pins Isaac Lab 2.1.0.
As of 10/15/2026, that repository's README says it has been retired: BeyondMimic tracking continues in mjlab, in the Mjlab-Tracking-Flat-Unitree-G1 task.
General tracking with adaptive sampling (easy × hard motions) and a mixture-of-experts layer (arXiv 2506.14770, Jun/2025). Reported by the course research, based on the paper's abstract.
From NVIDIA: 42M parameters, trained on more than 100M frames (about 700 h). It has three public checkpoints for the G1 (original, low latency, and v1.1 from 07/23/2026), 64-dimension tokens, and a 50 Hz controller.
Deployment in C++ and TensorRT; code under Apache-2.0, weights under the NVIDIA Open Model License (commercial use with attribution).
GMR exports CSV for BeyondMimic, whose imitation pipeline mjlab adopted. Your .npz from lesson 3 is the same data in the kit's own format.
The joints receive the reference at each 2 ms step; the base is placed back at the reference pose. The error is the difference between the measured angle and the reference angle at the next step.
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/reproduzir.py $F/movimentos/boxe_g1.npz; echo "saída: $?" if a.modo == "portico":
fth.portico(d, r[:7])
d.ctrl[mot] = r[adr]
mujoco.mj_step(m, d)movimento: boxe_g1.npz · 1200 quadros a 120 Hz · 10.0 s · modo portico passos de física: 4995 (2 ms cada) erro médio de junta: 0.3° · pior junta: right_shoulder_roll_joint (1.9°) queda: não saída: 0
Average error of 0.3°: with the body supported, the PD handles it. The right shoulder, which moves the most in boxing, is the worst.
movimento: boxe_g1.npz · 1200 quadros a 120 Hz · 10.0 s · modo livre passos de física: 839 (2 ms cada) erro médio de junta: 0.5° · pior junta: right_shoulder_roll_joint (2.8°) queda: sim, em t = 1.68 s saída: 0
The same replay, unsupported: it falls at 1.68 s with the joint error still small. Following the angles is not balancing. That is what the tracking policy learns.
Command from the mjlab README (commit 8bb2bc9, 10/18/2026). It requires an NVIDIA GPU and a WandB account to log the motions; it was not run here and is not a prerequisite for the course.
# github.com/mujocolab/mjlab · README (commit 8bb2bc9, 18/10/2026) uv run train Mjlab-Tracking-Flat-Unitree-G1 --registry-name your-org/motions/motion-name --env.scene.num-envs 4096 uv run play Mjlab-Tracking-Flat-Unitree-G1 --wandb-run-path your-org/mjlab/run-id
Measure with and without the gantry.
Run the boxing replay with the pelvis on the gantry.
Done when: python3 kit/reproduzir.py ~/fth/movimentos/boxe_g1.npz | tail -2 → erro médio de junta: 0.3° and queda: não.
Run with --modo livre and note the moment of the fall.
Done when: python3 kit/reproduzir.py ~/fth/movimentos/boxe_g1.npz --modo livre | tail -1 → queda: sim, em t = 1.68 s.
If you did E3 from lesson 3, replay boxe_trecho2.npz with the gantry and compare the average error and the worst joint.
Done when: python3 kit/reproduzir.py ~/fth/movimentos/boxe_trecho2.npz | grep erro → erro médio de junta: 1.5°.
The explanation appears after your answer.
Question 1 of 3
Without the gantry, the joint error is small and the G1 still falls. Why?skill
Question 2 of 3
Where does BeyondMimic tracking live today, according to the README of the original repository?
Question 3 of 3
What does the kit's virtual gantry do?
Choose an option. The explanation appears after you try.