FTH 1 · Enseñar a caminar|INEMA.CLUB-PRO

Clase 3 · 16 min

Observación, acción, recompensa y fin de episodio

Antes de entrenar, el problema tiene que convertirse en un entorno: qué ve la policy, qué envía, cuánto gana y cuándo termina el episodio. En esta clase lees las cuatro partes en el formato "manager-based" de Isaac Lab y mjlab, en una versión mínima en MuJoCo puro, y ejecutas un episodio con tres policies distintas.

Comenzar la clase
Notebook abierto sobre un escritorio oscuro mostrando un robot humanoide en simulación 3D, desenfocado, con un cuaderno y una taza al lado.

En esta clase vas a

  1. 1Entorno "manager-based": términos con nombre, no un step() opaco
  2. 2Observación de 96 números (480 con historial de 5) y acción de 29
  3. 3Fin de episodio: caída o tiempo
  4. 4La acción aleatoria cae en 1,3 s; la lista llega a los 20 s

Objetivo: leer las partes de un entorno de locomoción y ejecutar un episodio con tres acciones diferentes.

01Las piezas de un entorno de locomoción

Haz clic en cada bloque. En Isaac Lab y mjlab, cada uno es una lista de términos con nombre y peso.

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

mjlab e Isaac Lab tienen además eventos (empujón, randomización) y currículo, que entran en las clases 7 y 8.

02Un episodio con acción aleatoria

checar_ambiente.py imprime las cuatro partes y corre un episodio. La acción aleatoria es lo que hace una policy recién creada, antes de cualquier entrenamiento.

Terminal · las cuatro partes
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/checar_ambiente.py --acao aleatoria; echo "saída: $?"
Ejemplo del repositorio
observação: 96 números = (base_ang_vel 3 + projected_gravity 3 + velocity_commands 3 + joint_pos_rel 29 + joint_vel_rel 29 + last_action 29) × histórico 1
ação: 29 números → alvo de cada junta = pose padrão + 0.25 × ação, a cada 20 ms
recompensa: track_linear_velocity (+2), track_angular_velocity (+2), upright (+1), pose (+1), dof_pos_limits (-1), action_rate_l2 (-0.1), foot_slip (-0.1)
terminações: queda (pelve inclinada > 70° ou abaixo de 0.3 m) · tempo (1000 passos = 20 s)
comando sorteado: vx = -0.48 m/s · vy = +0.19 m/s · giro = +0.17 rad/s
ação aleatoria: 67 passos · recompensa somada: -5.44
episódio terminou por: queda em t = 1.34 s
saída: 0

96 números de observación, 29 de acción, 7 términos de reward y dos terminaciones. Con acción aleatoria, caída en 1,34 s y reward negativo: los castigos (límites, temblor) pesaron más que los premios.

03Acción cero y acción lista

Misma semilla, mismo comando sorteado. Solo cambia quién decide la acción.

Terminal · cero × lista
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
for x in zero pronta; do python3 kit/checar_ambiente.py --acao $x | tail -2; done
Ejemplo del repositorio
ação zero: 70 passos · recompensa somada: 3.78
episódio terminou por: queda em t = 1.40 s
ação pronta: 1000 passos · recompensa somada: 108.61
episódio terminou por: tempo em t = 20.00 s

La acción cero también cae (1,40 s), pero con reward positivo: se mantuvo un poco erguido y cerca de la pose por defecto antes de caer. La policy lista llega al corte de tiempo (1.000 pasos) con 108,61 de reward. El episodio que termina por tempo es el que el entrenamiento quiere.

04El mismo entorno en mjlab (mostrado)

Cómo aparecen las piezas en el archivo de configuración de la tarea de velocidad de mjlab (commit 8bb2bc9, 18/10/2026). No se ejecuta aquí: requiere GPU NVIDIA.

1. Clases

En velocity_env_cfg.py, las observaciones, acciones, comandos, rewards, terminaciones, eventos y currículo son diccionarios de términos (ObservationTermCfg, RewardTermCfg, TerminationTermCfg…), cada uno con nombre, función y parámetros.

05Práctica

Saber exactamente qué entra y qué sale de la policy.

E1 · Las cuatro partes

5 min

Corre checar_ambiente.py con acción aleatoria y comprueba la cuenta 3 + 3 + 3 + 29 + 29 + 29.

Listo cuando: python3 kit/checar_ambiente.py --acao aleatoria; echo "saída: $?" → observação: 96 números y episódio terminou por: queda em t = 1.34 s.

E2 · Quién llega al final

3 min

Corre cero × lista y anota por qué terminó cada episodio.

Listo cuando: la salida muestra episódio terminou por: queda em t = 1.40 s (cero) y episódio terminou por: tempo em t = 20.00 s (lista).

E3 · Otra semilla

5 min

Corre con --seed 1, 2 y 3 (acción aleatoria) y mira cómo cambia el comando. Escribe por qué la semilla fija importa para comparar dos entrenamientos.

Listo cuando: tres líneas comando sorteado: distintas, y la misma semilla repetida da la misma salida.

06Prueba de la clase

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

Pregunta 1 de 3

¿Por qué la policy lista recibe 480 números y no 96?competencia

07En tres frases

PiezasComando, observación, acción, recompensa y término, cada uno como una lista de términos con nombre.
Tamaños96 números de observación (480 con historial) y 29 de acción, objetivo = pose por defecto + 0,25 × acción.
MedidaLa aleatoria cae a los 1,34 s; la ya entrenada llega a los 20 s con 108,61.

Para ir más allá

Clase anteriorPróxima clase