Тактильная перчатка Juqiao

Сбор данных

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

Что перчатка добавляет к вашему набору данных Стандартные наборы данных телеоперации фиксируют положение суставов, скорости и изображения с камер. Добавление перчатки Juqiao записывает карту давления с 64 узлами и частотой 200 Гц, показывающую пространственное распределение контактной силы во время каждого захвата. Политики, обученные на этих данных, могут научиться модулировать силу захвата, что крайне важно для хрупких или деформируемых объектов.
Настройка оборудования

Системные подключения

Подключите все устройства перед запуском любого программного обеспечения. Перчатка подключена строго по USB — беспроводного режима нет.

Рука робота + рука

Orca Hand (рекомендуется) или другой рабочий орган. Подключается через USB-адаптер Feetech или CAN, в зависимости от руки.

/dev/ttyUSB0 or CAN0

Перчатка Цзюцяо

USB-C для хост-компьютера. Отображается как серийный номер CDC-ACM. кабель 1,5 м; при необходимости используйте расширение USB для свободы передвижения.

/dev/ttyACM0

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

Камера USB или GigE, установленная на запястье робота, обеспечивает ориентированный на объект обзор во время обучения.

/dev/video0 or GigE IP

Верхняя камера

Исправлена ​​камера рабочей области для контекста сцены. Сопряжение с наручной камерой для получения наборов данных с несколькими изображениями.

/dev/video2 or GigE IP

Устройство телеуправления

Рука-лидер (лидер SO-101 / OpenArm), контроллер VR или SpaceMouse, управляющий ведомым роботом.

Порт лидера/HID
Рабочий процесс записи

Пошаговая запись

1

Поднимите руку и кисть робота.

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

# Terminal 1: Robot arm (example: OpenArm) ros2 запускает openarm_ros2 порт openarm.launch.py:=/dev/ttyUSB0 # Terminal 2: Orca Hand (if using Orca Hand end-effector) запуск ros2 orca_ros2 orca_hand.launch.py ​​порт:=/dev/ttyUSB1 # Verify тема ros2 хз /joint_states # Should be ~100 Hz тема ros2 хз /orca_hand/joint_states # Should be ~100 Hz
2

Запустите драйвер Juqiao Glove.

Запускаем перчаточный узел ROS2. Прежде чем начинать сеанс записи, убедитесь, что данные передаются с частотой 200 Гц.

# Terminal 3: Juqiao Glove запуск ros2 juqiao_glove_ros2 glove.launch.py ​​порт:=/dev/ttyACM0 # Verify pressure data is live тема ros2 хз /juqiao_glove/tactile_array # Should be ~200 Hz Тема Echo ros2 /juqiao_glove/grasp_region # Should print region strings
3

Запустить камеры

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

# Wrist camera (USB) ros2 запустить usb_cam usb_cam_node_exe --ros-args -p video_device:=/dev/video0 -p частота кадров:=30.0 # Overhead camera (GigE example) ros2 запуск camera_ros2 gige_camera.launch.py ​​ip:=192.168.1.100 # Verify тема ros2 hz /wrist_camera/image_raw тема ros2 hz /overhead_camera/image_raw
4

Убедитесь, что все потоки синхронизированы

Использовать список тем ros2 чтобы убедиться, что все необходимые темы присутствуют. Перед записью каких-либо эпизодов проверьте временные метки в пределах 20 мс для всех модальностей.

список тем ros2 | grep -E "сустав|тактильное|изображение|хватать" # Expected topics: # /joint_states (arm, ~100 Hz) # /orca_hand/joint_states (hand, ~100 Hz) # /juqiao_glove/tactile_array (glove, ~200 Hz) # /juqiao_glove/grasp_region (glove, ~200 Hz) # /wrist_camera/image_raw (camera, 30 Hz) # /overhead_camera/image_raw (camera, 30 Hz)
5

Запишите набор данных с помощью LeRobot

Используйте сценарий записи LeRobot. --tactile-topic Флаг добавляет поток давления в перчатках в виде столбца набора данных вместе с состояниями суставов и изображениями.

# Record 50 episodes; press Enter to start each, Space to stop python -m lerobot.scripts.record \ --robot-path lerobot/configs/robot/orca_hand.yaml \ --fps 30 \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --tags "prescription juqiao,small,small" \ --warmup-time-s 2 \ --episode-time-s 30 \ --reset-time-s 5 \ --num-episodes 50 \ --push-to-hub\-tactile-topic /juqiao_glove/tactile_array\ --tactile-key tactile_pressures
Еще нет флага LeRobot --tactile-topic? Используйте мультимодальную оболочку рекордера SVRC, которая автоматически обрабатывает синхронизацию и схему набора данных: pip install roboticscenter [рекордер]
6

Просматривайте серии, прежде чем нажимать

Воспроизведите каждый эпизод с наложением тепловой карты, чтобы проверить качество тактильных данных, прежде чем переходить к HuggingFace Hub.

# Replay and overlay heatmap on video python -m roboticscenter.scripts.review_episode \ --dataset-path ./data/orca_grasp_tactile \ --episode-index 0 \ --overlay-tactile \ --tactile-key tactile_pressures # Discard bad episodes python -m lerobot.scripts.delete_episodes \ --dataset-path ./data/orca_grasp_tactile \ --эпизоды 3 7 12 # episode indices to discard
7

Нажмите на HuggingFace Hub

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

вход в Huggingface-Cli # first time only python -m lerobot.scripts.push_dataset \ --dataset-path ./data/orca_grasp_tactile \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile # Verify upload питон -с " из наборов данных импортируйте load_dataset ds = load_dataset('$HUGGINGFACE_USER/orca_grasp_tactile', Split='train') печать (ds.column_names) print(ds.features['tactile_pressures']) "
Ссылка

