PTENES
MÓDULO 5.4 · PRÁTICA

🎓 Aprender por demonstração

Em vez de programar cada ângulo, você mostra a tarefa ao braço algumas dezenas de vezes com o líder do SO-101, grava, treina uma rede neural e deixa o seguidor repetir sozinho. Aqui você faz o ciclo inteiro com o LeRobot: gravar, publicar, treinar e avaliar, e conhece as políticas que entendem instruções em texto.

6
Tópicos
Avançado
Nível
Prática
Tipo
SO-101
+ câmera e GPU
0%
0 de 0 tópicos lidos · Seção 1 de 6

Conteúdo detalhado

1

🎓 Aprender por demonstração (imitação)

No módulo 5.3 você fez o seguidor copiar o líder em tempo real. Agora a ideia é dar um passo além: gravar essas demonstrações e treinar uma rede neural que aprende a ligação "o que eu vejo e onde minhas juntas estão → qual o próximo movimento". Depois de treinada, ela comanda o seguidor sem ninguém no líder. Isso se chama aprendizado por imitação.

🌱 Novo aqui?

Uma política é o programa que decide a próxima ação a partir do que o robô observa. Aqui ela é uma rede neural, não um código com if. Imitação quer dizer que a rede aprende copiando exemplos de uma pessoa, em vez de descobrir sozinha por tentativa e erro (isso seria aprendizado por reforço, que quase sempre se faz em simulação, assunto do 5.5).

DEMONSTRARvocê moveo líder GRAVARepisódioscâmera + juntas TREINARrede neuralna GPU AVALIARbraço sozinhoconta acertos falhou? grave mais exemplos do caso que errou

Como ler: as setas verdes são uma volta do ciclo; o bloco brilhante (treinar) é o único que precisa de GPU. A seta ciano é o que separa quem consegue de quem desiste: a avaliação diz em que situação a política erra, e a correção é gravar mais exemplos exatamente dessa situação.

✓ Boa primeira tarefa

  • ✓Pegar um cubo de espuma e pôr numa caixa rasa.
  • ✓Objeto leve, colorido e que contrasta com a mesa.
  • ✓Sucesso fácil de julgar: está ou não está na caixa.

✗ Deixe para depois

  • ✗Dobrar pano, abrir tampa de rosca, encaixe justo.
  • ✗Objeto transparente, brilhante ou mais pesado que a garra aguenta.
  • ✗Várias tarefas diferentes no mesmo dataset logo de início.

Por que aprender

Programar a mão um "pegar e soltar" funciona até o cubo sair 3 cm do lugar. A política aprendida olha a câmera a cada instante e corrige o caminho. É assim que os laboratórios ensinam braços hoje, e o SO-101 com o LeRobot põe esse método na sua mesa.

Conceitos-chave

Política
observação → ação
Imitação
aprende com exemplos
Líder / seguidor
você ensina, ele copia
Taxa de sucesso
acertos em N tentativas
2

⏺️ Gravar episódios com lerobot-record

Cada demonstração gravada é um episódio. O comando lerobot-record liga o líder, o seguidor e as câmeras, e a cada quadro guarda três coisas: as imagens, a posição atual das juntas do seguidor (o estado) e a posição que o líder mandou (a ação). Entre um episódio e outro há um tempo de reset para você arrumar a mesa.

🌱 Novo aqui?

Quadro é um instante gravado (a 30 quadros por segundo, um a cada 33 ms). Estado é onde o braço está; ação é para onde ele foi mandado ir. A rede aprende a prever a ação a partir da imagem e do estado. Os 6 números de cada um são as juntas do SO-101: base, ombro, cotovelo, flexão e giro do punho, garra.

imagemestadoação … 6 juntas6 juntas6 juntas6 juntas 6 alvos6 alvos6 alvos6 alvos t = 0t + 33 mspegasolta + instrução: "pôr o cubo na caixa" · depois: tempo de reset

