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

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

局部建图线程一开始看比较乱,但是只要弄清楚了地图中包含哪些信息(如上图所示)逻辑上还是比较清楚的,就是把当前关键帧(包括MapPoints,Features等信息)插入到地图中,并更新一下这个关键帧和其他关键帧之间的共视关系以及关键帧和地图点的观察关系等,但是有些地图点或关键帧经过判断之后显得多余或不合适(如这个关键帧的点几乎都能在其他关键帧上找到,或者这个关键帧上的点在其他关键帧上几乎找不到),就需要删除它,还有的3D点可能由于三角化误差的关系,本来是一个点,被三角化成了两个距离比较近的点,就需要进行融合等。
局部地图和前面的跟踪和后面的回环检测都有联系,关键帧是通过跟踪线程产生的,而局部地图进行LocalBA的条件是没有发现回环以及关键帧队列为空。这里地图包含的要素对保存和加载地图也是很有帮助的。
三、总结
相比跟踪过程,逻辑上比较简化,但是代码并不简单。分析关于局部地图的更新量对于地图的保存与加载也是很有帮助的,后面还会给出ORB-SLAM的地图保存与加载的分析。
ORB-SLAM2初步--局部地图构建的更多相关文章
- Slam(即时定位与地图构建) 知识篇
Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...
- ROS 八叉树地图构建 - 安装 octomap 和 octomap_server 建图包!
项目要用到八叉树库 Octomap 来构建地图,这里记录下安装.可视化,并启用带颜色的 Octomap 的过程. 一.Apt 安装 Octomap 库 如果你不需要修改源码,可以直接安装编译好的 oc ...
- 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)
SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...
- orb slam2 双目摄像头
主要参考了http://blog.csdn.net/awww797877/article/details/51171099这篇文章,其中需要添加的是:export ROS_PACKAGE_PATH=$ ...
- ORB SLAM2在Ubuntu 16.04上的运行配置
http://www.mamicode.com/info-detail-1773781.html 安装依赖 安装OpenGL 1. 安装opengl Library$sudo apt-get inst ...
- ROS中利用V-rep进行地图构建仿真
V-rep中显示激光扫描点 在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...
- 关于ORB SLAM2资源整理(持续更新)
ORB SLAM2源码讲解(吴博) https://www.youtube.com/watch?v=2GVE7FTW7AU 泡泡机器人视频整理: http://space.bilibili.com/3 ...
- ROS 八叉树地图构建 - 使用 octomap_server 建图过程总结!
构建语义地图时,最开始用的是 octomap_server,后面换成了 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.增量构建八叉树地图步骤 为 ...
- ROS 八叉树地图构建 - 给 octomap_server 增加半径滤波器!
为了在每帧点云中滤除噪声点,选择了半径滤波器,也用高斯滤波器测试过,但是没有半径效果好,这里记录下在 octomap_server 中增加半径滤波器的步骤,并在 launch 中配置滤波器参数. 一. ...
随机推荐
- CF1269A Equation
题目链接 题意 要找两个合数,使他们两个的差为\(n\),\(n\)为题目给出的数 思路 我们可以枚举减数\(now\),判断一下是不是质数,如果是质数就让\(now++\),然后用一个数\(tot\ ...
- 无限可能,Elasticsearch(一)
这个世界已然被数据淹没.多年来,我们系统间流转和产生的大量数据已让我们不知所措. 现有的技术都集中在如何解决数据仓库存储以及如何结构化这些数据. 这些看上去都挺美好,直到你实际需要基于这些数据实时做决 ...
- css兄弟选择器,+ ~选择器的区别
壹 ❀ 引 实习生在写搜索框下拉提示时,遇到了不知道怎么解决的问题,所以来问我.效果不难,鼠标选中输入框(focus)时,展示搜索关键字相关提示,看了眼dom结构是这样的: 在她的理解里面,选中父元 ...
- 《Head First C#》外星人入侵WPF编写源码
目录 引言 前期工作 只要努力没有什么困难可以难倒你,加油骚年! @(外星人入侵(WPF编写)) 引言 自学的C#,看了几本教材讲的都是程序代码,网上找的也有视屏,但都比较老了.只会打些代码为不晓得为 ...
- wpf 单例模式和异常处理 (原发布 csdn 2017-04-12 20:34:12)
第一次写博客,如有错误,请大家及时告知,本人立即改之. 如果您有好的想法或者建议,我随时与我联系. 如果发现代码有误导时,请与我联系,我立即改之. 好了不多说,直接贴代码. 一般的错误,使用下面三个就 ...
- git clone和git pull的区别
1.需不需要本地文件夹是仓库 git clone是将整个工程复制下来所以,不需要本地是仓库(没有.git文件夹) git clone git pull需要先初始化本地文件夹文一个仓库 git ...
- 在Vue-cli3.x中引入element-ui的新方式
今天登上element官网,发现element对vue-cli3.x的项目做了特殊定制: 这意味着即使是按需引入,也无需像过去那样手动安装babel-plugin-component,配置babel. ...
- MySQL基于报错注入1
0x1 判断注入点: http://www.xxxx.ro/s.php?id=1' 那么尝试闭合下单引号 http://www.xxxx.ro/s.php?id=1' --+ 0x2 枚举下表的列 h ...
- vue组件懒加载
vue2组件懒加载浅析 一. 什么是懒加载 懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. 二.为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大, ...
- Eclipse为不同的文件类型设置编码格式和编辑器
不知道大家遇到项目中编码格式不统一的情况没有,哈哈,我们就是,比如java的编码格式是GBK,html等编码是UTF-8,这样会导致很多问题,比如提交了一个UTF-8的java文件到SVN,会导致后端 ...