Бимануальный сбор данных

DK1 изначально разработан для двуручного сбора данных телеуправления. В этом руководстве описывается подключение рук и камер, выполнение процедуры записи ведущего/ведомого, понимание схемы бимануального набора данных и подготовка данных для обучения ACT.

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

Аппаратные соединения для бимануальной записи

Бимануальная запись требует большего количества соединений, чем установка с использованием одной руки. Проверьте каждое соединение перед запуском LeRobot — отсутствие соединения в середине сеанса приведет к повреждению эпизода.

🥇

Лидерный рычаг (Dynamixel XL330)

USB-C от ведущего рычага к главному ПК. Этот рычаг перемещается рукой оператора. Используйте короткий кабель (1 м), чтобы избежать случайных отключений во время телеоперации. Проверять: ls /dev/ttyACM0

🥈

Следящий рычаг (DM4340 + мощность)

USB-C от ведомого рычага к главному ПК плюс источник питания постоянного тока. Следящему рычагу требуется внешнее питание — никогда не работайте только от USB-питания. Проверять: ls /dev/ttyACM1

📷

Наручная камера (ведомая рука)

Установите веб-камеру USB на рабочий орган ведомого рычага. Это основная манипуляционная камера. Подключитесь через USB 3.0. Проверять: ls /dev/video0

📖

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

Фиксированная камера над бимануальным рабочим пространством на высоте около 70 см, наклоненная под углом 30° вниз. Захватывает обе руки одновременно. Второй порт USB 3.0. Проверять: ls /dev/video2

Критично: биручная синхронизация. Благодаря двум манипуляторам и двум камерам синхронизация является наиболее важным фактором качества данных для DK1. LeRobot отмечает время всех потоков по часам главного компьютера. Чтобы минимизировать рассогласование временных меток: (1) используйте отдельные контроллеры шины USB для камер и кронштейнов, (2) используйте концентраторы USB 3.0 со стабильной тактовой частотой, (3) установите регулятор ЦП в режим производительности. Цель: рассогласование <5 мс между всеми четырьмя потоками. Рассинхронизация на 10 мс между состояниями левой и правой руки может привести к сбоям в обучении ACT при выполнении задач с большим количеством контактов.

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

Процедура записи телеоперации лидера/ведомого

Выполняйте следующие действия для каждого сеанса записи DK1. Бимануальная процедура имеет несколько дополнительных этапов по сравнению со сбором одной рукой.

1

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

Освободите общее рабочее пространство между обоими кронштейнами (1,5 м × 1 м). Убедитесь, что обе руки достигают общего рабочего пространства без столкновений. Перед записью проверьте аварийную остановку. Видеть Страница безопасности.

2

Подключите и проверьте оба рычага

# Verify serial ports are available
ls /dev/ttyACM*
# Expected: /dev/ttyACM0 (leader) and /dev/ttyACM1 (follower)

# Quick connection test
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=none
3

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

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

python3 -c "
import cv2
for i in [0, 2]:
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        ret, frame = cap.read()
        print(f'Camera {i}: OK ({frame.shape[1]}x{frame.shape[0]})')
    else:
        print(f'Camera {i}: FAILED')
    cap.release()
"
4

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

Вручную переместите ведущий рычаг в исходное положение телеопаса. Следящий рычаг будет отражать это. Удерживайте рычаг лидера неподвижно в течение 2–3 секунд, чтобы подтвердить синхронизацию перед началом периода разминки.

5

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

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

6

Начать двуручную запись LeRobot

source ~/.venvs/dk1/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up block with left arm, place in bin with right arm" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=15

Используйте более длинный reset_time_s для бимануальных задач — сброс настроек двух рук и сцены занимает больше времени, чем настройка одной рукой.

7

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

После каждой серии из 10 эпизодов воспроизведите и просмотрите их, прежде чем продолжить. Обратите внимание на координацию рук — отставание между левой и правой руками будет проявляться в виде дрожи в движениях ведомого.

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

Нажмите на HuggingFace Hub

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

Формат набора данных LeRobot для бимануального управления (DK1)

Схема бимануального набора данных DK1 удваивает поля состояния суставов по сравнению с записью одной рукой. Каждый эпизод содержит синхронизированные наблюдения с ведущих и ведомых рук, а также со всех камер.

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

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

