SDKC++ SDK

读取原始数据

姿态与 IMU:设备直接产出,不需要算法包。

当前版本 · 1.4.0

读取原始数据

原始姿态由有效设备帧直接发布;IMU 在设备帧包含对应数据时直接发布。它们不需要 Retargeting 调度,也不会被 run_forever()、run_background() 或 update() 生成或限频。

手套姿态

通过 device.pose() 读取 GlovePose:

  • meta:source、时间、可选 sequence 与 frame ID。
  • payload.root_pose:根节点位置和 XYZW quaternion。
  • payload.fingertip_world 与 fingertip_local:五指世界/局部姿态。
  • raw_valid_mask、held_mask 与 quality_flags:质量信息。

完整字段见 GlovePose 和 GloveFeaturePayload。

IMU(实验性功能)

通过 device.imu() 读取手套提供的 IMU 原始计数:

auto device = glove.device();
auto imu = device.imu();
auto imu_subscription = imu.subscribe(
    [](const qnbot::Sample<qnbot::GloveImu>& sample) {
        const auto& value = sample.value.payload;
        std::cout << value.valid << ' ' << value.gyroscope_raw[0] << ' '
                  << value.accelerometer_raw[0] << '\n';
    });

bool started = false;
try {
    device.start();
    started = true;
    run_application();
    device.stop();
    started = false;
    glove.close();
} catch (...) {
    if (started) {
        device.stop();
    }
    glove.close();
    throw;
}

gyroscope_raw 与 accelerometer_raw 都是三个 std::int16_t,依次对应三个轴。SDK 不进行单位换算、标定或姿态融合。valid == false 时仍会保留并发布原始计数。IMU 当前是实验性功能,数据格式、支持设备和公开行为后续可能变化。完整字段见 GloveImu 和 GloveImuPayload。

设备状态

device.status() 也是设备直接产出的读数,不经过算法处理:是否已连接、数据是否过期、最近一次错误和重连次数。字段含义和诊断用法见 诊断与错误。