FTH 3 · Cuerpo completo|INEMA.CLUB-PRO

Clase 5 · 15 min

Teleoperación de cuerpo completo

La teleoperación es la forma más rápida de que un humanoide haga una tarea nueva y de reunir demostraciones para un VLA. El operador mueve los brazos con unas gafas de VR y el robot repite; el retraso es lo que lo arruina. En esta clase teleoperas los dos brazos del G1 con un guion y mides a partir de qué latencia todo se desmorona.

Comenzar la clase
Operador de espaldas con gafas de realidad virtual y dos controles levantados; frente a él, un robot humanoide de visor oscuro repite el gesto.

En esta clase vas a

  1. 1El camino del gesto: VR, red, whole-body control, articulación
  2. 2Latencia × horizonte de referencia: no confundir los 80 ms de SONIC
  3. 3Alcance del brazo: el objetivo que ninguna latencia salva
  4. 4Teleop como recolección de datos para VLA (TWIST2, GR00T-WBC)

Objetivo: teleoperar los dos brazos del G1 con un guion de objetivos con latencia y medir cuántos objetivos alcanza la mano.

01El camino de un gesto

Haz clic en cada bloque.

Haz clic en cada bloque del diagrama para ver qué hace.

Teleop es lazo cerrado con un humano adentro: un retraso grande hace que el operador corrija lo que ya pasó.

02Tres cosas que la investigación de 2026 deja claras

Haz clic en cada una.

1. 80 ms

SONIC tiene un checkpoint de "baja latencia" (16/06/2026) que mira 4 cuadros futuros a 20 ms: cerca de 80 ms de horizonte de referencia. El checkpoint estándar mira 10 cuadros (cerca de 200 ms).

El propio README avisa: esos números no son la latencia total de la teleoperación, que incluye sensor, red, preprocesamiento e inferencia.

03Teleoperar los dos brazos con un guion

El guion kit/passos.json hace el papel del operador: seis desplazamientos de control, alternando las manos. El sexto, a propósito, pide 60 cm al frente.

Terminal · teleop con 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: $?"
Archivo · 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}
  ]
}
Ejemplo del repositorio
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 objetivo tarda cerca de 80 ms de latencia + 80 ms de movimiento. El 6.º no se alcanza con ninguna latencia: está fuera del alcance del brazo.

04A partir de qué retraso se descontrola

El mismo guion con cinco latencias. La ventana de cada objetivo es de 0,6 s.

Terminal · barrer la latencia
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
Ejemplo del repositorio
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

Hasta 300 ms sobra ventana. A 450 ms un objetivo ya pierde la ventana; a 550 ms ninguno se alcanza a tiempo. En un operador de verdad, el efecto aparece antes: empieza a corregir el retraso.

05Práctica

Guion, latencia y alcance.

E1 · Guion estándar

5 min

Ejecuta el teleop con el guion del kit y 80 ms.

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

E2 · 6 de 6

10 min

Copia el guion a ~/fth/movimentos/passos-meu.json y trae el 6.º objetivo al alcance (dx menor que 0,3).

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

E3 · Latencia que anula todo

5 min

Ejecuta el barrido de latencia y di, en una frase, por qué 550 ms anula todo con una ventana de 0,6 s.

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

06Prueba de la clase

La explicación aparece después de tu respuesta.

Pregunta 1 de 3

El checkpoint de baja latencia de SONIC tiene 4 cuadros a 20 ms. ¿Qué son esos 80 ms?competencia

07En tres frases

CaminoGesto, red, whole-body control, articulación: cada etapa suma retraso.
LatenciaEl horizonte de referencia no es latencia de extremo a extremo.
DatosLa teleop es como se recolectan las demostraciones que entrenan al VLA.

Para ir más allá

Clase anteriorSiguiente clase