LeRobot documentation

YAM

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

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 follower arm with the linear gripper YAM Cell bimanual station

Следующий 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 попросит вас поддержать руку перед отключением момента силы.

YAM arm in its folded position Linear DM4310 gripper

Сложенное положение, при котором все суставы равны нулю (слева), и линейный захват DM4310 (справа). Изображения предоставлены I2RT Robotics.

Одна рука
Две ветви
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam

Используйте тот же --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_degreestrueГрадусы и захват 0–100; false — радианы и 0–1
use_velocity_and_torquefalseДобавьте наблюдения .vel и .torque
idle_modeholdhold — удерживать позицию или float — оставаться в стороне, если действие не поступает
command_timeout_s1.0Секунды бездействия перед переходом в режим ожидания
initial_position_degвсе нулиНеобходимая начальная позиция; None пропускает проверку
initial_tolerance_deg11.5Допустимое расстояние от начальной позиции
gripper_force_limit_n50.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.

Ссылки

Update on GitHub