LeRobot documentation

HopeJR

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

HopeJR

Предварительные требования

Установка LeRobot

Следуйте инструкциям по установке, чтобы установить LeRobot.

Установите LeRobot с зависимостями HopeJR:

pip install -e ".[hopejr]"

Конфигурация устройства

Перед началом калибровки и работы необходимо определить USB-порты для каждого компонента HopeJR. Запустите этот скрипт, чтобы найти USB-порты для руки, кисти, перчатки и экзоскелета:

lerobot-find-port

Это отобразит доступные USB-порты и подключённые к ним устройства. Запишите пути к портам (например, /dev/tty.usbmodem58760433331, /dev/tty.usbmodem11301), так как их необходимо указать в параметрах --robot.port и --teleop.port при записи данных, воспроизведении эпизодов или запуске скриптов телеуправления.

Шаг 1: Калибровка

Перед выполнением телеуправления необходимо откалибровать конечности HopeJR. Файлы калибровки будут сохранены в ~/.cache/huggingface/lerobot/calibration

1.1 Калибровка роботизированной руки

lerobot-calibrate \
    --robot.type=hope_jr_hand \
    --robot.port=/dev/tty.usbmodem58760432281 \
    --robot.id=blue \
    --robot.side=right

При запуске скрипта калибровки откроется окно GUI для калибровки. Суставы пальцев именуются следующим образом:

Сокращение:

  • CMC: базовый сустав, соединяющий большой палец с кистью
  • MCP: шарнир
  • PIP: первый сустав пальца
  • DIP : дистальный межфаланговый сустав

Указательный, средний, безымянный и мизинец:

  • Радиальный сгибатель: Приближает основание пальца к большому пальцу
  • Ульнарный сгибатель: Двигает основание пальца в сторону мизинца
  • PIP/DIP: сгибает дистальную и проксимальную фаланги пальца

Каждый из них необходимо откалибровать индивидуально через GUI. Обратите внимание, что сгибатели лучевой и локтевой стороны должны иметь диапазоны одинакового размера (но с разными смещениями), чтобы обеспечить симметричное движение.

Setting boundaries in the hand calibration GUI

Используйте интерфейс калибровки, чтобы задать границы диапазона для каждого сустава, как показано выше.

Saving calibration values

После того как вы зададите соответствующие границы для всех суставов, нажмите «Сохранить», чтобы записать значения калибровки в моторы.

1.2 Калибровка перчатки телеоператора

lerobot-calibrate \
    --teleop.type=homunculus_glove \
    --teleop.port=/dev/tty.usbmodem11201 \
    --teleop.id=red \
    --teleop.side=right

Проведите каждый палец через весь диапазон движения, начиная с большого пальца.

Move thumb through its entire range of motion.
Recording positions. Press ENTER to stop...

-------------------------------------------
NAME      |    MIN |    POS |    MAX
thumb_cmc |   1790 |   1831 |   1853
thumb_mcp |   1497 |   1514 |   1528
thumb_pip |   1466 |   1496 |   1515
thumb_dip |   1463 |   1484 |   1514

Продолжайте с каждым пальцем:

Move middle through its entire range of motion.
Recording positions. Press ENTER to stop...

-------------------------------------------
NAME                 |    MIN |    POS |    MAX
middle_mcp_abduction |   1598 |   1718 |   1820
middle_mcp_flexion   |   1512 |   1658 |   2136
middle_dip           |   1484 |   1500 |   1547

После завершения калибровки система сохранит её в /Users/your_username/.cache/huggingface/lerobot/calibration/teleoperators/homunculus_glove/red.json

1.3 Калибровка манипулятора

lerobot-calibrate \
    --robot.type=hope_jr_arm \
    --robot.port=/dev/tty.usbserial-1110 \
    --robot.id=white

Это откроет GUI для калибровки, где вы можете установить пределы диапазона для каждого мотора. Движения руки организованы следующим образом:

  • Плечо: тангаж, рыскание и крен
  • Локоть: сгибание
  • Wrist: наклон, рыскание и крен

Setting boundaries in the arm calibration GUI

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

1.4 Калибровка экзоскелета телеоператора

lerobot-calibrate \
    --teleop.type=homunculus_arm \
    --teleop.port=/dev/tty.usbmodem11201 \
    --teleop.id=black

