FTH 3 · Corpo inteiro|INEMA.CLUB-PRO

Aula 4 · 15 min

Uma política que imita qualquer movimento

Ter o movimento no formato do robô não é fazê-lo executar. Mandando só os ângulos para os motores, ele imita por um segundo e cai: ninguém cuida do equilíbrio. Nesta aula você reproduz o boxe no MuJoCo com e sem pórtico, mede o erro de cada junta e vê o que BeyondMimic, GMT e SONIC resolvem.

Começar a aula
Robô humanoide de visor escuro em guarda de boxe num laboratório, com um punho em leve borrão de movimento e um cabo de segurança acima.

Nesta aula você vai

  1. 1Reproduzir uma referência com o PD das juntas
  2. 2Erro de rastreio em graus, por junta
  3. 3Por que seguir ângulos não equilibra o robô
  4. 4BeyondMimic (hoje no mjlab), GMT e SONIC: o que cada um faz

Objetivo: reproduzir o movimento no MuJoCo com e sem pórtico e explicar por que é preciso uma política de rastreio.

01Da referência ao robô de pé

Clique em cada bloco.

Clique em cada bloco do diagrama para ver o que ele faz.

Pórtico virtual = a base é recolocada na pose da referência a cada passo, como um robô suspenso no primeiro teste.

02Quem resolve o rastreio em 2026

Clique em cada um. Todos treinam em GPU; aqui são mostrados, não rodados.

1. BeyondMimic

Rastreia movimentos dinâmicos (giro, corrida, estrela) e usa uma política de difusão guiada para tarefas sem treino específico (arXiv 2508.08241, ago/2025). O repositório whole_body_tracking fixa o Isaac Lab 2.1.0.

Em 15/10/2026 o README desse repositório diz que ele foi aposentado: o rastreio do BeyondMimic continua no mjlab, na tarefa Mjlab-Tracking-Flat-Unitree-G1.

03Replay com a pelve no pórtico

As juntas recebem a referência a cada passo de 2 ms; a base é recolocada na pose da referência. O erro é a diferença entre o ângulo medido e o da referência no passo seguinte.

Terminal · com pórtico
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/reproduzir.py $F/movimentos/boxe_g1.npz; echo "saída: $?"
Trecho · kit/reproduzir.py
        if a.modo == "portico":
            fth.portico(d, r[:7])
        d.ctrl[mot] = r[adr]
        mujoco.mj_step(m, d)
Exemplo do repositório
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

Erro médio de 0,3°: com o corpo sustentado, o PD dá conta. O ombro direito, que mais se mexe no boxe, é o pior.

04O que se usa em escala (mostrado)

Comando do README do mjlab (commit 8bb2bc9, 18/10/2026). Pede GPU NVIDIA e uma conta no WandB para o registro dos movimentos; não foi rodado aqui e não é pré-requisito do curso.

Mostrado · mjlab, rastreio de movimento no G1 (não rodado aqui)
# 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

05Prática

Medir com e sem pórtico.

E1 · Com pórtico

5 min

Rode o replay do boxe com a pelve no pórtico.

Pronto quando: python3 kit/reproduzir.py ~/fth/movimentos/boxe_g1.npz | tail -2 → erro médio de junta: 0.3° e queda: não.

E2 · Sem pórtico

5 min

Rode com --modo livre e anote o instante da queda.

Pronto quando: python3 kit/reproduzir.py ~/fth/movimentos/boxe_g1.npz --modo livre | tail -1 → queda: sim, em t = 1.68 s.

E3 · O segundo trecho

5 min

Se você fez o E3 da aula 3, reproduza boxe_trecho2.npz com pórtico e compare o erro médio e a pior junta.

Pronto quando: python3 kit/reproduzir.py ~/fth/movimentos/boxe_trecho2.npz | grep erro → erro médio de junta: 1.5°.

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 3

Sem pórtico, o erro de junta é pequeno e mesmo assim o G1 cai. Por quê?competência

07Em três frases

ReplaySeguir os ângulos funciona com o corpo sustentado e falha solto.
PolíticaA política de rastreio olha o estado e a referência futura e cuida do equilíbrio.
Onde treinarmjlab (com o pipeline do BeyondMimic) ou SONIC pronto, em GPU.

Para ir além

Aula anteriorPróxima aula