Руководство по настройке тактильных перчаток Juqiao

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

1

Наденьте перчатки и подключите модуль сбора данных

Перчатка Juqiao поставляется в виде тканой текстильной перчатки с разъемом для ленточного кабеля на запястье. Модуль сбора данных представляет собой отдельный небольшой корпус на печатной плате, который обеспечивает аналого-цифровое преобразование и передачу данных по USB.

  • Наденьте перчатку как и в случае со стандартной перчаткой, с разъемом FPC, расположенным на запястье.
  • Установите ленточный кабель: Выровняйте ленточный кабель FPC от разъема на запястье перчатки и плотно вставьте его в ленточный разъем модуля сбора данных. Слабый щелчок указывает на надежное сиденье. Если узлы показывают нулевые показания, лента не полностью установлена ​​— см. раздел «Устранение неполадок» ниже.
  • Монтируем модуль: Прикрепите или закрепите модуль сбора данных на ремешке или креплении на предплечье, чтобы он не мешал движению запястья во время телеоперации.
  • Подключите USB: Подключите модуль сбора данных к хост-компьютеру с помощью прилагаемого USB-кабеля.
Драйвер не требуется в Linux и macOS. Модуль сбора данных представляет собой последовательное устройство USB CDC ACM. В Linux он обозначается как /dev/ttyUSB0 или /dev/ttyACM0; на macOS как /dev/tty.usbserial-*. В Windows установите прилагаемый драйвер CP210x или CH340, если устройство не определяется автоматически как COM-порт.
2

Установите Python SDK (pyserial)

Никакого проприетарного SDK поставщика не требуется. Модуль сбора данных передает сформированные двоичные пакеты через стандартный последовательный порт — pyserial это единственная зависимость.

Установите Pyserial:

pip install pyserial

Убедитесь, что последовательный порт виден:

# Linux
ls /dev/ttyUSB* /dev/ttyACM*

# macOS
ls /dev/tty.usbserial-*

# Or use pyserial's port listing tool
python -m serial.tools.list_ports

Подтвердите прямую трансляцию (проверка работоспособности):

# Replace /dev/ttyUSB0 with your port; 921600 is the default baud rate
python -m serial.tools.miniterm /dev/ttyUSB0 921600

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

Проблема с разрешением Linux? Если вы получаете сообщение об ошибке «отказано в доступе» в Linux, добавьте своего пользователя в dialout группу, выйдите и снова войдите: sudo usermod -aG dialout $USER
3

Запустите программу чтения кадров Python

Модуль сбора данных отправляет двоичные кадры фиксированной длины. Каждый кадр начинается с 2-байтового начального разделителя. 0xAA 0x55, за которым следует 1-байтовый счетчик каналов N, N × 2 байта 16-битных значений давления с обратным порядком байтов и 2-байтовая контрольная сумма CRC16. Общая длина кадра = 5 + 2N байт.

Базовый считыватель кадров — печатает список значений давления для каждого кадра:

import serial, struct, time

BAUD = 921600
PORT = "/dev/ttyUSB0"   # /dev/tty.usbserial-* on macOS, COMx on Windows
HEADER = b"\xaa\x55"

def read_frame(ser: serial.Serial, n_channels: int) -> list[int] | None:
    # Sync to frame header
    buf = ser.read(2)
    if buf != HEADER:
        ser.read_until(HEADER[-1:])
        return None
    raw = ser.read(1 + n_channels * 2 + 2)
    n = raw[0]
    if n != n_channels:
        return None
    pressures = list(struct.unpack_from(f">{n}H", raw, 1))
    # CRC check omitted for brevity — validate in production
    return pressures

with serial.Serial(PORT, BAUD, timeout=0.1) as ser:
    N = 64   # number of sensing nodes — confirm from spec doc
    while True:
        frame = read_frame(ser, N)
        if frame:
            print(frame)   # list of N 16-bit pressure values

Сожмите разные части перчатки и убедитесь, что значения узлов растут и падают. Все 64 узла должны ответить. Если в каком-либо регионе нет ответа, еще раз проверьте посадку ленточного кабеля как на разъеме для перчаток, так и на модуле.

Нет оборудования? Используйте макетный режим. Для разработки программного обеспечения без физического датчика смоделируйте последовательный поток с помощью устройства обратной связи или макета сценария, который генерирует кадры допустимого формата. Мост платформы принимает один и тот же формат JSONL независимо от источника.
4

Калибровка нулевой точки

Датчики ткани подвержены смещению базовой линии из-за изменений температуры и многократного сжатия. Калибруйте в начале каждого сеанса для получения точных показаний.

  • Расслабьте перчатку на плоской поверхности без какого-либо давления — не надевайте его во время калибровки, если вы не можете держать руку полностью неподвижной и расслабленной.
  • Окна: Откройте инструмент настройки Juqiao, выберите COM-порт, нажмите Соединять, затем перейдите к Калибровка → Ноль. Для всех базовых линий узла устанавливаются текущие значения покоя.
  • Линукс/МакОС: Отправьте программную нулевую команду в соответствии с документом протокола V2.3 или примените вычитание базовой линии в сценарии моста Python (захватите 50 кадров в состоянии покоя и вычтите среднее значение для каждого канала).
# Simple software baseline subtraction (Linux/macOS alternative)
import serial, struct, numpy as np

BAUD, PORT, N = 921600, "/dev/ttyUSB0", 64
HEADER = b"\xaa\x55"

def read_frame(ser):
    ser.read_until(HEADER)
    raw = ser.read(1 + N * 2 + 2)
    return list(struct.unpack_from(f">{N}H", raw, 1))

