FTH 1 · Ensinar a andar|INEMA.CLUB-PRO

Aula 1 · 16 min

Por que a locomoção virou RL

O Unitree G1 deste curso anda porque uma rede neural manda 29 alvos de junta a cada 20 ms. Nesta aula você monta a bancada, roda a política de marcha pronta do Unitree G1 no MuJoCo, vê o mesmo robô cair sem ela e entende por que o controle clássico deu lugar ao RL em simulação massiva.

Começar a aula
Robô humanoide industrial cinza-grafite, com visor preto, dando um passo largo num corredor escuro de laboratório.

Nesta aula você vai

  1. 1Controle clássico (modelo + otimização) × política aprendida em simulação
  2. 2A política de marcha aberta do G1 (unitree_rl_lab) andando no MuJoCo
  3. 3Com política: 6,6 m em 10 s. Sem política: queda em 1,4 s
  4. 4A bancada ~/fth com versões fixas

Objetivo: rodar a política de marcha pronta do G1 no MuJoCo, medir o que ela faz e comparar com o robô sem política.

01Dois jeitos de fazer um humanoide andar

Clique em cada bloco. Os três primeiros são o caminho clássico; os três últimos, o que o curso pratica.

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

MPC segue vivo como conceito e onde se exige garantia. A prática deste curso é a coluna da direita: simulação, política e PD.

02O que roda nesta aula

Clique em cada etapa.

1. O robô

O Unitree G1 de 29 graus de liberdade do MuJoCo Menagerie, fixado no commit 62ab00f (o mesmo do curso 0). Atuador de posição com o kp e o kd da política.

03Montar a bancada ~/fth

Se você fez o curso 0, o venv e o Menagerie já estão lá: o bloco só acrescenta o que falta (onnxruntime, torch para CPU, a política). Versões fixas, testadas em 19/10/2026.

Terminal · preparar ~/fth
F=${FTH:-$HOME/fth}; mkdir -p $F && cd $F
[ -d .venv ] || python3.12 -m venv .venv
. .venv/bin/activate && pip install -q mujoco==3.16.0 numpy pyyaml onnxruntime==1.31.0
pip install -q torch==2.14.1 --index-url https://download.pytorch.org/whl/cpu
[ -d locomocao ] || git clone -q --depth 1 https://github.com/inematds/formacao-fth-locomocao-v72 locomocao
[ -d mujoco_menagerie ] || git clone -q --filter=blob:none --sparse https://github.com/google-deepmind/mujoco_menagerie
(cd mujoco_menagerie && git sparse-checkout add unitree_g1 && git checkout -q 62ab00f)
[ -d unitree_rl_lab ] || git clone -q --filter=blob:none --sparse https://github.com/unitreerobotics/unitree_rl_lab
cd unitree_rl_lab && git sparse-checkout set deploy/robots/g1_29dof/config/policy/velocity
git checkout -q 4960b84 && git log -1 --format='unitree_rl_lab %h (%ad)' --date=short
python3 -c "import mujoco, onnxruntime, torch; print('mujoco', mujoco.__version__, '· onnxruntime', onnxruntime.__version__, '· torch', torch.__version__)"
Exemplo do repositório
unitree_rl_lab 4960b84 (2025-11-19)
mujoco 3.16.0 · onnxruntime 1.31.0 · torch 2.14.1+cpu

Duas linhas e nenhum erro. Fixe os commits: um policy.onnx de outro commit pode ter outra ordem de entradas. O torch vem da página de wheels de CPU do PyTorch (o curso não precisa de GPU).

04O G1 andando, e o G1 sem política

10 s pedindo 0,7 m/s para a frente. Sai 0 se não caiu, 1 se caiu.

Terminal · andar com a política
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 0.7 --s 10; echo "saída: $?"
Terminal · só o PD, sem política
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 0.7 --s 10 --sem-politica
Terminal · pedir 1,0 m/s
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 1.0 --s 10 | tail -3
Exemplo do repositório
política: unitree_rl_lab velocity v0 (ONNX) · 480 → 29 · 50 Hz
comando: vx = 0.7 m/s por 10 s · simulação a 500 Hz, política a 50 Hz
andou: 6.6 m para a frente · desvio lateral: 0.5 m · velocidade média: 0.66 m/s
altura final da pelve: 0.77 m
caiu: não
saída: 0

6,6 m em 10 s (0,66 m/s para 0,70 pedidos) e a pelve termina a 0,77 m. O desvio lateral de 0,5 m é normal: ninguém corrige a direção, só a velocidade.

05Prática

Ver a política funcionar antes de abrir as peças.

E1 · Bancada pronta

10 min

Rode o bloco de preparação. Se o curso 0 já montou ~/fth, ele só acrescenta o que falta.

Pronto quando: o bloco termina em unitree_rl_lab 4960b84 (2025-11-19) e mujoco 3.16.0 · onnxruntime 1.31.0 · torch 2.14.1+cpu.

E2 · O G1 anda

3 min

Rode a política com 0,7 m/s por 10 s e anote quantos metros a pelve andou.

Pronto quando: python3 kit/andar_demo.py --vx 0.7 --s 10; echo "saída: $?" → caiu: não e saída: 0.

E3 · O contraste

5 min

Rode com --sem-politica e escreva, numa frase, o que mantém o robô de pé quando ele anda.

Pronto quando: a saída mostra caiu: sim, em t = 1.4 s; sua frase diz que é o laço fechado da política (o PD sozinho não corrige o equilíbrio).

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 3

O que a política de marcha do G1 entrega a cada 20 ms?competência

07Em três frases

MudançaA marcha de humanoide passou de modelo + otimização para política treinada em simulação massiva.
CamadasA política manda 29 alvos a 50 Hz; o PD de cada junta faz o torque.
MedidaCom política, 6,6 m em 10 s; sem ela, queda em 1,4 s.

Para ir além

Próxima aula