关于ORBSLAM的发展脉络
ORBSLAM系列存在随机性的原因:RANSAC中随机数生成器的使用;跟踪、映射和回环闭合线程的不可预测的交织,这取决于操作系统调度程序,这种不可预测性使得在不同的执行中估计的关键帧的姿势可能不同,甚至可能选择不同的帧作为关键帧
track in local map: 相机跟踪时利用了局部地图。具体来说,先从所有关键帧中选择与当前关键帧有相同特征点的关键帧集合,之后提取每一个关键帧的共视帧的集合,然后利用两个集合的关键帧的信息进行相机位姿的跟踪。
loop detect: 回环检测共包含四个部分:选择候选关键帧,计算变换,回环融合和essential graph优化
选择候选关键帧:当每次获得一个关键帧时,都会判断是否与之前的关键帧发生了回环。采用bag of words方法进行判断是否是相同的观测场景,论文采用了一个小技巧就是首先判断了当前关键帧与其共视帧的匹配得分,其他关键帧如果低于这个得分不会判定为回环。如果某个关键帧与当前帧的匹配分数达到了阈值,还需要判断共视帧的3个关键帧是否也满足会还的条件。只有都满足时才会判定发生了回环。
计算变换:通过3D地图点计算回环时,当前帧与回环帧之间的SE(3)变换。
回环融合:将重复的地图点融合并更新共视图;通过纠正当前关键帧与当前帧相连关键帧的位姿,并进行回环帧的地图点与当前帧地图点的融合;更新融合后的共视图。
essential graph优化:通过优化,将回环得到的误差均匀分配到整个essential graph当中,纠正建图过程中积累的误差。
ORB-SLAM2在ORBSLAM的基础上,BoW字典有所变化,以及在回环检测essential graph优化后,新增了一个全局的BA进一步优化。
ORBSLAM-Atlas管理着一系列的子地图,这些子地图共用一个DBoW数据库,使得能够实现重定位回环等操作。每个sub-map都有mappoints,keyframes,covisibility和spanning tree
当相机在正常跟踪状态,所生成关键帧所在的地图称为“活动地图(active map)”。如果跟踪失败,首先将进行重定位操作寻找地图集中对应的关键帧,如果依旧失败,则重新创建一个新的地图。此时旧地图变成了“非活动地图(non-active map)”,新的地图作为活动地图继续进行跟踪和建图过程。在跟踪过程中,当前相机必然是位于活动地图当中,可能存在零或多个子地图。
每次插入关键帧时,都与完整地图的DBoW数据库进行匹配。如果发现了相同的场景,且两个关键帧同时位于活动地图,则意味着发生了回环,便按照回环的方式进行融合处理;如果匹配上的关键帧位于非活动地图,则需要将两个子地图进行拼接,这便是ORBSLAM-Atlas的创新之处。
地图无缝融合时,当前活跃的地图吞并对应的非活跃地图。通过以下步骤将非活跃地图的信息补充到当前活跃地图。具体步骤如下:
1、检测:首先由重识别模块检测出当前关键帧Ka与匹配上的待吞并关键帧Ks,并获取两个子地图当中与匹配上的两个关键帧具有共视关系的关键点和关键帧
2、位姿计算:通过Horn+RANSAC方法初步计算两个关键帧之间的变换关系,之后将待吞并地图的地图点通过这个变换投射到当前关键帧Ka上,再利用引导匹配的方法获得更丰富的匹配并进行非线性优化,获得精确的变换。
3、地图点合并:将吞并地图的关键点变换到当前关键帧位姿下,融合重复的地图点。之后将两个地图的关键帧融合,重新生成spanning tree和共视图
4、衔接区域的局部BA优化:融合后于Ka具有共视关系的关键帧参与局部BA优化,为避免gauge freedom,固定之前活跃地图中的关键帧而移动其他的关键帧。优化完成后再次进行地图点的合并于spanning tree/共视图的更新
5、完整地图的位姿图优化:对整个合并后的地图进行位姿图优化
Atlas的方法使得在跟踪丢失时能够重新创建一个地图,并在回到原有位置时利用原地图的信息,使得SLAM更加鲁棒。Atlas的方法也用在了ORB-SLAM3中
ORB-SLAM3中的地图,大致上采用了ORB-SLAM1/2和ORBSLAM-Atlas的方法完成了重定位、回环和地图融合
1、重定位:ORB-SLAM3在重定位的策略上做了一些改进。为了保证重定位不出错,重定位重重设置了严苛的条件,保证高精准率而识别率较低。旧的方法(ORB-SLAM1/2)中当3个关键帧完全匹配上后才判定为重定位成功。
然而作者发现。三个关键帧经过了很长时间。主要改进是,当当前帧于数据库的关键帧匹配上后,检测于当前关键帧具有共视关系的关键帧是否也能够匹配,如果可以则判定为重定位成功;否则才继续使用接下来的关键帧进行判定
2、视觉地图融合:视觉地图融合方式与ORB-Atlas的大致相同,对融合的区域起了一个新的名字叫做“衔接窗口(welding window)”同时指明在衔接后进行完整位姿图融合时,衔接窗口的关键帧固定以保证不会出现gauge freedom,固定之前活跃地图中的关键帧而移动其他的关键帧。优化完成后再次进行地图点的合并于spanning
3、闭环:闭环检测部分与ORB-Atlas的基本相同
关于ORBSLAM的发展脉络的更多相关文章
- HTTP协议发展脉络
1 发展脉络 1.1 1991 HTTP/0.9 建立TCP连接.客户端发送请求(只有GET命令).服务端返回请求(只能返回html格式字符串)后就关闭TCP连接 1.2 1996.5 HTTP/1. ...
- CNN目标检测系列算法发展脉络——学习笔记(一):AlexNet
在咨询了老师的建议后,最近开始着手深入的学习一下目标检测算法,结合这两天所查到的资料和个人的理解,准备大致将CNN目标检测的发展脉络理一理(暂时只讲CNN系列部分,YOLO和SSD,后面会抽空整理). ...
- 标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN
最近两周忙着上网课.投简历,博客没什么时间写,姑且把之前做的笔记放上来把... 下面是我之前看论文时记的笔记,之间copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来( ...
- C#线程模型脉络
今天在看同事新买到的<C#本质论 Edition 4>的时候,对比下以前Edtion3的新特性时针对Async/Await关键字时发现对一些线程方面的定义还理解的不是很透彻,脉络还不是很清 ...
- ***Java多线程发展简史
http://blog.jobbole.com/28297/ 本文来自四火的博客(@RayChase),由@_Zhijun 推荐 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的 ...
- [转] Java多线程发展简史
这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并 ...
- 清华大学&中国人工智能学会:2019人工智能发展报告
2019年11月30日,2019中国人工智能产业年会重磅发布<2019人工智能发展报告>(Report of Artificial Intelligence Development 201 ...
- MMC & SD 发展历史
一.概述 MMC 卡和 SD 卡都是基于 Nand Flash 技术的移动存储卡. MMC(MultiMediaCard) 卡于 1997 年由西门子和 Sandisk 推出,SD (Secure D ...
- Atitit 边缘检测原理attilax总结
Atitit 边缘检测原理attilax总结 1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. ...
随机推荐
- 一文读懂Lua元表
元表 Lua语言中的每种类型的值都有一套可预见的操作集合.例如,我们可以将数字相加,可以连接字符串,还可以在表中插入键值对等,但是我们无法将两个表相加,无法对函数作比较,也无法调用一个字符串,除非使用 ...
- npm 设置同时从多个包源加载包的方法
随着前后端分离技术的发展成熟,越来越来越多的后台系统甚至前端系统采用前后端分离方式,在大型前后端分离系统中,前端往往包含大量的第三方js 包的引用,各个第三方包又可能依赖另外一个第三方包,因此急需要一 ...
- python中时间处理标准库DateTime加强版库:pendulum
DateTime 的时区问题 Python的datetime可以处理2种类型的时间,分别为offset-naive和offset-aware.前者是指没有包含时区信息的时间,后者是指包含时区信息的时间 ...
- axios与vue-resource
在Vue项目中前后端交互时,早期Vue使用Vue-resource实现异步请求.从Vue2.0之后就不再对vue-resource进行更新,Vue官方推荐使用axios. vue-resource V ...
- Jmeter系列(3)- 常用断言之响应断言
断言的作用 确定请求是有效还是无效的 添加断言 面板模块介绍 Apply to 作用:指定断言作用范围 Main sample and sub-sample:作用于主main sample和子sub- ...
- Fiddler抓包工具-全网最全教程,没有之一
初识Fiddler fiddler,译为骗子 是位于客户端.服务器端的HTTP代理,是Web调试的利器. 是c#编写的程序 Fiddler主要功能: 监控http.https流量 查看.分析请求内容细 ...
- K8s一键安装
安装案例: 系统:Centos可以多台Master(Master不能低于3台)多台Node此案例使用三台Master两台Node,用户名root,密码均为123456 master 192.168.2 ...
- linux,apache,php,mysql常用的查看版本信息的方法
1. 查看linux的内核版本,系统信息,常用的有三种办法: uname -a: more /etc/issue; cat /proc/version; 2. 查看apache的版本信息 ...
- python继承细节
不要子类化内置类型 内置类型(由C语言编写)不会调用用户定义的类覆盖的特殊方法. 例如,子类化dict作为测验: class DoppeDict(dict): def __setitem__(self ...
- tornado中通用模版
第一: 1.Pycharm新建python项目(不是django项目),在项目下面直接新建server.py,内容如下: 2.安装tornado, pip install tornado import ...