Software & Driver Setup
Install the USB CDC driver, stream 64-node pressure data in Python, visualize contact heatmaps, and integrate with Orca Hand recording pipelines.
Install the juqiao-glove Package
The glove communicates over USB CDC serial — no kernel modules, no custom drivers. The Python package wraps pyserial and handles the binary frame protocol.
Verify the install:
Detecting the USB Port
Plug in the glove via the 1.5 m USB-C cable. The device enumerates as a CDC-ACM serial port.
| OS | Typical port name | Notes |
|---|---|---|
| Linux | /dev/ttyACM0 | Add user to dialout group if permission denied |
| macOS | /dev/tty.usbmodem* | Use ls /dev/tty.usb* to find exact name |
| Windows | COM3 (varies) | Check Device Manager → Ports (COM & LPT) |
Auto-detect the glove from Python:
Or specify the port explicitly:
Python Streaming API
The glove streams at 200 Hz. Each frame contains a 64-element pressure array (16-bit ADC, normalized 0.0–1.0) plus a timestamp.
Frame Object Reference
| Attribute | Type | Description |
|---|---|---|
| frame.timestamp | float | Host-side receive time (seconds, Unix epoch) |
| frame.pressures | np.ndarray (64,) | Normalized pressure per node, 0.0 (none) to 1.0 (max) |
| frame.pressures_raw | np.ndarray (64,) | Raw 16-bit ADC counts (0–65535) |
| frame.contact_mask | np.ndarray (64,) bool | True where pressure exceeds threshold (default 0.05) |
| frame.contact_nodes | List[int] | Indices of nodes currently in contact |
| frame.grasp_region | str or None | Heuristic region: "palm", "thumb", "index", "middle", "ring", "pinky", None |
| frame.sequence | int | Frame counter (wraps at 65535); use to detect dropped frames |
64-Node Sensor Layout
The 64 taxels are arranged as a woven fiber matrix covering the palm and all five finger segments. Node indices follow a consistent dorsal-view row-major order.
Pressure Heatmap Visualization
The [viz] extra installs a live matplotlib heatmap renderer useful for calibration and debugging.
For headless environments or data review, save frames as a video:
ROS2 Interface
The juqiao_glove_ros2 package publishes a custom TactileArray message at 200 Hz. Compatible with ROS2 Humble and Iron.
Launch the driver node:
Topics published:
| Topic | Message type | Rate | Description |
|---|---|---|---|
| /juqiao_glove/tactile_array | juqiao_glove_ros2/TactileArray | 200 Hz | Full 64-node pressure array |
| /juqiao_glove/contact_mask | std_msgs/UInt8MultiArray | 200 Hz | Binary contact per node (0 or 1) |
| /juqiao_glove/grasp_region | std_msgs/String | 200 Hz | Active region heuristic or empty string |
| /juqiao_glove/status | diagnostic_msgs/DiagnosticStatus | 1 Hz | Firmware version, frame drop rate |
Combined Orca Hand + Glove Launch
When using the glove alongside the Orca Hand for synchronized recording:
Baseline Calibration
The glove ships with factory calibration. Recalibrate if you notice baseline drift (nodes reading non-zero at rest) or after extended storage.
Load calibration at runtime:
Threshold Tuning
The default contact threshold is 0.05 (5% of full scale). Adjust per task:
Common Issues
sudo usermod -aG dialout $USER then log out and back in. Alternatively: sudo chmod 666 /dev/ttyACM0 (resets on unplug).dmesg | tail -20 (Linux) or ls /dev/tty.usb* (macOS) to verify OS enumerated the device. Try a different USB port or cable (the connector is USB-C but must be a data cable, not charge-only).glove.info() to confirm firmware responds. If it does, check that calibration file isn't over-subtracting. Delete ~/.juqiao_glove_cal.json and recalibrate with the glove lying flat.glove.calibrate_baseline(). Can occur after temperature changes or extended storage. If drift > 0.4 with glove flat, the sensing fabric may need replacement (contact Juqiao support).on_frame callback returns quickly — do heavy processing in a separate thread.ros2 launch juqiao_glove_ros2 glove.launch.py port:=/dev/ttyACM0. Check node logs: ros2 node info /juqiao_glove_driver. Ensure the dialout group fix was applied to the user running the ROS2 node.