LeRobot documentation
reBot B601
reBot B601
O reBot B601 é um braço robótico de código aberto da Seeed Studio para aprendizado por imitação e IA incorporada. A configuração combina um braço seguidor de 6-DOF com uma garra e um líder reBot Arm 102 para teleoperação.
O seguidor está disponível com motores Damiao (DM) ou RobStride (RS). Ambas as montagens usam o mesmo tipo de robô LeRobot e os mesmos nomes de juntas; selecione o hardware com --robot.motor_family.
| Build | motor_family | Motores | Conexão padrão |
|---|---|---|---|
| B601-DM | dm | Damiao (base 4340P, pulsos 4310) | Ponte serial Damiao |
| B601-RS | rs | RobStride (base rs-06, punhos rs-00) | CAN nativo |
Este guia aborda a configuração de hardware, calibração, teleoperação e gravação para configurações de braço único e bimanuais.

Seguidor B601 (esquerda) e líder reBot Arm 102 (direita). Os seguidores DM e RS compartilham o mesmo layout de juntas e aparência geral, mas utilizam motores diferentes. Imagens cortesia da Seeed Studio.
Hardware e segurança
Monte, conecte e configure os motores usando o guia da Seeed Studio para o seu seguidor: B601-DM ou B601-RS.
Secure the follower to a stable surface and keep its workspace clear. Support the arm whenever torque is disabled or the program disconnects because it can move under gravity. If power or a data cable disconnects during operation, stop the program, return the leader and follower to their zero positions, then reconnect and restart.
Instale o LeRobot 🤗
Siga o Guia de Instalação e, em seguida, instale o suporte a reBot:
pip install -e ".[rebot]"Isso instala o motorbridge para o seguidor e o motorbridge-smart-servo para o líder reBot Arm 102.
Conecte o hardware
O DM usa sua ponte serial por padrão e pode usar CAN nativo opcionalmente. O RS requer CAN nativo.
can_adapter | Usar | Exemplo de porta |
|---|---|---|
damiao | Ponte serial Damiao; apenas DM | /dev/ttyACM0 |
socketcan | CAN nativo do MotorBridge; obrigatório para RS | can0 |
A família do motor seleciona o adaptador padrão. Para executar o DM sobre CAN nativo, adicione --robot.can_adapter=socketcan e use seu canal CAN como --robot.port.
Ponte serial
Use lerobot-find-port para identificar as portas da ponte serial DM e do líder. Conecte um dispositivo serial por vez se os nomes forem difíceis de distinguir.
lerobot-find-port
On Linux, remove `brltty` (`sudo apt remove brltty`) if it captures a serial device. You may also need temporary access with `sudo chmod 666 /dev/ttyACM* /dev/ttyUSB*`.
CAN nativo
O nome de configuração socketcan é mantido entre as plataformas. O Linux usa SocketCAN. O macOS requer um adaptador PCAN compatível e o runtime MacCAN PCBUSB. O suporte nativo a CAN no Windows é experimental e requer um adaptador PEAK PCAN e o PCAN-Basic. Consulte a configuração da plataforma MotorBridge para detalhes de instalação.
No Linux, configure cada interface CAN nativa em 1 Mbps antes de conectar um seguidor RS:
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
ip -details link show can0Substitua can0 pelo canal fornecido pelo seu backend CAN. Configurações bimanuais nativas em CAN exigem canais separados, como can0 e can1, pois ambos os braços usam os mesmos IDs de motor.
Tipos de dispositivo
| Tipo | Dispositivo |
|---|---|
rebot_b601_follower | Seguidor único |
bi_rebot_b601_follower | Seguidor bimanual |
rebot_102_leader | Single reBot Arm 102 líder |
bi_rebot_102_leader | Bimanual reBot Arm 102 líder |
motor_family tem como padrão dm. Em uma configuração bimanual, cada braço possui suas próprias configurações left_arm_config.* ou right_arm_config.* e pode selecionar sua família de motores de forma independente.
Calibração
A calibração define a pose física atual como a posição zero do motor e salva um arquivo de calibração do LeRobot. Posicione cada braço na posição zero mostrada abaixo, com o garra totalmente fechada, e pressione ENTER quando solicitado.

