LeRobot documentation
YAM
YAM
YAM — это 6-DOF манипулятор от I2RT Robotics для имитационного обучения и embodied AI. В LeRobot yam_follower управляет одним стандартным манипулятором YAM v1 с линейным захватом DM4310, а bi_yam_follower — двумя. Используйте их вместе с lerobot-calibrate, lerobot-rollout и lerobot-replay. В LeRobot пока нет ведущего манипулятора YAM, поэтому YAM управляется политикой или воспроизведением набора данных.
Соберите и подключите руки, следуя инструкциям I2RT; на этой странице описана сторона LeRobot.
| Руководство | Что охватывается |
|---|---|
| Серия YAM Arm | Распаковка, монтаж, подключение, моторы и захватные устройства |
| Настройка программного обеспечения | CAN-адаптеры, скорость передачи данных и фиксированные имена интерфейсов |
| ЯМ Клетка | Двухручная станция с двумя последователями и лидерами |

Следующий YAM (слева) и двуручная станция YAM Cell (справа). LeRobot управляет следующими. Изображения предоставлены I2RT Robotics.
Аппаратное обеспечение и безопасность
Каждая рука оснащена семью моторами с идентификаторами от 1 до 7: DM4340 для суставов 1–3 и DM4310 для суставов 4–6 и захвата. YAM Pro, Ultra, BIG YAM и другие захваты пока не поддерживаются.
Вам потребуется:
- Linux и по одному адаптеру USB-CAN на каждую руку (SocketCAN, классический CAN со скоростью 1 Мбит/с).
- Для каждого мотора CAN-таймаут установлен не более 400 мс (
8000тиков, значение I2RT), например с помощьюset_timeout.py --timeoutиз I2RT SDK. Таймаут является последней защитой на случай, если LeRobot перестанет отправлять команды, поэтому LeRobot не включит крутящий момент без него. - Доступ в Интернет при первом подключении: для гравитационной компенсации модель YAM скачивается из бакета
lerobot/robot-urdfsи кэшируется вHF_LEROBOT_HOME/robot-urdfs/yam/v1.
Прикрепите руку к устойчивой поверхности и убедитесь, что её рабочая зона свободна. При отключении питания момент вращения отключается, и рука падает под действием силы тяжести: сначала зафиксируйте её. Если питание или CAN-адаптер отключаются во время работы, остановите программу, зафиксируйте руку, а затем подключите их снова.
Установка LeRobot 🤗
Следуйте Руководству по установке, затем установите поддержку YAM:
pip install -e ".[yam]"Эта команда устанавливает motorbridge и python-can для руки, а также placo для гравитационной компенсации.
Подключите оборудование
Каждая рука требует собственного CAN-интерфейса, так как обе руки используют одинаковые идентификаторы двигателей.
lerobot-setup-can --mode=setup --interfaces=can0 --use_fd=falseДля двух манипуляторов используйте --interfaces=can0,can1. Команда настраивает интерфейсы Linux с помощью sudo ip link и не отправляет команды на двигатели. При использовании двух манипуляторов can0 и can1 могут поменяться местами после перезагрузки: проверьте, какой манипулятор управляет каждый интерфейс, либо задайте им фиксированные имена, например can_follower_l, с помощью настройки ПО I2RT, и используйте эти имена в качестве порта.
Типы устройств
| Тип | Устройство |
|---|---|
yam_follower | Один подписчик |
bi_yam_follower | Двуручный следящий |
Для двух рук задайте параметры каждой руки с помощью --robot.left_arm_config.<option> и --robot.right_arm_config.<option>.
Калибровка
Калибровка измеряет только пределы захвата: полностью закрытое и полностью открытое положение. Суставы сохраняют заводские нулевые значения. Сначала сложите руку, как показано ниже. Во время измерения момент силы отключён: поддерживайте руку, перемещайте только захват вручную и нажимайте Enter при каждом запросе. Если калибровка уже существует, подключение запускает управление: нажмите Enter, чтобы использовать её повторно, или введите c, чтобы измерить заново. LeRobot попросит вас поддержать руку перед отключением момента силы.

