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 中配置滤波器参数. 一. ...
随机推荐
- 趣谈Linux操作系统学习笔记:第二十八讲
一.引子 磁盘→盘片→磁道→扇区(每个 512 字节) ext* 定义文件系统的格式 二.inode 与块的存储 1.块 2.不用给他分配一块连续的空间 我们可以分散成一个个小块进行存放 1.优点 2 ...
- 终结 finalize() 和对象引用
一.finalize() 方法 1. 为什么要有 finalize() 方法? 假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由 new 分配的内存,所以他 ...
- 解决root用户下都无权限操作的问题
问题现象: 有时系统设置了一种文件,无法编辑其所有权 sudo chown users:username {filename} 或者root用户下执行 chown users:username {f ...
- tf.contrib.slim模块简介
原文连接:https://blog.csdn.net/MOU_IT/article/details/82717745 1.简介 对于tensorflow.contrib这个库,tensorflow官方 ...
- Docker - 创建镜像(二)
实际工作中,我们可能需要自己去创建一个docker镜像,下面给大家介绍如何创建docker镜像 1. 创建一个最简单的镜像 准备Dockerfile文件 [root@dockhost ~]# mkdi ...
- oracle学习笔记(十七) PL/SQL高级应用
PL/SQL高级应用 动态SQL 在PL/SQL中,不能直接执行DDL(create,alter,drop),得使用动态SQL,当然,除了DDL,动态SQL也可以执行DML(select,insert ...
- Razor 进度的变速
视频录制了 .但发现 进度太慢了,对于当下市场 和我们的学习进度基本不会成正比关系了.所以,改一下 我们教程的实现方式. 我和大家 一起 看一下关联的技术的点, 提出我们要做的 内容 动手实践, 可能 ...
- python基础(34):线程(二)
1. python线程 1.1 全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Py ...
- python3 对list对象的增删改查
class peoples: people_list =[] class people: name='' age=-1 def __init__(self,name,age): self.name = ...
- 使QScrollArea的背景透明,并且不影响子控件
使QScrollArea的背景透明,乍看很easy,其实却是一个目前百度上百不出来的问题; 最容易想到的,用qss: scrollArea->setStyleSheet("backgr ...