LeRobot documentation
Шпаргалка
Шпаргалка
Все команды LeRobot в одном месте. Если вы забыли, как использовать конкретную команду, или хотите узнать о новой, вы можете сделать это здесь.
Для всех команд, перечисленных ниже, не забудьте заменить порты/имена/идентификаторы на свои значения!
Ещё один отличный способ просмотреть все команды и настроить их под вашу конкретную конфигурацию — использовать этот Jupyter Notebook.
Настройка и установка
Для установки обратитесь к Установка LeRobot.
Полезные инструменты
Найти порт
Используйте это для определения, к каким последовательным портам подключены ваши роботы. Следуйте инструкциям в терминале: вас попросят отключить USB-кабель и нажать Enter. Затем скрипт определит и выведет правильный последовательный порт для этого робота.
lerobot-find-port
Поиск камер
Быстро найдите индексы камер и проверьте их вывод. Эта команда выводит информацию о камерах в терминал и сохраняет тестовые кадры с каждой обнаруженной камеры в outputs/captured_images
lerobot-find-cameras
Калибровка
В большинстве случаев калибровку необходимо выполнять один раз для каждого робота и устройства телеуправления. Перед выполнением калибровки убедитесь, что все суставы примерно в среднем положении.
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_armУбедитесь, что вы используете те же идентификаторы, что и во время калибровки, в других скриптах. Именно по ним LeRobot находит файлы калибровки.
Телеуправление
Телеуправление с двумя камерами и отображение данных с помощью Rerun.
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--display_data=trueЗапись набора данных
Набор данных автоматически загружается в Hugging Face Hub под repo_id. Убедитесь, что вы вошли в свой аккаунт HF через CLI (токен можно получить по адресу https://huggingface.co/settings/tokens), и сохраните имя пользователя в HF_USER, которое используется в командах ниже:
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--dataset.repo_id=${HF_USER}/so101_dataset_test \
--dataset.num_episodes=30 \
--dataset.single_task="put the red brick in a bowl" \
--dataset.streaming_encoding=true \
--display_data=trueВо время сбора набора данных вы можете управлять процессом с помощью клавиатуры:
- Нажмите стрелку вправо (
→) илиn: сохранить эпизод и перейти к следующему. - Нажмите стрелку влево (
←) илиr: удалить текущий эпизод и повторить. - Нажмите Escape (
ESC) илиq: остановите процесс, закодируйте видео и загрузите.
lerobot-recordдобавляет дату и время сессии в конец--dataset.repo_id, поэтому${HF_USER}/so101_dataset_testсохраняется как${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS. Полное имя можно найти в вашем профиле Hugging Face или с помощьюls ~/.cache/huggingface/lerobot/${HF_USER}и использовать в командах обучения ниже. Добавьте--dataset.no_stamp=true, чтобы сохранить точное имя.
Глубина записи
Камеры Intel RealSense (type: intelrealsense) записывают поток глубины, если установить use_depth: true. Глубина квантуется в 12-битные коды и хранится как отдельное видео.
lerobot-record \
... \
--robot.cameras="{ head: {type: intelrealsense, serial_number_or_name: \"0123456789\", width: 640, height: 480, fps: 30, use_depth: true} }" \
--dataset.repo_id=${HF_USER}/so101_depth_test \
--dataset.single_task="put the red brick in a bowl" \
--dataset.depth_encoder.depth_min=0.01 \
--dataset.depth_encoder.depth_max=10.0 \
--dataset.depth_encoder.shift=0.0 \
--dataset.depth_encoder.use_log=trueПараметры кодирования видео
Потоки RGB и глубины кодируются независимо с помощью ключей --dataset.rgb_encoder.* и --dataset.depth_encoder.*.
lerobot-record \
... \
--dataset.rgb_encoder.vcodec=h264 \
--dataset.rgb_encoder.pix_fmt=yuv420p \
--dataset.rgb_encoder.crf=23 \
--dataset.depth_encoder.vcodec=hevc \
--dataset.depth_encoder.extra_options='{"x265-params": "lossless=1"}'Обучение
В зависимости от вашего оборудования обучение политики может занять несколько часов. Вот как обучить простую политику ACT:
lerobot-train \
--dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
--policy.type=act \
--output_dir=outputs/train/act_so101_test \
--job_name=act_so101_test \
--policy.device=cuda \
--trackio.enable=true \
--policy.repo_id=${HF_USER}/policy_test \
--steps=20000- Часто используемые типы политик:
act,diffusion,multi_task_dit,smolvla,pi0,pi05,pi0_fast,groot,xvla. У каждой политики есть своя страница в разделе Политики на боковой панели, а Руководство по вычислениям и оборудованию показывает, какие из них подходят для вашего GPU. - Устройства:
cuda(NVIDIA),mps(Apple Silicon),cpu
--policy.type создаёт новую политику указанного типа и обучает её с нуля на вашем наборе данных (некоторые политики всё же начинают с предобученных зрительных или языковых базовых моделей, как задано в их конфигурации). Чтобы вместо этого дообучить существующую модель, передайте --policy.path с локальным контрольной точкой или идентификатором репозитория на Hub: тип политики и её конфигурация будут прочитаны из неё, поэтому --policy.type не требуется.
lerobot-train \
--dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
--policy.path=username/the_policy_to_finetune \
--policy.device=cuda \
--policy.repo_id=${HF_USER}/policy_finetuned_test \
--output_dir=outputs/train/finetuned_so101_test \
--steps=20000Нет локального GPU? Добавьте --job.target=<flavor> (например, a10g-small) к любой из команд, и lerobot-train выполнит её на Hugging Face Jobs — инструмент автоматически загрузит локальный датасет и опубликует обученную модель. Список доступных flavor’ов можно получить командой hf jobs hardware. Чтобы отслеживать метрики задачи, добавьте --trackio.enable=true --trackio.space_id=<user>/<space>: локальная база данных Trackio в поде не сохраняется после завершения задачи.
Чтобы возобновить, укажите --config_path на контрольную точку и добавьте --resume=true. Принимает локальный путь или идентификатор репозитория Hub (будет загружена последняя контрольная точка), а также работает локально или в задаче при добавлении --job.target=<flavor>:
lerobot-train --config_path=${HF_USER}/policy_test --resume=true --job.target=a10g-smallВывод
Inference означает запуск обученной политики/модели на роботе. Для этого используется lerobot-rollout. Необходимо указать путь к вашей политике. Это может быть локальный путь или идентификатор репозитория Hugging Face, например ${HF_USER}/policy_test из команды обучения выше. Используйте тот же порт, --robot.id, конфигурацию камер и описание задачи, что и при сборе датасета. --duration задается в секундах; если не указано, политика работает до тех пор, пока вы не остановите её.
В версиях v0.5.x и более ранних
lerobot-rolloutне существует, поэтому необходимо использоватьlerobot-record. Подробнее — здесь.
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/policy_test \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--task="put the red brick in a bowl" \
--duration=60