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.
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 Passo a Passo
Siga estas etapas para cada sessão de gravação. Cada etapa se baseia na anterior — não pule etapas.
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.
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
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
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()
"
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.
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.
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
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 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
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.
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.
-
1O 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.
-
2Sem quadros de câmera ausentes Verifique se cada episódio tem o número esperado de quadros por fluxo. Execute
lerobot.scripts.visualize_datasetem 3–5 episódios para verificar a qualidade do vídeo. -
3As posições das juntas estão dentro dos limites seguros Verificar
observation.statenunca 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. -
4A 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.
-
5A 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.
-
6O 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.
-
7As estatísticas do conjunto de dados parecem razoáveis Verifique
meta/stats.jsonapó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. -
8A 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.
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.