E1 · Bancada pronta
10 minRode 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.
Aula 1 · 16 min
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
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.
Clique em cada bloco. Os três primeiros são o caminho clássico; os três últimos, o que o curso pratica.
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.
Clique em cada etapa.
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.
A Unitree publica no unitree_rl_lab uma política de velocidade do G1 já treinada no Isaac Lab e exportada em ONNX, com o deploy.yaml (ordem das juntas, kp e kd, pose padrão). Licença Apache-2.0. O kit fixa o commit 4960b84.
Rodar no MuJoCo uma política treinada no Isaac Lab já é atravessar de um motor de física para outro. O curso 2 (sim2real) faz disso um portão.
A cada 20 ms a política lê o estado e manda 29 alvos; o MuJoCo integra a 500 Hz (passo de 2 ms) com o PD segurando cada junta no alvo.
O andar_demo.py conta quantos metros a pelve andou e se ela caiu (pelve inclinada mais de 70° ou abaixo de 0,3 m, o mesmo critério do ambiente da aula 3).
--sem-politica deixa só o PD segurando a pose padrão. Ninguém corrige o equilíbrio e o robô cai: o que mantém o G1 de pé andando é o laço fechado da política.
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.
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__)"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).
ERRO: não achei /tmp/sem-bancada/unitree_rl_lab/deploy/robots/g1_29dof/config/policy/velocity/v0/exported/policy.onnx. Rode a preparação da aula 1. saída: 1
Os scripts procuram tudo em ~/fth, ou na pasta da variável FTH. Se a preparação não rodou (ou rodou noutra pasta), o erro diz o caminho que faltou.
10 s pedindo 0,7 m/s para a frente. Sai 0 se não caiu, 1 se caiu.
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 0.7 --s 10; echo "saída: $?"F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 0.7 --s 10 --sem-politicaF=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/andar_demo.py --vx 1.0 --s 10 | tail -3polí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.
política: nenhuma (só PD na pose padrão) comando: vx = 0.7 m/s por 10 s · simulação a 500 Hz, política a 50 Hz andou: 0.8 m para a frente · desvio lateral: 0.0 m · velocidade média: 0.57 m/s altura final da pelve: 0.33 m caiu: sim, em t = 1.4 s
Queda aos 1,4 s. A "velocidade média" de 0,57 m/s aqui é o corpo tombando para a frente, não andar: sempre leia a velocidade junto com caiu.
andou: 9.0 m para a frente · desvio lateral: 1.2 m · velocidade média: 0.90 m/s altura final da pelve: 0.76 m caiu: não
9,0 m em 10 s. 1,0 m/s é o teto de velocidade para a frente com que a política foi treinada (faixa de comando do unitree_rl_lab: −0,5 a 1,0 m/s).
Ver a política funcionar antes de abrir as peças.
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.
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.
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).
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
Pergunta 2 de 3
Sem política, o robô "andou" a 0,57 m/s e caiu aos 1,4 s. Como ler esse número?
Pergunta 3 de 3
O que a Figure relatou sobre o Helix 02, em janeiro de 2026?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.