利用鲁棒的地图融合方法解决不限数量的子地图融合问题,Altas使SLAM系统变的更加的精准和鲁棒。在tracking线程跟踪失败的时候,系统会构建一个新的子地图。当该地图和先前的子地图有共同部分的时候就会进行地图融合。针对原来的方法中只舍弃特征点数量少的帧,我们也舍去位姿估计不准的帧来构建更加精准的子地图。
Screenshot from 2020-09-26 08-31-13.png
altas由无数的子地图组成,每个子地图有自己的关键帧、地图点、共视图和最小生成树。每个地图的参考帧是第一帧上。新来帧只更新altas中的一个地图(active map)。altas中也保存了特别的地图的词袋数据库来识别关键帧。本系统有一个单独的场景重识别的模块,如果两个关键帧都来自active map就会执行闭环检测,如果在不同的地图中就会执行地图融合。
当相机跟踪失败就开始进行重定位,如果重定位过了一段时间也不成功,active map变成了unactive map存储在了altas中。然后一个新地图被初始化,具体的过程参考ORB-SLAM2和ORB-SLAM中的地图初始化过程。评判tracking是否失败的标准:
利用位姿的协方差矩阵来估计相机的observability,假设每个地图点都估计的很准确,因为不能实时的计算每一帧地图点的协方差矩阵。信息矩阵Ωij表示第j个地图点在第i帧中的不确定性。相机i的不确定性是由其和局部地图匹配的特征点决定的。估计相机六自由度位姿为T? _i,w,属于李群。除此之外,利用6个参数εi的无偏高斯向量对位姿的不确定性进行编码,该向量定义了在T? _i,w周围逼近位姿真值的李代数:
其中Exp(ε_i)把一个六维的向量直接转换为了李代数,其协方差矩阵C编码为相机位姿估计的准确性,而J矩阵为相机位姿对观测的地图点的雅各比矩阵。由于平移的幅度很小,所以在评判中仅用C的对角线上表示误差的值。
如果相机跟丢了,利用当前帧查询Atlas DBoW的数据库。这个查询能在所有地图中找相似的关键帧。一旦有了候选关键帧,地图和匹配的地图点,就可以按照ORB-SLAM中进行重新定位。主要包括利用PnP进行鲁棒的位姿估计和RANSAC阶段,然后进行匹配搜索、进行只优化位姿的非线性优化。
执行ORBSLAM中的场景重识别来检测相似的地图进行融合,场景重识别的过程中需要检测和共视图中关键帧相连的三个关键帧来避免假阳性的检测。另外在地图融合的过程中,active map和具有共同区域的其他地图合并,然后用合并完的地图作为active map。
地图融合线程和tracking线程并行运行,在融合之间有时候会触发全局BA,这时候局部建图会停止来避免在atlas中加入新的关键帧。如果全局的BA线程在运行,局部建图也会停止,因为生成树在BA后会发生改变。tracking线程会在旧的active地图中保持实时的运行。一旦地图融合完成,就重启局部建图线程。全局BA结束了以后也会重启局部建图线程来接收新的数据。
本文仅做学术分享,如有侵权,请联系删文。