巨桥触觉手套设置指南
从拆箱到实时压力数据和平台集成的完整路径。 计划总共不超过 30 分钟。
戴上手套并连接采集模块
Juqiao 手套以编织纺织手套的形式发货,手腕处配有带状电缆连接器。 采集模块是一个独立的小型 PCB 外壳,用于处理模数转换和 USB 通信。
- 戴上手套 就像标准手套一样,FPC 连接器位于手腕处。
- 固定带状电缆: 将 FPC 带状电缆与手套的手腕连接器对齐,然后将其牢固地按入采集模块的带状插座中。 微弱的咔哒声表明座位已固定。 如果节点显示零读数,则色带未完全就位 - 请参阅下面的故障排除。
- 安装模块: 将采集模块夹在或用魔术贴固定在腕带或前臂支架上,这样在远程操作期间就不会干扰手腕运动。
- 连接USB: 使用提供的 USB 电缆将采集模块插入主机 PC。
/dev/ttyUSB0 或者 /dev/ttyACM0; 在 macOS 上为 /dev/tty.usbserial-*。 在 Windows 上,如果设备未自动枚举为 COM 端口,请安装附带的 CP210x 或 CH340 驱动程序。
安装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 连接和模块 LED — 它应该以采样率发出脉冲。
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端口,点击 连接,然后导航至 校准 → 归零。 所有节点基线均设置为当前静止值。
- Linux / macOS: 根据 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 传感器作为远程操作会话中的触觉节点。 压力帧与机器人关节状态、摄像机流和其他传感器模式同步记录。
注册顺序:
- 通过以下方式启动 teleop 会话
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 配对: 在典型的远程操作设置中,三个独立的进程在主机 PC 上运行,并且每个进程都使用相同的会话 ID 注册——机器人手臂控制桥、Juqiao 串行桥以及用于手腕和场景视图的相机桥。 该平台使用以下方法对所有流进行时间对齐 ts 字段并存档每个演示的单集 JSONL 文件。 在播放过程中,GloveWorkbench 面板会沿着手臂的关节轨迹渲染触觉压力热图。
member_id 价值观—— juqiao-glove-right 和 juqiao-glove-left。 每只手套都有自己的采集模块和 USB 连接。 每个周期将两只手套批量放入一个 JSON 对象中,以将 200 Hz 的平台消息计数减半。
有关涵盖会话创建、WebSocket 握手和剧集下载的完整 API 参考,请参阅 平台SDK API参考.
故障排除
- Linux 上没有串行设备: 跑步
sudo usermod -aG dialout $USER并注销/登录。 验证与lsusb模块枚举的。 在较旧的内核上,modprobe cdc_acm可能需要。 - 所有压力读数均为零: 断开 USB,重新安装两端的 FPC 焊带(手套连接器和模块),然后重新连接。 检查模块 LED — 它应该以配置的采样率发出脉冲。
- 卸载节点上的大基线偏移: 会议前在室温下运行零点校准。 戴上手套后,让其稳定 1-2 分钟。
- 帧同步错误/乱码数据: 确认波特率为 921600。打开时刷新串行缓冲区:
ser.reset_input_buffer()。 使用read_until(HEADER)在启动时重新同步而不是固定长度读取。 - 传感器节点响应缓慢或感觉“粘滞”: 在训练前,在整个运动范围内轻轻弯曲手套几次。 持续存在的问题可能表明光纤疲劳 — 请联系聚桥精密进行更换。
- 平台桥以 200 Hz 丢帧: 对于单手套会话,将采样率降低至 100 Hz。 对于双手设置,每次将两只手套批处理为一个 JSON 对象,以将消息数量减半。
lsusb -v (Linux) 或设备管理器 (Windows)、规范版本(V2.3 或 V1.0 双语)以及症状的简短描述。