Сбор данных

OpenArm спроектирован как платформа для обработки данных. В этом руководстве рассматривается все: от подключения камер до записи эпизодов в формате LeRobot с проверкой качества на каждом этапе.

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

Аппаратные подключения для записи

Для сбора данных требуется больше оборудования, чем простое управление рукой. В этом разделе описано, что и куда подключать перед запуском LeRobot.

📷

Наручная камера

Установите веб-камеру USB или Intel RealSense D435i на фланец рабочего органа. Подключайтесь через USB 3.0 со скоростью более 30 кадров в секунду. Проверять: ls /dev/video*

📖

Верхняя/рабочая камера

Исправлена ​​камера над рабочей областью для общего обзора. Установите на высоте ~60 см над столом, под углом 30° вниз. Второй порт USB 3.0.

🔌

CAN-шина (управление рычагами)

Уже подключено из настройки. Проверять: ip link show can0. Перед запуском LeRobot интерфейс CAN должен быть включен.

👤

Телеоп-устройство

3D SpaceMouse, второй OpenArm в качестве руки-руководителя или геймпада. Лидер-ведомый с двумя OpenArms дает демонстрации высочайшего качества.

Примечание по синхронизации камеры: LeRobot отмечает время всех потоков на уровне хост-компьютера. При настройке нескольких камер используйте концентраторы USB 3.0 (а не концентраторы USB 2.0), чтобы минимизировать рассогласование задержки между кадрами камеры и показаниями общего состояния. Цель: разница между потоками < 5 мс.

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

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

Выполните следующие действия для каждого сеанса записи. Каждый шаг основывается на предыдущем — не пропускайте шаги.

1

Проверка безопасности перед сессией

Очистите рабочее пространство (радиус 1 м), убедитесь, что рычаг свободно достигает исходного положения, проверьте аварийный останов перед записью. Видеть Страница безопасности.

2

Поднимите интерфейс CAN и ROS2.

sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
3

Главная рука

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

python3 -m openarm_can.scripts.home --interface can0
4

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

Перед запуском LeRobot убедитесь, что все камеры ведут потоковую передачу. Отсутствующая камера незаметно испортит ваш набор данных, если LeRobot не сообщит об этом.

# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
5

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

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

6

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

source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube and place it in the bin" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

LeRobot будет подсказывать вам перед каждой серией. Используйте Warmup_time_s, чтобы подготовить позицию телеопаса перед началом записи.

7

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

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

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

Нажмите на HuggingFace Hub

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

Формат набора данных LeRobot

LeRobot хранит наборы данных в формате набора данных HuggingFace, используя файлы Parquet для табличных данных и файлы MP4/PNG для потоков изображений. Каждый эпизод представляет собой последовательность наблюдений и действий с отметками времени.

Структура каталогов

your-username/openarm-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

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

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

Эпизоды отказов как данные

OpenArm предназначен для безопасной записи неудачных попыток, а не только успешных. Траектории неудач — проскальзывание, неправильное понимание, коллизия, попытки восстановления — являются первоклассными данными, критически важными для надежного обобщения политики. Не удаляйте эпизоды сбоя автоматически. Вместо этого добавьте к ним аннотацию success поле в метаданных эпизода и позвольте системе обучения решить, следует ли их использовать.

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

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

Проходите этот контрольный список после каждого сеанса записи и перед отправкой в ​​Hub. Данные низкого качества вредят эффективности политики больше, чем низкое количество эпизодов.

  • 1
    Продолжительность эпизода постоянна Все эпизоды для одной и той же задачи должны находиться в пределах ± 30% от медианной продолжительности. Выбросы обычно указывают на то, что оператор сделал паузу, пропустил захват или запись была прервана.
  • 2
    Никаких пропущенных кадров камеры Убедитесь, что каждый эпизод имеет ожидаемое количество кадров в потоке. Бегать lerobot.scripts.visualize_dataset по 3–5 сериям для проверки качества видео.
  • 3
    Позиции суставов находятся в безопасных пределах. Проверять observation.state никогда не превышает совместных пределов в характеристики. Высокоскоростные всплески указывают на отключение CAN или сбой в управлении — удалите эти эпизоды.
  • 4
    Сцена задания была сброшена между эпизодами. Каждый эпизод должен начинаться с объекта в одном и том же исходном положении. Если вы пропустили сброс, политика будет учиться на противоречивых начальных условиях и плохо обобщать.
  • 5
    Покрытие камеры завершено Наручная камера всегда должна показывать рабочий орган и объект, которым манипулируют. Верхняя камера должна показывать все рабочее пространство. Повторно отрегулируйте крепления, если объект покидает кадр в середине эпизода.
  • 6
    Стиль демонстрации последовательный Все операторы должны использовать один и тот же путь подхода и стиль захвата. Смешанные стратегии сбивают с толку обучение политике. Используйте одного оператора для каждой версии задачи или помечайте эпизоды по операторам.
  • 7
    Статистика набора данных выглядит разумной Проверять meta/stats.json после записи. Убедитесь, что среднее значение действия близко к нулю (не застряло в пределах сустава), а стандартное значение действия достаточно велико, чтобы продемонстрировать различия между эпизодами.
  • 8
    Уровень успеха документирован Запишите процент успеха человека во время сбора. Для задач с большим количеством контактов типичен показатель успеха 60–70%. Меньший успех может указывать на то, что задача слишком сложна; более высокое значение может означать, что задача слишком проста, чтобы обеспечить полезный обучающий сигнал.
Следующий шаг

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

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

Поезд АСТ

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

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

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

Идите глубже: Читать полностью Обзор конвейера сбора данных в Библиотеке робототехники для тщательной обработки структуры эпизодов, управления версиями набора данных, сопоставления сим-карты с реальностью и многозадачной композиции набора данных.

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

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