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

reBot B601 — это открытая роботизированная рука от Seeed Studio для обучения с подражанием и воплощённого ИИ. В конфигурации используется 6-осевая ведомая рука с захватом и ведущая рука reBot Arm 102 для телеуправления.

Модель Follower доступна с моторами Damiao (DM) или RobStride (RS). Обе сборки используют один и тот же тип робота LeRobot и имена суставов; выберите аппаратное обеспечение с помощью --robot.motor_family.

Сборкаmotor_familyДвигателиПодключение по умолчанию
B601-DMdmDamiao (база 4340P, запястья 4310)Damiao последовательный мост
B601-RSrsRobStride (база rs-06, запястья rs-00)CAN из коробки

В этом руководстве описаны настройка оборудования, калибровка, телеуправление и запись для одно- и двуручных конфигураций.

reBot B601 follower arm reBot Arm 102 leader arm

Привод B601 (слева) и ведущая рука reBot Arm 102 (справа). Приводы DM и RS имеют одинаковую компоновку суставов и общий внешний вид, но используют разные моторы. Изображения предоставлены Seeed Studio.

Аппаратное обеспечение и безопасность

Соберите, подключите и настройте двигатели, следуя руководству Seeed Studio для вашего привода: B601-DM или 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.

Установка LeRobot 🤗

Следуйте Руководству по установке, затем установите поддержку reBot:

pip install -e ".[rebot]"

Эта команда устанавливает motorbridge для ведомого устройства и motorbridge-smart-servo для ведущего устройства reBot Arm 102.

Подключите оборудование

DM по умолчанию использует свой последовательный мост и при необходимости может использовать нативный CAN. RS требует нативный CAN.

can_adapterИспользованиеПример порта
damiaoDamiao последовательный мост; только DM/dev/ttyACM0
socketcanMotorBridge нативный CAN; требуется для RScan0

Семейство моторов определяет адаптер по умолчанию. Чтобы запускать DM по нативному CAN, добавьте --robot.can_adapter=socketcan и используйте его канал CAN в качестве --robot.port.

Серийный мост

Используйте lerobot-find-port, чтобы определить порты последовательного моста DM и лидера. Если имена устройств трудно различить, подключайте по одному последовательному устройству за раз.

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 из коробки

Имя конфигурации socketcan сохраняется на всех платформах. Linux использует SocketCAN. macOS требует совместимый адаптер PCAN и рантайм MacCAN PCBUSB. Нативная поддержка CAN в Windows является экспериментальной и требует адаптер PEAK PCAN и PCAN-Basic. Подробности по установке см. в разделе настройка платформы MotorBridge.

В Linux настройте каждый нативный интерфейс CAN на скорость 1 Мбит/с перед подключением последователя 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

Замените can0 на канал, предоставленный вашим CAN-бэкендом. Для двуручных конфигураций с нативным CAN требуются отдельные каналы, например can0 и can1, так как обе руки используют одни и те же идентификаторы двигателей.

Типы устройств

ТипУстройство
rebot_b601_followerОдин подписчик
bi_rebot_b601_followerДвуручный следящий
rebot_102_leaderОдна рука reBot Arm 102 leader
bi_rebot_102_leaderДвухрукая манипуляторная система reBot Arm 102 leader

motor_family по умолчанию принимает значение dm. В двуручной конфигурации каждая рука имеет собственные настройки left_arm_config.* или right_arm_config.* и может независимо выбирать семейство моторов.

Калибровка

Команда Calibration устанавливает текущее физическое положение в качестве нулевой точки мотора и сохраняет файл калибровки LeRobot. Разместите каждую руку в нулевом положении, показанном ниже, полностью закрыв захват, затем нажмите ENTER, когда появится соответствующий запрос.

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

Нулевое положение ведомого (слева) и нулевое положение ведущего (справа). На рисунке показан ведомый DM; ведомый RS использует ту же конфигурацию шарниров.

Используйте те же параметры --robot.id и --teleop.id в последующих командах, чтобы LeRobot загрузил сохранённую калибровку. Если калибровка уже существует, команда позволяет использовать её или ввести c для повторной калибровки.

