FTH 3 · Corpo inteiro|INEMA.CLUB-PRO

Aula 1 · 15 min

Do andar ao fazer: controle de corpo inteiro

Andar é o começo. Para pegar uma caixa, acenar ou obedecer a um VLA, o humanoide precisa coordenar pernas, tronco e braços ao mesmo tempo, sem cair. Nesta aula você monta a bancada do curso e conta, num laço de simulação, as três camadas que fazem isso: quem decide, quem coordena o corpo e quem move cada junta.

Começar a aula
Robô humanoide industrial de visor escuro estendendo a mão para uma caixa sobre a mesa, preso por um cabo frouxo a um pórtico.

Nesta aula você vai

  1. 1As três camadas: o VLA (S2 + S1) decide o quê, o S0 coordena o corpo, o PD move o motor
  2. 2Por que cada camada roda numa frequência diferente
  3. 3O paradigma de 2025–26: uma política que rastreia movimento humano
  4. 4A bancada em ~/fth reaproveitada do curso 0

Objetivo: montar a bancada e contar as três camadas de um humanoide de corpo inteiro (VLA, S0 e PD do motor) com a frequência de cada uma.

01Quem decide, quem coordena, quem move

Clique em cada bloco.

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

Nomes S2/S1/S0 como no Helix 02 da Figure (27/01/2026): o VLA é S2 + S1, o controle de corpo inteiro é o S0. O VLA em si é assunto do curso vla-v72.

02O que mudou de 2024 para 2026

Clique em cada etapa.

1. Antes

Controle de humanoide era montado em blocos escritos à mão: planejador de passos, trajetória do pé no ar, perna de apoio e equilíbrio por ZMP ou MPC (modelo preditivo).

Funciona e é interpretável, mas cada habilidade nova pede engenharia nova. A aula 6 do curso 0 da FTH mostrou o centro de massa e o polígono de apoio que estão por trás disso.

03Montar a bancada (reaproveita a do curso 0)

Se você fez o curso 0, o venv e o Menagerie já existem e só o clone deste curso é novo. Se não fez, o mesmo bloco cria tudo. O Menagerie fica fixado no commit testado.

Terminal · preparar ~/fth
F=${FTH:-$HOME/fth}; mkdir -p $F && cd $F
[ -d .venv ] || python3.12 -m venv .venv
. .venv/bin/activate && pip install -q mujoco==3.16.0 numpy
[ -d corpo-inteiro ] || git clone -q --depth 1 https://github.com/inematds/formacao-fth-corpo-inteiro-v72 corpo-inteiro
[ -d mujoco_menagerie ] || git clone -q --filter=blob:none --sparse https://github.com/google-deepmind/mujoco_menagerie
cd mujoco_menagerie && git sparse-checkout add unitree_g1
git checkout -q 62ab00f && git log -1 --format='menagerie %h (%ad)' --date=short
python3 -c "import mujoco, numpy; print('mujoco', mujoco.__version__, '· numpy', numpy.__version__)"
Exemplo do repositório
menagerie 62ab00f (2026-10-15)
mujoco 3.16.0 · numpy 2.5.4

Duas linhas e nenhum erro. Versão diferente do MuJoCo pode mudar a última casa dos números das próximas aulas: fixe a versão.

04Contar as camadas num laço de 2 segundos

O hierarquia.py roda o G1 de pé por 2 s. A cada 200 ms (tarefa) troca o alvo da mão direita; a cada 20 ms (S0) refaz a IK do braço; a cada 2 ms dá um passo de física com o PD dos motores.

Terminal · as três camadas
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/hierarquia.py; echo "saída: $?"
Trecho · kit/hierarquia.py
        if i % k2 == 0:  # tarefa (S2+S1 num VLA): decide "o quê" (aqui, um roteiro de alvos)
            alvo = alvos[n2 % len(alvos)]
            n2 += 1
        if i % k1 == 0:  # S0: controle de corpo inteiro, decide "como" o corpo chega lá
Exemplo do repositório
simulado: 2 s · passo de física 2 ms
tarefa (VLA: S2+S1)      :   10 chamadas (5 Hz)
S0 corpo inteiro (IK)    :  100 chamadas (50 Hz)
PD do motor + física     : 1000 passos   (500 Hz)
mão direita a 0.7 cm do último alvo · pelve a 0.79 m · de pé: sim
3 camadas
saída: 0

1000 passos do PD para 100 decisões do S0 e 10 da tarefa. A mão termina a menos de 1 cm do último alvo e o robô continua de pé.

05Prática

Bancada, laço e frequências.

E1 · Bancada pronta

10 min

Rode o bloco de preparação. Se você já tinha ~/fth do curso 0, confirme que nada foi reinstalado além do clone deste curso.

Pronto quando: cd ~/fth/mujoco_menagerie && git log -1 --format=%h → 62ab00f.

E2 · As três camadas

5 min

Rode o hierarquia.py e anote quantas vezes cada camada foi chamada.

Pronto quando: python3 kit/hierarquia.py; echo "saída: $?" → 3 camadas e saída: 0, com 1000 passos no PD do motor.

E3 · S0 mais rápido

5 min

Rode com o S0 a 100 Hz e compare a distância final da mão ao alvo com a de 50 Hz.

Pronto quando: python3 kit/hierarquia.py --wbc-hz 100 | grep S0 → 200 chamadas (100 Hz).

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 4

Num humanoide de corpo inteiro, qual camada roda mais rápido?competência

07Em três frases

Três camadasO VLA (S2 + S1) diz o quê, o S0 coordena o corpo, o PD move o motor.
FrequênciasDo lento para o rápido; as de cima rodam a cada N passos da de baixo.
2026O S0 virou uma política que rastreia movimento humano: é o resto do curso.

Para ir além

Próxima aula