数据结构参考

本页列出 Wuji SDK 中所有通用数据类型的字段定义。

各设备特定的数据结构详见对应设备文档:Wuji Glove SDK 数据参考

通用类型

FrameHeader

每帧数据的头部信息。

字段类型说明
seqint递增序列号
timestamp_usint设备时间戳(微秒)
frame_idstr坐标系 ID(如 "l_wrist"),最大 32 字符

Vector3 / Vector3F64

三维向量。Vector3 使用 f32 精度,Vector3F64 使用 f64 精度(用于 IMU 数据,ROS 兼容)。

字段类型说明
xfloatX 分量
yfloatY 分量
zfloatZ 分量

Quaternion

f64 精度的旋转四元数。

字段类型说明
xfloatX 分量
yfloatY 分量
zfloatZ 分量
wfloatW 分量

Pose

位姿,包含位置和朝向。

字段类型说明
positionList[float]位置 [x, y, z](米)
orientationQuaternion旋转四元数

Handedness

设备手性枚举,用于按手性连接

说明
Handedness.Left左手(序列号第 4 位为 J
Handedness.Right右手(序列号第 4 位为 K

ImuData

IMU 传感器数据,遵循 ROS sensor_msgs/Imu 约定。

字段类型说明
headerFrameHeader帧头
orientationQuaternion朝向四元数
orientation_covariancelist[float]朝向协方差(长度 9),首元素为 -1 表示朝向不可用
angular_velocityVector3F64角速度(rad/s)
angular_velocity_covariancelist[float]角速度协方差(长度 9)
linear_accelerationVector3F64线加速度(m/s²)
linear_acceleration_covariancelist[float]线加速度协方差(长度 9)

Wuji Hand 2 未做板载姿态融合,订阅 hand.imu()orientation_covariance[0] 始终为 -1

坐标变换

FrameTransform

单个坐标变换。

字段类型说明
timestamp_usint时间戳(微秒)
parent_frame_idstr父坐标系
child_frame_idstr子坐标系
translationList[float]平移 [x, y, z](米)
rotationQuaternion旋转四元数

FrameTransforms

坐标变换集合。

字段类型说明
transformsList[FrameTransform]变换列表

录制类型

完整用法和代码示例详见 数据录制

TopicRecorder

MCAP 录制会话配置器。注册通道后调用 start() 开始录制。

方法参数说明
__init__()compression: str = "lz4", chunk_size: int = None创建录制器,支持 "lz4""zstd""none"
record()sub: Subscription注册订阅通道到录制器
start()output_path: str开始录制,返回 RecordingHandle

RecordingHandle

录制控制句柄,由 TopicRecorder.start() 返回。

方法返回值说明
pause()暂停录制
resume()恢复录制
stop()RecordingSummary停止录制,返回统计摘要
subscribe_metrics()MetricsStream订阅实时质量指标流
subscribe_status()StatusStream订阅录制状态流
subscribe_alerts()AlertStream订阅质量告警流

RecordingSummary

录制统计摘要,由 handle.stop() 返回。

字段类型说明
total_framesint总帧数
file_sizeintMCAP 文件大小(字节)
duration_sfloat录制时长(秒)
qualityQualitySummary质量统计摘要

QualityMetrics

实时质量指标(5 秒滑动窗口)。

字段类型说明
frame_drop_ratefloat丢帧率(0.0~1.0)
frame_jitter_usfloat帧间抖动(微秒)
sync_offset_msfloat跨通道同步偏差(毫秒)
sync_ratefloat同步成功率(0.0~1.0)
timestamp_nsint纳秒时间戳

QualitySummary

录制质量汇总统计。

字段类型说明
total_framesint总帧数
dropped_framesint丢失帧数
frame_drop_ratefloat丢帧率(0.0~1.0)
avg_sync_offset_msfloat平均同步偏差(毫秒)
max_sync_offset_msfloat最大同步偏差(毫秒)
sync_ratefloat同步成功率(0.0~1.0)
spc_alert_countintSPC 告警次数
duration_sfloat录制时长(秒)

RecordingAlert

质量告警。

字段类型说明
metricstr触发告警的指标名称
current_valuefloat当前测量值
thresholdfloat告警阈值
messagestr可读的告警信息

RecordingStatus

录制运行状态。

字段类型说明
statestr当前状态("recording""paused"
frame_countint已录制帧数
duration_sfloat已用时长(秒)

Wuji Hand 2 类型

以下列出 Wuji Hand 2 通过 wuji_sdk.WujiHand2 资源式接口暴露的关键 schema。反馈帧统一携带 FrameHeaderframe_idl_wristr_wrist(由固件按设备手性填写),timestamp_us 为固件发送时刻。整手反馈帧变长,仅包含在线关节,按 nid 识别。

JointStateFrame

整手关节状态订阅帧(hand.joint_states().subscribe())。

字段类型说明
headerFrameHeader帧头(seq + timestamp_us + frame_id
num_jointsint帧内在线关节数(等于 len(joints)
jointslist[JointStateEntry]在线关节状态条目,变长

JointStateEntry

单关节状态。

字段类型说明
nidint节点 ID,跨帧定位关节
positionfloat位置(弧度)
velocityfloat速度(rad/s)
effortfloat力矩(安培,Kt=1 占位)

JointDiagnosticsFrame

整手关节诊断订阅帧(hand.joint_diagnostics().subscribe()),与 joint_states 同源派生。

字段类型说明
headerFrameHeader帧头
num_jointsint帧内在线关节数
jointslist[JointDiagnosticsEntry]在线关节诊断条目,变长
commHand2CommSummary帧级通信健康摘要,1 Hz 刷新

JointDiagnosticsEntry

单关节诊断快照。

字段类型说明
nidint节点 ID
status_wordStatusWord解码后的状态字
currentfloat相电流(A)
vbus_v_fbfloat母线电压反馈(V)
mcu_temp_c_fbfloatMCU 温度反馈(°C)
error_code_currentint当前错误码(含 stop / warning 位),WujiHand2.describe_error() 解码
comm_response_rate_pctint该关节最近 1 秒的 RS485 总线响应率,0–100
comm_timeout_totalint该关节累计 RS485 总线超时次数

Hand2CommSummary

帧级通信健康摘要,同时覆盖设备内部(RS485)与 SDK 本地端到端(以太网)两段。设备内部快照由 SDK 常驻任务以 1 Hz 自动刷新,无需手动轮询。

字段类型说明
age_msint设备内部快照距今毫秒数。65535 = 从未成功采样(设备内部字段均为 0)。65534 = 已饱和,快照距今 ≥ 65.5 秒
tactile_online_maskint指尖触觉在线位图,bit0 = 拇指 … bit4 = 小指
e2e_receivedint全部订阅流累计收帧数
e2e_lostint以太网段经序号缺口检测出的累计丢帧数
e2e_reorderedint累计乱序/迟到帧数
e2e_duplicatesint累计重复帧数
e2e_window_loss_x100int最近 1 秒窗口丢包率,0.01% 单位
rpc_totalint累计请求数。0 表示当前传输后端不提供 RPC 统计(仅 wuji-proto 后端提供,存活的 wuji-proto 连接必然已发过至少一次请求),因此此处为 0 不等于「没有发生重传」
rpc_retriesint累计请求重传次数
rpc_timeoutsint累计最终超时的请求数
comm_get_failuresint累计内部快照刷新失败次数
tactile_response_rate_pctlist[int]每指触觉(node 5)总线响应率,0–100,索引 0 = 拇指 … 4 = 小指
tactile_timeout_totallist[int]每指触觉累计总线超时次数,同索引序
sdk_droppedintSDK 内部某一跳落后而丢弃的帧数(累计)——可能是你的订阅消费端,也可能是 SDK 内部的流 handler。与网络丢帧 e2e_lost 语义不同

设备内部字段的判读age_mstactile_* 以及每关节的 comm_* 字段同属一份快照,由 SDK 以 1 Hz 刷新。固件升级或触觉标定进行期间会有意跳过这次刷新,因此短暂的陈旧值属预期状态而非故障。用 comm_get_failures 区分两种情况:age_ms 增大而 comm_get_failures 不变 = 正在有意跳过,comm_get_failures 持续增加 = 刷新本身在失败。

计数器饱和,不回绕:本表所有计数达到上限后即停在上限(16 位的 e2e_reorderede2e_duplicatesrpc_retriesrpc_timeoutscomm_get_failures 停在 65535,32 位的停在 4294967295),不会归零重来。1 kHz 流长跑时确实可能触顶,因此应按两次采样之间的增量判读,而非当作全生命周期的绝对累计值。

StatusWord

解码后的状态字公开视图(低 16 位)。

字段类型说明
ext_stateint扩展状态值(如 Init / Ready / Enabled / Stopped)
ext_state_namestrext_state 的语义名
position_limit_activebool位置限幅触发
velocity_limit_activebool速度限幅触发
current_limit_activebool电流限幅触发

JointCommand

单关节实时指令(publisher.send([JointCommand, ...×20]) 的入参元素)。

字段类型说明
positionfloat目标位置(弧度)
velocityfloat目标速度(rad/s),不需要前馈传 0
effortfloat目标力矩(A),不需要前馈传 0

构造:JointCommand(position, velocity, effort)。一次 publisher.send(joints) 必须传长度恰好 20 的 list[JointCommand],离线关节也要占位。

Wuji Hand 类型

以下列出 Wuji Hand 通过 wuji_sdk.WujiHand 暴露的关键 schema,详细字段定义见 Wuji Hand SDK 使用说明

HandJointStates

20 关节实时状态(hand.joint_states().subscribe() 订阅帧)。手指顺序为 finger-major:{left,right}_finger{1..5}_joint{1..4}

字段类型说明
headerFrameHeader帧头
positionlist[float]20 关节弧度位置,始终长度 20
velocitylist[float]角速度,未提供时长度 0
effortlist[float]关节力矩,未提供时长度 0
{
  "header": { "seq": 42, "timestamp_us": 1709876543210, "frame_id": "" },
  "position": [0.001, -0.012, 0.087, 0.045, ...],
  "velocity": [],
  "effort": []
}

HandJointCommand

20 关节指令帧。seq 由客户端单调递增,便于接收方检测丢帧。

字段类型说明
seqint客户端自增序号
positionlist[float]目标位置,长度 20
velocitylist[float]目标速度,可选
effortlist[float]目标力矩,可选

TactileGloveFrame

配对触觉手套的单帧压力数据,20×31 网格。

字段类型说明
handednessint手性(0 = 左、1 = 右,注意与 WujiHand SDO 端编码相反)
sequenceint帧序号
timestamp_msint设备时间戳(毫秒)
pressurelist[float]620 个 f32 压力值,按 20×31 行主序