SDK Data Reference

Data Streams Overview

Wuji Glove outputs many data streams through the Wuji SDK: raw data captured directly by the glove hardware, and post-processed products solved by SDK algorithms. For subscription modes, see SDK Data subscription. For a hands-on introduction, see Quick start.

All data frames share the same FrameHeader, which contains a sequence number and device timestamp. For common type definitions (FrameHeader, Vector3, Quaternion, Pose, etc.), see SDK Data structure reference. For timestamp_us semantics, the sync mechanism, and accuracy, see SDK Time Synchronization.

Available data streams

The data streams fall into three categories by how they are produced:

  • Raw data: captured directly by the glove hardware and the input for every product. It can be saved alone and recomputed into all products afterward with the offline pipeline, with the same result as real-time computation and significantly lower CPU usage during capture.
  • Post-processed products: solved by SDK algorithms on top of the raw data.
  • Global resources: device-level coordinate transforms published independently of the data streams.

Raw data

Data streamSDK methodTypeOutput rateDescription
Tactileglove.tactile()TactileFrame120 FPS24×32 calibrated pressure matrix from the piezoresistive array
EMF posesglove.emf_poses()EmfPoseArray120 Hz5-finger positioning poses from the EMF modules
IMUglove.imu_palm()ImuData800 HzDorsum IMU orientation, angular velocity and acceleration

Post-processed products

Data streamSDK methodTypeOutput rateDescription
Tactile zonesglove.tactile_zones()TactileZones120 FPSPressure data aggregated from tactile by hand region
Tactile point cloudglove.tactile_point_cloud()PointCloud120 HzTactile 3D point cloud generated from tactile
Contact detectionglove.tactile_binary()TactileBinary120 FPS24×32 binary contact map inferred from tactile (1.0 contact / 0.0 no contact / -1.0 invalid taxel)
Contact residualglove.tactile_residual()TactileResidual120 FPS24×32 signed contact residual inferred from tactile (per-taxel measured − predicted baseline, threshold it yourself)
Fingertip posesglove.tip_poses()FingertipPoses120 Hz5-finger fingertip poses solved from emf_poses
Joint anglesglove.hand_joint_angles()HandJointAngles120 Hz21 DoF hand joint angles solved from emf_poses (thumb 5 + other four fingers 4 each)
Hand skeletonglove.hand_skeleton()HandSkeleton120 Hz21 MediaPipe keypoint skeleton solved from emf_poses

The EMF chain (emf_poses and its derived streams tip_poses, hand_joint_angles, hand_skeleton, and tactile_point_cloud) supports runtime rate reduction. Call glove.emf_poses_rate_divider().set(N) to drop all five streams to input rate / N (default 1, N=4 → 30 Hz) and cut CPU load. IMU streams (imu_*, tf) and tactile streams (tactile, tactile_zones, tactile_binary, tactile_residual) keep their original rate.

Global resources

Data streamSDK methodTypeOutput rateDescription
Static TFmanager.tf_static()FrameTransforms1 HzFixed frame relationships
Dynamic TFmanager.tf()FrameTransforms800 HzIMU-driven dynamic transforms

C SDK equivalents: wuji_subscribe_tf(...) / wuji_subscribe_tf_static(...), callback signature WujiFrameTransforms, device-independent. For the full C API reference, see Wuji SDK · C API Reference.