FTH 4 · Operar um humanoide real|INEMA.CLUB-PRO

Aula 5 · 15 min

Quando cai: detectar, amortecer e levantar

Todo humanoide em teste cai. O que separa um laboratório preparado de um robô quebrado é o que o software faz nos primeiros décimos de segundo e o que as pessoas fazem depois. Nesta aula o G1 simulado cai de verdade, e o seu detector pela IMU manda amortecimento sem tentar segurar o tombo.

Começar a aula
Robô humanoide deitado de lado sobre um tapete cinza num laboratório escuro, membros relaxados, depois de uma queda controlada.

Nesta aula você vai

  1. 1Por que segurar uma pose com PD não é equilíbrio
  2. 2Inclinação com limiar: cedo demais × tarde demais
  3. 3Amortecer em vez de travar os motores
  4. 4Levantar é procedimento humano, depois da inspeção

Objetivo: detectar a queda do G1 pela inclinação da IMU e mandar amortecimento, sem tentar levantar sozinho.

01Da inclinação à inspeção

Clique em cada etapa.

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

O que o robô faz sozinho termina no amortecimento. O resto é das pessoas.

02Três coisas que a queda ensina

Clique em cada uma.

1. PD não equilibra

Na prática desta aula, o script segura a pose inicial com os ganhos do exemplo oficial. Solto do elástico, o G1 do simulador cai logo em seguida, sem empurrão nenhum.

Ficar de pé exige controle de equilíbrio: o do fabricante (alto nível) ou a sua política (cursos 1 e 2).

03Soltar, cair, detectar

O simulador segura o G1 no elástico com os pés no chão e solta em t = 3 s. O queda.py segura a pose com PD, vigia a inclinação e amortece ao passar de 40°.

Terminal · simulador + detector
F=${FTH:-$HOME/fth}; cd $F/operar && . $F/.venv/bin/activate
python3 kit/sim.py --s 12 --soltar-em 3 &
python3 kit/queda.py; echo "saída: $?"
wait
Trecho · kit/queda.py
    incl = op.inclinacao(s.imu_state.quaternion)
    incl_max = max(incl_max, incl)
    t = t_ciclo - inicio
    if t10 is None and incl > 10:
        t10 = t
    if caiu is None and incl > a.limite:
        caiu = t
Terminal · o erro comum: limiar alto demais
F=${FTH:-$HOME/fth}; cd $F/operar && . $F/.venv/bin/activate
python3 kit/sim.py --s 12 --soltar-em 3 > /dev/null &
python3 kit/queda.py --limite 170; echo "saída: $?"
wait
Exemplo do repositório
simulador: G1 29 motores · DDS domínio 1 em lo · 12 s · suspenso: não · elástico solta em t = 3 s
segurando a pose inicial com PD · limiar de queda: 40° de inclinação do tronco
queda detectada: inclinação passou de 40° (≈ 500 ms depois de passar de 10°)
amortecimento enviado: kp=0, kd=2 em todos os motores (sem tentar levantar)
no fim: inclinação acima de 40°: sim · motores amortecidos
saída: 0
simulador: fim em t = 12.0 s · robô no chão

A queda leva cerca de meio segundo dos 10° aos 40°. O detector age no meio do tombo e o robô termina no chão com os motores amortecidos.

04Prática

Cair de propósito, no simulador.

E1 · Detectar a queda

5 min

Rode o bloco do detector e anote quanto tempo o tombo levou dos 10° aos 40°.

Pronto quando: python3 kit/queda.py; echo "saída: $?" → queda detectada: inclinação passou de 40°, amortecimento enviado e saída: 0.

E2 · O limiar errado

5 min

Rode o bloco do erro comum e escreva, numa linha, que limiar você usaria no seu robô e por quê.

Pronto quando: python3 kit/queda.py --limite 170; echo "saída: $?" → nenhuma queda detectada e saída: 1.

E3 · O pós-queda no checklist

5 min

No seu ~/fth/checklist.yaml, acrescente ao item 8 o limiar escolhido e quem decide religar depois de uma queda.

Pronto quando: python3 operar/kit/conferir_checklist.py checklist.yaml continua em 12 itens, 0 em branco.

05Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 4

O script segurou a pose com PD e o G1 caiu mesmo assim. Por quê?competência

06Em três frases

CaiPD segurando pose não equilibra: solto, o G1 cai.
DetectaInclinação da IMU acima do limiar → amortecimento.
DepoisParar, inspecionar, registrar; levantar é com as pessoas.

Para ir além

Aula anteriorPróxima aula