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

Clase 2 · 16 min

La capa de abajo: control PD en las articulaciones

Entre la política y el motor hay un controlador PD por articulación, con kp y kd elegidos en el entrenamiento. En esta clase mides la respuesta de una rodilla a un escalón con tres valores de kd, dejas al G1 de pie solo con el PD y descubres por qué los ganancias de la política, por sí solos, no sostienen al robot.

Comenzar la clase
Rodilla mecánica de robot humanoide sujeta a un soporte de aluminio sobre una mesa de trabajo, con un osciloscopio desenfocado al fondo que muestra una curva amortiguada.

En esta clase vas a

  1. 1Torque = kp × (objetivo − posición) − kd × velocidad, limitado por el motor
  2. 2Sobreimpulso de 49 % sin kd; 1 % con kd 2
  3. 3Las ganancias por articulación del deploy.yaml (rodilla 150/4, tobillo 40/2)
  4. 4Un PD rígido sostiene al G1; las ganancias de la política, solas, no

Objetivo: medir el efecto de kp y kd en una articulación y dejar al G1 de pie solo con el PD, entendiendo por qué los ganancias de la política no bastan sin ella.

01Del objetivo al torque

Haz clic en cada bloque. Es el lazo que corre dentro de cada una de las 29 articulaciones.

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

No hay término I: el PID completo con integral y ajuste clásico es tema del curso robot. En los robots de RL, quien corrige el error que sobra es la política.

02Una rodilla, tres frenos

El degrau_junta.py saca la articulación libre de la pelvis (el G1 queda colgado en el aire) y manda la rodilla izquierda de 0,3 a 0,8 rad con kp 100 y kd 0, 2 y 10.

Terminal · escalón en la rodilla
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
for kd in 0 2 10; do python3 kit/degrau_junta.py --kp 100 --kd $kd | tail -2; done
Ejemplo del repositorio
sobressinal: 49 % · posição após 1 s: 0.78 rad (erro 0.02 rad)
assentou (erro < 0.02 rad): em 992 ms
sobressinal: 1 % · posição após 1 s: 0.77 rad (erro 0.03 rad)
assentou (erro < 0.02 rad): não, em 1 s
sobressinal: 0 % · posição após 1 s: 0.77 rad (erro 0.03 rad)
assentou (erro < 0.02 rad): não, em 1 s

Dos líneas por kd (0, 2 y 10). Sin kd, la rodilla pasa 49 % del escalón y tarda casi 1 s en asentarse. Con kd 2, pasa solo 1 %. Con kd 2 o 10, la articulación se detiene a 0,03 rad del objetivo: sin término integral, el PD necesita un error para generar el torque que sostiene el peso de la pierna.

03El G1 de pie solo con el PD

El ficar_em_pe.py pone al robot en el suelo en la pose por defecto y sostiene cada articulación durante 5 s, sin política. De pie = pelvis entre 0,70 y 0,85 m e inclinación menor de 20°.

Terminal · kp 300, kd 5 en todas
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/ficar_em_pe.py --kp 300 --kd 5; echo "saída: $?"
Terminal · las ganancias de la policy
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/ficar_em_pe.py --ganhos rl_lab; echo "saída: $?"
Ejemplo del repositorio
ganhos: kp = 300 · kd = 5 em todas as juntas
altura da pelve: 0.79 m no início → 0.78 m após 5 s · inclinação: 1°
maior torque pedido: 12 N·m · juntas que bateram no limite de torque: 0
de pé (pelve entre 0.70 e 0.85 m, inclinação < 20°): sim
saída: 0

Con kp 300 en todas las articulaciones, el G1 se vuelve una estatua: se queda de pie, inclinado 1°, pidiendo como máximo 12 N·m.

04Cómo guardan el PD los repositorios de RL

Qué cambia cuando lees un deploy.yaml de verdad.

1. Por articulación

En el deploy.yaml de unitree_rl_lab, stiffness (kp) y damping (kd) vienen en una lista con un valor por articulación, en el orden del SDK de Unitree.

En el robot, el deploy manda q, dq, kp, kd y tau por motor en cada ciclo; el driver hace el PD.

05Práctica

Sentir el PD antes de ponerle una red encima.

E1 · Tres frenos

5 min

Corre el escalón en la rodilla con kd 0, 2 y 10 y anota el sobreimpulso de cada uno.

Listo cuando: la salida muestra sobressinal: 49 % (kd 0) y sobressinal: 1 % (kd 2).

E2 · De pie con PD

3 min

Deja el G1 de pie 5 s solo con el PD rígido.

Listo cuando: python3 kit/ficar_em_pe.py --kp 300 --kd 5; echo "saída: $?" → de pé (pelve entre 0.70 e 0.85 m, inclinação < 20°): sim y saída: 0.

E3 · Encuentra el límite

10 min

Baja el kp (manteniendo kd 5) hasta que el robot se caiga. Anota el menor kp que todavía lo sostiene y compáralo con los 40 del tobillo de la policy.

Listo cuando: tienes un kp con de pé (…): sim y uno menor con de pé (…): não y saída: 1 (el 19/10/2026: 200 sostiene, 175 cae).

06Prueba de la clase

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

Pregunta 1 de 3

Con kd 2, la rodilla se detiene a 0,03 rad del objetivo y no llega. ¿Por qué?competencia

07En tres frases

PDTorque = kp × error − kd × velocidad, recortado al límite del motor.
MedidaSin kd, 49 % de sobreimpulso; con kd 2, 1 %, y un error de 0,03 rad que solo la policy corrige.
ReglaLas ganancias forman parte de la policy: si cambias las ganancias, cambias la policy.

Para ir más allá

Clase anteriorPróxima clase