SDKC++ SDK

核心对象与生命周期

核心对象与生命周期:顶层对象、设备与运行边界。

当前版本 · 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 参考的生命周期与作用域。