LeRobot documentation

reBot B601

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

Compilarmotor_familyMotoresConexión predeterminada
B601-DMdmDamiao (base 4340P, muñecas 4310)Puente serial Damiao
B601-RSrsRobStride (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.

reBot B601 follower arm reBot Arm 102 leader arm

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_adapterUsarEjemplo de puerto
damiaoPuente serial Damiao; solo DM/dev/ttyACM0
socketcanCAN nativo de MotorBridge; requerido para RScan0

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 can0

Sustituya 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

TipoDispositivo
rebot_b601_followerUn solo seguidor
bi_rebot_b601_followerSeguidor bimanual
rebot_102_leaderSingle reBot Arm 102 líder
bi_rebot_102_leaderBrazo 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.

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

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

Brazo único (DM)
Brazo único (RS)
Brazo dual (DM)
lerobot-calibrate \
    --robot.type=rebot_b601_follower \
    --robot.motor_family=dm \
    --robot.port=/dev/ttyACM0 \
    --robot.id=follower

Líder

Brazo único
Brazo doble
lerobot-calibrate \
    --teleop.type=rebot_102_leader \
    --teleop.port=/dev/ttyUSB0 \
    --teleop.id=leader

Teleoperación

Comience con movimientos pequeños y verifique la dirección de cada articulación antes de utilizar el espacio de trabajo completo.

Brazo único (DM)
Brazo único (RS)
Brazo dual (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 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=true

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

Para una configuración bimanual de RS, establezca ambas familias de motores en rs y use canales CAN nativos separados. Una configuración mixta puede seleccionar dm para un brazo y rs para 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_pos para el agarre por defecto. gripper_torque_ratio tiene un valor predeterminado de 0.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_pos para RobStride. Dependiendo del movimiento medido de la pinza, el par de torsión comandado se limita a 3.5 N·m durante el movimiento o a 1.0 N·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_kd y pos_vel_velocity aceptan un escalar para cada articulación o un mapeo con claves de articulación.
  • max_relative_target limita la diferencia entre un comando y la última posición medida. Por ejemplo, --robot.max_relative_target=5.0 limita cada junta comandada a un cambio de cinco grados.
  • joint_limits reemplaza 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

ProblemaComprobar
El dispositivo serie no existe o está ocupadoVuelva 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 conectarseCompruebe 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 incorrectaDetenga el programa, confirme motor_family y compruebe las joint_directions del líder.
La calibración no se reutilizaUtilice 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