Coleta de Dados Bimanual

O DK1 foi projetado do zero para a coleta de dados de teleoperação bimanual. Este guia cobre a fiação de ambos os braços e câmeras, a execução do procedimento de gravação líder/seguidor, a compreensão do esquema do conjunto de dados bimanual e a preparação dos seus dados para o treinamento ACT.

Antes da Gravação

Conexões de Hardware para Gravação Bimanual

A gravação bimanual requer mais conexões do que uma configuração de braço único. Verifique cada conexão antes de iniciar o LeRobot — perder uma conexão durante a sessão corrompe o episódio.

🥇

Braço Líder (Dynamixel XL330)

USB-C do braço líder para o PC host. Este braço é movido pela mão do operador. Use um cabo curto (1 m) para evitar desconexões acidentais durante a teleoperação. Verifique: ls /dev/ttyACM0

🥈

Braço Seguidor (DM4340 + energia)

USB-C do braço seguidor para o PC host mais fonte de alimentação DC. O braço seguidor requer energia externa — nunca opere apenas com energia USB. Verifique: ls /dev/ttyACM1

📷

Câmera de Pulso (braço seguidor)

Monte uma webcam USB no efetor final do braço seguidor. Esta é a câmera principal de manipulação. Conecte via USB 3.0. Verifique: ls /dev/video0

📖

Câmera Superior / Espaço de Trabalho

Câmera fixa acima do espaço de trabalho bimanual a ~70 cm de altura, inclinada 30° para baixo. Captura ambos os braços simultaneamente. Segundo porta USB 3.0. Verifique: ls /dev/video2

Crítico: sincronização bimanual. Com dois braços e duas câmeras, a sincronização é o fator de qualidade de dados mais importante para o DK1. O LeRobot marca todos os fluxos com o relógio do PC host. Para minimizar a diferença de timestamp: (1) use controladores de barramento USB separados para câmeras e braços, (2) use hubs USB 3.0 com relógios estáveis, (3) defina o governador da CPU para o modo de desempenho. Alvo: <5 ms de diferença entre todos os quatro fluxos. Uma desincronização de 10 ms entre os estados do braço esquerdo e direito pode causar falhas no treinamento ACT em tarefas ricas em contato.

Fluxo de Trabalho de Gravação

Procedimento de Gravação de Teleoperação Líder/Seguido

Siga estas etapas para cada sessão de gravação do DK1. O procedimento bimanual tem alguns passos extras em comparação com a coleta de braço único.

1

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

Limpe o espaço de trabalho compartilhado entre os dois braços (1,5 m × 1 m). Verifique se ambos os braços alcançam o espaço de trabalho compartilhado sem colisão. Teste o E-stop antes de gravar. Veja página de segurança.

2

Conecte e verifique ambos os braços

# Verify serial ports are available
ls /dev/ttyACM*
# Expected: /dev/ttyACM0 (leader) and /dev/ttyACM1 (follower)

# Quick connection test
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=none
3

Verifique os feeds das câmeras

Ambas as câmeras devem estar transmitindo antes de iniciar o LeRobot. Uma câmera ausente produzirá episódios silenciosos com quadros de imagem nulos.

python3 -c "
import cv2
for i in [0, 2]:
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        ret, frame = cap.read()
        print(f'Camera {i}: OK ({frame.shape[1]}x{frame.shape[0]})')
    else:
        print(f'Camera {i}: FAILED')
    cap.release()
"
4

Mova os braços para a posição inicial

Mova manualmente o braço líder para a posição inicial de teleop. O braço seguidor irá espelhar isso. Mantenha o braço líder firme por 2–3 segundos para confirmar a sincronização antes que o período de aquecimento comece.

5

Configure a cena da tarefa

Coloque os objetos em posições iniciais consistentes para ambos os braços. Fotografe a configuração inicial. Para tarefas bimanual, marque as posições exatas com fita — a consistência da cena é ainda mais crítica porque as trajetórias de ambos os braços devem ser compatíveis.

6

Inicie a gravação bimanual do LeRobot

source ~/.venvs/dk1/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up block with left arm, place in bin with right arm" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=15

Use um mais longo reset_time_s para tarefas bimanual — redefinir dois braços e a cena leva mais tempo do que configurações de braço único.

7

Revise e reproduza episódios

Após cada lote de 10 episódios, reproduza e revise antes de continuar. Preste atenção à coordenação dos braços — o atraso entre os braços esquerdo e direito aparecerá como tremores nos movimentos do seguidor.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/dk1-bimanual-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/dk1-bimanual-pick-place-v1
Formato do Conjunto de Dados

Formato do Conjunto de Dados LeRobot para Bimanual (DK1)

O esquema do conjunto de dados bimanual DK1 dobra os campos de estado das articulações em comparação com uma gravação de braço único. Cada episódio contém observações sincronizadas de ambos os braços líder e seguidor, além de todas as câmeras.

