LeRobot documentation
HopeJR
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. Обратите внимание, что сгибатели лучевой и локтевой стороны должны иметь диапазоны одинакового размера (но с разными смещениями), чтобы обеспечить симметричное движение.

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

После того как вы зададите соответствующие границы для всех суставов, нажмите «Сохранить», чтобы записать значения калибровки в моторы.
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: наклон, рыскание и крен

Используйте интерфейс калибровки для установки границ диапазона для каждого сустава. Проведите каждый сустав через весь его диапазон движения и отрегулируйте минимальные и максимальные значения соответственно. После того как вы установите подходящие границы для всех суставов, сохраните калибровку.
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=30Arm
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