核心对象与生命周期
核心对象与生命周期:顶层对象、设备与运行边界。
当前版本 · 1.4.0
核心对象与生命周期
对象层级
常用对象按以下层级组织:
Sdk # SDK 的统一入口
└── Glove # 管理所有已配置的手套
└── device() → GloveDevice # 选择一只实体手套及其功能
├── capture_status() # 查询采集准备情况
├── start_capture() # 开始采集
├── start_calibration() # 使用已完成的采集开始标定
├── pose() # 读取原始姿态
├── imu() # 读取 IMU 数据(实验性功能)
├── skeleton() # 读取 OpenXR 骨骼数据
│ ├── joint_angles() # 读取关节角
│ └── pose() # 读取骨骼节点姿态
├── output() # 读取灵巧手输出
├── calibration_status() # 查看是否需要标定
├── capture_progress() # 查看采集进度
├── capture_control() # 确认、跳过、重试或取消采集
├── calibration_progress() # 查看标定进度
├── status() # 查看设备连接状态
└── haptics() # 控制指尖震动Sdk:完整的 SDK 对象,用于统一启动、停止、运行和查看健康状态。Glove:所有已配置手套的操作入口,用于管理手套和选择设备。GloveDevice:表示一只实体手套,提供单设备控制和数据读取。
对象关系:Glove 不等同于一只手套。一个 Glove 可以管理多只 GloveDevice;一只
GloveDevice 也可以通过多个 target 驱动多个灵巧手或仿真目标。
Sdk、Subscription 与 NextOperation<T> 都不可复制。Sdk 可以移动;移动前取得的
Glove、设备、数据读取入口和 update result 仍属于同一 SDK,移动后的原对象不可继续使用。
生命周期
Sdk 管理已配置的全部设备和功能;只使用手套能力时,通过
sdk.glove() 取得统一操作入口:
qnbot::SdkConfig config;
config.devices = {qnbot::GloveConfig{}};
qnbot::Sdk sdk(std::move(config)); // 创建:返回时设备已发现并校验,尚未启动
auto glove = sdk.glove(); // 取得手套入口
glove.start(); // 启动:建立设备连接并启动所需数据流
glove.run_forever(); // 运行:持续接收数据
glove.close(); // 关闭:回收订阅并断开设备- 创建:
Sdk构造返回前完成设备发现、身份校验与 target 解析,返回后即可选择设备和准备读取。 - 启动:功能配置与订阅在
start()之前完成;start()建立设备连接并启动所需数据流。 - 运行:数据来源与读取方式见 数据来源与读取方式,推进 SDK 调度的三种运行方式见 运行方式。
- 停止与关闭:
stop()停止运行并断开设备,close()回收订阅;后台模式先调用request_stop()与join()。
Sdk、Glove 与 GloveDevice 各有自己的生命周期方法:
| 对象 | 作用范围 |
|---|---|
Sdk | 完整 SDK:已配置的全部设备和功能 |
Glove | 仅手套能力 |
GloveDevice | 单个设备:start() 和 stop(),没有独立的 close() |
方法与返回值见 API 参考的生命周期与作用域。