1
0
Fork 0
科大实验室,视觉SLAM算法,机器人项目。
 
 
Go to file
詹力 94b8a14630 Merge pull request 'Ray:更新vslam 摄像头加IMU代码' (#1) from ray/ORB-SLAM3-UESTC:main into main
Reviewed-on: http://logzhan.ticp.io:30000/logzhan/ORB-SLAM3-UESTC/pulls/1
2023-12-27 14:13:08 +08:00
Docs update docs 2023-11-29 01:27:40 +08:00
Workspace Ray:更新vslam 摄像头加IMU代码 2023-12-27 11:39:39 +08:00
.gitignore Update Initial Code 2023-11-28 03:20:25 -08:00
README.md 更新ORB-SLAM3实时接入摄像头和IMU的伪代码 2023-12-01 13:31:06 +08:00

README.md

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;
}