Como ler: cada coluna é um quadro. A linha de cima é o que a câmera viu (o cubo se aproxima, é pego e aparece na caixa). As linhas de baixo são os números que a rede vai aprender a relacionar: dado o estado e a imagem, prever a ação. A instrução de texto vale para o episódio inteiro.

Passo a passo da primeira gravação

1

Confira portas, calibração e câmera

Use as mesmas portas e os mesmos id de calibração do 5.3. Rode lerobot-find-cameras e anote o índice da câmera de frente.

2

Fixe a cena

Câmera presa (fita ou suporte), luz constante, caixa sempre no mesmo lugar. Só o cubo muda de posição entre episódios.

3

Grave 2 episódios de teste

Rode o comando abaixo com num_episodes=2, sem enviar à nuvem. Se tudo der certo, apague a pasta de teste e grave de verdade (50 episódios é um bom começo).

Objetivo: gravar episódios da tarefa "pôr o cubo na caixa" com uma câmera de frente. Troque as portas, os id e o seu usuário do Hugging Face (sem os sinais < >).

gravar.sh
# Gravar demonstrações com o par SO-101 (Linux; no Windows a porta é COM3, COM4...)
HF_USER=<seu_usuario_hf>          # troque pelo seu usuário do Hugging Face
DATASET=cubo-na-caixa-teste        # nome do dataset

lerobot-record \
  --robot.type=so101_follower --robot.port=/dev/ttyACM0 --robot.id=seguidor \
  --robot.cameras="{ frente: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
  --teleop.type=so101_leader --teleop.port=/dev/ttyACM1 --teleop.id=lider \
  --dataset.repo_id=${HF_USER}/${DATASET} \
  --dataset.single_task="Pôr o cubo vermelho na caixa cinza." \
  --dataset.num_episodes=2 \
  --dataset.episode_time_s=20 \
  --dataset.reset_time_s=10 \
  --dataset.push_to_hub=false \
  --display_data=true

Como verificar

  • ✓Abre uma janela com a imagem da câmera e gráficos das juntas mudando quando você mexe o líder.
  • ✓O terminal anuncia o início de cada episódio e do reset; no fim aparece a pasta em ~/.cache/huggingface/lerobot/.
  • ✗Erro de porta ou de calibração? Volte ao 5.3. Os nomes das flags mudam entre versões: confira com lerobot-record --help e na doc atual.

✓ Demonstração boa

  • ✓Movimento calmo e sempre do mesmo jeito.
  • ✓Cubo em posições variadas, cobrindo a área toda.
  • ✓Começa e termina com o braço em repouso.

✗ Estraga o dataset

  • ✗Hesitar, voltar atrás, tentar de dois jeitos diferentes.
  • ✗Sua mão ou braço aparecendo na frente da câmera.
  • ✗Mover a câmera ou mudar a luz no meio da gravação.

Por que aprender

A política nunca será melhor que as demonstrações. Quem grava com calma e consistência treina uma vez; quem grava com pressa treina cinco vezes e não entende por que não funciona.

Conceitos-chave

Episódio
uma demonstração inteira
Estado
onde as juntas estão
Ação
para onde foram mandadas
Reset
arrumar a mesa entre episódios
3

🗂️ Dataset no Hugging Face Hub

O LeRobot salva cada dataset numa pasta com formato padrão: tabelas com estado e ação, vídeos das câmeras e um arquivo de metadados. Esse mesmo formato pode ser enviado ao Hugging Face Hub, onde você treina numa máquina com GPU (ou no Colab) sem copiar arquivos à mão, e onde outras pessoas podem usar seus dados, se você quiser.

🌱 Novo aqui?

O Hugging Face Hub é um site gratuito que guarda modelos e datasets, parecido com um GitHub para IA. O repo_id é o endereço do dataset: usuario/nome. Para enviar, você cria uma conta, gera um token de escrita nas configurações e faz login uma vez no terminal.

usuario/cubo-na-caixa meta/ fps, câmeras,tarefas, médias data/ tabelas parquetestado + ação videos/ um MP4por câmera mesma estrutura no seu disco e no Hub

