E1 · Treino curto
5 minRode o bloco do treino de 20 iterações.
Pronto quando: timeout 900 python3 kit/treinar.py --iters 20; echo "saída: $?" → checkpoint salvo: ~/fth/treino/ppo/modelo_20.pt, saída: 0, arquivo existe: modelo_20.pt e 21.
Aula 5 · 16 min
O algoritmo que treina quase toda marcha de humanoide hoje é o PPO, rodando milhares de cópias do robô na GPU. Nesta aula você entende o laço coletar, estimar e atualizar, roda um PPO de ~120 linhas com os valores do mjlab em CPU, com 16 robôs, e vê o comando que faz o mesmo com 4.096.
Começar a aula
Objetivo: rodar um treino curto de PPO em CPU que grava checkpoint e log, e ler os valores de um treino de verdade no mjlab.
Clique em cada bloco. O treino repete esse laço milhares de vezes.
Rede do ator e do crítico: 512-256-128 com ELU, observações normalizadas, como no mjlab para o G1.
O kit/ppo.py usa os nomes e os padrões do rl_cfg.py do G1 no mjlab (commit 8bb2bc9, 18/10/2026; biblioteca rsl-rl-lib 5.5.1).
PADRAO = dict(clip_param=0.2, entropy_coef=0.01, value_loss_coef=1.0, num_learning_epochs=5,
num_mini_batches=4, learning_rate=1.0e-3, desired_kl=0.01, gamma=0.99, lam=0.95,
max_grad_norm=1.0, num_steps_per_env=24, init_std=1.0, hidden_dims=(512, 256, 128))16 G1 em paralelo no MuJoCo, um núcleo, com a recompensa da aula 4. O teto de 900 s é folga: aqui levou segundos.
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
timeout 900 python3 kit/treinar.py --iters 20; echo "saída: $?"
test -f $F/treino/ppo/modelo_20.pt && echo "arquivo existe: modelo_20.pt"
wc -l < $F/treino/ppo/progresso.csvPPO em CPU: 16 ambientes × 24 passos = 384 amostras por iteração · obs 96 → ação 29 it 1/20 · recompensa média -1.75 · episódio médio 24.0 passos · quedas 0 it 2/20 · recompensa média -3.33 · episódio médio 42.8 passos · quedas 5 it 3/20 · recompensa média -4.85 · episódio médio 58.6 passos · quedas 10 it 4/20 · recompensa média -3.90 · episódio médio 50.2 passos · quedas 4 it 5/20 · recompensa média -4.38 · episódio médio 52.6 passos · quedas 7 it 6/20 · recompensa média -4.38 · episódio médio 56.5 passos · quedas 4 it 7/20 · recompensa média -5.37 · episódio médio 69.7 passos · quedas 9 it 8/20 · recompensa média -5.28 · episódio médio 68.0 passos · quedas 4 it 9/20 · recompensa média -4.68 · episódio médio 56.8 passos · quedas 9 it 10/20 · recompensa média -4.73 · episódio médio 61.6 passos · quedas 7 it 11/20 · recompensa média -4.45 · episódio médio 52.6 passos · quedas 5 it 12/20 · recompensa média -4.68 · episódio médio 56.9 passos · quedas 9 it 13/20 · recompensa média -4.22 · episódio médio 52.6 passos · quedas 7 it 14/20 · recompensa média -4.56 · episódio médio 55.0 passos · quedas 5 it 15/20 · recompensa média -4.81 · episódio médio 57.1 passos · quedas 8 it 16/20 · recompensa média -4.88 · episódio médio 59.0 passos · quedas 4 it 17/20 · recompensa média -4.56 · episódio médio 56.6 passos · quedas 9 it 18/20 · recompensa média -5.19 · episódio médio 63.4 passos · quedas 7 it 19/20 · recompensa média -4.47 · episódio médio 51.8 passos · quedas 6 it 20/20 · recompensa média -4.64 · episódio médio 57.5 passos · quedas 8 checkpoint salvo: ~/fth/treino/ppo/modelo_20.pt log: ~/fth/treino/ppo/progresso.csv (20 linhas) · tempo total: 9 s saída: 0 arquivo existe: modelo_20.pt 21
Confira o formato, não o valor: 20 linhas it, checkpoint salvo:, o arquivo existe e o progresso.csv tem 21 linhas (cabeçalho + 20). A recompensa média negativa e as quedas mostram que 20 iterações não ensinam o G1 a andar; o mjlab usa max_iterations=30_000. O tempo total muda de uma máquina para outra.
ModuleNotFoundError: No module named 'mujoco'
O Python do sistema não tem o MuJoCo. Ative o venv da bancada (. ~/fth/.venv/bin/activate), que é o que a primeira linha de cada bloco faz.
Comandos dos READMEs oficiais. Pedem GPU NVIDIA e um ambiente próprio para cada ferramenta: não misture no venv do curso.
uv run train Mjlab-Velocity-Flat-Unitree-G1 --env.scene.num-envs 4096
python scripts/rsl_rl/train.py --headless --task Unitree-G1-29dof-Velocity
Três caminhos atuais, todos na GPU. Clique em cada um.
A API "manager-based" do Isaac Lab sobre o MuJoCo Warp 3.16, Apache-2.0, com uv. Exige GPU NVIDIA (no macOS, só avalia). É o parente mais próximo deste kit: os mesmos nomes de termos.
O unitree_rl_lab, o BeyondMimic e o Berkeley Humanoid Lite treinam no Isaac Lab 2.x (fixe a versão que cada README indica). O Isaac Lab 3.0 está em acesso antecipado (EA, 16/09/2026), exige Isaac Sim 6.1 e um ambiente Python 3.12 novo com uv.
(relatado) Segundo a tabela de benchmarks do Isaac Lab citada no robotica-real2sim, a tarefa de velocidade em terreno irregular do G1 do próprio Isaac Lab, com 4.096 ambientes, faz cerca de 82 mil passos/s numa RTX 4090 na 3.0 beta; o número varia com a versão.
O MuJoCo Playground tem a tarefa G1JoystickFlatTerrain, com Python 3.12 + uv, em JAX/MJX; o treino com MJWarp foi anunciado em beta.
O legged_gym, sobre o Isaac Gym (2021), mostrou que dá para treinar marcha em minutos com milhares de ambientes. Hoje é legado: os repositórios conferidos pelo curso usam Isaac Lab ou mjlab.
Ver o laço rodar inteiro antes de tentar fazê-lo aprender.
Rode o bloco do treino de 20 iterações.
Pronto quando: timeout 900 python3 kit/treinar.py --iters 20; echo "saída: $?" → checkpoint salvo: ~/fth/treino/ppo/modelo_20.pt, saída: 0, arquivo existe: modelo_20.pt e 21.
Rode de novo com --envs 32 --iters 10 --saida ~/fth/treino/ppo32 e compare as amostras por iteração e o tempo total.
Pronto quando: a primeira linha diz 32 ambientes × 24 passos = 768 amostras por iteração e existe ~/fth/treino/ppo32/modelo_10.pt.
Com os valores do mjlab (4.096 ambientes, 24 passos, 30.000 iterações), calcule quantas amostras um treino completo coleta. Escreva quantas vezes isso é maior que o seu treino de 20 iterações.
Pronto quando: você escreveu 98.304 amostras por iteração e cerca de 2,9 bilhões no treino completo (384 × 20 = 7.680 no seu: cerca de 384 mil vezes mais).
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
O que o recorte (clip 0,2) faz no PPO?competência
Pergunta 2 de 3
O treino de 20 iterações terminou com recompensa negativa. Como saber se ele "funcionou"?
Pergunta 3 de 3
Por que o curso não roda o mjlab nem o Isaac Lab na prática?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.