Руководство по настройке тактильных перчаток Juqiao
Полный путь от распаковки до получения данных о давлении в реальном времени и интеграции платформы. Планируйте в общей сложности менее 30 минут.
Наденьте перчатки и подключите модуль сбора данных
Перчатка Juqiao поставляется в виде тканой текстильной перчатки с разъемом для ленточного кабеля на запястье. Модуль сбора данных представляет собой отдельный небольшой корпус на печатной плате, который обеспечивает аналого-цифровое преобразование и передачу данных по USB.
- Наденьте перчатку как и в случае со стандартной перчаткой, с разъемом FPC, расположенным на запястье.
- Установите ленточный кабель: Выровняйте ленточный кабель FPC от разъема на запястье перчатки и плотно вставьте его в ленточный разъем модуля сбора данных. Слабый щелчок указывает на надежное сиденье. Если узлы показывают нулевые показания, лента не полностью установлена — см. раздел «Устранение неполадок» ниже.
- Монтируем модуль: Прикрепите или закрепите модуль сбора данных на ремешке или креплении на предплечье, чтобы он не мешал движению запястья во время телеоперации.
- Подключите USB: Подключите модуль сбора данных к хост-компьютеру с помощью прилагаемого USB-кабеля.
/dev/ttyUSB0 или /dev/ttyACM0; на macOS как /dev/tty.usbserial-*. В Windows установите прилагаемый драйвер CP210x или CH340, если устройство не определяется автоматически как COM-порт.
Установите 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 и светодиод модуля — он должен пульсировать с частотой дискретизации.
dialout группу, выйдите и снова войдите: sudo usermod -aG dialout $USER
Запустите программу чтения кадров 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 узла должны ответить. Если в каком-либо регионе нет ответа, еще раз проверьте посадку ленточного кабеля как на разъеме для перчаток, так и на модуле.
Калибровка нулевой точки
Датчики ткани подвержены смещению базовой линии из-за изменений температуры и многократного сжатия. Калибруйте в начале каждого сеанса для получения точных показаний.
- Расслабьте перчатку на плоской поверхности без какого-либо давления — не надевайте его во время калибровки, если вы не можете держать руку полностью неподвижной и расслабленной.
- Окна: Откройте инструмент настройки 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())
Интеграция платформы — Бесстрашная платформа
Бесстрашная платформа в 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 за такт, чтобы вдвое сократить количество сообщений.
lsusb -v (Linux) или Диспетчер устройств (Windows), версия спецификации (V2.3 или V1.0, двуязычная) и краткое описание проблемы.