LeRobot documentation
reBot B601
reBot B601
El reBot B601 es un brazo robótico de código abierto de Seeed Studio para el aprendizaje por imitación y la IA encarnada. Una configuración combina un brazo seguidor de 6 GDL con un actuador de agarre y un líder reBot Arm 102 para la teleoperación.
El seguidor está disponible con motores Damiao (DM) o RobStride (RS). Ambas configuraciones utilizan el mismo tipo de robot LeRobot y los mismos nombres de articulaciones; seleccione el hardware con --robot.motor_family.
| Compilar | motor_family | Motores | Conexión predeterminada |
|---|---|---|---|
| B601-DM | dm | Damiao (base 4340P, muñecas 4310) | Puente serial Damiao |
| B601-RS | rs | RobStride (base rs-06, muñecas rs-00) | CAN nativo |
Esta guía cubre la configuración de hardware, la calibración, la teleoperación y la grabación para configuraciones de un solo brazo y bimanuales.

Seguidor B601 (izquierda) y líder reBot Arm 102 (derecha). Los seguidores DM y RS comparten el mismo diseño de articulaciones y apariencia general, pero utilizan motores diferentes. Imágenes cortesía de Seeed Studio.
Hardware y seguridad
Ensambles, cablea y configura los motores siguiendo la guía de Seeed Studio para tu seguidor: B601-DM o 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.
Instalar LeRobot 🤗
Siga la Guía de instalación y luego instale el soporte de reBot:
pip install -e ".[rebot]"Esto instala motorbridge para el seguidor y motorbridge-smart-servo para el líder reBot Arm 102.
Conectar el hardware
DM usa su puente serial de forma predeterminada y puede usar CAN de forma nativa opcionalmente. RS requiere CAN de forma nativa.
can_adapter | Usar | Ejemplo de puerto |
|---|---|---|
damiao | Puente serial Damiao; solo DM | /dev/ttyACM0 |
socketcan | CAN nativo de MotorBridge; requerido para RS | can0 |
La familia del motor selecciona el adaptador predeterminado. Para ejecutar DM sobre CAN nativo, agregue --robot.can_adapter=socketcan y use su canal CAN como --robot.port.
Puente serial
Use lerobot-find-port para identificar los puertos del puente serial DM y del líder. Conecte un dispositivo serial a la vez si sus nombres son difíciles 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
El nombre de configuración socketcan se mantiene en todas las plataformas. Linux utiliza SocketCAN. macOS requiere un adaptador PCAN compatible y el runtime MacCAN PCBUSB. El soporte nativo de CAN en Windows es experimental y requiere un adaptador PEAK PCAN y PCAN-Basic. Consulte la configuración de la plataforma MotorBridge para obtener detalles de instalación.
En Linux, configure cada interfaz CAN nativa a 1 Mbps antes de conectar un 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 can0Sustituya can0 por el canal proporcionado por su backend de CAN. Las configuraciones bimanuales nativas de CAN requieren canales separados, como can0 y can1, porque ambos brazos utilizan los mismos IDs de motor.
Tipos de dispositivo
| Tipo | Dispositivo |
|---|---|
rebot_b601_follower | Un solo seguidor |
bi_rebot_b601_follower | Seguidor bimanual |
rebot_102_leader | Single reBot Arm 102 líder |
bi_rebot_102_leader | Brazo bimanual reBot Arm 102 líder |
motor_family tiene como valor predeterminado dm. En una configuración bimanual, cada brazo tiene sus propias configuraciones left_arm_config.* o right_arm_config.* y puede seleccionar su familia de motores de forma independiente.
Calibración
Calibration establece la postura física actual como la posición cero del motor y guarda un archivo de calibración de LeRobot. Coloque cada brazo en la posición cero mostrada a continuación con el actuador completamente cerrado y, cuando se le solicite, presione ENTER.

