VLA: robôs que veem, entendem e agem|INEMA.CLUB-PRO

Aula 4 · 16 min

Dados: o combustível que falta

Texto para treinar LLM existe aos montes na internet. Dados de robô, não: alguém precisa mover o braço, gravar a câmera e anotar a tarefa. Em 2026 a resposta virou vídeo de gente trabalhando, filmado em primeira pessoa. Nesta aula você abre um dataset de robô de verdade.

Começar a aula
Pessoa movendo um braço-líder enquanto o braço-seguidor copia o movimento na mesa, com uma câmera gravando.

Nesta aula você vai

  1. 1Como a teleoperação gera um episódio
  2. 2Os acervos abertos e o que mudou com o vídeo humano
  3. 3O formato LeRobotDataset v3: Parquet, MP4 e metadados
  4. 4Carregar um dataset do Hub e ler episódios e fps

Objetivo: explicar de onde vêm os dados de robô (teleoperação, OXE/DROID, vídeo humano) e abrir um LeRobotDataset v3.

01O funil dos dados

Do mais caro e preciso ao mais barato e abundante. Clique em cada etapa.

Episódio = uma tentativa do começo ao fim. fps = quantos quadros por segundo foram gravados.

Na prática os modelos de 2026 misturam as quatro fontes: muito vídeo humano no pré-treino, teleoperação do seu robô no ajuste fino.

02Por dentro de um LeRobotDataset v3

O formato que o LeRobot usa desde a versão 0.4.

1. Poucos arquivos grandes

Os dados de tabela (estado, ação, índices) ficam em Parquet. O vídeo de cada câmera fica em MP4 concatenado e fatiado. Os metadados ficam em JSON e Parquet.

Você continua lendo por episódio: a biblioteca esconde onde cada quadro está guardado.

03Abrir um dataset do Hub

Sem conta e sem token: o lerobot/pusht é público. Primeiro instale o LeRobot (Python 3.12).

Terminal · instalar (Linux ou Mac)
python3.12 -m venv .venv
source .venv/bin/activate
pip install "lerobot[training]==0.6.1"
abrir_dataset.py
from lerobot.datasets import LeRobotDataset

ds = LeRobotDataset("lerobot/pusht")
print("episódios:", ds.num_episodes)
print("fps:", ds.fps)
print("quadros:", ds.num_frames)
print("chaves:", list(ds.features))

# onde começa e termina o episódio 0
ini = ds.meta.episodes["dataset_from_index"][0]
fim = ds.meta.episodes["dataset_to_index"][0]
print("episódio 0: quadros", ini, "a", fim - 1, f"({(fim - ini) / ds.fps:.1f} s)")

quadro = ds[ini]
print("estado:", quadro["observation.state"])
print("ação:", quadro["action"])
print("imagem:", tuple(quadro["observation.image"].shape))
Terminal
python abrir_dataset.py
meta.py · só os metadados (não baixa os vídeos)
from lerobot.datasets import LeRobotDatasetMetadata

for repo in ["lerobot/libero", "lerobot/aloha_mobile_cabinet"]:
    m = LeRobotDatasetMetadata(repo)
    print(repo, "episódios:", m.total_episodes, "fps:", m.fps, "câmeras:", m.camera_keys)
Exemplo do repositório
$ python abrir_dataset.py
Warning: You are sending unauthenticated requests to the HF Hub. ...
episódios: 206
fps: 10
quadros: 25650
chaves: ['observation.image', 'observation.state', 'action', 'episode_index', 'frame_index', 'timestamp', 'next.reward', 'next.done', 'next.success', 'index', 'task_index']
episódio 0: quadros 0 a 160 (16.1 s)
estado: tensor([222.,  97.])
ação: tensor([233.,  71.])
imagem: (3, 96, 96)

$ python meta.py
lerobot/libero episódios: 1693 fps: 10.0 câmeras: ['observation.images.image', 'observation.images.image2']
lerobot/aloha_mobile_cabinet episódios: 85 fps: 50 câmeras: ['observation.images.cam_high', 'observation.images.cam_left_wrist', 'observation.images.cam_right_wrist']

LeRobot 0.6.1, Python 3.12. O aviso de "unauthenticated requests" é normal sem conta: só limita a velocidade. A primeira vez baixa o dataset (levou 12 s aqui); depois fica no cache.

04Prática: o seu primeiro dataset de robô

Roda em qualquer computador com Python 3.12. Não precisa de GPU.

E1 · Abrir o PushT

15 min

Instale o LeRobot num venv, copie o abrir_dataset.py e rode.

Pronto quando: o terminal imprime episódios: 206 e fps: 10.

E2 · Ver um episódio

10 min

Abra huggingface.co/datasets/lerobot/pusht no navegador e assista ao episódio 0 no visualizador. Compare com a duração que o script calculou.

Pronto quando: você confirma que o episódio 0 dura cerca de 16 s e sabe dizer o que o agente empurra.

E3 · Comparar com outros datasets

10 min

Rode o meta.py: ele lê só os metadados de dois datasets maiores, sem baixar os vídeos. Compare fps e número de câmeras com o PushT.

Pronto quando: o terminal mostra o ALOHA a 50 fps com 3 câmeras e você anotou o nome das 3 câmeras dele.

05Teste o que aprendeu

A explicação aparece depois da sua resposta.

Pergunta 1 de 4

O que é um episódio num dataset de robô?competência

06Resumo

Quatro fontesTeleoperação, acervos abertos, vídeo humano e simulação.
2026 = vídeo humanoÉ o que mais escala no pré-treino; a teleoperação ajusta ao seu robô.
LeRobotDataset v3Parquet + MP4 + metadados, lido por episódio, com um import.

Fontes desta aula

Aula anteriorPróxima aula