Teleoperation Hand
Wuji Hand Specifications
Full technical specifications for the Wuji dexterous hand — sensors, JSONL stream format, and platform agent parameters.
Mechanical & Sensing
| Fingers | 5 — thumb, index, middle, ring, little |
| Joints per finger | 4 |
| Total joint positions | 20 (5×4 array, float, radians) |
| Tactile pressure map | 24 rows × 32 columns (768 values, float [0, 1]) |
| IMU channels | 6-axis (3-axis accelerometer + 3-axis gyro), up to 16 slots in stream |
| EMF channel | Per-finger bend + hand-back yaw (dict keyed by finger name) |
| Hand sides | Left, right, or auto-detected from first frame |
Interface & SDK
| USB vendor ID | 0x0483 (default; pass --usb-vid to override) |
| SDK package | wujihandpy (Python) |
| Install | pip install wujihandpy numpy |
| Studio application | Wuji Studio v0.7.0 (Linux amd64 .deb / .tar.gz / .zip) |
| Stream script | wuji_hand_sdk_stream.py (emits JSONL to stdout) |
| Agent module | wuji_glove_agent.py (platform bridge via WebSocket) |
| Mock stream | mock_wuji_stream.py (synthetic JSONL, no hardware needed) |
Stream & Agent Parameters
| Default stream Hz | 30 Hz (configurable with --hz) |
| Stream format | JSONL — one JSON object per line to stdout |
| Platform device type | wuji_hand |
| Agent module | wuji_glove_agent |
| Backend WebSocket URL | ws://127.0.0.1:8000 (default; override with --backend) |
| Telemetry Hz | 30 Hz (configurable with --telemetry-hz) |
| Reconnect policy | Exponential backoff: 1 s min, 10 s max |
JSONL Frame Fields (per frame)
| Field | Type | Shape / Range | Description |
|---|---|---|---|
| ts | float | Unix seconds | Frame timestamp (time.time()) |
| hand_side | str | "left" | "right" | Which hand this frame belongs to |
| bends | dict | 5 keys, [0, 1] | Per-finger normalized bend (thumb, index, middle, ring, little) |
| joint_actual_position_5x4 | list[list[float]] | 5×4, radians | Raw joint positions from wujihandpy, 5 fingers × 4 joints |
| pressure_map_24x32 | list[list[float]] | 24×32, [0, 1] | Tactile pressure distribution across hand surface |
| imu | list[float] | up to 16 values | 6-axis IMU: [ax, ay, az, gx, gy, gz, ...] (remaining slots zeroed) |
| emf | dict | per-finger + hand_back | EMF sensor readings; each entry is float or dict with "bend"/"angle" keys |
The bends values are derived from joint_actual_position_5x4 by averaging the 4 joint angles per finger and normalizing from the [0, π/2] range to [0, 1].
wuji_glove_agent.py — Key Flags
| Flag | Default | Description |
|---|---|---|
| --backend | ws://127.0.0.1:8000 | Platform WebSocket base URL |
| --session | (required) | Teleop session ID from the platform |
| --node-id | wuji-glove-node | Identifier for this device node in the session |
| --glove | auto | Hand side: left, right, or auto (read from first frame) |
| --device-kind | wuji_hand | Device type registered with platform |
| --telemetry-hz | 30.0 | Telemetry forwarding rate to platform |
| --wuji-cmd | python3 wuji_hand_sdk_stream.py --hand-side right --hz 30 | Shell command that emits JSONL frames to stdout |
| --reconnect-min-s | 1.0 | Minimum reconnect backoff (seconds) |
| --reconnect-max-s | 10.0 | Maximum reconnect backoff (seconds) |