前言
距离上一次博客更新已经过去了N年。。。
ORB-SLAM2继续更新,这真的是有生之年系列。
ORB-SLAM3在2的基础上,引进了IMU的初始化和融合估计,以及子地图功能。笔者目前 IMU 相关的知识相对比较薄弱,因此准备在第十四讲的时候再为大家介绍VI-ORBSLAM相关的内容。本讲主要关心的是纯视觉的子地图融合功能。
ORB-SLAM子地图简介
ORB-SLAM3使用子地图的原因是:当我们在跟踪丢失的情况下,不至于在唯一的一张地图中疯狂重定位。因为重定位的结果只有两个,一个是马上重定位成功,那么这是最理想的情况,我们可以继续进行环境探索;另一种就比较吃亏了,我们一直无法重定位成功,最终的结果就是系统判断当前跟踪状态为跟踪丢失,系统会直接将之前所重建的环境信息全部清除!重新生成一张地图。
这意味着什么?这就好比我们辛辛苦苦在word里面写了成千上万字的文档,word一个bug直接把你所有的数据清空了,你还找不回,只能从头写那么头疼!
那么解决的策略是啥?ORB-SLAM3就提出用子地图的方案!那么子地图好在哪里?我们还是以word为例:
当我们写了成千上万字的word文档被bug卡没以后,这部分的文字会自动存储到某个位置(历史子地图),新增的文字会写在另一个word文档中(当前子地图),当缘分来临的时候(回环检测),这两个word文档就有机会合并到一起(子地图合并),形成统一的一个word文档!oh man,想想就觉得激动人心。
ps:笔者无意针对word文档,只是因为前不久有个同事刚好因为word把文档内容卡没了,所以笔者才以此为例,xxxxxxx。。。
ORB-SLAM子地图算法
在介绍子地图功能之前,我们有几个问题需要着重关心一下:
1. 子地图功能和ORB-SLAM2中使用的单一地图的方法有什么异同?
2. 存在多个子地图的情况下,回环检测怎么做?这个方法与ORB-SLAM2中的回环检测有何区别?
3. 两个子地图怎么进行合并?
4. 合并的过程中,前端tracking到的新帧要怎么处理,此处必然会存在一个异步问题。
OK,那么我们逐个问题来回答!