状态、订阅与实时控制
快照、订阅和 Servo 解决不同问题:快照读取一次数据,订阅按周期拉取数据,Servo 向设备连续发送控制目标。
读取方式对比
| 方式 | 数据方向 | 适用场景 |
|---|---|---|
state.snapshot() | 设备到应用,一次 | 预检、命令后确认 |
state.subscribe() | 设备到应用,连续 | 监控、记录、闭环算法输入 |
touch.subscribe() | 设备到应用,连续 | 触觉监控和算法输入 |
health.subscribe() | 设备到应用,连续 | 运行状态和故障监控 |
open_servo() | 应用到设备,连续 | 实时位置或阻抗目标 |
订阅生命周期
python
subscription = hand.state.subscribe(period=0.02)
try:
while True:
state = await subscription.next()
process_state(state)
finally:
subscription.close()SDK 不保存订阅历史。处理速度低于读取速度时,应用应使用有界队列并定义丢弃或降采样策略,不能无限堆积数据。
Servo 会话
ServoSession 具有独立控制权和生命周期。应用必须:
- 在打开会话前完成布局和健康预检。
- 使用明确的发送周期和命令超时。
- 监控 State 与 Health,但不要假设订阅频率等于控制频率。
- 在异常和正常退出路径关闭会话。
- 断线后丢弃旧会话并重新连接。
任何固定频率都依赖主机、适配器、总线负载和固件;文档不承诺无条件固定控制频率。接口见Motion API和遥测 API。