SDKC++ SDK

手套 + 外骨骼融合方案

通过共享串口连接外骨骼与双手套,并统一管理生命周期与设备能力。

当前版本 · 1.0.0

手套 + 外骨骼融合方案

Qnbot PLUS 融合设备通过一个共享串口同时提供 Exo、左手套和右手套。在一个 CompositeExoGloveConfig 中声明三个成员,并由根 Sdk 统一管理生命周期。

配置思路

  • 共享串口只由 CompositeExoGloveConfig 持有,不要再给 Exo 或两只手套成员单独配置连接。
  • 保持 composite.connection.port 为空即使用自动发现;需要锁定设备时,只在这里设置共享端口。
  • devices 内放入左手套、右手套和 Exo;使用 sdk.exo() 读取外骨骼数据,使用 sdk.glove() 访问手套。
  • 只对根 Sdk 调用 start()、stop() 和 close()。

完整示例

// 三个成员只声明身份,不各自持有串口。
qnbot::GloveConfig left_glove;
left_glove.side = qnbot::Side::left;
qnbot::GloveConfig right_glove;
right_glove.side = qnbot::Side::right;
qnbot::ExoConfig exo_config;

qnbot::CompositeExoGloveConfig composite;
// 默认自动发现共享串口。固定端口时只需取消下行注释。
// composite.connection.port = "/dev/ttyACM0";
composite.devices = {
    qnbot::DeviceConfig{left_glove},
    qnbot::DeviceConfig{right_glove},
    qnbot::DeviceConfig{exo_config},
};
qnbot::SdkConfig config;
config.devices.push_back(composite);
qnbot::Sdk sdk(config);

// 通过两个产品门面取得共享链路上的三个成员。
auto glove = sdk.glove();
auto exo = sdk.exo();
auto left = glove.device(qnbot::Side::left);
auto right = glove.device(qnbot::Side::right);
auto exo_device = exo.device();

// 由根 Sdk 统一管理整个组合设备的生命周期。
sdk.start();
// 融合模式的震动通过手套成员发送,不调用 ExoHaptics。
const qnbot::GloveHaptics value{{{qnbot::GloveFinger::thumb, 80}}};
left.haptics().set(value);
right.haptics().set(value);
// telemetry/status/IMU 仍从 exo_device 读取。
left.haptics().clear();
right.haptics().clear();
sdk.stop();
sdk.close();

独立 Exo 的 ExoHaptics 不适用于融合模式;震动必须通过左右手套发送。Exo 提供 telemetry、status 和 IMU;手套提供 pose 与 status。当前共享 CDC 链路不提供手套原始 IMU。

请同时安装兼容版本的 Exo 与 Glove C++ 包。另见 手套侧融合方案;完整程序见 composite-exo-glove/cpp。