博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORB0-SLAM2 system.h 阅读
阅读量:5945 次
发布时间:2019-06-19

本文共 2069 字,大约阅读时间需要 6 分钟。

一.构造SLAM初始系统 

    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::STEREO,true)

初始化SLAM系统主要在 System.cc中实现,其中在在System中:

1.设置相机类型

2.读取参数文件 cv::FileStorage fsSettings(strSettingsFile.c_str(), cv::FileStorage::READ);

3.加载字典 bool bVocLoad = mpVocabulary->loadFromTextFile(strVocFile);

4.创建关键帧数据库    mpKeyFrameDatabase = new KeyFrameDatabase(*mpVocabulary);

5.创建地图  mpMap = new Map();    

6.创建两个显示窗口     

    mpFrameDrawer = new FrameDrawer(mpMap);

    mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);

7.初始化三个线程,其中track线程在主函数的loop 中,localmapping  和loopcloosing 在并行的线程中。

  //Initialize the Local Mapping thread and launch

    mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR);
    mptLocalMapping = new thread(&ORB_SLAM2::LocalMapping::Run,mpLocalMapper);
    //Initialize the Loop Closing thread and launch
    mpLoopCloser = new LoopClosing(mpMap, mpKeyFrameDatabase, mpVocabulary, mSensor!=MONOCULAR);
    mptLoopClosing = new thread(&ORB_SLAM2::LoopClosing::Run, mpLoopCloser);
8.除了这三个线程 还有 viewer 线程

这个viwer 线程中,   

    //Create Drawers. These are used by the Viewer

    mpFrameDrawer = new FrameDrawer(mpMap);
    mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);

然后

   //Initialize the Viewer thread and launch

    if(bUseViewer)
    {
        mpViewer = new Viewer(this, mpFrameDrawer,mpMapDrawer,mpTracker,strSettingsFile);
        mptViewer = new thread(&Viewer::Run, mpViewer);
        mpTracker->SetViewer(mpViewer);
    }

9.在system中  各个线程的激活,停止存储地图,写入地图中。还有一些改变线程的 状态的初始化

 

//!!!!key:system.cc中 主要是 各种初始化,并且初始化个 bool 变量均为F。主要的函数的是

cv::Mat System::TrackStereo(const cv::Mat &imLeft, const cv::Mat &imRight, const double &timestamp)

输入 图像,   return mpTracker->GrabImageStereo(imLeft,imRight,timestamp);

mpTracker:计算相机位姿,决定是否插入keyFrame,创造地图点,并且当lost的时候rocolization。

 

并且这个函数主要执行的是return mpTracker->GrabImageStereo(imLeft,imRight,timestamp);   从这一步获取tracker 的状态 ,然后改变bool变量的模式,决定 执行的是什么/。

//除了这个函数 就是通过unique_lock<mutex> lock(mMutexMode);   来决定当前的模式,(这里不是太懂,以后看) 

 // 以上整体就是system中的东西,获取图像, TrackStereo -----GrabImageStereo -----track ---

在TrackStereo 中会决定是localmapping  还是onlytracking  。。然后就学习tracking 线程吧。

转载于:https://www.cnblogs.com/xialuobo/p/7481839.html

你可能感兴趣的文章
php get_magic_quotes_gpc()函数用法介绍
查看>>
SQL to Java code for Elasticsearch
查看>>
Java RMI之HelloWorld程序以及相关的安全管理器的知识
查看>>
FlatBuffers
查看>>
美团HD(5)-选择城市
查看>>
$.when()方法监控ajax请求获取到的数据与普通ajax请求回调获取到的数据的不同
查看>>
pthread_mutex_t
查看>>
LR11.0 下载及破解
查看>>
Java基础-绘图技术
查看>>
又转出61.8万个ETH,EOS不疯狂不成魔
查看>>
程序员面试IT公司的33个小贴士
查看>>
多款C系列手机亮相三星中国论坛,更加注重中国用户体验
查看>>
云南中医学院更名为云南中医药大学
查看>>
人社部:突出就业优先政策主线 全力确保就业局势稳定
查看>>
关键时刻还是要看阿里,达摩院发布自主研发AI芯片
查看>>
「百年育才」计划启动港股IPO,新高考改革下的“志愿填报辅导”市场迎来窗口期?...
查看>>
浅谈高性能数据库集群——读写分离
查看>>
HenCoder Android 开发进阶:自定义 View 1-4 Canvas 对绘制的辅助
查看>>
angular ui-router:简单的单页面嵌套路由的实现过程
查看>>
Poi导出产生OOM解决方案
查看>>