Skip to content

4. SDK接口调用说明

📋 目录

  1. 硬件安装方法说明
  2. SDK安装和配置方法
  3. 例程编译和调用方法
  4. SDK接口调用说明
  5. SDK打印内容说明
  6. 连接状态查询与故障排查

完整手册


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必填设备路径
baudrate115200波特率
timeout6ms读写超时
auto_connectfalse构造时连接
mockfalse模拟模式

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)boolLRA 线性马达(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 数据格式

StatusMessage22uint16_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);
字段范围说明
mode0–100 关闭该指
amplitude0–255播放增益

常量:kRegLraCtrl = 0x00B0kLraAmplitudeMax = 255

TIP

C++ SDK Python 的 FingertipPoseCalculator 内置 YAML 配置加载 API(仅有 Config 等类型定义供扩展)。

4.5 Modbus 摘要

功能功能码说明
读关节0x0322 寄存器 → StatusMessage
LRA0x100xB0,10 字节