Como ler: o nome no topo é o repo_id. As tabelas (meio) são leves; os vídeos (direita, em ciano) ocupam quase todo o espaço. Se o dataset ficou pesado demais, reduza a resolução ou o número de câmeras, não o número de episódios.

Objetivo: fazer login, conferir um episódio gravado e enviar o dataset ao Hub como privado. Rode no mesmo ambiente Python em que instalou o LeRobot.

conferir.sh
hf auth login                       # cola o token de escrita (uma vez por máquina)
lerobot-dataset-viz --repo-id <seu_usuario_hf>/<dataset> --episode-index 0
subir_dataset.py
# Abre o dataset local, mostra o tamanho e envia ao Hub como privado.
import sys
from lerobot.datasets.lerobot_dataset import LeRobotDataset

repo_id = sys.argv[1]                    # ex.: <seu_usuario_hf>/<dataset>
ds = LeRobotDataset(repo_id)             # lê de ~/.cache/huggingface/lerobot/
print("episódios:", ds.num_episodes, "| quadros:", ds.num_frames, "| fps:", ds.fps)
print("colunas:", list(ds.features))
ds.push_to_hub(private=True)             # privado: só você vê
print("enviado: https://huggingface.co/datasets/" + repo_id)

Como verificar

  • ✓O visualizador mostra o vídeo do episódio 0 com as curvas das 6 juntas sincronizadas.
  • ✓python subir_dataset.py <seu_usuario_hf>/<dataset> imprime o número de episódios (o que você gravou) e as colunas, incluindo estado, ação e a câmera "frente".
  • ✓A página do dataset abre no navegador logado e aparece como privada.

💡 Privacidade

A câmera grava o que estiver ao fundo: rostos, a casa, papéis na mesa. Em escola, deixe o dataset privado e enquadre só a bancada. Torne público apenas o que você revisou episódio por episódio.

Por que aprender

Separar "onde grava" de "onde treina" resolve o problema de quem não tem GPU em casa: grava no notebook ao lado do braço e treina no Colab ou no laboratório. E um dataset bem documentado vira material de aula para a turma inteira.

Conceitos-chave

Hub
GitHub de modelos e dados
repo_id
usuario/nome
Token
senha de escrita do Hub
Privado
padrão na escola
4

🏋️ Treinar ACT com lerobot-train

A ACT (Action Chunking with Transformers) é a política recomendada para começar: pequena, treina rápido e funciona bem com 50 episódios de uma tarefa. O truque dela está no nome: em vez de prever um movimento por vez, ela prevê um pedaço (chunk) de vários movimentos seguidos, o que deixa o braço mais suave e menos hesitante.

câmera frente câmera pulso estado (6) ACTtransformer pedaço de ações futuras executadescarta observa de novo e prevê o próximo pedaço

Como ler: à esquerda está tudo o que a rede vê num instante. À direita, as barras são movimentos futuros: as cheias são executadas, as vazadas são jogadas fora porque, até lá, a câmera já terá informação nova. A seta ciano fecha a malha, como no ciclo sentir-pensar-agir do 1.1.

🌱 Novo aqui?

Treinar é ajustar milhões de números da rede até ela errar pouco ao prever as ações gravadas. Cada ajuste usa um lote de quadros (batch) e conta como um passo (step). De tempos em tempos o treino salva um checkpoint: uma cópia da rede naquele ponto, que você pode testar ou retomar.

Objetivo: treinar uma ACT no seu dataset numa máquina com GPU NVIDIA. Em Mac com chip Apple, troque cuda por mps; sem GPU, use o Colab (há um caderno pronto na documentação do LeRobot).

treinar.sh
# Treinar a política ACT (confira as flags com: lerobot-train --help)
HF_USER=<seu_usuario_hf>
DATASET=<dataset>

lerobot-train \
  --dataset.repo_id=${HF_USER}/${DATASET} \
  --policy.type=act \
  --policy.device=cuda \
  --output_dir=outputs/train/act-${DATASET} \
  --job_name=act-${DATASET} \
  --batch_size=8 \
  --steps=20000 \
  --wandb.enable=false \
  --policy.push_to_hub=false

