E1 · Retardo medido
3 minDa el escalón en la rodilla en los dos mundos.
Listo cuando: python3 kit/atraso.py --medir → atraso medido (real − sim): 22 ms.
Clase 4 · 16 min
Entre que la política decide y el motor gira hay red, bucle del controlador y PD del motor. En esta clase mides el retardo (latencia) del "robot real" con un escalón en la rodilla, cuentas las caídas que causan 20 y 40 ms bajo empujón y compensas el kp identificado en la clase 3.
Empezar la clase
Objetivo: medir el retardo del actuador en el banco, contar las caídas que causa bajo un empujón y compensar el kp en el comando.
Haz clic en cada bloque.
El retardo y la saturación son invisibles en la marcha tranquila y aparecen en el empujón.
De lo más simple a lo que se usa cuando lo simple no alcanza.
Lo que MuJoCo e Isaac Lab hacen sin que lo pidas: el torque sale al instante, exactamente igual al PD. Es el "sim" de la clase 1.
Agrega el retardo medido y el límite de torque declarado. MuJoCo 3.5+ aplica el retardo por sí solo (delay y nsample en el actuador); el kit llena el historial con el primer comando para no empezar desde un objetivo cero.
Con sysid (clase 3) y randomización alrededor del valor medido, es lo que hacen muchos proyectos.
Una red neuronal pequeña aprende, con datos del motor real, la relación entre comando, historial de posición y torque entregado, y entra en el simulador en lugar del PD ideal.
Vale la pena cuando el actuador tiene efectos que un parámetro no captura. Exige un banco de pruebas del motor; este curso solo la menciona.
El stack GR00T-WholeBodyControl, de NVIDIA, agregó el 31/08/2026 el escalado de kp y kd por motor contra tropiezos en la política SONIC: sim-to-real también es ajuste fino de PD a la hora de desplegar.
El E3 de esta clase hace la versión mínima: multiplica el kp enviado por el inverso del identificado.
--medir da un escalón de 0,3 rad en la rodilla con el robot colgado. --ms corre la marcha con 6 empujones (120, 150 y 180 N durante 0,2 s, hacia adelante y de lado) por retardo.
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/atraso.py --medirF=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/atraso.py --ms 0 20 40degrau de 0,3 rad no joelho esquerdo, robô pendurado: tempo até o encoder mexer 0,005 rad sim: 8 ms real: 30 ms atraso medido (real − sim): 22 ms
El "real" tarda 22 ms más que el sim en mover la rodilla: los 20 ms de retardo ocultos más un poco del kp más blando, que también retrasa la respuesta.
atraso quedas em 6 empurrões (120/150/180 N, frente e lado, 0,2 s, t = 3 s) 0 ms 2/6 . . . . x x 20 ms 3/6 x x x . . . 40 ms 6/6 x x x x x x (x = caiu, . = ficou de pé; ordem: 120, 150, 180 N para a frente e depois para o lado)
Con 40 ms, cae en los seis. Con 0 ms, aún cae en dos empujones laterales; con 20 ms, en los tres frontales.
No concluyas que "20 ms es mejor de lado que 0 ms". Son seis ensayos con una semilla: el patrón de caídas oscila; lo que se lee es el conteo subiendo con el retardo (2, 3, 6). Para afirmar más, aumenta los empujones y las direcciones.
La clase 3 identificó kp ≈ 0,57 del enviado. Si envías 1/0,57 ≈ 1,75 veces el kp, el motor del "real" entrega algo cercano a lo que la policy espera.
F=${FTH:-$HOME/fth}; cd $F/sim2real && . $F/.venv/bin/activate
python3 kit/dois_mundos.py --kp-comando 1.75; echo "saída: $?"política: unitree_rl_lab G1 29 GDL velocity v0 (ONNX, 480 entradas) · comando 0.50 m/s · 10 s sim queda: não · andou 5.1 m em 10 s (vel. 0.51 m/s; pedida 0.50) real simulado queda: não · andou 4.5 m em 10 s (vel. 0.45 m/s; pedida 0.50) saída: 0
El "real simulado" ahora camina 4,5 m y no se cae (salida 0). El sim, con el kp más duro, sigue caminando. El retardo, la masa y la fricción siguen ahí: la policy aguanta, porque se corrigió la mayor diferencia.
Tiempo y torque del actuador.
Da el escalón en la rodilla en los dos mundos.
Listo cuando: python3 kit/atraso.py --medir → atraso medido (real − sim): 22 ms.
Corre la marcha con empujones en 0, 20 y 40 ms.
Listo cuando: python3 kit/atraso.py --ms 0 20 40 → 0 ms 2/6, 20 ms 3/6, 40 ms 6/6.
Usa el kp que identificaste en la clase 3 (1 dividido por él) y corre los dos mundos de nuevo.
Listo cuando: python3 kit/dois_mundos.py --kp-comando 1.75; echo "saída: $?" → real simulado … queda: não y saída: 0.
La explicación aparece después de tu respuesta.
Pregunta 1 de 3
Sin empujón, la policy camina con los 20 ms de retardo del "real" (clase 1). Con empujón, 40 ms la tumban en 6 de 6. ¿Qué enseña esto?competencia
Pregunta 2 de 3
MuJoCo 3.5+ modela el retardo en el propio actuador. ¿Qué hace el kit además al iniciar?
Pregunta 3 de 3
¿Cuándo vale la pena entrenar una actuator network en vez de PD con retardo?
Elige una alternativa. La explicación aparece después de tu intento.