Skip to main content

概述

本篇实践介绍如何通过 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() 连接,并注册状态回调。
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 在错误退出路径也执行清理。

运行与输出

固件支持时的输出形如:

固件不支持时的行为

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

注意事项

扩展用法

选择合适的频率

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

多个订阅者的影响

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

降低 joint_states 会连带 joint_diagnostics

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

恢复时机

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

相关内容