概述
本篇实践介绍如何通过set_rate() 调节 Wuji Hand 2 数据流的推送频率。应用场景包括匹配应用采样频率和降低网络及数据处理开销。
对应的 Python 示例为 4.set_stream_rate.py,C 示例为 4_set_stream_rate.c。 可调流的清单与接口定义见 调节订阅流输出率,本页说明集成流程和运行时行为。
本功能有固件版本要求。Wuji Hand 2 固件需 v2.3.0 及以上,低于该版本的设备调用时抛异常。本文验证所用设备的固件低于此版本,成功路径的行为依据发布记录说明,失败路径为实测。
前置条件
硬件
软件
数据流
请求值会被量化到设备支持的频率,返回值才是真正生效的值,不要假设等于请求值。可调流与派生流
派生流拒绝
set_rate。 hand_joint_angles、hand_skeleton、tip_poses、imu_data/* 这些由源流计算得出,频率跟随源流,直接对它们调用会被拒绝。
joint_states 与 joint_diagnostics 共享同一条设备流。 通过任一订阅调整频率,另一条同时改变。
集成步骤
1. 连接设备并建立订阅
先扫描并连接目标 Wuji Hand 2,再取得joint_states 的订阅句柄。Python 使用 scan()、connect() 和 subscribe(),C 先调用 wuji_init(),再通过 wuji_scan()、wuji_connect() 连接,并注册状态回调。
- Python
- C
on_joint_states 接收 WujiFrameKind、const WujiJointStateFrame * 和用户上下文。订阅成功后再调整频率。
2. 设置频率并读取实际值
请求 100 Hz,并使用返回值确认设备实际采用的频率。Python 的set_rate() 返回频率,C 的 wuji_sub_set_rate() 返回状态码并通过输出参数填写频率。
- Python
- C
3. 恢复默认频率并释放资源
向同一接口传入0 恢复默认频率,然后关闭订阅、断开设备。Python 将清理放在 finally 中,C 在错误退出路径也执行清理。
- Python
- C
运行与输出
- Python
- C
固件不支持时的行为
在固件低于 v2.3.0 的设备上调用,异常立即抛出:set_rate() 调用点抛出,订阅本身不受影响——订阅照常工作,只是维持在设备默认频率。实测该设备的 joint_states 默认约 1088 Hz。
判断设备是否支持,调用一次 set_rate(),根据是否抛出异常判断设备是否支持。SDK 没有单独的能力查询接口。
注意事项
扩展用法
选择合适的频率
请求值会被量化。想确认真正生效的频率,读set_rate() 的返回值,或者订阅后数一段时间的帧数。
多个订阅者的影响
频率属于流。同一条流上有多个订阅者时,任何一个改频率,所有订阅者一起受影响。这在多进程共用一台设备时尤其要注意,别让某个进程的降频影响另一个进程的实时性。降低 joint_states 会连带 joint_diagnostics
两者共享同一条设备流。只想降低其中一个是做不到的。恢复时机
不需要显式恢复的场景可直接关闭句柄,频率将恢复为设备默认值。显式传 0 适合在同一个句柄上继续用默认频率接收。相关内容
- 数据订阅:回调:订阅的建立与生命周期
- 数据订阅:异步:
recv_async()配合降频使用 - Wuji Glove 输出率调节:手套侧的同一能力,固件要求 v0.11.4 及以上