Сбор данных
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 м), убедитесь, что рычаг свободно достигает исходного положения, проверьте аварийный останов перед записью. Видеть Страница безопасности.
Поднимите интерфейс 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
Главная рука
Запускайте процедуру возврата в исходное положение, чтобы установить исходное положение перед каждым сеансом. Рычаг должен достичь исходного положения без нагрузки на рабочий орган.
python3 -m openarm_can.scripts.home --interface can0
Проверьте каналы камеры
Перед запуском 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()
"
Настройте сцену задач
Размещайте объекты в одинаковых исходных положениях. Последовательная инициализация сцены имеет решающее значение для обобщения политики. Сфотографируйте или отметьте стартовую конфигурацию.
Начать запись 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, чтобы подготовить позицию телеопаса перед началом записи.
Просмотрите и воспроизведите эпизоды
После записи воспроизведите подозрительные эпизоды, прежде чем завершить набор данных. Немедленно удаляйте некачественные серии.
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/openarm-pick-place-v1 \
--episode_index=0
Нажмите на 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/
└── ...
Схема данных эпизода
Эпизоды отказов как данные
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
Идите глубже: Читать полностью Обзор конвейера сбора данных в Библиотеке робототехники для тщательной обработки структуры эпизодов, управления версиями набора данных, сопоставления сим-карты с реальностью и многозадачной композиции набора данных.