with serial.Serial(PORT, BAUD, timeout=0.1) as ser:
    ser.reset_input_buffer()
    baseline = np.mean([read_frame(ser) for _ in range(50)], axis=0)
    print("Baseline captured. Starting calibrated stream...")
    while True:
        frame = read_frame(ser)
        if frame:
            calibrated = np.maximum(0, np.array(frame) - baseline)
            print(calibrated.astype(int).tolist())
Повторите калибровку, если перчатка нагреется. Перед калибровкой дайте прогреться 1–2 минуты до рабочей температуры. При длительных сеансах записи (> 30 минут) запустите новую калибровку между эпизодами.
5

Интеграция платформы — Бесстрашная платформа

Бесстрашная платформа в platform.roboticscenter.ai поддерживает датчик Juqiao в качестве тактильного узла в сеансе телеоперации. Кадры давления записываются синхронно с состояниями суставов робота, потоками камер и другими модальностями датчиков.

Последовательность регистрации:

  • Начните телеоп-сеанс через POST /api/teleop/sessions/create-sdk с device_type: "juqiao_textile_skin".
  • Откройте платформу WebSocket по адресу /api/teleop/ws и отправьте регистрационное рукопожатие: role: "operator", device_type: "tactile_sensor", capabilities: ["tactile", "pressure_array", "telemetry"].
  • При получении type: "ready", начните пересылку кадров телеметрии JSONL из последовательного устройства чтения.

JSONL-эмиттер для моста платформы:

import serial, struct, time, json, sys

PORT = "/dev/ttyUSB0"
BAUD = 921600
N_CHANNELS = 64
HEADER = b"\xaa\x55"

def read_frame(ser):
    buf = ser.read_until(HEADER)
    if not buf.endswith(HEADER):
        return None
    raw = ser.read(1 + N_CHANNELS * 2 + 2)
    pressures = list(struct.unpack_from(f">{N_CHANNELS}H", raw, 1))
    return pressures

with serial.Serial(PORT, BAUD, timeout=0.05) as ser:
    while True:
        frame = read_frame(ser)
        if frame:
            record = {
                "ts": int(time.time() * 1000),
                "device": "juqiao_textile_skin",
                "variant": "high_frequency_v2.3",
                "pressures": frame,   # flat list, N_CHANNELS values
                "n_channels": N_CHANNELS
            }
            print(json.dumps(record), flush=True)  # JSONL for platform bridge

Формат кадра телеметрии, отправляемый на платформу WebSocket:

{
  "type": "telemetry",
  "member_id": "juqiao-glove-right",
  "device": "juqiao_textile_skin",
  "variant": "high_frequency_v2.3",
  "pressures": [0, 512, 1024, ...],   // flat array, N_CHANNELS 16-bit values
  "n_channels": 64,
  "ts": 1743680400123                  // Unix millisecond timestamp
}

Сопряжение с OpenArm или DK1: В типичной настройке дистанционного управления на главном ПК выполняются три отдельных процесса, каждый из которых регистрируется с одним и тем же идентификатором сеанса — мост управления манипулятором робота, последовательный мост Juqiao и мосты камер для просмотра на запястье и сцены. Платформа синхронизирует все потоки по времени, используя ts поле и архивирует один JSONL-файл эпизода для каждой демонстрации. Во время воспроизведения панель GloveWorkbench отображает тепловую карту тактильного давления вдоль траектории сустава руки.

Бимануальная установка. Для двуручной телеоперации зарегистрируйте два узла перчаток, используя разные member_id ценности - juqiao-glove-right и juqiao-glove-left. Каждая перчатка имеет собственный модуль сбора данных и USB-соединение. Объедините обе перчатки в один объект JSON за такт, чтобы вдвое сократить количество сообщений платформы при частоте 200 Гц.

Полную справку по API, охватывающую создание сеанса, подтверждение связи через WebSocket и загрузку выпусков, см. Справочник по API платформы SDK.

!

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

  • Нет последовательного устройства в Linux: Бегать sudo usermod -aG dialout $USER и выйти/зайти. Подтвердите с помощью lsusb которые перечисляет модуль. В старых ядрах modprobe cdc_acm может понадобиться.
  • Все показания давления равны нулю: Отключите USB, переустановите шлейф FPC на обоих концах (разъем для перчаток и модуль), затем снова подключите. Проверьте светодиод модуля — он должен пульсировать с настроенной частотой дискретизации.
  • Большое смещение базовой линии на незагруженных узлах: Перед сеансом выполните калибровку нулевой точки при комнатной температуре. После надевания дайте перчатке стабилизироваться в течение 1–2 минут.
  • Ошибки синхронизации кадров / искаженные данные: Подтвердите, что скорость передачи данных равна 921600. Очистите последовательный буфер при открытии: ser.reset_input_buffer(). Использовать read_until(HEADER) при запуске для повторной синхронизации, а не чтения фиксированной длины.
  • Сенсорные узлы реагируют медленно или кажутся «липкими»: Аккуратно согните перчатку по всему диапазону движений несколько раз перед сеансом. Постоянные проблемы могут указывать на усталость волокна — обратитесь в компанию Juqiao Precision для замены.
  • Платформенный мост пропускает кадры с частотой 200 Гц: Уменьшите частоту дискретизации до 100 Гц для сеансов в одной перчатке. Для бимануальной настройки группируйте обе перчатки в один объект JSON за такт, чтобы вдвое сократить количество сообщений.
Все еще застрял? Контакт Поддержка SVRC и включите версию вашей ОС и Python, вывод lsusb -v (Linux) или Диспетчер устройств (Windows), версия спецификации (V2.3 или V1.0, двуязычная) и краткое описание проблемы.

Настройка завершена?

Ознакомьтесь с полными характеристиками или откройте платформу, чтобы начать записывать эпизоды.