Compatibility and Requirements
- CPU: x86_64 (AMD64) / arm64 (aarch64)
- Python: 3.8–3.14
- OS: Ubuntu 22.04 LTS / Ubuntu 24.04 LTS
Installation Guide
This section covers the installation of wujihandpy, system requirements, and common troubleshooting.Installation
wujihandpy supports one-step installation viapip:
Note: For common installation errors and fixes, see Troubleshooting - Installation Issues at the end of this page.
Quick Start
This section provides a minimal working example to quickly test the dexterous hand with the wujihandpy library.Note: For common connection and permission issues during quick start, see Troubleshooting - Quick Start Issues at the end of this page.
Core Concepts
This section introduces wujihandpy’s device model and data model to help you understand the library’s overall architecture and usage patterns.Device Model
wujihandpy has a three-layer device model: Hand, Finger, and Joint. The hierarchy is:Hand.finger(i) -> Finger, Finger.joint(j) -> Joint. Specifically:
- Hand represents the complete dexterous hand device and can be created via wujihandpy.Hand().
- Finger is a lightweight reference to Hand, does not hold independent state, and can be constructed and destroyed multiple times. Finger objects can be constructed via
hand.finger(i)(0 ≤ i < 5), where i corresponds to actual fingers as follows:- 0: Thumb
- 1: Index finger
- 2: Middle finger
- 3: Ring finger
- 4: Pinky finger
- Joint is also a lightweight reference to Hand, does not hold independent state, and can be constructed and destroyed multiple times. Joint objects can be constructed via
finger.joint(j)(0 ≤ j < 4), where j roughly corresponds to actual joints as follows:- 0: Proximal joint
- …
- 3: Distal joint
Data Model
Data consists of readable/writable objects. Similar to devices, data also has a hierarchical relationship:Note: Only some data fields are listed here as examples. For the complete API Reference, see Field List.
-
Hand layer: Data unique to the entire hand resides at this layer, for example:
handedness: Handedness (left/right hand)firmware_version: Firmware versionsystem_time: Uptime
- Finger layer: Data where each finger holds an independent copy resides at this layer. Currently, this layer has no data.
-
Joint layer: Data where each joint holds an independent copy resides at this layer, for example:
joint_enabled: Whether the joint is enabledjoint_actual_position: Current joint positionjoint_target_position: Target joint positionjoint_temperature: Current joint temperaturejoint_error_code: Joint error code
Note: All data belonging to the Joint layer is prefixed with
joint.Troubleshooting
Installation Issues
Upgrade pip
If you encounterCould not find a version that satisfies the requirement, for example in an older Python or pip environment:
Using Virtual Environments
If you encounterThis environment is externally managed, for example in Ubuntu environments where the system Python is managed by the OS:
Quick Start Issues
Dexterous Hand Not Connected
lsusb to verify the device is properly recognized. If the device is correctly connected, lsusb will produce output similar to:
Insufficient Permissions
Get Logs
SDK runtime logs are stored in~/.wuji/log/ by default. File names follow {timestamp}_{pid}.log, with each file rolling at 10 MB and up to 5 historical files retained. Send the latest log to technical support when reporting an issue.
Custom Path and Level
Configure through environment variables (recommended, zero code) The SDK reads them once at logger initialization (in the commonHand flow that means when the first Hand is constructed) and won’t pick up later changes:
Value matching is case-insensitive.
WUJI_LOG_LEVEL also accepts the aliases error (=err), warning (=warn), information (=info), and crit (=critical). Both boolean variables also accept 1/0, on/off, and yes/no.
Configure from code
Call the wujihandpy.logging submodule before creating Hand:
Collect Detailed Logs
The defaultinfo level captures only key events. When you need detailed command flow analysis (for example, a command was sent but the actual state didn’t follow), switch to debug for SDO/PDO traffic, or trace for the raw TX/RX bytes as well: