Data Structure Reference

This page lists all common data type field definitions in the Wuji SDK.

For device-specific data structures, see the corresponding device documentation: Wuji Glove SDK data reference.

Common Types

FrameHeader

Header information for each data frame.

FieldTypeDescription
seqintIncrementing sequence number
timestamp_usintDevice timestamp (microseconds)
frame_idstrCoordinate frame ID (e.g., "l_wrist"), max 32 characters

Vector3 / Vector3F64

Three-dimensional vector. Vector3 uses f32 precision, Vector3F64 uses f64 precision (used for IMU data, ROS compatible).

FieldTypeDescription
xfloatX component
yfloatY component
zfloatZ component

Quaternion

f64 precision quaternion representing 3D rotation.

FieldTypeDescription
xfloatX component
yfloatY component
zfloatZ component
wfloatW component

Pose

Position and orientation.

FieldTypeDescription
positionList[float]Position [x, y, z] (meters)
orientationQuaternionRotation quaternion

Handedness

Device handedness enum, used for connecting by handedness.

ValueDescription
Handedness.LeftLeft hand (fourth character of serial number is J)
Handedness.RightRight hand (fourth character of serial number is K)

Coordinate Transforms

FrameTransform

Single coordinate transform.

FieldTypeDescription
timestamp_usintTimestamp (microseconds)
parent_frame_idstrParent frame
child_frame_idstrChild frame
translationList[float]Translation [x, y, z] (meters)
rotationQuaternionRotation quaternion

FrameTransforms

Collection of coordinate transforms.

FieldTypeDescription
transformsList[FrameTransform]Transform list

Recording Types

For complete usage and code examples, see Data Recording.

TopicRecorder

MCAP recording session configurator. Register channels, then call start() to begin recording.

MethodParametersDescription
__init__()compression: str = "lz4", chunk_size: int = NoneCreate a recorder. Supports "lz4", "zstd", "none"
record()sub: SubscriptionRegister a subscription channel
start()output_path: strStart recording, returns RecordingHandle

RecordingHandle

Recording control handle returned by TopicRecorder.start().

MethodReturnsDescription
pause()Pause recording
resume()Resume recording
stop()RecordingSummaryStop recording and return summary
subscribe_metrics()MetricsStreamSubscribe to real-time quality metrics
subscribe_status()StatusStreamSubscribe to recording status updates
subscribe_alerts()AlertStreamSubscribe to quality alerts

RecordingSummary

Recording statistics returned by handle.stop().

FieldTypeDescription
total_framesintTotal frames recorded
file_sizeintMCAP file size in bytes
duration_sfloatRecording duration in seconds
qualityQualitySummaryQuality statistics summary

QualityMetrics

Real-time quality metrics (5-second sliding window).

FieldTypeDescription
frame_drop_ratefloatFrame drop rate (0.0–1.0)
frame_jitter_usfloatInter-frame jitter in microseconds
sync_offset_msfloatCross-channel sync offset in milliseconds
sync_ratefloatSync success rate (0.0–1.0)
timestamp_nsintNanosecond timestamp

QualitySummary

Aggregate recording quality statistics.

FieldTypeDescription
total_framesintTotal frames received
dropped_framesintTotal frames dropped
frame_drop_ratefloatDrop rate (0.0–1.0)
avg_sync_offset_msfloatAverage sync offset in milliseconds
max_sync_offset_msfloatMaximum sync offset in milliseconds
sync_ratefloatSync success rate (0.0–1.0)
spc_alert_countintTotal SPC alerts triggered
duration_sfloatRecording duration in seconds

RecordingAlert

Quality alert.

FieldTypeDescription
metricstrName of the metric that triggered the alert
current_valuefloatCurrent measured value
thresholdfloatAlert threshold
messagestrHuman-readable alert message

RecordingStatus

Recording runtime status.

FieldTypeDescription
statestrCurrent state ("recording" or "paused")
frame_countintFrames recorded so far
duration_sfloatElapsed duration in seconds

Wuji Hand Types

The schemas below are exposed by wuji_sdk.WujiHand for Wuji Hand. For full field definitions, see Wuji Hand SDK Guide.

HandJointState

Real-time 20-joint state. Joint order is finger-major: {left,right}_finger{1..5}_joint{1..4}.

FieldTypeDescription
headerFrameHeaderFrame header
positionlist[float]20 joint positions in radians, always length 20
velocitylist[float]Angular velocity, length 0 when not provided
effortlist[float]Joint effort, length 0 when not provided
{
  "header": { "seq": 42, "timestamp_us": 1709876543210, "frame_id": "" },
  "position": [0.001, -0.012, 0.087, 0.045, ...],
  "velocity": [],
  "effort": []
}

HandJointCommand

20-joint command frame. seq is client-incrementing so receivers can detect dropped frames.

FieldTypeDescription
seqintClient-incremented sequence number
positionlist[float]Target positions, length 20
velocitylist[float]Target velocity, optional
effortlist[float]Target effort, optional

TactileGloveFrame

A single pressure frame from the paired tactile glove, on a 24×32 grid.

FieldTypeDescription
handednessintHandedness (0 = Left, 1 = Right — note this is the opposite of the WujiHand SDO encoding)
sequenceintFrame sequence number
timestamp_msintDevice timestamp in milliseconds
pressurelist[float]768 f32 pressure values, row-major 24×32