跳转到主要内容

概述

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 共享同一条设备流。 通过任一订阅调整频率,另一条同时改变。

数据流

请求值会被量化到设备支持的频率,返回值才是真正生效的值,不要假设等于请求值。

运行时分支

调用顺序

句柄关闭后频率自动恢复,所以要让设置持续生效就保持句柄打开。

运行与输出

固件支持时的输出形如:

固件不支持时的实测表现

在固件低于 v2.3.0 的设备上调用,异常立即抛出:
这个异常在 set_rate() 调用点抛出,订阅本身不受影响——订阅照常工作,只是维持在设备默认频率。实测该设备的 joint_states 默认约 1088 Hz。 判断设备是否支持,最直接的方式是调一次 set_rate() 看是否抛异常。SDK 没有单独的能力查询接口。

调整与适配

选择合适的频率

请求值会被量化。想确认真正生效的频率,读 set_rate() 的返回值,或者订阅后数一段时间的帧数。

多个订阅者的影响

频率属于流。同一条流上有多个订阅者时,任何一个改频率,所有订阅者一起受影响。这在多进程共用一台设备时尤其要注意,别让某个进程的降频影响另一个进程的实时性。

降低 joint_states 会连带 joint_diagnostics

两者共享同一条设备流。只想降低其中一个是做不到的。

恢复时机

不需要显式恢复的场景可直接关闭句柄,频率将恢复为设备默认值。显式传 0 适合在同一个句柄上继续用默认频率接收。

相关内容