FTH 1 · Ensinar a andar|INEMA.CLUB-PRO

Aula 2 · 16 min

A camada de baixo: controle PD nas juntas

Entre a política e o motor existe um controlador PD por junta, com kp e kd escolhidos no treino. Nesta aula você mede a resposta de um joelho a um degrau com três valores de kd, deixa o G1 de pé só com o PD e descobre por que os ganhos da política, sozinhos, não seguram o robô.

Começar a aula
Joelho mecânico de robô humanoide preso a um suporte de alumínio numa bancada, com um osciloscópio desfocado ao fundo mostrando uma curva amortecida.

Nesta aula você vai

  1. 1Torque = kp × (alvo − posição) − kd × velocidade, limitado pelo motor
  2. 2Sobressinal de 49 % sem kd; 1 % com kd 2
  3. 3Os ganhos por junta do deploy.yaml (joelho 150/4, tornozelo 40/2)
  4. 4PD rígido segura o G1; os ganhos da política, sozinhos, não

Objetivo: medir o efeito de kp e kd numa junta e deixar o G1 de pé só com o PD, entendendo por que os ganhos da política não bastam sem ela.

01Do alvo ao torque

Clique em cada bloco. É o laço que roda dentro de cada uma das 29 juntas.

Clique em cada bloco do diagrama para ver o que ele faz.

Não há termo I: o PID completo com integral e ajuste clássico é assunto do curso robot. Nos robôs de RL, quem corrige o erro que sobra é a política.

02Um joelho, três freios

O degrau_junta.py tira a junta livre da pelve (o G1 fica pendurado no ar) e manda o joelho esquerdo de 0,3 para 0,8 rad com kp 100 e kd 0, 2 e 10.

Terminal · degrau no joelho
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
Exemplo do repositório
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

Duas linhas por kd (0, 2 e 10). Sem kd, o joelho passa 49 % do degrau e leva quase 1 s para assentar. Com kd 2, passa só 1 %. Com kd 2 ou 10, a junta para a 0,03 rad do alvo: sem termo integral, o PD precisa de um erro para fazer o torque que segura o peso da perna.

03O G1 de pé só com o PD

O ficar_em_pe.py põe o robô no chão na pose padrão e segura cada junta por 5 s, sem política. De pé = pelve entre 0,70 e 0,85 m e inclinação abaixo de 20°.

Terminal · kp 300, kd 5 em 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 · os ganhos da política
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/ficar_em_pe.py --ganhos rl_lab; echo "saída: $?"
Exemplo do repositório
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

Com kp 300 em todas as juntas, o G1 vira uma estátua: fica de pé, inclinado 1°, pedindo no máximo 12 N·m.

04Como os repositórios de RL guardam o PD

O que muda quando você lê um deploy.yaml de verdade.

1. Por junta

No deploy.yaml do unitree_rl_lab, stiffness (kp) e damping (kd) vêm numa lista com um valor por junta, na ordem do SDK da Unitree.

No robô, o deploy manda q, dq, kp, kd e tau por motor a cada ciclo; o driver faz o PD.

05Prática

Sentir o PD antes de pôr uma rede em cima dele.

E1 · Três freios

5 min

Rode o degrau no joelho com kd 0, 2 e 10 e anote o sobressinal de cada um.

Pronto quando: a saída mostra sobressinal: 49 % (kd 0) e sobressinal: 1 % (kd 2).

E2 · De pé com PD

3 min

Deixe o G1 de pé 5 s só com o PD rígido.

Pronto quando: 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 e saída: 0.

E3 · Ache o limite

10 min

Baixe o kp (mantendo kd 5) até o robô cair. Escreva o menor kp que ainda segura e compare com os 40 do tornozelo da política.

Pronto quando: você tem um kp com de pé (…): sim e um menor com de pé (…): não e saída: 1 (em 19/10/2026: 200 segura, 175 cai).

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 3

Com kd 2, o joelho para a 0,03 rad do alvo e não chega lá. Por quê?competência

07Em três frases

PDTorque = kp × erro − kd × velocidade, cortado no limite do motor.
MedidaSem kd, 49 % de sobressinal; com kd 2, 1 %, e um erro de 0,03 rad que só a política corrige.
RegraOs ganhos fazem parte da política: troque os ganhos e você troca a política.

Para ir além

Aula anteriorPróxima aula