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.
Aula 1 · 16 min
Uma política que anda no simulador e cai no robô: é o problema do curso. Nesta aula você monta a bancada, roda a política de marcha pronta do Unitree G1 no "sim" e num "real simulado" com parâmetros escondidos, e descobre que nenhuma diferença sozinha a derruba; a soma delas, sim.
Começar a aula
Objetivo: medir o gap rodando a mesma política em "sim" e "real simulado" e achar que nenhum parâmetro sozinho a derruba.
Clique em cada bloco. São as cinco fontes de gap que este curso mede.
Nenhuma dessas diferenças some. O sim-to-real é deixar a política robusta a elas, medir as que dá para medir e testar antes do chão.
O que roda nas práticas deste curso. Clique em cada etapa.
A Unitree publica no unitree_rl_lab uma política de marcha do G1 29 GDL já treinada no Isaac Lab e exportada em ONNX, com o arquivo de implantação deploy.yaml (ordem das juntas, kp e kd, pose padrão, escalas). Licença Apache-2.0.
Ela recebe 480 números (5 instantes de velocidade angular, gravidade projetada, comando, juntas e última ação) e devolve 29 alvos de posição a 50 Hz.
O G1 do MuJoCo Menagerie (o mesmo do curso 0) com o PD da política dentro do MuJoCo: atuador de posição com o kp e o kd do deploy.yaml.
Rodar no MuJoCo uma política treinada no Isaac Lab já é cruzar de um motor de física para outro.
Você não tem um G1. O "robô real" do curso é o mesmo MuJoCo com quatro parâmetros escondidos em kit/mundos/real.json. Não abra o arquivo antes da aula 3: lá você descobre um deles por identificação de sistema.
É um ensaio, não o robô: o que ele ensina é o método, não o número.
--so kp faz o "real" diferir só no kp. Rodando cada parâmetro sozinho, você vê que nenhum derruba a política, mas o kp sozinho já a faz andar 50 % mais rápido do que o pedido.
Gap raramente é uma causa só: é a soma de pequenas diferenças.
Se você fez o curso 0, o venv e o Menagerie já estão em ~/fth: o bloco só acrescenta o onnxruntime, o G1 no sparse-checkout e a pasta da política do unitree_rl_lab, fixada no commit testado.
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 onnxruntime==1.31.0 pyyaml
[ -d sim2real ] || git clone -q --depth 1 https://github.com/inematds/formacao-fth-sim2real-v72 sim2real
[ -d mujoco_menagerie ] || git clone -q --filter=blob:none --sparse https://github.com/google-deepmind/mujoco_menagerie
git -C mujoco_menagerie sparse-checkout add unitree_g1 && git -C mujoco_menagerie checkout -q 62ab00f
[ -d unitree_rl_lab ] || git clone -q --filter=blob:none --sparse https://github.com/unitreerobotics/unitree_rl_lab
git -C unitree_rl_lab sparse-checkout set deploy/robots/g1_29dof/config/policy/velocity
git -C unitree_rl_lab checkout -q 4960b84 && git -C unitree_rl_lab log -1 --format='unitree_rl_lab %h (%ad)' --date=short
python3 -c "import mujoco, onnxruntime; print('mujoco', mujoco.__version__, '· onnxruntime', onnxruntime.__version__)"unitree_rl_lab 4960b84 (2025-11-19) mujoco 3.16.0 · onnxruntime 1.31.0
Duas linhas e nenhum erro. A política vem do commit 4960b84 do unitree_rl_lab: fixe-o, porque um policy.onnx novo pode ter outra ordem de entradas.
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 (unitree_rl_lab no sparse-checkout). saída: 1
Os scripts procuram tudo em ~/fth (ou na pasta da variável FTH). Se a preparação não rodou, o erro diz o caminho que faltou.
O dois_mundos.py roda 10 s andando a 0,5 m/s em cada mundo. Queda = pelve abaixo de 0,5 m. Sai 1 se algum mundo caiu.
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/dois_mundos.py; echo "saída: $?"F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
for p in atrito massa kp atraso_ms; do python3 kit/dois_mundos.py --so $p | tail -1; donepolítica: unitree_rl_lab G1 29 GDL velocity v0 (ONNX, 480 entradas) · comando 0.50 m/s · 10 s sim queda: não · andou 4.7 m em 10 s (vel. 0.47 m/s; pedida 0.50) real simulado queda: sim em t = 2.3 s (andou 1.9 m) saída: 1
No sim, 4,7 m em 10 s (0,47 m/s para 0,50 pedidos). No "real simulado", queda aos 2,3 s.
real simulado (só atrito) queda: não · andou 4.7 m em 10 s (vel. 0.47 m/s; pedida 0.50) real simulado (só massa) queda: não · andou 4.6 m em 10 s (vel. 0.46 m/s; pedida 0.50) real simulado (só kp) queda: não · andou 7.5 m em 10 s (vel. 0.75 m/s; pedida 0.50) real simulado (só atraso_ms) queda: não · andou 4.6 m em 10 s (vel. 0.46 m/s; pedida 0.50)
Nenhum sozinho derruba. O kp sozinho faz o robô andar a 0,75 m/s: o PD mais mole deixa as pernas atrasarem, e a política compensa empurrando mais.
Medir o gap antes de tentar fechá-lo.
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.
Rode a mesma política nos dois mundos e anote quanto ela andou em cada um.
Pronto quando: python3 kit/dois_mundos.py; echo "saída: $?" → real simulado … queda: sim em t = 2.3 s e saída: 1.
Rode o laço "um parâmetro por vez" e escreva qual parâmetro sozinho mais muda o comportamento e o que muda.
Pronto quando: as 4 linhas mostram queda: não e a do kp mostra vel. 0.75 m/s; pedida 0.50; você escreveu "nenhum derruba sozinho; o kp muda a velocidade".
A explicação aparece depois da sua resposta.
Pergunta 1 de 3
Cada parâmetro do "real simulado", sozinho, não derruba a política; os quatro juntos derrubam. O que isso ensina?competência
Pergunta 2 de 3
Rodar no MuJoCo uma política treinada no Isaac Lab já é:
Pergunta 3 de 3
Só com o kp mais baixo, o robô anda a 0,75 m/s quando o pedido é 0,50. Por quê?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.