Схема данных эпизода (двуручный режим)

Поля в каждом эпизоде ​​Файл паркета — ДК1 бимануал (bi_dk1_follower)
наблюдение.состояние float32[16] Положения шарниров ведомого рычага: 7 степеней свободы + захват × 2 рычага = 16 значений.
наблюдение.state_left float32[8] Левый ведомый рычаг: 7 суставных положений + 1 захват (рад)
наблюдение.state_right float32[8] Правый ведомый рычаг: 7 суставных положений + 1 захват (рад)
действие float32[16] Целевые позиции для обоих ведомых рычагов (из телеоптики ведущей руки)
action_left float32[8] Целевые позиции для левой руки от лидера
действие_право float32[8] Целевые позиции для правой руки от лидера
наблюдение.изображения.wrist_cam видео путь Камера, крепящаяся на запястье, на концевом эффекторе ведомого рычага
наблюдение.изображения.overhead_cam видео путь Исправлена ​​верхняя камера, показывающая полное двуручное рабочее пространство.
временная метка float64 Временная метка Unix хост-компьютера. Оба плеча отбираются в эту отметку времени.
Arm_sync_delta_ms поплавок32 Для DK1: разница во времени между показаниями состояния левой и правой руки. Отметить эпизоды, где это значение превышает 10 мс.
следующий.сделано логическое значение Правда в последнем кадре эпизода
Гарантия качества

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

Бимануальные наборы данных предъявляют более строгие требования к качеству, чем данные, полученные одним рукавом. Плохая координация между вооруженными силами является основной причиной неудач в обучении политике DK1.

  • 1
    Дельта синхронизации рычага менее 10 мс. Проверьте arm_sync_delta_ms поле в каждом эпизоде. Скачки длительностью более 10 мс указывают на конфликт на шине USB или потерю последовательного пакета. Удалите эпизоды с устойчивыми высокими дельтами.
  • 2
    Отсутствие колебаний ведомого рычага во время контакта Просмотрите траектории ведомых рук в точках контакта (захват, передача, размещение). Колебания проявляются как высокочастотный шум в observation.state. Уменьшите усиление PD, если оно присутствует. Видеть устранение неполадок программного обеспечения.
  • 3
    Обе руки выполняют задание в одном эпизоде. Для бимануальных задач эпизод действителен только в том случае, если обе руки выполняют назначенные им подзадачи. Если левая рука справилась, но правая уронила объект, отметьте эпизод как неудачный и удалите его или добавьте к нему аннотацию.
  • 4
    Никаких пропущенных кадров камеры Оба потока камеры должны иметь ожидаемое количество кадров. Отсутствие кадров с любой камеры повреждает входные данные зрительно-моторной политики. Проверьте с lerobot.scripts.visualize_dataset.
  • 5
    Сцена задания сбрасывалась одинаково между эпизодами. Рабочее пространство обеих рук необходимо сбрасывать для каждого эпизода. Положение объекта, начальная конфигурация руки и углы камеры должны совпадать. Используйте сфотографированную стартовую конфигурацию в качестве образца.
  • 6
    Продолжительность эпизода постоянна Все успешные эпизоды должны находиться в пределах ±25% от медианной продолжительности. Бимануальные задачи часто имеют более высокую дисперсию, чем задачи с одной рукой, но крайние выбросы (3 × медиана) следует отбросить.
  • 7
    Статистика набора данных симметрична для обеих рук. В meta/stats.json, проверьте это action_left и action_right статистика правдоподобна для геометрии вашей задачи. Если один рычаг показывает нулевую дисперсию, этот рычаг не двигался — проверьте назначения портов.
  • 8
    Стиль демонстрации Teleop последовательный Во всех демонстрациях следует использовать один и тот же путь подхода, стратегию захвата и технику передачи управления. Смешанные стратегии создают мультимодальное распределение действий, которое запутывает обучение ACT. Используйте одного оператора для каждой версии задачи.
Следующий шаг

Обучение ACT на вашем бимануальном наборе данных

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

Поезд ACT (рекомендуется для бимануала)

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

Политика распространения поездов (для задач с большим количеством контактов)

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

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

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

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