E1 · Banco listo
10 minEjecuta el bloque de preparación. Si el curso 0 ya montó ~/fth, solo agrega lo que falta.
Listo cuando: el bloque termina en unitree_rl_lab 4960b84 (2025-11-19) y mujoco 3.16.0 · onnxruntime 1.31.0.
Clase 1 · 16 min
Una política que camina en el simulador y se cae en el robot: ese es el problema del curso. En esta clase montas el banco de pruebas, ejecutas la política de marcha lista del Unitree G1 en el "sim" y en un "real simulado" con parámetros ocultos, y descubres que ninguna diferencia sola la tumba; la suma de ellas, sí.
Empezar la clase
Objetivo: medir el gap corriendo la misma policy en "sim" y "real simulado", y comprobar que ningún parámetro por sí solo la tira.
Haz clic en cada bloque. Son las cinco fuentes de gap que mide este curso.
Ninguna de estas diferencias desaparece. El sim-to-real consiste en volver la policy robusta a ellas, medir las que se pueden medir y probar antes de pisar el suelo.
Lo que se ejecuta en las prácticas de este curso. Haz clic en cada etapa.
Unitree publica en unitree_rl_lab una policy de marcha del G1 de 29 GDL ya entrenada en Isaac Lab y exportada en ONNX, con el archivo de despliegue deploy.yaml (orden de las articulaciones, kp y kd, pose por defecto, escalas). Licencia Apache-2.0.
Recibe 480 números (5 instantes de velocidad angular, gravedad proyectada, comando, articulaciones y última acción) y devuelve 29 objetivos de posición a 50 Hz.
El G1 de MuJoCo Menagerie (el mismo del curso 0) con el PD de la policy dentro de MuJoCo: actuador de posición con el kp y el kd del deploy.yaml.
Ejecutar en MuJoCo una policy entrenada en Isaac Lab ya es cruzar de un motor de física a otro.
No tienes un G1. El "robot real" del curso es el mismo MuJoCo con cuatro parámetros ocultos en kit/mundos/real.json. No abras el archivo antes de la clase 3: allí descubres uno de ellos con identificación de sistemas.
Es un ensayo, no el robot: lo que enseña es el método, no el número.
--so kp hace que el "real" difiera solo en el kp. Si ejecutas cada parámetro por separado, ves que ninguno derriba la policy, pero el kp solo ya la hace caminar un 50 % más rápido de lo pedido.
El gap rara vez tiene una sola causa: es la suma de pequeñas diferencias.
Si hiciste el curso 0, el venv y el Menagerie ya están en ~/fth: el bloque solo agrega onnxruntime, el G1 en el sparse-checkout y la carpeta de la policy de unitree_rl_lab, fijada en el commit probado.
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
Dos líneas y ningún error. La policy viene del commit 4960b84 de unitree_rl_lab: fíjalo, porque un policy.onnx nuevo puede tener otro orden 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
Los scripts buscan todo en ~/fth (o en la carpeta de la variable FTH). Si la preparación no se ejecutó, el error indica la ruta que faltó.
dois_mundos.py ejecuta 10 s caminando a 0,5 m/s en cada mundo. Caída = pelvis por debajo de 0,5 m. Sale con 1 si algún mundo se cayó.
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
En el sim, 4,7 m en 10 s (0,47 m/s para 0,50 pedidos). En el "real simulado", caída a los 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)
Ninguno por sí solo derriba la policy. El kp solo hace que el robot camine a 0,75 m/s: el PD más blando deja que las piernas se retrasen, y la policy compensa empujando más.
Mide el gap antes de intentar cerrarlo.
Ejecuta el bloque de preparación. Si el curso 0 ya montó ~/fth, solo agrega lo que falta.
Listo cuando: el bloque termina en unitree_rl_lab 4960b84 (2025-11-19) y mujoco 3.16.0 · onnxruntime 1.31.0.
Ejecuta la misma policy en los dos mundos y anota cuánto caminó en cada uno.
Listo cuando: python3 kit/dois_mundos.py; echo "saída: $?" → real simulado … queda: sim em t = 2.3 s y saída: 1.
Ejecuta el bucle "un parámetro a la vez" y escribe qué parámetro, por sí solo, cambia más el comportamiento y qué cambia.
Listo cuando: las 4 líneas muestran queda: não y la del kp muestra vel. 0.75 m/s; pedida 0.50; escribiste "ninguno la tumba solo; el kp cambia la velocidad".
La explicación aparece después de tu respuesta.
Pregunta 1 de 3
Cada parámetro del "real simulado", por sí solo, no derriba la policy; los cuatro juntos sí. ¿Qué te enseña esto?competencia
Pregunta 2 de 3
Ejecutar en MuJoCo una policy entrenada en Isaac Lab ya es:
Pregunta 3 de 3
Solo con el kp más bajo, el robot camina a 0,75 m/s cuando lo pedido es 0,50. ¿Por qué?
Elige una alternativa. La explicación aparece después de tu intento.