FTH 3 · Corpo inteiro|INEMA.CLUB-PRO

Aula 5 · 15 min

Teleoperação de corpo inteiro

Teleoperar é o jeito mais rápido de um humanoide fazer uma tarefa nova e de juntar demonstrações para um VLA. O operador mexe os braços num óculos de VR e o robô repete; o atraso é o que estraga. Nesta aula você teleopera os dois braços do G1 por um roteiro e mede a partir de que latência tudo desanda.

Começar a aula
Operador de costas com óculos de realidade virtual e dois controles levantados; à frente, um robô humanoide de visor escuro repete o gesto.

Nesta aula você vai

  1. 1O caminho do gesto: VR, rede, controle de corpo inteiro, junta
  2. 2Latência × horizonte de referência: não confundir os 80 ms do SONIC
  3. 3Alcance do braço: o alvo que nenhuma latência salva
  4. 4Teleop como coleta de dados para VLA (TWIST2, GR00T-WBC)

Objetivo: teleoperar os dois braços do G1 por um roteiro de alvos com latência e medir quantos alvos a mão atinge.

01O caminho de um gesto

Clique em cada bloco.

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

Teleop é laço fechado com um humano dentro: atraso grande faz o operador corrigir o que já passou.

02Três coisas que a pesquisa de 2026 deixa claras

Clique em cada uma.

1. 80 ms

O SONIC tem um checkpoint de "baixa latência" (16/06/2026) que olha 4 quadros futuros a 20 ms: cerca de 80 ms de horizonte de referência. O checkpoint padrão olha 10 quadros (cerca de 200 ms).

O próprio README avisa: esses números não são a latência total da teleoperação, que inclui sensor, rede, pré-processamento e inferência.

03Teleoperar os dois braços por um roteiro

O roteiro kit/passos.json faz o papel do operador: seis deslocamentos de controle, alternando as mãos. O sexto, de propósito, pede 60 cm à frente.

Terminal · teleop com 80 ms
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
python3 kit/teleop_sim.py --roteiro kit/passos.json; echo "saída: $?"
Arquivo · kit/passos.json
{
  "descricao": "Roteiro de teleoperação: deslocamentos do controle de cada mão (em metros, a partir da posição inicial da mão), como um operador de VR moveria. Cada alvo vale até 'janela' segundos depois de enviado.",
  "tolerancia_cm": 3,
  "alvos": [
    {"t": 0.2, "mao": "direita",  "dx": 0.20, "dy": 0.00, "dz": 0.15, "janela": 0.6},
    {"t": 0.9, "mao": "esquerda", "dx": 0.20, "dy": 0.00, "dz": 0.15, "janela": 0.6},
    {"t": 1.6, "mao": "direita",  "dx": 0.25, "dy": 0.10, "dz": 0.30, "janela": 0.6},
    {"t": 2.3, "mao": "esquerda", "dx": 0.25, "dy": -0.10, "dz": 0.30, "janela": 0.6},
    {"t": 3.0, "mao": "direita",  "dx": 0.15, "dy": -0.05, "dz": 0.05, "janela": 0.6},
    {"t": 3.7, "mao": "direita",  "dx": 0.60, "dy": 0.00, "dz": 0.20, "janela": 0.6}
  ]
}
Exemplo do repositório
latência do operador ao robô: 80 ms · tolerância: 3 cm · controle a 50 Hz
alvo 1 · t=0.2 s · mão direita  · atingido em 162 ms
alvo 2 · t=0.9 s · mão esquerda · atingido em 160 ms
alvo 3 · t=1.6 s · mão direita  · atingido em 174 ms
alvo 4 · t=2.3 s · mão esquerda · atingido em 154 ms
alvo 5 · t=3.0 s · mão direita  · atingido em 166 ms
alvo 6 · t=3.7 s · mão direita  · não atingido (chegou a 21.7 cm)
robô de pé: sim
alvos atingidos: 5/6
saída: 0

Cada alvo leva cerca de 80 ms de latência + 80 ms de movimento. O 6º não é atingido com nenhuma latência: está fora do alcance do braço.

04A partir de que atraso desanda

O mesmo roteiro com cinco latências. A janela de cada alvo é de 0,6 s.

Terminal · varrer a latência
F=${FTH:-$HOME/fth}; cd $F/corpo-inteiro && . $F/.venv/bin/activate
for ms in 0 80 300 450 550; do
  echo "$ms ms → $(python3 kit/teleop_sim.py --roteiro kit/passos.json --latencia-ms $ms | tail -1)"
done
Exemplo do repositório
0 ms → alvos atingidos: 5/6
80 ms → alvos atingidos: 5/6
300 ms → alvos atingidos: 5/6
450 ms → alvos atingidos: 4/6
550 ms → alvos atingidos: 0/6

Até 300 ms sobra janela. A 450 ms um alvo já perde a janela; a 550 ms nenhum é atingido a tempo. Num operador de verdade, o efeito aparece antes: ele começa a corrigir o atraso.

05Prática

Roteiro, latência e alcance.

E1 · Roteiro padrão

5 min

Rode o teleop com o roteiro do kit e 80 ms.

Pronto quando: python3 kit/teleop_sim.py --roteiro kit/passos.json | tail -1 → alvos atingidos: 5/6.

E2 · 6 de 6

10 min

Copie o roteiro para ~/fth/movimentos/passos-meu.json e traga o 6º alvo para dentro do alcance (dx menor que 0,3).

Pronto quando: python3 kit/teleop_sim.py --roteiro ~/fth/movimentos/passos-meu.json | tail -1 → alvos atingidos: 6/6.

E3 · Latência que zera

5 min

Rode a varredura de latência e diga, em uma frase, por que 550 ms zera tudo com janela de 0,6 s.

Pronto quando: python3 kit/teleop_sim.py --roteiro kit/passos.json --latencia-ms 550 | tail -1 → alvos atingidos: 0/6.

06Teste da aula

A explicação aparece depois da sua resposta.

Pergunta 1 de 3

O checkpoint de baixa latência do SONIC tem 4 quadros a 20 ms. O que são esses 80 ms?competência

07Em três frases

CaminhoGesto, rede, controle de corpo inteiro, junta: cada etapa soma atraso.
LatênciaHorizonte de referência não é latência ponta a ponta.
DadosTeleop é como se coletam as demonstrações que treinam o VLA.

Para ir além

Aula anteriorPróxima aula