首页 > 编程语言 >ORB_SLAM3源码阅读笔记(一)

ORB_SLAM3源码阅读笔记(一)

时间:2023-03-30 15:15:41浏览次数:65  
标签:mSensor SLAM3 源码 线程 new ORB mpLoopCloser

本文参考赵旭辉博士的ORB_SLAM3源码阅读记录以及自己的源码阅读进行随笔记录,详细内容可参考链接

一、结构

  算法整体上需要关注的是三个线程,阅读源码的过程中也始终以这三个线程为主。

  • Tracking 跟踪线程
  • LocalMapping 定位与建图线程
  • LoopClosing 回环检测优化线程
    这三个对象均在System构造函数中创建。

二、主函数

  此处从ORB_SLAM3源码中的单目视觉部分开始逐步对ORB_SLAM3的整个工作过程进行分析。

ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false);

  该语句是主函数中最关键的一句代码,目的是创建SLAM系统,初始化系统所有线程,准备开始处理数据,其中SLAM()中第一个参数argv[1]表示的是输入的ORBvoc.txt即ORB词袋模型数据,第二个参数argv[2]表示的相机参数的yaml文件,显而易见,第三个参数表示相机的类型,第四个参数是一个bool类型,该参数控制是否进行数据的可视化,在运行程序的过程中如果将该参数设置为false则不会有任何的可视化。
  进入System构造函数对该函数执行的一些操作进行分析:

  • 1 读取配置文件
cv::FileNode node = fsSettings["File.version"];
……
cv::FileNode node = fsSettings["System.LoadAtlasFromFile"];
……
node = fsSettings["loopClosing"];

可以看出读取配置文件的过程中,ORB_SLAM3算法是根据输入yaml文件中的关键字进行不同的操作的,此处可以看出输入的参数可以是相机参数文件,也可以是地图文件和回环检测相关的文件。在ORB_SLAM3的单目部分输入的只是相机配置文件,因此不需要去考虑外部地图以及回环的相关问题。

  • 2 载入ORB词袋模型
    进入TemplatedVocabulary.h查看载入词袋模型函数具体的内容,需要注意的是这里是以.txt的形式进行读取的,在实际的应用过程中随着模型的增大载入时间也会变长,所以有学者已经将此处词袋模型的载入方式修改为二进制文件形式读取,大大的提高了词袋模型的载入效率,具体可参考链接。词袋模型是以kd树的形式进行存储的。

  • 3 创建地图集
    在载入词袋模型后,由于并没有载入外部的地图所以此时需要新建一个,maAtlas = new Atlas(0)该语句创建并初始化地图,地图编号为0。

  • 4 检查传感器
    传感器的模式一共有三种:

    • 双目+IMU
    • 单目+IMU
    • RGBD+IMU
      此处进行了一个判断,不同组合传感器对应不同初始化。
  • 5 创建对象

mpFrameDrawer = new FrameDrawer(mpAtlas);
mpMapDrawer = new MapDrawer(mpAtlas, strSettingsFile, settings_);
mpTracker = new Tracking(this, mpVocabulary, mpFrameDrawer, mpMapDrawer,
                             mpAtlas, mpKeyFrameDatabase, strSettingsFile, mSensor, settings_, strSequence);
mpLocalMapper = new LocalMapping(this, mpAtlas, mSensor==MONOCULAR || mSensor==IMU_MONOCULAR,
                                     mSensor==IMU_MONOCULAR || mSensor==IMU_STEREO || mSensor==IMU_RGBD, strSequence);
mptLocalMapping = new thread(&ORB_SLAM3::LocalMapping::Run,mpLocalMapper);
mpLoopCloser = new LoopClosing(mpAtlas, mpKeyFrameDatabase, mpVocabulary, mSensor!=MONOCULAR, activeLC); // mSensor!=MONOCULAR);
mptLoopClosing = new thread(&ORB_SLAM3::LoopClosing::Run, mpLoopCloser);

