5. SDK打印内容说明
5.1 输出内容格式
C++ SDK 使用标准输出(std::cout)和标准错误(std::cerr)进行日志输出。
5.2 典型输出内容
启动时的输出
===========================================
PSI Glove SDK - 基础使用示例
===========================================
串口: /dev/ttyACM0
波特率: 115200
===========================================
正在连接到设备...
连接成功!
开始读取数据 (按Ctrl+C退出)...运行时的数据输出
--- 帧 #0 ---
拇指: 2048, 1856, 2304, 1792, 2176
食指: 1920, 2240, 1664, 2112
中指: 2304, 1856, 2048, 1792
无名指: 1920, 2176, 1664, 2048
小指: 2240, 1856, 2304, 1920
--- 帧 #10 ---
拇指: 2052, 1860, 2308, 1796, 2180
食指: 1924, 2244, 1668, 2116
中指: 2308, 1860, 2052, 1796
无名指: 1924, 2180, 1668, 2052
小指: 2244, 1860, 2308, 1924错误和警告输出
错误: 无法连接到设备
请检查:
- 设备是否已连接
- 串口路径是否正确
- 是否有权限访问串口 (sudo adduser $USER dialout)
警告: 读取失败,使用缓存数据
(使用上次的有效数据)退出时的统计信息
^C
正在退出...
===========================================
统计信息:
总帧数: 1523
运行时间: 15 秒
平均帧率: 101.53 Hz
===========================================
已断开连接。5.3 例程可视化显示
psi_glove_cpp_visualizer OpenCV 窗口
可视化器使用 OpenCV 显示实时柱状图:
┌─────────────────────────────────────────────────────────┐
│ PSI 手套实时数据可视化 (OpenCV) │
├─────────────────────────────────────────────────────────┤
│ 左手关节位置 (ADC 值: 0-4095) │
│ │
│ 拇指_0 ████████████████████████████ 2048 │
│ 拇指_1 ████████████████████ 1856 │
│ 拇指_2 ████████████████████████████████ 2304 │
│ 拇指_3 ███████████████████ 1792 │
│ 拇指_4 ██████████████████████████ 2176 │
│ 食指_0 █████████████████████ 1920 │
│ ... │
│ │
│ [Q]退出 [S]截图 [R]重置 │
│ FPS: 101.5 Hz | 延迟: 9.8 ms │
└─────────────────────────────────────────────────────────┘显示元素说明:
- 柱状图:每个关节的实时数值
- 帧率:数据更新频率
- 延迟:从读取到显示的时间
- 交互操作:
- 按
Q键退出 - 按
S键保存截图 - 按
R键重置显示
- 按
5.4 自定义日志输出
cpp
// 自定义日志宏
#define LOG_INFO(msg) std::cout << "[INFO] " << msg << std::endl
#define LOG_WARN(msg) std::cout << "[WARN] " << msg << std::endl
#define LOG_ERROR(msg) std::cerr << "[ERROR] " << msg << std::endl
// 使用示例
LOG_INFO("正在连接到设备...");
LOG_WARN("读取失败,使用缓存数据");
LOG_ERROR("无法连接到设备");cpp
// 带时间戳的日志
#include <chrono>
#include <iomanip>
void LogWithTimestamp(const std::string& level, const std::string& msg) {
auto now = std::chrono::system_clock::now();
auto time_t = std::chrono::system_clock::to_time_t(now);
std::cout << "[" << std::put_time(std::localtime(&time_t), "%Y-%m-%d %H:%M:%S")
<< "] [" << level << "] " << msg << std::endl;
}
// 使用
LogWithTimestamp("INFO", "连接成功");