LeRobot documentation
reBot B601
reBot B601
reBot B601 — это открытая роботизированная рука от Seeed Studio для обучения с подражанием и воплощённого ИИ. В конфигурации используется 6-осевая ведомая рука с захватом и ведущая рука reBot Arm 102 для телеуправления.
Модель Follower доступна с моторами Damiao (DM) или RobStride (RS). Обе сборки используют один и тот же тип робота LeRobot и имена суставов; выберите аппаратное обеспечение с помощью --robot.motor_family.
| Сборка | motor_family | Двигатели | Подключение по умолчанию |
|---|---|---|---|
| B601-DM | dm | Damiao (база 4340P, запястья 4310) | Damiao последовательный мост |
| B601-RS | rs | RobStride (база rs-06, запястья rs-00) | CAN из коробки |
В этом руководстве описаны настройка оборудования, калибровка, телеуправление и запись для одно- и двуручных конфигураций.

Привод 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 | Использование | Пример порта |
|---|---|---|
damiao | Damiao последовательный мост; только DM | /dev/ttyACM0 |
socketcan | MotorBridge нативный CAN; требуется для RS | can0 |
Семейство моторов определяет адаптер по умолчанию. Чтобы запускать 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, когда появится соответствующий запрос.

Нулевое положение ведомого (слева) и нулевое положение ведущего (справа). На рисунке показан ведомый DM; ведомый RS использует ту же конфигурацию шарниров.
Используйте те же параметры --robot.id и --teleop.id в последующих командах, чтобы LeRobot загрузил сохранённую калибровку. Если калибровка уже существует, команда позволяет использовать её или ввести c для повторной калибровки.
Подписчик
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=followerКалибровка выполняется сначала для левого последователя, а затем для правого последователя.
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/ttyACM1Для двух последователей RS установите для обоих семейств значение rs и используйте отдельные нативные каналы CAN для двух портов. Файлы калибровки для каждой руки используют суффиксы _left и _right.
Лидер
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/ttyUSB1Телеуправление
Начните с небольших перемещений и проверьте направление каждого сустава перед использованием всего рабочего пространства.
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/ttyUSB1Запись набора данных
Протестируйте телеуправление перед записью. Чтобы добавить камеру, сначала определите её с помощью:
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