Coleta de Dados

OpenArm é projetado como uma plataforma nativa de dados. Este guia cobre tudo, desde a fiação de câmeras até a gravação de episódios no formato LeRobot, com verificações de qualidade em cada etapa.

Antes da Gravação

Conexões de Hardware para Gravação

A coleta de dados requer mais hardware do que o controle básico do braço. Esta seção cobre o que conectar e onde antes de começar o LeRobot.

📷

Câmera de Pulso

Monte uma webcam USB ou Intel RealSense D435i na flange do efetor final. Conecte via USB 3.0 para 30+ fps. Verifique: ls /dev/video*

📖

Câmera Superior / Espaço de Trabalho

Câmera fixa acima da área de trabalho para uma visão global. Monte a ~60 cm acima da mesa, inclinada para baixo em 30°. Segundo porta USB 3.0.

🔌

Barramento CAN (controle do braço)

Já conectado na configuração. Verifique: ip link show can0A interface CAN deve estar ativa antes de iniciar o LeRobot.

👤

Dispositivo de Teleoperação

3D SpaceMouse, um segundo OpenArm como braço líder ou um gamepad. Líder-seguidor com dois OpenArms oferece as demonstrações de maior qualidade.

Nota de sincronização da câmera: O LeRobot marca todos os fluxos no nível do PC host. Para configurações de múltiplas câmeras, use hubs USB 3.0 (não hubs USB 2.0) para minimizar a distorção de latência entre os quadros da câmera e as leituras do estado das juntas. Alvo: < 5ms de distorção entre os fluxos.

Fluxo de Trabalho de Gravação

Fluxo de Trabalho de Gravação Passo a Passo

Siga estas etapas para cada sessão de gravação. Cada etapa se baseia na anterior — não pule etapas.

1

Verificação de segurança pré-sessão

Limpe a área de trabalho (raio de 1 m), verifique se o braço alcança a posição inicial livremente, teste o E-stop antes de gravar. Veja página de segurança.

2

Ativa uma interface CAN e ROS2

sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
3

Casa o braço

Execute a rotina de homing para definir a posição de referência antes de cada sessão. O braço deve alcançar sua posição inicial sem carga no efetor final.

python3 -m openarm_can.scripts.home --interface can0
4

Verifique os feeds das câmeras

Verifique se todas as câmeras estão transmitindo antes de iniciar o LeRobot. Uma câmera ausente corromperá silenciosamente seu conjunto de dados se o LeRobot não relatar.

# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
5

Configure a cena da tarefa

Coloque os objetos em posições iniciais consistentes. A inicialização consistente da cena é crítica para a generalização da política. Fotografe ou marque a configuração inicial.

6

Inicie a gravação do LeRobot

source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube and place it in the bin" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

O LeRobot irá solicitar que você se prepare antes de cada episódio. Use warmup_time_s para preparar sua posição de teleop antes que a gravação comece.

7

Revise e reproduza episódios

Após a gravação, reproduza episódios suspeitos antes de finalizar o conjunto de dados. Exclua episódios de baixa qualidade imediatamente.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/openarm-pick-place-v1 \
  --episode_index=0
8

Envie para o HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place-v1
Formato do Conjunto de Dados

Formato de Conjunto de Dados LeRobot

O LeRobot armazena conjuntos de dados no formato de conjunto de dados HuggingFace usando arquivos Parquet para dados tabulares e arquivos MP4/PNG para fluxos de imagem. Cada episódio é uma sequência de observações e ações com timestamp.

Estrutura de diretórios

your-username/openarm-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

Esquema de dados do episódio

Campos em cada arquivo Parquet de episódio
observação.estado float32[8] Posições das juntas em radianos (8 DOF)
observation.velocity float32[8] Velocidades das juntas em rad/s
observation.effort float32[8] Torques das juntas em Nm
observation.images.* caminho do vídeo Referência ao quadro no arquivo de vídeo MP4
ação float32[8] Posições das juntas alvo do dispositivo de teleop
carimbo de data/hora float64 Timestamp Unix em segundos
índice_do_quadro int64 Número do quadro dentro do episódio
índice_do_episódio int64 Número do episódio dentro do conjunto de dados
next.done bool Verdadeiro no último quadro de um episódio
índice_da_tarefa int64 Índice na tabela de consulta de descrição da tarefa

