LeRobot documentation

Шпаргалка

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

Шпаргалка

Все команды 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
Update on GitHub