Coleta de Dados
O SO-101 é um dos braços de coleta de dados mais comuns na comunidade LeRobot. Este guia cobre tudo, desde conexões de hardware até gravação de episódios e envio do seu conjunto de dados para a HuggingFace.
Configuração de Hardware para Gravação
A configuração de coleta de dados do SO-101 é mais simples do que braços CAN-bus — tudo funciona via USB. Aqui está o que conectar.
Câmera de Espaço de Trabalho
Webcam USB apontada para o espaço de trabalho de cima ou de lado. Montar em uma posição fixa — não mova entre os episódios. Verifique: ls /dev/video*
Câmera de Pulso (opcional)
Pequena câmera USB montada no efetor final. Adiciona visão em primeira pessoa. Um segundo porta USB é necessário. LeRobot suporta sincronização de múltiplas câmeras.
Braço Seguidor (USB serial)
O braço que executa ações. Conecte via controlador de servo USB. Verifique a porta com ls /dev/ttyUSB*
Braço Líder (USB serial)
Um segundo SO-101 em modo de conformidade — mova-o com a sua mão para dirigir o seguidor. Conecte em uma segunda porta USB. Proporciona demonstrações de alta qualidade.
Sem ROS, sem drivers de kernel: Ao contrário das configurações CAN-bus, a pilha de coleta de dados do SO-101 funciona inteiramente sobre USB serial. Você pode gravar em um MacBook ou laptop Windows — nenhum Ubuntu necessário.
Fluxo de Trabalho de Gravação Passo a Passo
Verifique se a calibração está atual
Execute a calibração antes de cada nova sessão se o braço foi desmontado ou movido. Veja Software → Calibração.
python -m lerobot.scripts.control_robot \
--robot.type=so101 --robot.port=/dev/ttyUSB0 \
--control.type=calibrate
Verifique os feeds das câmeras
python -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
Mova o braço para a posição inicial
Coloque o braço seguidor na posição inicial (totalmente estendido, efetor final apontando para frente). Redefina o braço líder para a mesma posição antes de iniciar o teleop.
Configure a cena da tarefa
Coloque os objetos em suas posições iniciais consistentes. Marque a mesa se necessário — condições iniciais consistentes são críticas para a generalização da política.
Inicie a gravação do LeRobot
python -m lerobot.scripts.control_robot \
--robot.type=so101 \
--robot.port=/dev/ttyUSB1 \
--robot.leader_arms.main.type=so101 \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/so101-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick the red block and place it in the bin" \
--control.warmup_time_s=3 \
--control.reset_time_s=8
LeRobot solicita antes de cada episódio. Durante o aquecimento, você pode ajustar sua pegada no braço líder antes que a gravação comece.
Revise e reproduza episódios
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/so101-pick-place-v1 \
--episode_index=0
Exclua episódios de baixa qualidade imediatamente. Verifique se há quadros de câmera perdidos, velocidades de junta erráticas ou execução de tarefa incompleta.
Envie para o HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/so101-pick-place-v1
Formato de Conjunto de Dados SO-101
O SO-101 usa o formato padrão de conjunto de dados LeRobot / HuggingFace — esquema idêntico ao OpenArm, Koch e outros braços LeRobot. Isso significa que seus conjuntos de dados são diretamente compatíveis com todo o ecossistema de treinamento LeRobot.
Esquema de dados do episódio
Notas específicas do SO-101
O espaço de ação do SO-101 utiliza posições das juntas em graus (unidades de servo Feetech), não em radianos. Ao misturar conjuntos de dados do SO-101 e OpenArm para treinamento entre plataformas, normalize ambos para radianos primeiro usando as estatísticas em meta/stats.json.
Lista de Verificação de Qualidade para Dados Coletados
Revise isso após cada sessão de gravação antes de enviar para o Hub.
-
1Os comprimentos dos episódios são consistentes Episódios com comprimento atípico geralmente significam que o operador pausou, a garra escorregou ou a gravação foi interrompida. Mantenha dentro de ±30% do comprimento mediano.
-
2Sem picos de velocidade do servo Os servos STS3215 têm largura de banda limitada — picos de velocidade súbitos em
observation.stateindicam uma queda no barramento serial. Exclua esses episódios. -
3Os quadros da câmera estão alinhados com os dados das juntas Verifique se os timestamps da câmera e os timestamps das juntas estão dentro de 20ms um do outro. A latência serial USB pode causar desvio em gravações longas. Re-sincronize as câmeras a cada 100 episódios.
-
4O rastreamento do braço líder foi suave Se o seguidor atrasou visivelmente durante a gravação (devido à latência serial USB), os rótulos de ação estarão deslocados em relação às observações. Reproduza para verificar.
-
5A cena da tarefa foi consistente no início de cada episódio Objetos na mesma posição e orientação. A menor repetibilidade do SO-101 (em comparação com braços CAN) torna isso especialmente importante — a variação nas condições iniciais prejudica o treinamento da política.
-
6Abertura/fechamento da garra está claramente registrada O estado da garra do SO-101 é a junta 6. Verifique se os eventos de apreensão mostram uma clara transição de posição da junta (aberto → fechado) nos dados, não um desvio gradual.
Treinando uma Política a partir do Seu Conjunto de Dados
Uma vez que seu conjunto de dados passe nas verificações de qualidade, treine a Política ACT ou Diffusion com o LeRobot.
Treinar ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-so101-pick-place
Treinar Política de Difusão
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-so101-pick-place
Conjuntos de dados da comunidade: O SO-101 possui uma das maiores coleções de conjuntos de dados da comunidade no ecossistema LeRobot. Antes de coletar seus próprios dados, verifique HuggingFace Hub para conjuntos de dados existentes do SO-101 — você pode ser capaz de ajustar a partir de um conjunto de dados base existente e economizar tempo de gravação.