FTH 2 · Del simulador al suelo|INEMA.CLUB-PRO

Clase 3 · 17 min

Identificación de sistemas: medir para modelar

Randomizar cubre lo que no sabes; identificar reduce lo que no sabes. En esta clase cuelgas el "robot real" del pórtico, haces que la pierna se balancee en un barrido de frecuencia, grabas los encoders y usas el toolbox de identificación de sistemas del propio MuJoCo para descubrir el kp y el kd que el motor entrega de verdad.

Empezar la clase
Robot humanoide suspendido por correas en un pórtico de acero, con los pies fuera del suelo y cables que conectan la pierna a un equipo de medición.

En esta clase vas a

  1. 1El ensayo de banco: robot colgado, pierna en barrido de 0,5 a 3 Hz
  2. 2El toolbox mujoco.sysid (MuJoCo 3.5+): Parameter, ModelSequences, optimize
  3. 3Error del modelo bajando de 8,16° a menos de 4° en las posiciones
  4. 4Por qué identificar solo el kp sale mal cuando falta algo en el modelo

Objetivo: identificar el kp y el kd del actuador en un ensayo de banco con el toolbox mujoco.sysid y compararlos con el valor oculto.

01Del ensayo al parámetro

Haz clic en cada bloque.

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

Cada ensayo identifica lo que excita. La pierna en el aire no dice nada sobre la fricción del pie.

02Lo que el toolbox hace por ti

mujoco.sysid llegó en MuJoCo 3.5.0 (12/02/2026); aquí, 3.16.0 con el extra [sysid]. Haz clic en cada etapa.

1. Parameter

Cada parámetro tiene valor nominal, rango y una función que escribe el valor en el MjSpec (el modelo editable). En el kit: kp y kd multiplican las ganancias del deploy.yaml en las cuatro articulaciones ensayadas.

03Instalar el toolbox y recolectar el ensayo

El extra [sysid] trae scipy, matplotlib y plotly. El coletar.py graba el ensayo del "robot real" colgado.

Terminal · mujoco[sysid]
F=${FTH:-$HOME/fth}; cd $F && . .venv/bin/activate
pip install -q "mujoco[sysid]==3.16.0"
python3 -c "from mujoco import sysid; print('mujoco.sysid ok:', sysid.optimize.__name__, sysid.Parameter.__name__)"
Terminal · ensayo de banco
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/coletar.py --saida $F/log.npz
Ejemplo del repositorio
ensaio de bancada no mundo 'real': 1999 amostras em 4.0 s · 4 encoders + velocidades
  enc_left_hip_pitch     amplitude medida  18.6°
  enc_left_hip_roll      amplitude medida  29.6°
  enc_left_knee          amplitude medida  50.0°
  enc_left_ankle_pitch   amplitude medida  19.3°
gravado: ~/fth/log.npz

Cuatro articulaciones, 4 s, 1.999 muestras. La rodilla oscila 50° de punta a punta.

04Identificar kp y kd

Parte del modelo nominal (kp = kd = 1,0 × el del deploy.yaml) y ajusta los dos.

Terminal · sysid
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/sysid.py $F/log.npz --revelar; echo "saída: $?"
Terminal · solo el kp (el error común)
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/sysid.py $F/log.npz --parametros kp --revelar | tail -4; echo "saída: ${PIPESTATUS[0]}"
Terminal · el mismo ensayo en el mundo "sim" (E3)
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/coletar.py --mundo sim --saida $F/log-sim.npz | tail -1
python3 kit/sysid.py $F/log-sim.npz | tail -4
Ejemplo del repositorio
log: ~/fth/log.npz · 1999 amostras · sinais: 8 (posição e velocidade de 4 juntas)
resíduo, modelo nominal:       0.034
resíduo, modelo identificado:  0.014
erro das posições na bancada, modelo nominal:       8.16° (RMS)
erro das posições na bancada, modelo identificado:  3.14° (RMS)
kp         nominal   1.00 → identificado   0.57
kd         nominal   1.00 → identificado   1.08
kp         escondido   0.60 · dentro de ±10 %: sim
kd         escondido   1.00 · dentro de ±10 %: sim
saída: 0

El kp vuelve cerca de 0,6 (el motor entrega el 60 % de la ganancia enviada) y el kd queda cerca de 1,0, porque el "real" no tocó el kd. El error de las posiciones cae a menos de la mitad.

05Práctica

Medir el actuador del "robot real".

E1 · Ensayo grabado

5 min

Instala el toolbox y corre el ensayo de banco.

Listo cuando: python3 kit/coletar.py --saida ~/fth/log.npz termina en gravado: ~/fth/log.npz, con enc_left_knee … 50.0°.

E2 · kp y kd identificados

5 min

Corre la identificación y compárala con el valor oculto.

Listo cuando: python3 kit/sysid.py ~/fth/log.npz --revelar; echo "saída: $?" → la línea del kp termina en dentro de ±10 %: sim (oculto 0.60) y saída: 0.

E3 · El ensayo que miente

10 min

Corre el mismo ensayo en el mundo "sim" e identifica (último bloque). Después explica en dos líneas por qué solo el kp, en el log del "real", sale del ±10 %.

Listo cuando: en el bloque del sim, la línea del kp termina en identificado 1.00; escribiste que el retardo ausente en el modelo fue a parar al kp.

06Prueba de la clase

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

Pregunta 1 de 3

¿Por qué el ensayo se hace con el robot colgado del pórtico?competencia

07En tres frases

EnsayoRobot colgado, barrido de 0,5 a 3 Hz, encoders con ruido: 1.999 muestras en 4 s.
Toolboxmujoco.sysid ajusta kp y kd y devuelve el kp a ±10 % del oculto.
CuidadoLo que falta en el modelo se filtra a los parámetros que dejaste libres.

Para ir más allá

Clase anteriorSiguiente clase