Сбор данных

SO-101 — одно из наиболее распространенных устройств сбора данных в сообществе LeRobot. В этом руководстве рассматривается все: от подключений оборудования до записи эпизодов и отправки набора данных в HuggingFace.

Перед записью

Настройка оборудования для записи

Настройка сбора данных СО-101 проще, чем у контроллеров CAN-шины — все работает через USB. Вот что подключить.

📷

Камера рабочего пространства

Веб-камера USB направлена ​​на рабочее пространство сверху или сбоку. Установите в фиксированном положении — не перемещайте его между эпизодами. Проверять: ls /dev/video*

🔒

Наручная камера (опционально)

Небольшая USB-камера, установленная на концевом эффекторе. Добавляет вид от первого лица. Требуется второй порт USB. LeRobot поддерживает синхронизацию нескольких камер.

🔌

Следящий рычаг (последовательный USB)

Рука, выполняющая действия. Подключитесь через USB-сервоконтроллер. Проверьте порт с помощью ls /dev/ttyUSB*

👤

Лидерный рычаг (USB-серийный)

Второй СО-101 в режиме соответствия — двигайте его рукой, чтобы привести в движение ведомый. Подключитесь ко второму порту USB. Проводит демонстрации высочайшего качества.

Нет ROS, нет драйверов ядра: В отличие от настроек CAN-шины, стек сбора данных SO-101 полностью работает через последовательный порт USB. Вы можете записывать на MacBook или ноутбуке с Windows — Ubuntu не требуется.

Рабочий процесс записи

Пошаговый процесс записи

1

Убедитесь, что калибровка актуальна

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

python -m lerobot.scripts.control_robot \
  --robot.type=so101 --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate
2

Проверьте каналы камеры

python -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
3

Переместить руку в исходное положение

Установите ведомый рычаг в исходное положение (полностью выдвинутое, рабочий орган направлен вперед). Перед тем, как начать телеопию, верните руку лидера в то же положение.

4

Настройте сцену задач

Разместите объекты в их одинаковых исходных положениях. При необходимости пометьте таблицу: согласованные начальные условия имеют решающее значение для обобщения политики.

5

Начать запись LeRobot

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB1 \
  --robot.leader_arms.main.type=so101 \
  --robot.leader_arms.main.port=/dev/ttyUSB0 \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/so101-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick the red block and place it in the bin" \
  --control.warmup_time_s=3 \
  --control.reset_time_s=8

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

6

Просмотрите и воспроизведите эпизоды

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/so101-pick-place-v1 \
  --episode_index=0

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

7

Нажмите на HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/so101-pick-place-v1
Формат набора данных

Формат набора данных SO-101

SO-101 использует стандартный формат набора данных LeRobot/HuggingFace — схему, идентичную OpenArm, Koch и другим рукам LeRobot. Это означает, что ваши наборы данных напрямую совместимы со всей экосистемой обучения LeRobot.

Схема данных эпизода

Поля в каждом эпизоде. Файл паркета.
наблюдение.состояние float32[6] Положения суставов в градусах (6 степеней свободы — 5 суставов + захват)
наблюдение.изображения.* видео путь Ссылка на кадр в видеофайле MP4 для каждой камеры
действие float32[6] Целевые позиции суставов с помощью ведущей руки
временная метка float64 Временная метка Unix в секундах
индекс_фрейма int64 Номер кадра в эпизоде
эпизод_index int64 Номер эпизода в наборе данных
следующий.сделано логическое значение Правда в последнем кадре каждого эпизода
Task_index int64 Индексировать в таблицу поиска описания задачи

Специальные примечания к SO-101

В пространстве действий SO-101 позиции суставов используются в градусах (сервоблоки Feetech), а не в радианах. При смешивании наборов данных SO-101 и OpenArm для кросс-платформенного обучения сначала нормализуйте оба набора данных в радианах, используя статистику в meta/stats.json.

Гарантия качества

Контрольный список качества собранных данных

Проходите это после каждого сеанса записи, прежде чем отправлять в хаб.

  • 1
    Продолжительность эпизодов одинакова Эпизоды слишком большой продолжительности обычно означают, что оператор сделал паузу, захват соскользнул или запись была прервана. Соблюдайте пределы ±30 % от медианной длины.
  • 2
    Нет скачков скорости сервопривода Сервоприводы STS3215 имеют ограниченную полосу пропускания — внезапные скачки скорости observation.state указывают на отключение последовательной шины. Удалите эти эпизоды.
  • 3
    Кадры камеры сопоставлены с совместными данными Убедитесь, что временные метки камеры и временные метки соединения находятся в пределах 20 мс друг от друга. Задержка последовательного порта USB может привести к дрейфу при длительных записях. Повторно синхронизируйте камеры каждые 100 серий.
  • 4
    Отслеживание руки лидера было плавным Если ведомый заметно отстает во время записи (из-за задержки последовательного порта USB), метки действий будут сдвинуты по времени от наблюдений. Переиграйте, чтобы проверить.
  • 5
    Сцена задания была одинаковой в начале каждого эпизода. Объекты в одинаковом положении и ориентации. Меньшая повторяемость SO-101 (по сравнению с оружием CAN) делает это особенно важным — отклонения в начальных условиях вредят политическому обучению.
  • 6
    Открытие/закрытие захвата четко фиксируется Состояние захвата SO-101 — соединение 6. Убедитесь, что события захвата показывают в данных четкий переход положения соединения (открыто → закрыто), а не постепенное смещение.
Следующий шаг

Обучение политики на основе вашего набора данных

Как только ваш набор данных пройдет проверку качества, обучите ACT или политику распространения с помощью LeRobot.

Поезд АСТ

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/so101-pick-place-v1 \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/act-so101-pick-place

Политика распространения поездов

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/so101-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/diffusion-so101-pick-place

Наборы данных сообщества: SO-101 обладает одной из крупнейших коллекций наборов данных сообщества в экосистеме LeRobot. Прежде чем собирать собственные данные, проверьте HuggingFace Hub для существующих наборов данных SO-101 — возможно, вы сможете выполнить точную настройку на основе существующего базового набора данных и сэкономить время записи.

Набор данных готов? Начать обучение.

Отправьте свой набор данных в HuggingFace и обучите ACT или Diffusion Policy.