Como verificar

  • ✓O terminal mostra linhas com o passo atual e a loss (o erro), que deve cair rápido no começo e depois devagar.
  • ✓Aparecem pastas em outputs/train/…/checkpoints/; a mais recente fica em last/pretrained_model.
  • ✗"CUDA out of memory"? Diminua --batch_size (4 ou 2). O tempo pode ir de minutos a muitas horas conforme a GPU e o número de passos.

💡 Loss baixa não é sucesso

A loss mede quanto a rede copia as demonstrações gravadas, não quanto ela acerta a tarefa no mundo. Uma rede pode decorar os 50 episódios e falhar quando o cubo aparece num lugar novo. O único número que vale é a taxa de sucesso no braço, que você mede no próximo tópico.

Por que aprender

Saber ler o treino evita desperdício de GPU: você aprende a parar quando a loss estabilizou, a testar checkpoints intermediários e a distinguir "falta dado" de "falta treino".

Conceitos-chave

ACT
prevê pedaços de ação
Loss
erro sobre os exemplos
Checkpoint
rede salva num ponto
Batch
quadros por passo
5

🧪 Avaliar a política no braço real

Avaliar é deixar a política comandar o seguidor, sem o líder, e contar quantas vezes ela acerta. Na versão atual do LeRobot isso se faz com lerobot-rollout; versões anteriores usavam o próprio lerobot-record com a política indicada. Confira qual vale para a sua instalação com --help.

Segurança antes do primeiro teste

Uma política recém-treinada pode fazer movimentos bruscos e inesperados. Os servos do SO-101 são pequenos, mas prendem dedo e derrubam objetos. Mão no interruptor da fonte do seguidor, mesa livre, ninguém dentro do alcance do braço, primeiro teste curto.

Objetivo: rodar a política treinada por 30 segundos no seguidor, com a mesma câmera e a mesma instrução da gravação.

avaliar.sh
# Rodar a política no braço real (confira as flags com: lerobot-rollout --help)
POLITICA=outputs/train/act-<dataset>/checkpoints/last/pretrained_model

lerobot-rollout \
  --strategy.type=base \
  --policy.path=${POLITICA} \
  --robot.type=so101_follower --robot.port=/dev/ttyACM0 --robot.id=seguidor \
  --robot.cameras="{ frente: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
  --task="Pôr o cubo vermelho na caixa cinza." \
  --duration=30

Como verificar

  • ✓O seguidor se move sozinho em direção ao cubo; o líder pode ficar desligado.
  • ✓Depois de 30 segundos o comando termina e o braço para.
  • ✗Braço tremendo ou indo para um canto fixo? A câmera mudou de lugar desde a gravação, ou o nome da câmera não bate com o do dataset ("frente").

Planilha de avaliação (20 tentativas)

Posição do cuboTentativasAcertosComo falhou
Perto do centro (visto na gravação)10anoteerrou a pega, soltou fora…
Nas bordas da área gravada5anoteanote
Fora da área gravada5anoteanote

✓ Avaliação honesta

  • ✓Defina "sucesso" antes de começar e não mude depois.
  • ✓Sorteie as posições do cubo; não escolha as fáceis.
  • ✓Grave em vídeo e anote o tipo de falha de cada erro.

✗ Engana você mesmo

  • ✗Contar só as tentativas que você filmou.
  • ✗Empurrar o cubo "só um pouquinho" para ajudar.
  • ✗Concluir algo com 3 tentativas.

Quando o padrão de falha aparecer (por exemplo, "erra sempre que o cubo está à esquerda"), grave 10 a 20 episódios novos naquela região e treine de novo. O LeRobot também tem um modo em que você assume o controle com o líder quando a política erra e essa correção vira episódio novo (--strategy.type=dagger); é o jeito mais eficiente de melhorar depois da primeira versão.

Por que aprender

Sem avaliação com número, todo projeto de IA "quase funciona". Com a planilha você sabe exatamente onde está, compara versões e tem algo concreto para mostrar na apresentação do projeto final.

