ORB-SLAM3一经提出便广受好评(与上一代时隔3年,2020年推出),不仅适用范围扩大,而且精度、速度、鲁棒性都大大得到扩展。ORB-SLAM3还是延续了ORB-SLAM1、2的一贯思路。但整体来看,3和2的区别要远大于2和1的区别。这篇文章主要介绍3的一些改进。ORB-SLAM3兼容纯视觉、视觉惯性融合、构建多地图。
先把3的系统结构图摆出来:
从系统结构图上可以看出,ORB-SLAM3引入了IMU模块,同时增加了ATLAS部分,其余没有太大的变化。
下面介绍一下ORB-SLAM3新增加的一些特点(很多特点不是ORB-SLAM3首创,但是将其做了融合):
1.引入IMU与视觉结合(VO→VIO),精度更好。在IMU初始化阶段引入MAP(最后验概率估计),初始化方法实时快速进行(IMU的初始化目的是为了给惯导的变量提供良好的初始值:机体速度、重力方向、还有IMU的偏置),鲁棒性和速度上很大提升。适用于大小场景,室内/外。
2.在place recognition处做改进,实现多子地图系统(multi-maps)。跟丢的时候重建子地图,回环的时候和之前的子地图进行合并,
3.ORB-SLAM3 是第一个可以重用历史所有算法模块的所有信息的系统(第一个同时利用短期、中期、长期数据进行数据关联的系统)
4.引入Atlas,Atlas代表一系列不连续地图,可用于所有建图过程。实现了用不同时间数据构建地图。Atlas可应用于重定位,闭环检测和地图融合。Atlas中维护两个地图(active map和non-active map),active map可以定位新的关键帧,并在local mapping中不断更新该地图。若active-map在一段时间内,没有重定位等事件就会变成non-active map,新的关键帧会被加到active-map中
5.引入相机模型,提供了针孔模型和鱼眼模型。
注:想对相机模型有个快速了解,可以看看这个:相机模型(camera model)
6.将双目相机看作为两个单目相机。面向未矫正的双目SLAM,适用面更广
7.为了适应于慢速条件下的地图初始化,令其快速收敛。提出一种新的尺度优化方法,这种方法基于改进的单惯导的优化方法,其中插入所有关键帧,但尺度和重力方向是唯一的估计参数。
8.提出了一个在长期和混合地图数据关联的时候改进召回率的新场景重识别算法:设置多个跟踪丢失状态。设定跟踪少于15个点的时候进入短期失败状态。短期失败利用IMU读书估计位姿,将MP投影到相机位姿上,再在图像窗口中做匹配。匹配成功则跟踪成功。5s内没恢复,进入长期失败状态,重新进行VIO的初始化构建一个地图作为active map(Atlas的作用),以上整个过程由tracking线程完成
9.VIO模式下,在优化中加入惯性残差来估计刚体速度和IMU偏差
10.回环检测线程工作方式转变:当加入一个新的关键帧时,该线程在active-map和Atlas地图中检测公共区域。如果该公共区域属于active-map,进行回环矫正(与之前版本相同)。如果公共区域属于其他地图(Atlas中的离散地图,即non-active map),则将两者融合作为新的active-map。
11.Altas使用词袋模型建立关键帧数据库,后续的重定位、回环检测、地图融合都要用到该库(凡是要搜索之前的KF都要用到)
12.ORB-SLAM3为了解决全图优化工作量大的问题,使用滑动窗口思想,把关键帧及地图点的滑动窗口作为优化变量
实现思路:ORB-SLAM3保持以KF为基本的数据结构,但将地图分为active-map和non-active-map。这部分的主要工作都是围绕ATLAS完成。avtive可变成non-active,所有non-active得到保存。所以在后续的重定位部分,可以利用所有的历史信息。另外引入了IMU模块,需要对IMU信息进行处理(IMU融合、IMU初始化、IMU尺度改进)。其余整个识别过程与ORB-SLAM1基本相同。
作者原文中提到的创新点有两个(但我觉得不止两个~):
1.IMU初始化阶段引入MAP
2.place recognition部分(利用ATALS),与历史数据结合,大大提高召回率。对重定位、回环检测、地图融合都会产生影响
ORB-SLAM3开源代码网址为:
https://github.com/UZ-SLAMLab/ORB_SLAM3
补充说明:
1.IMU的作用:IMU可以测得角速度和加速度,用于短时间内快速运动的位姿估计(弥补快速运动时相机运动模糊的缺点)。但IMU测量的量都会存在明显漂移,位姿数据不可靠。所以IMU只是一个辅助作用。另外当图像发生变化时,纯视觉无法确定是自身移动还是外部变换,而IMU确定判断自身状态,得到结论。
系列相关参考文章:
ORB-SLAM介绍(无源码版本)
ORB-SLAM2和ORB-SLAM的区别
参考文献:
一文详解ORB-SLAM3 (360doc.com)
【开源方案共享】ORB-SLAM3开源啦!
ORB-SLAM3整体梳理 - 知乎 (zhihu.com)
因作者水平有限,如有错误之处,请在下方评论区指正,谢谢!