Подписчик

Одна рука (DM)
Одноплечая (RS)
Двухрукая (DM)
lerobot-calibrate \
    --robot.type=rebot_b601_follower \
    --robot.motor_family=dm \
    --robot.port=/dev/ttyACM0 \
    --robot.id=follower

Лидер

Одна рука
Двухрукая
lerobot-calibrate \
    --teleop.type=rebot_102_leader \
    --teleop.port=/dev/ttyUSB0 \
    --teleop.id=leader

Телеуправление

Начните с небольших перемещений и проверьте направление каждого сустава перед использованием всего рабочего пространства.

Одна рука (DM)
Одноплечая (RS)
Двухрукая (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

Запись набора данных

Протестируйте телеуправление перед записью. Чтобы добавить камеру, сначала определите её с помощью:

lerobot-find-cameras opencv

Одна рука

В этом примере пять эпизодов DM записываются локально с одной камерой 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

Для RS измените motor_family на rs, а порт робота — на нативный канал CAN. Уберите аргумент камеры для теста только с мотором.

Двуручная

В этом примере DM записывается общая верхняя камера и одна камера на запястье для каждой руки. Ключи камер в наборе данных: top, left_wrist и 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

Для двуручной конфигурации RS установите для обоих семейств моторов значение rs и используйте отдельные нативные CAN-каналы. В смешанной конфигурации для одной руки можно выбрать dm, а для другой — rs.

См. Imitation Learning for Robots, чтобы загрузить, воспроизвести, обучить и оценить политику.

Расширенные параметры

Обе сборки предоставляют одни и те же имена сочленений и публичные позиции в градусах. LeRobot применяет знаки направления моторов для каждой семьи к действиям и наблюдениям, поэтому политикам и телеоператорам не нужно конвертировать знаки моторов.

  • DM по умолчанию использует MIT-управление для руки и force_pos для захвата. Значение по умолчанию для gripper_torque_ratio — 0.07; DM также поддерживает --robot.control_mode=pos_vel.
  • RS использует управление MIT и захват с ограничением по усилию на основе импеданса, поскольку MotorBridge не предоставляет force_pos для RobStride. В зависимости от измеренного движения захвата задаваемый момент ограничивается значением 3.5 Н·м во время движения или 1.0 Н·м во время удержания. Если обратная связь не поступает, LeRobot пытается задать нулевой момент захвата, а затем отключает руку.
  • mit_kp, mit_kd и pos_vel_velocity принимают либо одно скалярное значение для каждого сустава, либо отображение с ключами-суставами.
  • max_relative_target ограничивает разницу между командой и последней измеренной позицией. Например, --robot.max_relative_target=5.0 ограничивает каждое управляемое звено изменением на пять градусов.
  • joint_limits по желанию переопределяет значения по умолчанию для семейства в публичных степенях свободы.

Направления движения ведомых моторов выбираются автоматически в рамках семейства моторов. Параметр joint_directions ведущего мотора остаётся настраиваемым, если сустав телеуправления движется в неверном направлении.

DM and RS use the same coordinate convention, but their geometry, gains, and dynamics differ. Validate policies and datasets before transferring them between builds.

Устранение неполадок

ПроблемаПроверка
Сериальное устройство отсутствует или занятоПереподключайте устройства по одному, повторно запускайте lerobot-find-port, проверяйте разрешения и удаляйте brltty в Linux.
Native CAN не может подключитьсяПроверьте время работы адаптера, имя канала, битрейт 1 Мбит/с, мощность двигателя, проводку CAN и согласование.
Совместный телеуправляемый узел движется в неправильном направленииОстановите программу, подтвердите motor_family и проверьте joint_directions ведущего.
Калибровка не переиспользуетсяИспользуйте тот же идентификатор робота или телеоператора id, который применялся во время калибровки.

Для сборки, подключения и диагностики, специфичной для конкретного оборудования, см. руководства Seeed Studio для B601-DM и B601-RS.

Update on GitHub