FTH 0 · El cuerpo del humanoide|INEMA.CLUB-PRO

Clase 2 · 15 min

Abrir un humanoide en el simulador

La ficha técnica de un humanoide dice lo que el fabricante quiere mostrar; el archivo de simulación dice lo que el cuerpo es. En esta clase instalas MuJoCo, descargas solo los humanoides de MuJoCo Menagerie y abres el Unitree G1, leyendo del propio archivo cuántas coordenadas, velocidades y motores tiene.

Comenzar la lección
Monitor en un banco de trabajo oscuro que muestra un robot humanoide en simulación 3D sobre un piso a cuadros.

En esta lección vas a

  1. 1Qué hay en un MJCF: cuerpos, articulaciones, actuadores, sensores y poses guardadas
  2. 2El banco de trabajo en ~/fth: venv, MuJoCo 3.16.0 y Menagerie fijado en un commit
  3. 3MjModel (el cuerpo) y MjData (el estado)
  4. 4Por qué el G1 tiene nq=36, nv=35 y nu=29

Objetivo: instalar MuJoCo 3.16 y Menagerie y abrir el Unitree G1, leyendo nq, nv y nu del propio archivo MJCF.

01Del archivo al paso de simulación

Haz clic en cada bloque.

Haz clic en cada bloque del diagrama para ver qué hace.

La ficha del fabricante y el archivo pueden diferir: la clase 8 enseña a anotar la diferencia.

02Los tres números que vas a leer en todo humanoide

Haz clic en cada uno.

1. nq = 36

La base del humanoide no está fija al suelo: es una articulación libre con 7 números (x, y, z y un cuaternión de 4 para la orientación).

Sumando las 29 articulaciones articuladas, da 36. Es el tamaño de qpos.

03Montar el banco de trabajo (una vez)

Venv propio, MuJoCo fijado en 3.16.0 y el Menagerie fijado en el commit probado. El sparse-checkout descarga solo 4 humanoides (cerca de 150 MB) en lugar del repositorio completo.

Terminal · preparar ~/fth
F=${FTH:-$HOME/fth}; mkdir -p $F && cd $F
python3.12 -m venv .venv && . .venv/bin/activate
pip install -q mujoco==3.16.0 numpy
[ -d anatomia ] || git clone -q --depth 1 https://github.com/inematds/formacao-fth-anatomia-v72 anatomia
[ -d mujoco_menagerie ] || git clone -q --filter=blob:none --sparse https://github.com/google-deepmind/mujoco_menagerie
cd mujoco_menagerie && git sparse-checkout set unitree_g1 unitree_h1 robotis_op3 booster_t1
git checkout -q 62ab00f && git log -1 --format='menagerie %h (%ad)' --date=short
python3 -c "import mujoco, numpy; print('mujoco', mujoco.__version__, '· numpy', numpy.__version__)"
Ejemplo del repositorio
menagerie 62ab00f (2026-10-15)
mujoco 3.16.0 · numpy 2.5.4

Dos líneas y ningún error. Si la versión de MuJoCo es otra, los números de las próximas clases pueden cambiar en la última cifra: fija la versión.

04Abrir el G1 y los otros humanoides

El abrir.py solo lee el modelo e imprime su tamaño. El fragmento del g1.xml muestra de dónde salen los números.

Terminal · abrir el G1
F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
python3 kit/abrir.py unitree_g1/scene.xml; echo "saída: $?"
Terminal · H1, OP3 y Booster T1
F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
for r in unitree_h1 robotis_op3 booster_t1; do
  echo "$r: $(python3 kit/abrir.py $r/scene.xml | sed -n 2p)"
done
Fragmento de mujoco_menagerie/unitree_g1/g1.xml (commit 62ab00f)
<option integrator="implicitfast"/>
<default class="g1">
  <joint armature="0.01" frictionloss="0.3"/>
  <position kp="500" dampratio="1" inheritrange="1"/>
</default>
<!-- ... -->
<joint name="left_knee_joint" axis="0 1 0" range="-0.087267 2.8798" actuatorfrcrange="-139 139"/>
<!-- ... -->
<position class="g1" name="left_knee_joint" joint="left_knee_joint"/>
Opcional · con pantalla: ver el robot
F=${FTH:-$HOME/fth}; $F/.venv/bin/python -m mujoco.viewer --mjcf=$F/mujoco_menagerie/unitree_g1/scene.xml
Ejemplo del repositorio
modelo: g1_29dof_rev_1_0 scene · arquivo unitree_g1/scene.xml
nq=36 nv=35 nu=29
juntas: 30 (1 base flutuante + 29 articuladas) · corpos: 30 · sensores: 4
massa total do modelo: 33.3 kg · passo de simulação: 2 ms
poses salvas (keyframes): stand
altura da base na pose inicial: 0.79 m
saída: 0

33,3 kg en el modelo contra cerca de 35 kg en la ficha de Unitree: el archivo de simulación es una aproximación del robot real.

05Lo que se usa a escala (mostrado)

Para entrenar policies con miles de robots en paralelo, los mismos modelos corren en GPU NVIDIA. No es requisito de este curso: el curso 1 de la formación lo usa.

Mostrado · mjlab, GPU NVIDIA (no ejecutado aquí)
# github.com/mujocolab/mjlab — API de Isaac Lab sobre MuJoCo Warp
uv run train Mjlab-Velocity-Flat-Unitree-G1 --env.scene.num-envs 4096

06Práctica

Banco de trabajo listo y primer modelo abierto.

E1 · Montar el banco de trabajo

10 min

Ejecuta el bloque "preparar ~/fth". Si falta python3.12, instálalo con el gestor de tu sistema (el curso fue probado con Python 3.12.3).

Listo cuando: la salida muestra menagerie 62ab00f (2026-10-15) y mujoco 3.16.0.

E2 · Abrir el G1

3 min

Ejecuta el bloque "abrir el G1" y explica, con tus propias palabras, de dónde sale cada número de la segunda línea.

Listo cuando: python3 kit/abrir.py unitree_g1/scene.xml → nq=36 nv=35 nu=29 y saída: 0.

E3 · El G1 con manos

5 min

Abre unitree_g1/scene_with_hands.xml con el mismo script y comprueba la regla nq = nu + 7.

Listo cuando: python3 kit/abrir.py unitree_g1/scene_with_hands.xml | sed -n 2p → nq=50 nv=49 nu=43.

07Prueba de la clase

La explicación aparece después de tu respuesta.

Pregunta 1 de 4

¿Por qué el G1 tiene nq=36 y no 29?competencia

08En tres frases

ArchivoEl MJCF describe cuerpo, articulaciones, actuadores, sensores y poses.
NúmerosBase libre: nq = nu + 7 y nv = nu + 6.
Banco de trabajo~/fth con MuJoCo 3.16.0 y Menagerie 62ab00f, fijados.

Para ir más allá

Clase anteriorSiguiente clase