Сложенное положение, при котором все суставы равны нулю (слева), и линейный захват DM4310 (справа). Изображения предоставлены I2RT Robotics.
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam
Сначала измеряется левый захват, затем правый, в файлы <id>_left и <id>_right.
lerobot-calibrate --robot.type=bi_yam_follower --robot.id=bimanual_yam \ --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1
Используйте тот же --robot.id в последующих командах, чтобы LeRobot загрузил сохранённый файл.
Наблюдения и действия
Одна рука имеет joint_1.pos до joint_6.pos, затем gripper.pos, как для наблюдений, так и для действий. Суставы — это абсолютные углы в градусах, а захват изменяется от 0 (закрыт) до 100 (открыт). use_degrees=false переключает на радианы и диапазон от 0 до 1, как в данных I2RT и MolmoAct2. use_velocity_and_torque=true добавляет наблюдения .vel и .torque. Действия — это абсолютные целевые значения суставов, ограниченные пределами суставов.
Две руки используют одинаковые имена с префиксами left_ и right_. Камеры, установленные на руке, также получают префикс, тогда как верхнеуровневые --robot.cameras сохраняют свои имена.
Запуск политики
Перед подключением установите руку в сложенное положение, в котором все суставы находятся в нулевой позиции: LeRobot проверяет, что каждый сустав отклоняется от неё не более чем на 11,5°, после чего начинает управление от измеренного положения. Никаких движений не происходит, пока политика не отправит действие.
lerobot-rollout \
--robot.type=yam_follower --robot.port=can0 --robot.id=yam \
--robot.cameras='{"wrist": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
--policy.path=<user>/<policy> \
--task="Pick up the cube"Для двух манипуляторов используйте --robot.type=bi_yam_follower --robot.id=bimanual_yam --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1. Добавьте --dataset.repo_id=<user>/rollout_<name>, чтобы записать rollout; см. Запуск инференса и оценка вашей политики. lerobot-replay воспроизводит записанный эпизод с теми же опциями --robot.*.
До первого действия и в том случае, если какое-либо действие не поступает в течение command_timeout_s (1 с), манипулятор удерживает своё положение. При idle_mode=float суставы, напротив, компенсируют силу тяжести и слегка демпфируются, что позволяет перемещать манипулятор вручную, при этом захват сохраняет своё раскрытие; отслеживание возобновляется с того положения, куда вы его переместили.
Безопасность
- Сбой привода или отсутствие обратной связи останавливает выполнение всех команд. При наличии двух манипуляторов сбой на любом из них останавливает оба. Для продолжения работы отключите и снова подключите устройство.
- Гравитационная модель описывает стандартную манипуляторную руку без камер и полезной нагрузки. После добавления любого из них убедитесь, что рука не дрейфует в режиме float, и при необходимости скорректируйте
gravity_factors.
Параметры конфигурации
| Параметр | По умолчанию | Описание |
|---|---|---|
port | обязательный | Интерфейс SocketCAN, например can0 |
use_degrees | true | Градусы и захват 0–100; false — радианы и 0–1 |
use_velocity_and_torque | false | Добавьте наблюдения .vel и .torque |
idle_mode | hold | hold — удерживать позицию или float — оставаться в стороне, если действие не поступает |
command_timeout_s | 1.0 | Секунды бездействия перед переходом в режим ожидания |
initial_position_deg | все нули | Необходимая начальная позиция; None пропускает проверку |
initial_tolerance_deg | 11.5 | Допустимое расстояние от начальной позиции |
gripper_force_limit_n | 50.0 | Сила пальца, когда захват заблокирован на объекте |
gravity_factors | [1.0, 1.1, 1.1, 1.2, 1.0, 1.0] | Множители гравитационной компенсации для каждого сустава |
cameras | {} | Камеры, установленные на манипуляторе |
Пример: MolmoAct2
lerobot/MolmoAct2-BimanualYAM-LeRobot — это allenai/MolmoAct2-BimanualYAM в формате LeRobot, с опубликованными статистиками нормализации. Модель обучалась на двух манипуляторах YAM с углами в радианах и захватом в диапазоне 0–1, а также с тремя камерами в порядке: верхняя, левая, правая; см. MolmoAct2.
pip install -e ".[yam,molmoact2,dataset]"
lerobot-rollout \
--robot.type=bi_yam_follower --robot.id=bimanual_yam \
--robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1 \
--robot.left_arm_config.use_degrees=false --robot.right_arm_config.use_degrees=false \
--robot.cameras='{
"top": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/TOP_CAMERA", "width": 640, "height": 480, "fps": 30},
"left": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/LEFT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"},
"right": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/RIGHT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"}
}' \
--policy.path=lerobot/MolmoAct2-BimanualYAM-LeRobot \
--inference.type=rtc --inference.rtc.execution_horizon=20 --inference.queue_threshold=20 \
--device=cuda --interpolation_multiplier=2 \
--interactive=true --play_sounds=false \
--task="Pick up the red block and place it in the green bin"Введите /start, чтобы запустить политику, /subtask <text>, чтобы изменить инструкцию, /reset, чтобы вернуться в исходное положение, и /stop, чтобы выйти. Возврат занимает фиксированное время, и ограничение скорости YAM по-прежнему действует, поэтому рука, находящаяся далеко от исходного положения, может остановиться раньше.
Режим Float позволяет запускать политику из любого положения: добавьте --robot.left_arm_config.idle_mode=float --robot.right_arm_config.idle_mode=float. До первого /start и в течение 1 с после завершения /reset вручную переместите руки в нужное положение, затем введите /start, чтобы запустить политику из этого положения. Не используйте /stop для этой цели: он завершает сессию и отключает момент.
Устранение неполадок
| Проблема | Проверка |
|---|---|
| Интерфейс CAN отсутствует или отключен | Проверьте питание адаптера и USB-кабель, а также выполните ip link show. Запустите lerobot-setup-can снова. |
missing or stale motor feedback | Проверьте питание 24 В, проводку и терминирование CAN, идентификаторы двигателей от 1 до 7, а также что port является интерфейсом этой руки. |
| Движется не та рука | Проверьте, какой канал управляет каждый интерфейс, или задайте интерфейсам фиксированные имена. |
unsafe motor CAN timeout | Установите для каждого мотора CAN-таймаут не более 400 мс с помощью I2RT SDK. |
not within initial_tolerance_deg | Согните руку, установив каждый сустав в нулевое положение, перед подключением. |
| Подключение снова запрашивает калибровку | Используйте тот же --robot.id, что и во время калибровки. |
| Рука дрейфует в режиме float | Настройте gravity_factors для камер или полезной нагрузки на манипуляторе. |
| MolmoAct2 перемещает руки в неверные позиции | Установите use_degrees=false на обеих руках: модель использует радианы и захват в диапазоне 0–1. |
Ссылки
- Серия YAM Arm: оборудование, моторы и захватные устройства
- Настройка ПО: скорость CAN и фиксированные имена интерфейсов
- YAM Cell: двухручная станция
- I2RT SDK: инструменты для двигателей, модель URDF и модель MuJoCo
- Страница продукта YAM
- MolmoAct2: загрузка политики в LeRobot