ORB-SLAM3的Tracking线程详解

14 篇文章 2 订阅

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

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

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

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

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

一、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"
  • 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());

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;
(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);

函数按照顺序执行

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值