概述
本篇实践介绍如何通过Subscription.set_rate() 调节 Wuji Glove 数据流的推送频率。应用场景包括匹配应用采样频率和降低网络及数据处理开销。
对应的 Python 示例为 6.set_stream_rate.py,C 示例为 1_set_stream_rate.c。 可调流的清单与接口定义见手部追踪,本页说明集成流程和运行时行为。
前置条件
硬件
查固件版本:
软件
- Python
- C
前序步骤
先看懂数据订阅:回调。set_rate 是订阅句柄上的方法,得先有订阅。
数据流
判定按固定顺序执行,该顺序决定返回的错误信息。哪些流能调
降低源流会连带降低所有派生流。 把
emf_poses 降到 30 Hz,hand_joint_angles、hand_skeleton、tip_poses 自动跟着变成 30 Hz,同时省掉相应比例的求解开销。
流的速率范围
这是set_rate 最容易误解的一点:
- 设置对该流的每一个订阅者生效,包括别的进程、Wuji Studio、录制器
- 该流的最后一个订阅关闭时,速率重置为设备默认值
- 设备重连后同样重置
Keep the handle open for as long as you want its rate to stay in effect.
多个客户端同时连一台设备时,降低的速率会影响其他订阅者。共享环境中修改速率前应先协调。
失败路径实测
设备固件 0.11.2,低于要求的 v0.11.4。速率入口流:卡在固件门
emf_poses、tactile、tactile_zones 三条全部一样。传 0(恢复默认)也会被同一条拦下,固件门在参数之前。
派生流:卡在入口点判定,与固件无关
全局流:报的是内部错误
tf 与 tf_static 都是这条。这不是一条对使用者友好的提示,看到它的时候要意识到「我在对全局流调 set_rate」。全局流本来就不支持速率控制,它是跨设备聚合出来的,没有单一设备可以下发降频指令。
参数范围:uint16
C 侧签名是:
负数和超过 65535 的值在绑定层就被挡下,不会到达设备。
两侧错误处理不一样
同一条固件门错误,两个示例的反应完全不同:
C 示例的实测输出:
set_rate 包进 try:
集成步骤
以下片段按接入顺序展示关键操作,参数解析、信号处理和完整错误分支见示例。1. 连接目标手套
将serial_number 替换为目标手套的序列号。连接成功后,后续步骤复用同一个设备句柄。C 片段需包含 wuji_sdk.h。
- Python
- C
2. 订阅可调速的入口流
先建立emf_poses 订阅,获得设置频率所需的句柄。C 的 on_emf_poses 回调见 C 示例。
- Python
- C
3. 设置频率并读取实际值
保持订阅句柄存活。设备可能量化请求值,后续处理使用返回的实际频率。设置失败时先处理错误,不把请求值视为已生效。- Python
- C
4. 接收数据并恢复默认频率
Python 在异步函数中等待数据,C 由回调接收。完成后传入0 恢复默认频率,再关闭订阅和连接。
- Python
- C
运行与输出
- Python
- C
set_rate 处直接终止:
device applied 可能与请求值不同,设备会量化到它支持的档位。
注意事项
旧的
emf_poses_rate_divider 接口(Python 的 glove.emf_poses_rate_divider()、C 的 wuji_glove_get/set_emf_poses_rate_divider)已经移除。升级固件到 v0.11.4 或更高,改用 emf_poses 订阅上的 set_rate。两者的一个实际差异是:旧的分频器跨重连保持,set_rate 不保持。扩展用法
用返回值,别用请求值
set_rate 返回设备实际应用的频率。按请求值去算超时、缓冲区大小或采样窗口,遇到量化就会算错。
降频能省多少
按比例算。130 Hz 降到 30 Hz,网络流量和回调次数都降到约 23%。录制场景的收益更直接,八条流全录、zstd 压缩实测每分钟约 72 MB,降到 30 Hz 之后差不多是每分钟 17 MB。 降emf_poses 还会连带省掉手部求解的 CPU,因为派生流跟着降。
降频不改队列容量
订阅队列还是 1024 帧。频率降下来之后,同样的 1024 帧能覆盖更长的时间窗口,慢消费者的容错空间反而变大了,见数据订阅:异步。想要稳定的低频又不想握着句柄
目前没有跨连接保持的机制。旧的emf_poses_rate_divider 有这个特性但已经移除。当前做法是在长连接服务中持续持有该订阅句柄。
相关内容
- 数据订阅:回调:六条流的输出率实测
- 数据订阅:异步:订阅队列的 1024 帧边界
- 数据录制:降频对文件体积的影响
- Wuji Hand 2 输出率调节:灵巧手侧的同一套接口
- 数据订阅机制:订阅模型与生命周期