Conceitos-chave

Rollout
política no comando
Distribuição
o que apareceu no treino
DAgger
correção vira dado
Mão na fonte
parada física sempre
6

🗣️ SmolVLA e pi0: políticas com linguagem

A ACT aprende uma tarefa e ignora o texto. Um VLA (modelo Visão-Linguagem-Ação, apresentado no 5.1) recebe também a instrução escrita e pode fazer tarefas diferentes conforme o pedido: "ponha o cubo na caixa" ou "ponha a bola na caixa". Esses modelos já vêm pré-treinados em muitos robôs; você só faz o ajuste fino com os seus episódios.

imagem "ponha a bolana caixa" estado (6) VLASmolVLA, pi0 ações das6 juntas a ACT recebe só imagem e estado: sem a caixa ciano, uma tarefa por modelo

Como ler: a diferença entre um VLA e a ACT é a caixa ciano. Com o texto, o mesmo modelo escolhe qual objeto pegar. O texto não vira código nem lista de passos: ele condiciona diretamente os movimentos das juntas.

PolíticaEntende textoPeso para treinarQuando usar
ACTnãoleveuma tarefa, primeiro projeto
SmolVLAsimmédio (GPU com boa memória)algumas tarefas com o mesmo braço
pi0 / pi0.5simpesado (GPU grande ou nuvem)pesquisa, tarefas variadas

Objetivo: fazer o ajuste fino do SmolVLA a partir do modelo base lerobot/smolvla_base usando o seu dataset. Grave antes episódios com instruções diferentes (por exemplo, metade "cubo", metade "bola").

smolvla.sh
# Instalar o extra do SmolVLA no mesmo ambiente do LeRobot
pip install "lerobot[smolvla]"

# Ajuste fino a partir do modelo base (confira as flags na doc atual)
lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=<seu_usuario_hf>/<dataset> \
  --policy.device=cuda \
  --output_dir=outputs/train/smolvla-<dataset> \
  --batch_size=16 \
  --steps=20000 \
  --wandb.enable=false \
  --policy.push_to_hub=false

Como verificar

  • ✓No início, o treino baixa os pesos do modelo base do Hub (só na primeira vez) e depois mostra a loss caindo, como na ACT.
  • ✓Na avaliação, troque só o texto de --task e veja se o braço muda de objeto.
  • ✗Falta memória na GPU? Diminua o batch ou treine no Colab. A família pi0 / pi0.5 pede ainda mais; comece pela ACT ou pelo SmolVLA.

💡 Veja também: dados de simulação

O projeto INEMA robotica-real2sim gera episódios numa simulação e os exporta no formato do LeRobot (no teste: 50 episódios com câmeras, 4.361 quadros, 9,7 MB). Misturar poucos episódios reais com muitos simulados é o assunto do próximo módulo.

Por que aprender

O projeto final (5.6) precisa de um braço que obedeça a pedidos diferentes. Com a ACT você treina uma política por tarefa e o modelo de linguagem escolhe qual chamar; com um VLA, uma política só recebe o pedido em texto. Conhecer os dois caminhos deixa você escolher pelo hardware que tem.

Conceitos-chave

VLA
imagem + texto → ação
Ajuste fino
base + seus episódios
SmolVLA
VLA pequeno do LeRobot
pi0 / pi0.5
VLAs maiores

✅ Resumo do módulo

✓
Imitação = demonstrar, gravar, treinar, avaliar e voltar a gravar onde a política erra.
✓
Episódio: imagens + estado + ação a cada quadro, com a instrução da tarefa; calma e consistência valem mais que quantidade.
✓
Hub: grava num lugar, treina em outro; privado por padrão.
✓
ACT para começar; loss baixa não é sucesso, taxa de acerto em 20 tentativas é.
✓
SmolVLA e pi0 recebem texto e trocam de tarefa pelo pedido, ao custo de mais GPU.

Para ir além

Próximo módulo

5.5 · Simular antes do real: o gêmeo do SO-101 no MuJoCo, real2sim e a distância entre simulado e real.