4. SDK接口调用说明
📋 目录
4.1 核心类和方法
4.1.1 SerialInterface 类
cpp
#include <psi_glove_sdk/psi_glove.hpp>
auto serial = std::make_unique<psi_glove::SerialInterface>(
"/dev/ttyACM0", // 串口
115200, // 波特率
std::chrono::milliseconds(6), // 超时
false, // auto_connect
false // mock
);| 参数 | 默认 | 说明 |
|---|---|---|
port | 必填 | 设备路径 |
baudrate | 115200 | 波特率 |
timeout | 6ms | 读写超时 |
auto_connect | false | 构造时连接 |
mock | false | 模拟模式 |
4.1.2 PSIGloveController 类
cpp
psi_glove::PSIGloveController controller(std::move(serial), 10);| 方法 | 返回类型 | 说明 |
|---|---|---|
Connect() | bool | 连接设备 |
Disconnect() | void | 断开 |
IsConnected() | bool | 是否已连接 |
Loop() | std::optional<StatusMessage> | 读一帧并缓存 |
ReadJointPositions() | std::optional<StatusMessage> | 仅读取 |
GetLastStatus() | std::optional<StatusMessage> | 上次成功数据 |
PlayLra(cmd, slave_id) | bool | LRA 线性马达(Modbus 0xB0) |
4.2 读取主手数据完整流程
cpp
#include <psi_glove_sdk/psi_glove.hpp>
#include <iostream>
#include <thread>
int main() {
auto serial = std::make_unique<psi_glove::SerialInterface>("/dev/ttyACM0", 115200);
psi_glove::PSIGloveController controller(std::move(serial), 10);
if (!controller.Connect()) {
std::cerr << "连接失败\n";
return 1;
}
while (controller.IsConnected()) {
if (auto status = controller.Loop()) {
std::cout << "thumb[0]=" << status->thumb[0] << std::endl;
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
controller.Disconnect();
return 0;
}4.3 数据格式
StatusMessage 含 22 路 uint16_t ADC(0–4095),按手指分组成员数组,无 Python 版 to_list(),需自行拼接。
4.4 高级用法
4.4.1 批量采集
见 advanced_usage.cpp:循环 Loop() 写入 CSV(22 列)。
4.4.2 双手套
两只手套各建 SerialInterface + PSIGloveController,分别 Loop()。
4.4.3 PlayLra(LRA 触觉)
cpp
psi_glove::LraPlayCommand cmd{};
cmd[0] = {5, 32}; // 拇指波形 5,振幅 32
cmd[1] = {0, 0};
// ... 其余指
bool ok = controller.PlayLra(cmd, 0x01);| 字段 | 范围 | 说明 |
|---|---|---|
mode | 0–10 | 0 关闭该指 |
amplitude | 0–255 | 播放增益 |
常量:kRegLraCtrl = 0x00B0,kLraAmplitudeMax = 255。
TIP
C++ SDK 无 Python 的 FingertipPoseCalculator、无 内置 YAML 配置加载 API(仅有 Config 等类型定义供扩展)。
4.5 Modbus 摘要
| 功能 | 功能码 | 说明 |
|---|---|---|
| 读关节 | 0x03 | 22 寄存器 → StatusMessage |
| LRA | 0x10 | 写 0xB0,10 字节 |