Estrutura de diretórios

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

Esquema de dados do episódio (bimanual)

Campos em cada arquivo Parquet de episódio — DK1 bimanual (bi_dk1_follower)
observação.estado float32[16] Posições das juntas do braço seguidor: 7 DOF + garra × 2 braços = 16 valores
observação.estado_esquerdo float32[8] Braço seguidor esquerdo: 7 posições de junta + 1 garra (rad)
observação.estado_direito float32[8] Braço seguidor direito: 7 posições de juntas + 1 garra (rad)
ação float32[16] Posições alvo para ambos os braços seguidores (do teleop do braço líder)
ação_esquerda float32[8] Posições alvo para o braço esquerdo do líder
ação_direita float32[8] Posições alvo para o braço direito do líder
observação.imagens.câmera_pulso caminho do vídeo Câmera montada no pulso no efetor final do braço seguidor
observação.imagens.câmera_sobre caminho do vídeo Câmera fixa sobre mostrando todo o espaço de trabalho bimanual
carimbo de data/hora float64 Timestamp Unix do PC Host. Ambos os braços são amostrados neste timestamp.
arm_sync_delta_ms float32 Específico do DK1: delta de tempo entre leituras de estado do braço esquerdo e direito. Marque episódios onde isso excede 10 ms.
next.done bool Verdadeiro no último quadro de um episódio
Garantia de Qualidade

Lista de Verificação de Qualidade para Demos Bimanual

Conjuntos de dados bimanuais têm requisitos de qualidade mais rigorosos do que dados de braço único. A má coordenação entre os braços é a principal causa de falha no treinamento da política DK1.

  • 1
    O delta de sincronização do braço está abaixo de 10 ms Verifique o arm_sync_delta_ms campo em cada episódio. Picos acima de 10 ms indicam contenção do barramento USB ou um pacote serial perdido. Exclua episódios com deltas altos sustentados.
  • 2
    Sem oscilação do braço seguidor durante o contato Revise as trajetórias do braço seguidor nos pontos de contato (aperto, entrega, colocação). A oscilação aparece como ruído de alta frequência em observation.state. Reduza os ganhos de PD se presentes. Veja solução de problemas de software.
  • 3
    Ambos os braços completam a tarefa no mesmo episódio Para tarefas bimanual, um episódio é válido apenas se ambos os braços completarem suas subtarefas atribuídas. Se o braço esquerdo teve sucesso, mas o braço direito deixou cair o objeto, marque o episódio como falhado e exclua ou anote-o.
  • 4
    Sem quadros de câmera ausentes Ambas as transmissões de câmera devem ter o número esperado de quadros. Quadros ausentes de qualquer câmera corrompem a entrada da política visuomotora. Verifique com lerobot.scripts.visualize_dataset.
  • 5
    A cena da tarefa foi reiniciada de forma idêntica entre os episódios O espaço de trabalho de ambos os braços deve ser reiniciado para cada episódio. A posição do objeto, a configuração inicial do braço e os ângulos da câmera devem corresponder. Use a configuração inicial fotografada como referência.
  • 6
    O comprimento do episódio é consistente Todos os episódios bem-sucedidos devem estar dentro de ±25% do comprimento mediano. Tarefas bimanuals geralmente têm maior variância do que tarefas de braço único, mas outliers extremos (3× mediana) devem ser descartados.
  • 7
    As estatísticas do conjunto de dados são simétricas para ambos os braços Em meta/stats.json, verifique se action_left e action_right as estatísticas são plausíveis para a geometria da sua tarefa. Se um braço mostrar variância zero, esse braço não estava se movendo — verifique as atribuições de porta.
  • 8
    O estilo de demonstração de teleoperação é consistente Todas as demonstrações devem usar o mesmo caminho de abordagem, estratégia de apreensão e técnica de entrega. Estratégias mistas produzem distribuições de ação multimodais que confundem o treinamento do ACT. Use um único operador por versão da tarefa.
Próximo Passo

Treinando o ACT no Seu Conjunto de Dados Bimanual

Uma vez que seu conjunto de dados passe na lista de verificação de qualidade, treine o ACT ou a Política de Difusão diretamente com o LeRobot. O ACT é recomendado para tarefas bimanuals DK1 — sua previsão de ação em blocos lida melhor com a coordenação entre os braços do que políticas de passo único.

Treine o ACT (recomendado para bimanual)

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

Treine a Política de Difusão (para tarefas ricas em contato)

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

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, estratégias de sincronização e composição de conjuntos de dados bimanuals de múltiplas tarefas.

Conjunto de Dados Pronto? Comece o Treinamento.

Envie seu conjunto de dados bimanual para o HuggingFace e comece a treinar o ACT.