该部分创建了显示过程中“画帧的对象”mpFframDrawer,“画地的对象”mpMapDrawer,追踪线程对象mpTracker。同时创建了定位与建图对象mpLocalMapper与回环检测对象mpLoopCloser并开启了线程。
最后在三个线程之间建立指针:

    mpTracker->SetLocalMapper(mpLocalMapper);
    mpTracker->SetLoopClosing(mpLoopCloser);
    mpLocalMapper->SetTracker(mpTracker);
    mpLocalMapper->SetLoopCloser(mpLoopCloser);
    mpLoopCloser->SetTracker(mpTracker);
    mpLoopCloser->SetLocalMapper(mpLocalMapper);

此处引用赵旭辉博士文章中的图片对三个线程之间的关系进行描述
image

  • 6 结束
    该部分主要是线程的结束与数据的保存,线程结束通过调用 SLAM.Shutdown();函数完成。后续再对本文中的一些细节进行描述。

三、小结

  第一部分主要对ORB_SLAM3的主函数的大致工作过程进行说明,可以看出基本上也就是外部配置文件读取载入、初始化地图、传感器,创建线程与启动等等。

标签:mSensor,SLAM3,源码,线程,new,ORB,mpLoopCloser
From: https://www.cnblogs.com/Mortal-ShangZhi/p/17268068.html

相关文章

  • 直播平台源码,qt绘画事件-设置背景图片
    直播平台源码,qt绘画事件-设置背景图片头文件 voidpaintEvent(QPaintEvent*);​cpp文件: voidMainWindow::paintEvent(QPaintEvent*){    //创建画家,指......
  • broker启动过程源码分析
    1broker源码入口2创建broker控制器2.1设置netty发送和接收buf大小,默认为128k2.2加载命令行的参数信息2.3生成broker配置对象......
  • 机器视觉框架源码 视觉检测、AOI视觉检测、机械手定位、点胶机
    机器视觉框架源码到手vs2019可以直接编译、视觉检测、AOI视觉检测、机械手定位、点胶机、插件机、激光切割机、视觉螺丝机、视觉贴合机、激光焊接机、视觉裁板机……,C#......
  • ASP.NET Core - 选项系统之源码介绍
    .NETCore选项系统的主要实现在Microsoft.Extensions.Options和Microsoft.Extensions.Options.ConfigurationExtensions两个Nuget包。对于一个框架的源码进行解读,我......
  • 多线程源码_三菱plc+卡+串口上位机
    多线程源码_三菱plc+卡+串口上位机1,采用C#编程。2,上位机采用RS232串口通信链接plc。3,PLC为三菱。4,研华采集卡,采集压装电压。5,曲线判据自定义。6,每天作业......
  • Qt源码阅读(三) 对象树管理
    对象树管理个人经验总结,如有错误或遗漏,欢迎各位大佬指正......
  • Zookeep Leader选举源码
    Leader选举的核心底层原理可以很简单地概述为:核心参数是logicClock逻辑时钟、epoch、事务次数、myid,核心流程为:先对比logicClock,再对比epoch,其次对比事务次数,最后对......
  • ubuntu 18 源码安装nginx
    linux搭建nginx正向代理,添加  第三方模块ngx_http_proxy_connect_moduleapt-getinstallbuild-essentialapt-getinstalllibtoolsudoapt-getupdatesudoapt......
  • 源码分析CHANGE REPLICATION SOURCE TO
    从MySQL8.0.23版本开始,CHANGEMASTERTO开始被替换为CHANGEREPLICATIONSOURCETO,下面使用MySQL8.0.32的代码分析语句的具体执行流程。从语句的入口函数mysql_execute_......
  • 低压无感BLDC方波控制,全部源码,方便调试移植
    低压无感BLDC方波控制,全部源码,方便调试移植1.通用性极高,图片中的电机,一套参数即可启动。2.ADC方案3.电转速最高12w4.电感法和普通三段式5.按键启动和调速6.开环,速......