Posición cero del seguidor (izquierda) y posición cero del líder (derecha). Se muestra el seguidor DM; el seguidor RS utiliza la misma disposición de articulaciones.
Reutilice el mismo --robot.id y --teleop.id en los comandos posteriores para que LeRobot cargue la calibración guardada. Si ya existe una calibración, el comando le permite reutilizarla o escribir 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=followerLas ejecuciones de calibración se realizan primero para el seguidor izquierdo y luego para el seguidor derecho.
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 dos seguidores RS, establezca ambas familias en rs y use canales CAN nativos separados para los dos puertos. Los archivos de calibración por brazo usan los sufijos _left y _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/ttyUSB1Teleoperación
Comience con movimientos pequeños y verifique la dirección de cada articulación antes de utilizar el espacio de trabajo 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 un conjunto de datos
Pruebe la teleoperación antes de grabar. Para añadir una cámara, primero identifíquela con:
lerobot-find-cameras opencv
Brazo único
Este ejemplo registra cinco episodios de DM localmente con una cámara de 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, cambie motor_family a rs y el puerto del robot al canal CAN nativo. Elimine el argumento de la cámara para una prueba solo de motor.
Bimanual
Este ejemplo de DM registra una cámara superior compartida y una cámara de muñeca por brazo. Las claves de cámara del conjunto de datos son top, left_wrist y 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 una configuración bimanual de RS, establezca ambas familias de motores en
rsy use canales CAN nativos separados. Una configuración mixta puede seleccionardmpara un brazo yrspara el otro.
Vea Aprendizaje por imitación para robots para cargar, reproducir, entrenar y evaluar una política.
Controles avanzados
Ambas compilaciones exponen los mismos nombres de articulaciones y posiciones públicas en grados. LeRobot aplica las direcciones de los motores de cada familia a las acciones y observaciones, por lo que las políticas y los teleoperadores no necesitan convertir las señales de los motores.
- DM usa control MIT para el brazo y
force_pospara el agarre por defecto.gripper_torque_ratiotiene un valor predeterminado de0.07; DM también admite--robot.control_mode=pos_vel. - RS utiliza control MIT y una pinza de impedancia con límite de fuerza porque MotorBridge no proporciona
force_pospara RobStride. Dependiendo del movimiento medido de la pinza, el par de torsión comandado se limita a3.5N·m durante el movimiento o a1.0N·m durante la sujeción. Si la retroalimentación falla, LeRobot intenta comandar un par de torsión cero para la pinza y luego desactiva el brazo. mit_kp,mit_kdypos_vel_velocityaceptan un escalar para cada articulación o un mapeo con claves de articulación.max_relative_targetlimita la diferencia entre un comando y la última posición medida. Por ejemplo,--robot.max_relative_target=5.0limita cada junta comandada a un cambio de cinco grados.joint_limitsreemplaza opcionalmente los valores predeterminados de la familia en los grados de las articulaciones públicas.
Las direcciones de los motores seguidores se seleccionan internamente a partir de la familia de motores. Las joint_directions del líder siguen siendo configurables si una articulación de teleoperación se mueve en la dirección incorrecta.
DM and RS use the same coordinate convention, but their geometry, gains, and dynamics differ. Validate policies and datasets before transferring them between builds.
Solución de problemas
| Problema | Comprobar |
|---|---|
| El dispositivo serie no existe o está ocupado | Vuelva a conectar un dispositivo a la vez, vuelva a ejecutar lerobot-find-port, verifique los permisos y elimine brltty en Linux. |
| CAN nativo no puede conectarse | Compruebe el tiempo de ejecución del adaptador, el nombre del canal, la tasa de bits de 1 Mbps, la potencia del motor, el cableado CAN y la terminación. |
| Un conjunto teleoperado se mueve en la dirección incorrecta | Detenga el programa, confirme motor_family y compruebe las joint_directions del líder. |
| La calibración no se reutiliza | Utilice el mismo robot o teleoperador id que se usó durante la calibración. |
Para el ensamblaje, el cableado y los diagnósticos específicos del hardware, consulte las guías de Seeed Studio para B601-DM y B601-RS.
Update on GitHub