LeRobot documentation

reBot B601

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

Buildmotor_familyMotoresConexão padrão
B601-DMdmDamiao (base 4340P, pulsos 4310)Ponte serial Damiao
B601-RSrsRobStride (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.

reBot B601 follower arm reBot Arm 102 leader arm

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_adapterUsarExemplo de porta
damiaoPonte serial Damiao; apenas DM/dev/ttyACM0
socketcanCAN nativo do MotorBridge; obrigatório para RScan0

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 can0

Substitua 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

TipoDispositivo
rebot_b601_followerSeguidor único
bi_rebot_b601_followerSeguidor bimanual
rebot_102_leaderSingle reBot Arm 102 líder
bi_rebot_102_leaderBimanual 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.

reBot B601 follower arm at its zero position reBot Arm 102 leader arm at its zero position

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

Braço único (DM)
Braço único (RS)
Braço duplo (DM)
lerobot-calibrate \
    --robot.type=rebot_b601_follower \
    --robot.motor_family=dm \
    --robot.port=/dev/ttyACM0 \
    --robot.id=follower

Líder

Braço único
Braço duplo
lerobot-calibrate \
    --teleop.type=rebot_102_leader \
    --teleop.port=/dev/ttyUSB0 \
    --teleop.id=leader

Teleoperação

Comece com pequenos movimentos e verifique a direção de cada junta antes de usar o espaço de trabalho completo.

Braço único (DM)
Braço único (RS)
Braço duplo (DM)
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=leader

Registrar 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=true

Para 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=false

Para uma configuração bimanual RS, defina ambas as famílias de motores como rs e use canais CAN nativos separados. Uma configuração mista pode selecionar dm para um braço e rs para 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_pos para a garra por padrão. gripper_torque_ratio tem valor padrão de 0.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_pos para o RobStride. Dependendo do movimento medido da pinça, o torque comandado é limitado a 3.5 N·m durante o movimento ou a 1.0 N·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_kd e pos_vel_velocity aceitam um escalar para cada junta ou um mapeamento com chaves de junta.
  • max_relative_target limita a diferença entre um comando e a posição medida mais recente. Por exemplo, --robot.max_relative_target=5.0 limita cada junta comandada a uma variação de cinco graus.
  • joint_limits substitui 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

ProblemaVerificar
O dispositivo serial está ausente ou ocupadoReconecte 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 conectarVerifique 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 erradaPare o programa, confirme motor_family e verifique as joint_directions do líder.
A calibração não é reutilizadaUse 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