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 中配置滤波器参数. 一. ...
随机推荐
- fastdfs使用总结
参考:https://www.cnblogs.com/chiangchou/p/fastdfs.html 说明:这篇博客是为了记录我在安装和使用FastDFS分布式文件系统时遇到的问题和解决方法, ...
- Mybatis框架增删改查
一.recourses中核心配置文件mybatis-config.xml 二. recourse中jdbc.properties 三.entity实体类 四.ISmbmsUserDao层 五.ISmb ...
- 写出这个数-PTA
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方. 输出格式: ...
- Drools规则引擎-如果Fact对象参数为null如何处理
问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值.但是如果在外面做输入检查,规则 ...
- node.js中this指向失效解决
问题:在外部单独使用类实例对象的方法,this没有指向该类实例对象 代码如下 class CQH { hello() { let name = this.name(); console.log(`He ...
- SQL常用函数之STR()
使用str函数 :STR 函数由数字数据转换来的字符数据. 语法 STR ( float_expression [ , length [ , ...
- go开发注意事项和dos的一些操作
不需要加分号 写法 go编译器一行一行编译,所以多条语句不能写在同一行,否则会报错 go语言定义的变量或者import的包如果没有使用到,代码不能通过编译 func main() { ... } 只能 ...
- java基础(10):继承、抽象类
1. 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系.例如公司中的研发部员工和维护部员工 ...
- File操作,访问文件或目录的属性信息
package seday03; import java.io.File;//记得导入File /** * File的每一个实例用于表示文件系统中的一个文件或目录 * 使用File可以: * 1:访 ...
- LinuxShell脚本——选择结构
LinuxShell脚本——选择结构 摘要:本文主要学习了Shell脚本中的选择结构. if-else语句 基本语法 最简单的用法就是只使用if语句,它的语法格式为: if 条件 then 命令 fi ...