Экзоскелет позволяет управлять роботизированной рукой. Во время калибровки вас попросят пройтись всеми суставами через их полный диапазон движения:

Move all joints through their entire range of motion.
Recording positions. Press ENTER to stop...

-------------------------------------------
-------------------------------------------
NAME            |    MIN |    POS |    MAX
shoulder_pitch  |    586 |    736 |    895
shoulder_yaw    |   1257 |   1374 |   1390
shoulder_roll   |    449 |   1034 |   2564
elbow_flex      |   3023 |   3117 |   3134
wrist_roll      |   3073 |   3096 |   3147
wrist_yaw       |   2143 |   2171 |   2185
wrist_pitch     |   1975 |   1993 |   2074
Calibration saved to /Users/your_username/.cache/huggingface/lerobot/calibration/teleoperators/homunculus_arm/black.json

Шаг 2: Телеуправление

Из-за конфликтов глобальных переменных в middleware Feetech телеуправление рукой и кистью должно выполняться в отдельных сессиях оболочки:

Рука

lerobot-teleoperate \
    --robot.type=hope_jr_hand \
    --robot.port=/dev/tty.usbmodem58760432281 \
    --robot.id=blue \
    --robot.side=right \
    --teleop.type=homunculus_glove \
    --teleop.port=/dev/tty.usbmodem11201 \
    --teleop.id=red \
    --teleop.side=right \
    --display_data=true \
    --fps=30

Arm

lerobot-teleoperate \
    --robot.type=hope_jr_arm \
    --robot.port=/dev/tty.usbserial-1110 \
    --robot.id=white \
    --teleop.type=homunculus_arm \
    --teleop.port=/dev/tty.usbmodem11201 \
    --teleop.id=black \
    --display_data=true \
    --fps=30

Шаг 3: Запись, воспроизведение, обучение

Функциональность записи, воспроизведения и обучения с Hope-JR всё ещё является экспериментальной.

Запись

На этом шаге фиксируется набор данных, пример которого можно найти здесь.

lerobot-record \
    --robot.type=hope_jr_hand \
    --robot.port=/dev/tty.usbmodem58760432281 \
    --robot.id=right \
    --robot.side=right \
    --robot.cameras='{"main": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
    --teleop.type=homunculus_glove \
    --teleop.port=/dev/tty.usbmodem1201 \
    --teleop.id=right \
    --teleop.side=right \
    --dataset.repo_id=<USER>/hand_record_test_with_video_data \
    --dataset.single_task="Hand recording test with video data" \
    --dataset.num_episodes=1 \
    --dataset.episode_time_s=5 \
    --dataset.push_to_hub=true \
    --dataset.private=true \
    --dataset.streaming_encoding=true \
    --dataset.encoder_threads=2 \
    --display_data=true
# Optional: --dataset.rgb_encoder.vcodec=auto

Повтор

lerobot-replay \
    --robot.type=hope_jr_hand \
    --robot.port=/dev/tty.usbmodem58760432281 \
    --robot.id=right \
    --robot.side=right \
    --dataset.repo_id=<USER>/hand_record_test_with_camera \
    --dataset.episode=0

Обучение

lerobot-train \
  --dataset.repo_id=<USER>/hand_record_test_with_video_data \
  --policy.type=act \
  --output_dir=outputs/train/hopejr_hand \
  --job_name=hopejr \
  --policy.device=mps \
  --trackio.enable=true \
  --policy.repo_id=<USER>/hand_test_policy

Оценка

lerobot-record \
  --robot.type=hope_jr_hand \
  --robot.port=/dev/tty.usbmodem58760432281 \
  --robot.id=right \
  --robot.side=right \
  --robot.cameras='{"main": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
  --display_data=false \
  --dataset.repo_id=<USER>/eval_hopejr \
  --dataset.single_task="Evaluate hopejr hand policy" \
  --dataset.num_episodes=10 \
  --dataset.streaming_encoding=true \
  --dataset.encoder_threads=2 \
  --policy.path=outputs/train/hopejr_hand/checkpoints/last/pretrained_model
# Optional: --dataset.rgb_encoder.vcodec=auto
Update on GitHub