Posição zero do seguidor (esquerda) e posição zero do líder (direita). O seguidor DM é mostrado; o seguidor RS usa o mesmo arranjo de juntas.
Reutilize o mesmo --robot.id e --teleop.id em comandos posteriores para que o LeRobot carregue a calibração salva. Se uma calibração já existir, o comando permite reutilizá-la ou digitar c para recalibrar.
Seguidor
lerobot-calibrate \
--robot.type=rebot_b601_follower \
--robot.motor_family=dm \
--robot.port=/dev/ttyACM0 \
--robot.id=followerlerobot-calibrate \
--robot.type=rebot_b601_follower \
--robot.motor_family=rs \
--robot.port=can0 \
--robot.id=followerAs execuções de calibração são realizadas primeiro para o seguidor esquerdo e, em seguida, para o seguidor direito.
lerobot-calibrate \
--robot.type=bi_rebot_b601_follower \
--robot.id=bi_follower \
--robot.left_arm_config.motor_family=dm \
--robot.left_arm_config.port=/dev/ttyACM0 \
--robot.right_arm_config.motor_family=dm \
--robot.right_arm_config.port=/dev/ttyACM1Para dois seguidores RS, defina ambas as famílias como rs e use canais CAN nativos separados para as duas portas. Os arquivos de calibração por braço usam os sufixos _left e _right.
Líder
lerobot-calibrate \
--teleop.type=rebot_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=leaderlerobot-calibrate \
--teleop.type=bi_rebot_102_leader \
--teleop.id=bi_leader \
--teleop.left_arm_config.port=/dev/ttyUSB0 \
--teleop.right_arm_config.port=/dev/ttyUSB1Teleoperação
Comece com pequenos movimentos e verifique a direção de cada junta antes de usar o espaço de trabalho completo.
lerobot-teleoperate \
--robot.type=rebot_b601_follower \
--robot.motor_family=dm \
--robot.port=/dev/ttyACM0 \
--robot.id=follower \
--teleop.type=rebot_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=leaderlerobot-teleoperate \
--robot.type=rebot_b601_follower \
--robot.motor_family=rs \
--robot.port=can0 \
--robot.id=follower \
--teleop.type=rebot_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=leaderlerobot-teleoperate \
--robot.type=bi_rebot_b601_follower \
--robot.id=bi_follower \
--robot.left_arm_config.motor_family=dm \
--robot.left_arm_config.port=/dev/ttyACM0 \
--robot.right_arm_config.motor_family=dm \
--robot.right_arm_config.port=/dev/ttyACM1 \
--teleop.type=bi_rebot_102_leader \
--teleop.id=bi_leader \
--teleop.left_arm_config.port=/dev/ttyUSB0 \
--teleop.right_arm_config.port=/dev/ttyUSB1Registrar um conjunto de dados
Teste a teleoperação antes de gravar. Para adicionar uma câmera, primeiro identifique-a com:
lerobot-find-cameras opencv
Braço único
Este exemplo grava cinco episódios de DM localmente com uma câmera OpenCV:
lerobot-record \
--robot.type=rebot_b601_follower \
--robot.motor_family=dm \
--robot.port=/dev/ttyACM0 \
--robot.id=follower \
--robot.cameras='{"front": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
--teleop.type=rebot_102_leader \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=leader \
--dataset.repo_id=your_username/rebot-dm-test \
--dataset.single_task="Pick up the object" \
--dataset.num_episodes=5 \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=10 \
--dataset.push_to_hub=false \
--display_data=truePara RS, altere motor_family para rs e a porta do robô para o canal CAN nativo. Remova o argumento da câmera para um teste apenas de motor.
Bimanual
Este exemplo de DM registra uma câmera superior compartilhada e uma câmera de pulso por braço. As chaves de câmera do conjunto de dados são top, left_wrist e right_wrist.
lerobot-record \
--robot.type=bi_rebot_b601_follower \
--robot.id=bi_follower \
--robot.left_arm_config.motor_family=dm \
--robot.left_arm_config.port=/dev/ttyACM0 \
--robot.right_arm_config.motor_family=dm \
--robot.right_arm_config.port=/dev/ttyACM1 \
--robot.cameras='{
top: {
type: opencv,
index_or_path: "/dev/video2",
width: 640,
height: 480,
fps: 30,
fourcc: "MJPG"
}
}' \
--robot.left_arm_config.cameras='{
wrist: {
type: opencv,
index_or_path: "/dev/video0",
width: 640,
height: 480,
fps: 30,
fourcc: "MJPG"
}
}' \
--robot.right_arm_config.cameras='{
wrist: {
type: opencv,
index_or_path: "/dev/video4",
width: 640,
height: 480,
fps: 30,
fourcc: "MJPG"
}
}' \
--teleop.type=bi_rebot_102_leader \
--teleop.id=bi_leader \
--teleop.left_arm_config.port=/dev/ttyUSB0 \
--teleop.right_arm_config.port=/dev/ttyUSB1 \
--dataset.repo_id=local/rebot-bimanual-dm-camera-test \
--dataset.root=/tmp/rebot-bimanual-dm-camera-test \
--dataset.single_task="Test coordinated movement of both reBot DM arms" \
--dataset.fps=30 \
--dataset.num_episodes=2 \
--dataset.episode_time_s=20 \
--dataset.reset_time_s=10 \
--dataset.push_to_hub=false \
--display_data=falsePara uma configuração bimanual RS, defina ambas as famílias de motores como
rse use canais CAN nativos separados. Uma configuração mista pode selecionardmpara um braço erspara o outro.
Veja Aprendizado por Imitação para Robôs para fazer upload, reproduzir, treinar e avaliar uma política.
Controles avançados
Ambas as builds expõem os mesmos nomes de juntas e posições públicas em graus. O LeRobot aplica os sinais de direção dos motores de cada família às ações e observações, de modo que as políticas e os teleoperadores não precisam converter os sinais dos motores.
- O DM usa controle MIT para o braço e
force_pospara a garra por padrão.gripper_torque_ratiotem valor padrão de0.07; o DM também suporta--robot.control_mode=pos_vel. - O RS usa controle MIT e uma pinça de impedância com limite de força, pois o MotorBridge não fornece
force_pospara o RobStride. Dependendo do movimento medido da pinça, o torque comandado é limitado a3.5N·m durante o movimento ou a1.0N·m durante a manutenção. Se o feedback falhar, o LeRobot tenta comandar torque zero na pinça e, em seguida, desativa o braço. mit_kp,mit_kdepos_vel_velocityaceitam um escalar para cada junta ou um mapeamento com chaves de junta.max_relative_targetlimita a diferença entre um comando e a posição medida mais recente. Por exemplo,--robot.max_relative_target=5.0limita cada junta comandada a uma variação de cinco graus.joint_limitssubstitui opcionalmente os padrões da família nos graus de liberdade públicos.
As direções dos motores seguidores são selecionadas internamente a partir da família de motores. Os joint_directions do líder permanecem configuráveis caso uma junta de teleoperação se mova na direção incorreta.
DM and RS use the same coordinate convention, but their geometry, gains, and dynamics differ. Validate policies and datasets before transferring them between builds.
Solução de problemas
| Problema | Verificar |
|---|---|
| O dispositivo serial está ausente ou ocupado | Reconecte um dispositivo por vez, execute novamente lerobot-find-port, verifique as permissões e remova o brltty no Linux. |
| O CAN nativo não consegue se conectar | Verifique o tempo de execução do adaptador, o nome do canal, a taxa de bits de 1 Mbps, a potência do motor, a fiação CAN e a terminação. |
| Uma articulação teleoperada se move na direção errada | Pare o programa, confirme motor_family e verifique as joint_directions do líder. |
| A calibração não é reutilizada | Use o mesmo robô ou teleoperador id que foi usado durante a calibração. |
Para montagem, fiação e diagnósticos específicos de hardware, consulte os guias da Seeed Studio para B601-DM e B601-RS.
Update on GitHub