Episódios de falha como dados

O OpenArm é projetado para registrar com segurança tentativas falhadas, não apenas sucessos. Trajetórias de falha — deslizamento, erro de apreensão, colisão, tentativas de recuperação — são dados de primeira classe críticos para a generalização robusta da política. Não exclua episódios de falha automaticamente. Em vez disso, anote-os com o success campo nos metadados do episódio e deixe a estrutura de treinamento decidir se deve usá-los.

Garantia de Qualidade

Lista de Verificação de Qualidade para Dados Coletados

Passe por esta lista de verificação após cada sessão de gravação e antes de enviar para o Hub. Dados de baixa qualidade prejudicam o desempenho da política mais do que uma contagem baixa de episódios.

  • 1
    O comprimento do episódio é consistente Todos os episódios para a mesma tarefa devem estar dentro de ±30% do comprimento mediano. Outliers geralmente indicam que o operador pausou, perdeu uma apreensão ou a gravação foi interrompida.
  • 2
    Sem quadros de câmera ausentes Verifique se cada episódio tem o número esperado de quadros por fluxo. Execute lerobot.scripts.visualize_dataset em 3–5 episódios para verificar a qualidade do vídeo.
  • 3
    As posições das juntas estão dentro dos limites seguros Verificar observation.state nunca excede os limites das juntas em especificações. Picos de alta velocidade indicam uma queda de CAN ou falha de controle — exclua esses episódios.
  • 4
    A cena da tarefa foi redefinida entre os episódios Cada episódio deve começar com o objeto na mesma posição inicial. Se você pulou uma redefinição, a política aprenderá a partir de condições iniciais inconsistentes e generalizará mal.
  • 5
    A cobertura da câmera é completa A câmera do pulso deve sempre mostrar o efetor final e o objeto sendo manipulado. A câmera superior deve mostrar todo o espaço de trabalho. Reajuste os suportes se o objeto sair do quadro durante o episódio.
  • 6
    O estilo de demonstração é consistente Todos os operadores devem usar o mesmo caminho de abordagem e estilo de apreensão. Estratégias mistas confundem o treinamento de políticas. Use um único operador por versão de tarefa ou rotule os episódios por operador.
  • 7
    As estatísticas do conjunto de dados parecem razoáveis Verifique meta/stats.json após a gravação. Verifique se a média da ação está próxima de zero (não presa nos limites das juntas) e se o desvio padrão da ação é grande o suficiente para mostrar variação entre os episódios.
  • 8
    A taxa de sucesso está documentada Registre a taxa de sucesso humana durante a coleta. Uma taxa de sucesso de 60–70% é típica para tarefas ricas em contato. Uma taxa de sucesso mais baixa pode indicar que a tarefa é muito difícil; uma taxa mais alta pode significar que a tarefa é muito fácil para fornecer um sinal de treinamento útil.
Próximo Passo

Treinando uma Política a partir do Seu Conjunto de Dados

Uma vez que seu conjunto de dados passe na lista de verificação de qualidade, você pode treinar a Política ACT ou de Difusão diretamente com o LeRobot.

Treinar ACT

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/act-pick-place

Treinar Política de Difusão

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/diffusion-pick-place

Aprofunde-se: Leia o completo Visão Geral do Pipeline de Coleta de Dados na Biblioteca de Robótica para um tratamento completo da estrutura do episódio, versionamento do conjunto de dados, alinhamento sim-para-real e composição de conjuntos de dados multi-tarefa.

Conjunto de Dados Pronto? Comece o Treinamento.

Envie seu conjunto de dados para o HuggingFace e comece a treinar a Política ACT ou de Difusão.