ORB-SLAM2初步--局部地图构建

一、局部地图构建简介

  为什么叫“局部”地图构建,我的理解是这个线程的主要任务是像地图中插入关键帧(包括地图点等信息),以及需要进行LocalBA优化一个局部地图,这是相对于回环检测时进行的全局优化来说的,所以称为局部地图构建。而局部地图构建的主要任务就是上面说的,等待跟踪过程判断是否应该插入一个新的关键帧,并把关键帧插入到地图中,并对局部地图(跟踪过程中有一个局部地图跟踪)进行BA优化。具体细节包括三角化3D点,3D点的融合匹配,关键帧插入等。

二、局部地图构建逻辑分析

  

  根据跟踪过程中的关键帧判定函数判断是否插入关键帧,生成一个关键帧队列,这个队列中都是待插入地图的关键帧;首先判断该线程是否正在执行插入关键帧的操作(上一个关键帧插入没有完成),然后计算当前关键帧的BoW向量、共视关系等信息并插入地图;每个关键帧都附带有特征点和描述符等信息(跟踪过程中使用到的),但是并不是所有的特征点都会成为3D地图点,因此需要剔除一些不合格的点,然后通过三角化创建地图点;接下来判断关键帧队列中是否仍有关键帧,如果没有(线程不是很忙)则进行3D点融合、LocalBA、冗余关键帧剔除等优化操作,而如果线程比较忙,则直接执行插入关键帧到闭环检测队列的操作(每一个关键帧都会判断是否遇到闭环);最后更改线程状态。

  局部建图线程一开始看比较乱,但是只要弄清楚了地图中包含哪些信息(如上图所示)逻辑上还是比较清楚的,就是把当前关键帧(包括MapPoints,Features等信息)插入到地图中,并更新一下这个关键帧和其他关键帧之间的共视关系以及关键帧和地图点的观察关系等,但是有些地图点或关键帧经过判断之后显得多余或不合适(如这个关键帧的点几乎都能在其他关键帧上找到,或者这个关键帧上的点在其他关键帧上几乎找不到),就需要删除它,还有的3D点可能由于三角化误差的关系,本来是一个点,被三角化成了两个距离比较近的点,就需要进行融合等。

  局部地图和前面的跟踪和后面的回环检测都有联系,关键帧是通过跟踪线程产生的,而局部地图进行LocalBA的条件是没有发现回环以及关键帧队列为空。这里地图包含的要素对保存和加载地图也是很有帮助的。

三、总结

  相比跟踪过程,逻辑上比较简化,但是代码并不简单。分析关于局部地图的更新量对于地图的保存与加载也是很有帮助的,后面还会给出ORB-SLAM的地图保存与加载的分析。

时间: 2024-10-10 04:11:11

ORB-SLAM2初步--局部地图构建的相关文章

ORB SLAM2在Ubuntu 16.04上的运行配置

安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get install libgl1-mesa-dev2. 安装opengl utility$sudo apt-get install libglu1-mesa-dev3. 安装opengl utility toolkit$sudo apt-get install freeglut3-dev 安装GLEW $sudo apt-get install libglew-dev 安装boost $sudo apt-g

为android游戏开发-准备的地图编辑器-初步刷地图

采用多文理混合,单页面支持8张文理进行刷绘 为android游戏开发-准备的地图编辑器-初步刷地图,布布扣,bubuko.com

ROS中利用V-rep进行地图构建仿真

V-rep中显示激光扫描点  在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→components→sensors中找到SICK TiM310 Fast激光雷达,拖入场景中: 打开脚本参数修改器,可以修改雷达扫描范围(默认为270°),是否显示雷达扫描线(true),以及最大探测距离(默认为4m)这三个参数.地图大小为5m×5m,我们将雷达最大探测距离改为2m 将激光雷达放到地图中任

可以初步显示地图了

通过使用Tangram默认的OSM, 已经可以成功显示地图了, 地图配色惨了点, 留作以后修改吧. 使用Tangram显示地图很简单, 只需要new一个Tangram::Map, 并load一个预定义的Scene, 然后设置一个合适的camera位置就可以了. m_map = new Tangram::Map(); m_map->loadSceneAsync(scene.toStdString().c_str(), false); m_map->setPosition(117.13788604

自学tensorflow——1.框架初步了解以及构建简单的计算图计算

1.初步了解 tensorflow是谷歌的一款开源深度学习框架.运行前,需要先定义好计算图,最后通过会话启动计算图,这么做的目的是为了防止数据在python和c++(tensorflow底层)传输的时间浪费. 2.tensorflow安装 pip install tensorflow 即可,如果想用gpu版的,需要先安装CUDA和cuDNN,然后在pip install tensorflow-gpu 3.实战a + b程序 首先导入tensorflow模块: import tensorflow

maven结合的初步项目模块构建

我们通过自己的学习其实能够了解到maven是依赖管理和项目构建的工具 所谓的依赖管理就是我们再也不用人为的引入jar包了,那么正常情况下一个小项目里jar包所占的空间远比自己所写的代码的空间多,使用maven这是第一个很方便的点,我们最后只需要再pom.xml中引入对应的jar包的版本即可 而项目构建这个其实对于晓得项目来说我感觉没啥用,是浪费时间的一件事,但是一旦我们的项目的级别大到不是一两个人能够主宰的那种情况的话,那么maven的模块化其实是应对任务分配非常有用的一个工具了,拿普通的一个j

Android 室内定位系列:<1>地图构建

Path类可以预先在View上将N个点连成一条"路径",然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形 Android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类 ComposePathEffect CornerPathEffect DashPathEffect DiscretePathEffect PathDashPathEffect SumPathEffect 下面的示例将会逐一使用上面的绘制效果 [ja

移动机器人基于激光测距和单目视觉的室内同时定位和地图构建

http://xueshu.baidu.com/s?wd=paperuri%3A%286ec0c710a55db8005c1e96aed4da573a%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Fwww.docin.com%2Fp-467056708.html&ie=utf-8&sc_us=4978913166735293523

ORB SLAM2运行中出现(ORB-SLAM2: Current Frame:14370): GLib-GIO-CRITICAL...的n问题

在Ubuntu16.04上安装ORBSLAM2,参考文档:http://www.cnblogs.com/wongyi/p/8596084.html 执行代码: ./Examples/Monocular/mono_tum  Vocabulary/ORBvoc.txt  Examples/Monocular/TUM1.yaml  ../rgbd_dataset_freiburg1_xyz 然后它就正常执行了,但是不明白为什么中间输出的信息中含有大量的以下代码:(我是已经安装了OpenGL并且按照ht