概述
用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() 降频,注意有固件版本要求,见输出率调节。