Схема набора данных

Каждый кадр в наборе данных содержит следующие столбцы. Все массивы хранятся в виде столбцов float32 Parquet; изображения в виде видеопоследовательностей MP4.

СтолбецФорма/ТипОписание
наблюдение.состояние float32[6] Положения суставов рук робота (радианы). Индекс 6 — это апертура захвата при использовании рычага с 6 степенями свободы.
наблюдение.hand_state float32[17] Положение суставов рук Orca (радианы), 17 ГРИП. Опустите, если нет ловкой руки. Маркировано для каждого совместного имени в метаданных.
наблюдение.tactile_pressures float32[64] Перчатка Juqiao нормализовала давление на узел от 0,0 (нет контакта) до 1,0 (полная шкала). Частота дискретизации понижена на 200 Гц, чтобы соответствовать частоте кадров робота.
наблюдение.tactile_pressures_raw uint16[64] Необработанные значения 16-битного АЦП. Сохраните для повторной нормализации после повторной калибровки. Необязательный; опустите, чтобы уменьшить размер набора данных.
наблюдение.grasp_region ул. Эвристика активной области контакта: "ладонь", "большой палец", "индекс", "середина", "кольцо", "мизинец", или "" (нет контакта).
наблюдение.изображения.запястье uint8[Ч, Вт, 3] RGB-кадр наручной камеры со скоростью 30 кадров в секунду, сохраненный в виде видеопоследовательности MP4.
наблюдение.изображения.накладные расходы uint8[Ч, Вт, 3] RGB-кадр верхней камеры со скоростью 30 кадров в секунду.
действие float32[6 или 23] Целевые положения суставов руки (6) и, возможно, кисти (17). Форма зависит от наличия ловкой руки.
языковая_инструкция ул. Описание задачи, например. «возьми яйцо, не разбив его». Обеспечивает обучение политике с учетом языка.
эпизод_index интервал Номер эпизода в наборе данных.
индекс_фрейма интервал Номер кадра в эпизоде ​​(с индексом 0).
временная метка float64 Прошло несколько секунд с начала эпизода.

Тактильное понижение разрешения

Перчатка течет с частотой 200 Гц; робот и камеры обычно работают с частотой 30–100 Гц. Устройство записи выравнивает кадры, используя сопоставление временных меток ближайшего соседа. Чтобы сохранить полный тактильный поток частотой 200 Гц как отдельный массив:

# Store full-rate tactile as a variable-length array per frame python -m roboticscenter.scripts.record \ --tactile-mode full_rate # default is "matched" (one per robot frame) # This produces a ragged column: observation.tactile_sequence # shape per row: float32[N, 64] where N varies (typically 6-7 frames at 200Hz/30fps)
Качество

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

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

  • Тактильный поток непрерывен — без пропусков кадров. Проверять кадр.последовательность увеличивается без пропусков. Пропуски кадров отображаются в виде повторяющихся значений в тактильной колонке.
  • Базовый уровень в состоянии покоя близок к нулю (< 0,03). В начале эпизода (до любого контакта) значение максимального давления должно быть ниже 0,03. Дрейф выше 0,05 в состоянии покоя указывает на необходимость повторной калибровки перчатки.
  • События контакта совпадают с видимыми захватами в видео Воспроизвести с --overlay-тактильный. Скачки давления (макс. узел > 0,4) должны совпадать с видимым закрытием захвата на камере на запястье.
  • Область захвата постоянна во время фазы контакта захват_регион должен стабилизироваться в одной или двух областях во время каждого захвата (например, "ладонь" + "индекс"). Быстро меняющиеся области указывают на несоосность перчаток или зашумленный сигнал.
  • Задержка перчатки < 20 мс относительно состояния робота Сравните начало тактильного события со скачком скорости захвата. Задержка > 20 мс указывает на перегрузку USB-концентратора — подключите перчатку напрямую к USB-порту хоста.
  • Языковое обучение соответствует продемонстрированному заданию Для наборов данных, обусловленных языком, убедитесь, что инструкция, введенная в начале эпизода, точно описывает то, что на самом деле продемонстрировал оператор.
  • Отсутствие помех кабеля при движении робота USB-кабель длиной 1,5 м не должен ограничивать движения рук оператора и не должен стягивать перчатку во время эпизода. Используйте зажим для прокладки кабеля на предплечье.
Политическое обучение

Обучение с помощью тактильных наблюдений

Политики, использующие тактильные данные, обычно показывают улучшение на 15–30% при выполнении задач, чувствительных к контакту (обращение с хрупкими предметами, вставка прищепок, складывание ткани) по сравнению с базовыми показателями, основанными только на зрении.

# ACT policy with tactile observations (SVRC fork adds tactile encoder) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --политический акт \ --policy.observation_keys \ "наблюдение.изображения.запястье" \ "observation.images.overhead" \ "наблюдение.состояние" \ "observation.hand_state" \ "observation.tactile_pressures" \ --output-dir выходы/act_tactile # The tactile encoder maps float32[64] → latent via a small MLP # No special architecture changes required for ACT or Diffusion Policy
# Diffusion Policy with tactile (identical --observation_keys, different policy flag) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --политика распространения \ --policy.observation_keys \ "наблюдение.изображения.запястье" \ "наблюдение.состояние" \ "observation.tactile_pressures" \ --output-dir выходы/diffusion_tactile
Совет: абляция тактильно во время оценки Проходить наблюдение.tactile_pressures = нули(64) во время вывода, чтобы измерить, насколько политика полагается на тактильные ощущения, а не на зрительные. Это определяет, требует ли ваша задача тактильных ощущений или достаточно зрения.