码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ORB-SLAM3的Tracking线程详解


    ORB-SLAM3的Tracking线程,主要从一下几个方面进行讲解:ORB-SLAM3初始化、传感器输入模块、Tracking线程子模块、Tracking线程代码详解。

    其中包括
    ①ORB-SLAM3整个系统初始化的代码是如何实现

    ②单目、双目、RBB-D以及结合IMU的输入的情况

    ③Tracking线程是怎么样处理数据的,代码逻辑

    ④按照Tracking线程每一步实现的功能

    文章目录

      • 一、ORB-SLAM3初始化
        • 1、开源网址
        • 2、ORB-SLAM3代码主要文件夹
        • 3、整个系统初始化
          • (1)头文件
          • (2)Sustem函数
        • 4、初始化函数System::System()主要完成工作
          • (1)检查SLAM 系统传感器初始化类型,需要用到 sensor
          • (2)检查传感器配置文件,也就是相机标定参数等,需要用到 strSettingsFile
          • (3)实例化 ORB 词典对象,并加载 ORB 词典
          • (4)根据ORB 词典实例对象,创建关键 DataBase
          • (5)创建Altas,也就是多地图系统
          • (6)IMU 初始化设置,如果需要
          • (7)利用Atlas 创建 Drawer,包括 FrameDrawer 和 MapDrawer:
          • (8)初始化 Tracking 线程
          • (9)初始化局部地图 LocalMapping 线程,并加载;
          • (10)初始化闭环 LoopClosing 线程,并加载;
          • (11)初始化用户可视化线程,并加载;
          • (12)将上述实例化的对象指针,传入需要用到的线程,方便进行数据共享

    一、ORB-SLAM3初始化

    1、开源网址

    ORB-SLAM3在github上开源,开源网址

    2、ORB-SLAM3代码主要文件夹

    • Examples和Example_old根据传感器类型,分别存放新的和旧的代码实例
    • include和src分别存放代码的.h头文件和cc/cpp源文件
    • Thirdparty存放了DBOW2、Sophus和g2o。DBOW2是词袋模型,Sophus是李代数库,g2o是图优化库
    • Vocabulary存放ORB词典

    在这里插入图片描述

    3、整个系统初始化

    (1)头文件

    运行ORB-SLAM3的第一步是初始化。初始化ORB-SLAM3是通过System.cc开始,其对应的头文件为System.h,以下为System.h的部分源码:

    #include "Tracking.h"
    #include "FrameDrawer.h"
    #include "MapDrawer.h"
    #include "Atlas.h"
    #include "LocalMapping.h"
    #include "LoopClosing.h"
    #include "KeyFrameDatabase.h"
    #include "ORBVocabulary.h"
    #include "Viewer.h"
    #include "ImuTypes.h"
    #include "Settings.h"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • Tracking.h是Tracking.cc的头文件,即跟踪线程的代码
    • LocalMapping.h是LocalMapping.cc的头文件,即局部建图线程的代码
    • LoopClosinng.h是LoopClosinng.cc的头文件,即闭环与地图合并线程的代码

    System文件相当于初始化代码的入口,Tracking、LocalMapping和LoopClosinng都会用到;

    FrameDrawer.h就是建图会使用到,地图画出来;

    Atlas.h就是多地图;KeyFrameDatabase.h就是关键帧的数据库,包括关键帧的构建和数据格式;
    ORBVocabulary.h就是ORB的词典;

    Viewer.h对应展示的界面;

    ImuTypes.h就是IMU定义的数据格式和各种函数和内方法;

    Settings.h就是参数配置和结构

    函数功能
    brief系统的构造函数,将会启动其他的线程
    param strVocFile词袋文件所在路径
    param strSettingsFile配置文件所在路径
    param sensor传感器类型
    param bUseViewer是否使用可视化界面
    param initFr initFr表示初始化的id,开始设置为0
    param strSequence序列名,在跟踪线程和局部建图线程用得到
    (2)Sustem函数
    //初始化SLAM系统
    //发起局部建图
    //局部线程闭环检测,开启视图线程
    System(const string &strVocFile, 
    const string &strSettingsFile, 
    const eSensor sensor,
    const bool bUseViewer, 
    const int initFr, 
    const string &strSequence = std::string());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    System中有string类型的strVocFile,这个对应词袋文件的路径;

    strSettingsFile对应配置文件的路径,eSensor对应传感器的类型sensor,六种传感器的类型输入(单目、双目、RGB-D和以 及这三种分别与和IMU结合);

    bool型的bUseViewer代表是否显示可视化的界面,默认为true;

    int类型initFr代表初始化的帧,默认为0;

    string型的strSequence代表序列名,图像帧的序列

    4、初始化函数System::System()主要完成工作

    (1)检查SLAM 系统传感器初始化类型,需要用到 sensor
    (2)检查传感器配置文件,也就是相机标定参数等,需要用到 strSettingsFile
    (3)实例化 ORB 词典对象,并加载 ORB 词典
    (4)根据ORB 词典实例对象,创建关键 DataBase
    (5)创建Altas,也就是多地图系统
    (6)IMU 初始化设置,如果需要
    (7)利用Atlas 创建 Drawer,包括 FrameDrawer 和 MapDrawer:
    (8)初始化 Tracking 线程
    (9)初始化局部地图 LocalMapping 线程,并加载;
    (10)初始化闭环 LoopClosing 线程,并加载;
    (11)初始化用户可视化线程,并加载;
    //参数 bUseViewer 在这里用到
    mpViewer = new Viewer(this, mpFrameDrawer,mpMapDrawer,mpTracker strSettingsFile);
    mptViewer = new thread(&Viewer::Run,mpViewer);
    mpTracker->SetViewer(mpViewer);
    mpLoopCloser->mpViewer=mpViewer;
    mpViewer->both = mpFrameDrawer->both;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (12)将上述实例化的对象指针,传入需要用到的线程,方便进行数据共享
    // Tracking需要用到mpLocalMapper和闭环mpLoopCloser
    mpTracker->SetLocalMapper(mpLocalMapper);
    mpTracker->SetloopClosing(mpLoopCloser);
    
    //LocalMapper需要用到Tracking和闭环mpLoopCloser
    mpLocalMapper->SetTracker(mpTracker);
    mpLocalMapper->SetTracker(mpLoopCloser);
    
    //mpLoopCloser需要用到Tracking和LocalMapper
    mpLoopCloser->SetTracker(mpTracker);
    mpLoopCloser->SetLocalMapper(mpLocalMapper);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    函数按照顺序执行

    在这里插入图片描述

  • 相关阅读:
    JavaScript 进阶 - 第4天
    设计模式8、装饰者模式 Decorator
    制造不可靠的系统
    实战演练 | Navicat 安全可靠的数据传输功能
    java.io.IOException: Server returned HTTP response code: 403 for URL
    《大数据之路》——维度设计总结(1)
    领航杯2022年-Crypto-rsa
    java新特性流 stream01
    利用cpolar为群晖NAS建立稳定外网地址(1)
    猿创征文|13万字学会Spring+SpringMVC+Mybatis框架
  • 原文地址:https://blog.csdn.net/Prototype___/article/details/132899425
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号