ORB-SLAM3/ORB-SLAM3-UESTC/README.md

1.8 KiB
Raw Permalink Blame History

ORB-SLAM3 -UESTC

概述基于ORB-SLAM3调整的专用版本。Workspace目录下的ORB-SLAM3的核心部分源自

一、基本操作

1.1 代码的编译和运行

代码的编译和运行参考文档Workspace/README.md

二、数据的接入与部署

2.1 单目摄像头加入IMU数据实时接入

由于ORB-SLAM3采用的是读取图片和csv文件的方式运行不适用于小车的实际实时接入数据。所以我们需要对原本的读取代码进行改进并且对我们使用的IMU实现一个读取器。伪代码如下

// 单目摄像头+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;
}