64 lines
1.3 KiB
C
64 lines
1.3 KiB
C
|
#pragma once
|
||
|
|
||
|
#include <iostream>
|
||
|
#include <thread>
|
||
|
#include <chrono>
|
||
|
#include <string>
|
||
|
#include <boost/asio.hpp>
|
||
|
#include <boost/array.hpp>
|
||
|
#include <vector>
|
||
|
#include <opencv2/core/core.hpp>
|
||
|
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
// 结构体定义 IMU 数据
|
||
|
struct IMUData {
|
||
|
|
||
|
cv::Point3f vAcc;
|
||
|
cv::Point3f vGyro;
|
||
|
double timestamp;
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
class IMUReader {
|
||
|
public:
|
||
|
// 构造函数
|
||
|
IMUReader(std::string ComNumber);
|
||
|
|
||
|
// 构造函数
|
||
|
IMUReader();
|
||
|
|
||
|
// 析构函数
|
||
|
~IMUReader();
|
||
|
|
||
|
// 初始化 IMU
|
||
|
void IMUInit(std::string ComNumber);
|
||
|
|
||
|
// 获取 IMU 数据状态
|
||
|
int ReadData(IMUData& data);
|
||
|
int IMUReadData();
|
||
|
std::vector<IMUData> imubuffer;
|
||
|
|
||
|
IMUData getdata() const{
|
||
|
std::unique_lock<std::mutex> lock(dataMutex);
|
||
|
return data;
|
||
|
};
|
||
|
private:
|
||
|
boost::asio::io_service io;
|
||
|
boost::asio::serial_port* serial;
|
||
|
// boost::asio::serial_port serial(io, "/dev/ttyUSB0"); // 替换成你的串口设备路径
|
||
|
|
||
|
bool isRunning; // 控制是否退出循环的标志变量
|
||
|
std::thread dataThread; // 数据读取线程
|
||
|
IMUData data;
|
||
|
mutable std::mutex dataMutex;
|
||
|
|
||
|
|
||
|
// 读取 IMU 数据的循环
|
||
|
|
||
|
void IMUReadDataThread(void);
|
||
|
|
||
|
|
||
|
};
|