This page explains how to control Wuji Hand 2 correctly and safely: unit conventions, MIT control mode, the joint table, parameter safety limits, and a safe control loop. For interface definitions and the full API, see SDK Reference.
Units and Symbols
The
joint_diagnostics stream carries no joint angles. Read joint angles only from joint_states.
MIT Control Mode
The device runs in MIT force-position hybrid control by default, and the control mode isn’t switched from the Python API:q_d/dq_d/τ_ffcome from theposition/velocity/effortfields ofjoint_command, with exactly 20JointCommandentries per publish- Read and write
Kp/Kdthroughmit_params, and the torque cap througheffort_limit. Writes reject NaN, Inf, negative values, and values above the device ceiling. A rejected write leaves the value in effect unchanged
At power-on, the device loads the default values of kp, kd, and effort_limit. Values written through the SDK apply to the current session only, and a restart returns each one to its default value. When setting control parameters, refer to the teleoperation example 1.teleop_real.py for recommended values. The device hard ceiling for effort_limit is 2.0 A.
Joint Table
Numbering: thumb 0–3, index 4–7, middle 8–11, ring 12–15, pinky 16–19. SDK labels use the format{finger}_S{1..4}.
The motion ranges match the joint limits in the model files (URDF / MJCF / USD) and are mirrored between the left and right hands. Model joints and links are named with an
{l,r}_ prefix plus the finger name, and the root link is {l,r}_wrist ({l,r}_mount in the variant with a mount). For details, see Coordinate Frames and Models.
The axis-order mapping between the SDK labels
S1..S4 and the model actuators J0..J3 isn’t available yet and will be added later.Origin and Motion Direction
set_origin/clear_origincalibrate the current physical position as the user origin. While a joint moves, the change is deferred to the next IDLE, see SDK Reference
Control Rate and Command Rate
- The device control rate is 1000 Hz × 20 axes. The 1 kHz figure is the uplink and downlink message rate, and one message carries the control and status data of all 20 axes
- The native output rate of
joint_statesis 1000 Hz, and the subscription handle lowers the push rate, see SDK Reference - Keep GET queries at or below 100 Hz. PUB commands support rates up to 1 kHz
Parameter Safety Limits
- Start first-time debugging with a low torque cap (such as
effort_limit().set(0.5), in A), then raise it once the behavior matches your expectations - For gentle position holding, use
kp = 3.0,kd = 0.05, andeffort_limit = 1.5 Aas a conservative parameter example - Split large position changes into small steps instead of one step change
- In grasping tasks, probe contact at a low cap first, then raise it as needed
Safe Control Loop
A recommended control loop: send commands → read state → check error codes → stop on a fault.- Read state from
joint_states, and decode error codes fromjoint_diagnosticswithdescribe_error - On a fault, call
disable(). In an emergency, callemergency_stop()(the whole hand stops immediately and the call takes no mask) - For fault severity, stop behavior, and the fault-clearing flow, see Troubleshooting, Recovery, and Maintenance
examples/python/wuji_hand_2/.
For measured runs of the matching examples, including smooth homing and both motion examples, see SDK Practice.