概述
joint_states 默认以约 1 kHz 广播,多数应用用不上这么高。set_rate() 让固件按指定频率推送,降低网络与 CPU 开销。
频率属于数据流,不属于订阅句柄:设置对该流的所有订阅者生效,最后一个订阅关闭或设备重连后恢复设备默认。
对应的 Python 示例为 4.set_stream_rate.py,C 示例为 4_set_stream_rate.c。
可调流的清单与接口定义见 SDK 接口,本页只讲怎么跑起来与实测结果。
本功能有固件版本要求。Wuji Hand 2 固件需 v2.3.0 及以上,低于该版本的设备调用时抛异常。本文验证所用设备的固件低于此版本,成功路径的行为依据发布记录说明,失败路径为实测。
前置条件
硬件
软件
可调流与派生流
派生流拒绝
set_rate。 hand_joint_angles、hand_skeleton、tip_poses、imu_data/palm 这些由源流计算得出,频率跟随源流,直接对它们调用会被拒绝。
joint_states 与 joint_diagnostics 共享同一条设备流。 通过任一订阅调整频率,另一条同时改变。
数据流
请求值会被量化到设备支持的频率,返回值才是真正生效的值,不要假设等于请求值。运行时分支
调用顺序
- 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 及以上