ORB-SLAM3-UESTC/Workspace/Application/IMUDriver/IMUReader.h

65 lines
1.2 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);
};