跳转到主要内容

概述

用 async/await 订阅 Wuji Hand 2 的 joint_states。与回调式相比,数据在协程里按顺序取出,不需要跨线程传递。 应用本身已经跑在 asyncio 上时,这种方式更自然。多设备并发用 asyncio.gather() 就能表达,不用自己管线程。 对应示例:examples/python/wuji_hand_2/1.subscribe_async.py。 关节状态与各字段定义见 SDK 接口,本页只讲怎么跑起来与实测结果。
C 接口没有对应的异步形式。C 侧订阅统一走回调,见数据订阅:回调。
本示例只读取,不使能电机,手指不会动。

前置条件

硬件

软件

数据流

subscribe() 拿到的句柄同时支持两种取法:await recv_async() 异步取,recv() 同步取。帧结构与回调式完全一致。

运行时分支

调用顺序

订阅是纯读取,不需要 enable() 与 disable()。

运行与输出

实测数据

在 20 关节全在线的右手 Wuji Hand 2 上实跑: 异步与同步两种取法的吞吐一致,都跟得上设备约 1 kHz 的广播。选哪种取决于应用结构,不是性能问题。

调整与适配

与回调式的取舍

多设备并发

每台设备一个协程,asyncio.gather() 并发即可。设备之间互不阻塞。

降低输出率

约 1 kHz 对多数应用偏高。用同一句柄的 set_rate() 降频,注意有固件版本要求,见输出率调节。

相关内容