Skip to main content

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 via pip:
Note: Unless you’re developing wujihandpy itself, don’t clone its Git repository locally—this may cause your IDE to misidentify .pyi file locations, resulting in abnormal code completion.
On Linux, configure udev to allow non-root USB access:
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.
Run the above code with the following command to see the dexterous hand’s index finger first joint move to the specified position:
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 version
    • system_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 enabled
    • joint_actual_position: Current joint position
    • joint_target_position: Target joint position
    • joint_temperature: Current joint temperature
    • joint_error_code: Joint error code
Note: All data belonging to the Joint layer is prefixed with joint.

Troubleshooting

Installation Issues

Upgrade pip

If you encounter Could not find a version that satisfies the requirement, for example in an older Python or pip environment:
Consider upgrading pip and using the upgraded pip to install:
If the issue remains unresolved, please verify that your system version and Python version meet the Compatibility and Requirements.

Using Virtual Environments

If you encounter This environment is externally managed, for example in Ubuntu environments where the system Python is managed by the OS:
This indicates that pip is managed by the system package manager and requires using a virtual environment (venv) for installation.

Quick Start Issues

Dexterous Hand Not Connected

If you encounter the above error, please confirm that the dexterous hand is connected to the computer via USB. You can use lsusb to verify the device is properly recognized. If the device is correctly connected, lsusb will produce output similar to:
When using a USB-C to USB-C cable to connect the dexterous hand, some computers may not properly recognize the device. Please try replacing it with a USB-A to USB-C cable.

Insufficient Permissions

If you encounter the above error (ERROR_ACCESS), it indicates that the current user does not have read/write permissions for the USB device. Please check the Linux udev configuration section in Installation, complete the permission configuration, and try again.
Note: If developing in a Docker container (DevContainer), the udev configuration commands must still be executed on the host machine.

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 common Hand 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:
For the full API reference and call-timing constraints, see API Reference - logging Module.

Collect Detailed Logs

The default info 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:
Send the log file covering the problem time window to technical support to speed up diagnosis.