ORB_SLAM2之System类分析记录

ORB_SLAM2的System类封装了三大线程,通过构造函数初始化所需组件,如ORB词典、关键帧数据库和地图。Track*接口用于图像跟踪,Shutdown用于系统停止,SaveTrajectory支持TUM和KITTI格式的轨迹保存。总结中强调了System类的重要接口和功能。
摘要由CSDN通过智能技术生成

ORB_SLAM2之System

System类是ORB_SLAM2对三大线程的封装,我们只需要调用System的接口SLAM就可以工作了。

System构造函数

  1. 首先根据传感器类型输出信息。
  2. 读入系统配置文件,使用cv::FileStorage打开。
  3. 创建系统所需要的类。

创建ORB词典ORBVocabulary,然后加载离线词典。
创建关键帧数据库KeyFrameDatabase
创建地图Map
创建帧绘制器FrameDrawer
创建地图绘制器MapDrawer

  1. 创建跟踪主线程
mpTracker = new Tracking(this, 
						mpVocabulary, // 词典
						mpFrameDrawer,// 帧绘制器
						mpMapDrawer,// 地图绘制器
						mpMap, // 地图
						mpKeyFrameDatabase, // 关键帧库
						strSettingsFile, // 配置文件
						mSensor); // 传感器类型
  1. 初始化局部建图线程
mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR); 
// 运行
mptLocalMapping = new thread(&ORB_SLAM2::LOcalMapping::Run, // 多线程调用的函数
		mpLocalMapper); // 所在的类(多线程类的使用方式)
  1. 创建回环检测线程
mptLoopClosing = new thread(&ORB_SLAM::LoopClosing::Run, 
mpLoopCloser); // 参考局部建图线程
  1. 绘制线程
if(bUseViwer) 
{
   
    // 创建一个视图器
	mpViwer = new Viwer(this,
                       	mpFrameDrawer,
                        mpMapDrawer,
                       	mpTracker,
                        strSettingFile);
    // 创建线程
    mptViwer = new thread(&Viwer::Run,
                         mpViwer);
    // 给运动追踪添加查看器
    mpTracker->SetViwer(mpViewer);
}
  1. 让线程之间指定彼此,能够进行通讯。
mpTracker->SetLocalMapper(mpLocalMapper);
mpTracker->SetLoopClosing(mpLoopClosing);

mpLocalMapper->SetTracker(mpTracker);
mpLocalMapper->SetLoopClosing(mpLoopClosing);

mpLoopClosing->SetTracker(mpTracker);
mpLoopClosing->SetLocalMapper(mpLo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值