# ORB-SLAM3 -UESTC 概述:基于ORB-SLAM3调整的专用版本。`Workspace`目录下的ORB-SLAM3的核心部分源自 ## 一、基本操作 ### 1.1 代码的编译和运行 ​ 代码的编译和运行参考文档`Workspace/README.md` ## 二、数据的接入与部署 ### 2.1 单目摄像头加入IMU数据实时接入 ​ 由于ORB-SLAM3采用的是读取图片和csv文件的方式运行,不适用于小车的实际实时接入数据。所以,我们需要对原本的读取代码进行改进,并且对我们使用的IMU实现一个读取器。伪代码如下: ```c++ // 单目摄像头+IMU接入ORB-SLAM3伪代码 int main(){ // 创建IMU数据读取器 IMUReader imuReader("/dev/ttyUSB0"); // 创建ORB_SLAM3定位系统 ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_MONOCULAR, true); // 默认30fps帧率 int fps = 30; // 初始化摄像头 cv::VideoCapture cap = cv::VideoCapture(0); cap.set(cv::CAP_PROP_FRAME_WIDTH, 640); cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480); // 清空IMU内部缓存,等待1fps的时间用于填充数据 imuReader.clear(); delay_ms(1000 / fps); while(true){ Mat frame; // 通过Opencv从摄像头读取视频帧 cap >> frame; // 获取当前系统的时间戳 tframe = get_systemTick(); // imuReader从串口读取数据 IMUData vImuMeas; int statsu = imuReader(vImuMeas); // 清空IMUReader内部缓存, imuReader内部线程继续读取新的数据 imuReader.clear(); // 如果读取IMU状态正确 if(status){ // 视觉+IMU VSLAM SLAM.TrackMonocular(frame,tframe,vImuMeas); }else{ // 纯视觉 VSLAM SLAM.TrackMonocular(frame,tframe); } } return 0; } ```