E1 · Três freios
5 minRode 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).
Aula 2 · 16 min
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
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.
Clique em cada bloco. É o laço que roda dentro de cada uma das 29 juntas.
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.
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.
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; donesobressinal: 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.
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°.
F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/ficar_em_pe.py --kp 300 --kd 5; echo "saída: $?"F=${FTH:-$HOME/fth}; cd $F/locomocao && . $F/.venv/bin/activate
python3 kit/ficar_em_pe.py --ganhos rl_lab; echo "saída: $?"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.
ganhos: kp/kd por junta do unitree_rl_lab altura da pelve: 0.79 m no início → 0.09 m após 5 s · inclinação: 95° maior torque pedido: 41 N·m · juntas que bateram no limite de torque: 2 de pé (pelve entre 0.70 e 0.85 m, inclinação < 20°): não saída: 1
Com os ganhos por junta do deploy.yaml (quadril 100/2, joelho 150/4, tornozelo 40/2, cintura 200/5, braços 40/10), o robô desaba e duas juntas batem no limite de torque. Medido aqui com o mesmo kp em todas as juntas, o G1 parado só fica de pé com kp a partir de uns 200.
Não é defeito: a política foi treinada com esses ganhos e é ela que fecha o equilíbrio. Trocar os ganhos invalida a política.
ERRO: passe --kp e --kd (ex.: --kp 100 --kd 2) ou --ganhos rl_lab. saída: 1
O script exige os dois ganhos ou o conjunto pronto. PD é um par: kp sem kd é uma mola sem freio.
O que muda quando você lê um deploy.yaml de verdade.
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.
A pose padrão e as ações vêm na ordem do Isaac Lab, e joint_ids_map converte. Misturar as ordens derruba o robô em 1 s: o curso 2, aula 6, mostra o erro.
Os ganhos entram no treino: a política aprende a andar com aquele PD. No robô, usar outros kp/kd é rodar uma política diferente da treinada.
Sentir o PD antes de pôr uma rede em cima dele.
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).
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.
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).
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
Pergunta 2 de 3
Com os ganhos do deploy.yaml e sem política, o G1 cai. O que isso diz?
Pergunta 3 de 3
Onde o kit e o robô rodam o PD?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.