@
一、Atlas 多地图的表示
1.1 Atlas(地图集)
Atlas(地图集)
(图1)由几乎无限数量的地图组成,每个地图都有自己的关键帧、地图点、共视图和生成树。每个地图参考帧固定在建立这个地图时的第一个相机中,并且它独立于ORBSLAM中的其他地图参考。传入的视频只更新地图册中的一个地图,我们称之为活动地图(active map),我们将其余地图称为非活动地图(non active map)。该图集还包含一个所有地图的唯一DBoW2识别数据库,该数据库存储识别任何地图中任何关键帧的所有信息。
我们的系统有一个单一的位置识别步骤来检测公共地图区域,如果它们都在活动地图中,它们对应一个闭环,而如果它们在不同的地图中,它们对应一个地图合并。
1.2 新地图创建标准
当相机 tracking被认为丢失时,我们尝试在地图册中重新定位。如果在几帧内重新定位失败,活动地图将变为非活动地图并存储在地图册中。然后,启动新的地图初始化。
为了确定相机是否在轨道上,我们试探性地提出了两个必须满足的规定,否则,相机将被视为丢失:
a) 匹配特征数:当前帧与局部地图中的点之间的匹配数高于定义的阈值。
b) 相机姿态可观测性:如果检测点的几何条件较差,则相机姿态不可观测,相机定位估计不准确。
1.3 相机位姿可观测性
我们从相机的位姿误差协方差估计可观测性。我们假设地图点是被完美的估计的,因为没有办法实时地计算每一帧的地图点的协方差。测量的信息矩阵(oldsymbol{Omega}_{i, j})编码了地图点(j)在相机(i)种的观测(x_{i,j})的不确定度。它与检测到图像FAST特征点的图像分辨率成比例地调整。相机(i)的不确定性是用 (m_i)点来估计的,其中(m_i)是相机(i)中与地图点匹配的特征点数。
我们用(hat{mathbf{T}}_{i, w} in operatorname{SE}(3))变换估计相机的6自由度位姿。此外,我们通过6个参数 (epsilon_{i})的无偏高斯向量对其不确定性进行编码,该无偏高斯向量定义了近似于(mathbf{T}_{i,omega})和(hat{mathbf{T}}_{i,omega})的李代数:
协方差矩阵(C_i):相机i位姿估计的准确度.
(J_{i,j}):相机i中的地图点j的观测导致的相机位姿测量的雅可比矩阵
由于平移是弱可观测量,我们建议在准则中仅使用与平移误差相对应的(mathbf{C}_i)对角线值:
1.4 在多地图中的重定位
和ORB2中一样,如果相机跟踪丢失,我们使用帧来查询地图集DBoW数据库。这个查询可以在任何地图中找到更相似的关键帧。一旦我们有了候选的关键帧、建图和假定的匹配映射点,我们就执行下面的重新定位[1]。它包括通过第一个PnP和RANSAC步骤稳健地估计相机位姿,然后进行匹配的引导搜索和最终的非线性相机位姿优化。
二、无缝的地图拼接
为了检测地图合并,我们使用ORBSLAM位置识别步骤。为了降低误报风险,该算法对由共视图连接的三个关键帧进行重复位置识别。此外,在合并过程中,活动地图会吞并已找到公共区域的其他地图。合并完成后,合并的地图将完全替换这两个合并地图。必要时,我们将使用a、s和m子索引分别代表活动的、吞入的和合并的地图。
- 两个地图之间公共区域的检测。位置识别提供了两个匹配的关键帧(K_a)和(K_s)以及两个地图(M_a)和(M_s)中的点之间的一组假定匹配.
- 对准变换的估计。正是这种变换,立体视觉中的(SE(3))或单目中的(Sim(3)),将两个合并地图的全局参照对齐。我们结合Horn方法[21]和RANSAC,从(M_a)和(M_s)地图点之间的假定匹配计算初始估计。我们将估计的变换应用于(K_s)的引导匹配阶段,在(K_s)中匹配(M_a)的点,最后通过对重投影误差的非线性优化来估计(mathbf{T}_{W_a,W_s})。
- 融合合并的地图。我们将(mathbf{T}_{W_a,W_s})应用于(M_s)中的所有关键帧和地图点。然后,我们检测出重复的地图点并将其融合,从而得到从(M_s)和(M_a)中的关键帧观测到的地图点。然后,我们将所有(M_s)和(M_a)关键帧合并,并将点映射到(M _m)。此外,我们还将(M_s)和(M_a)生成树以及可测图合并到(M_m)的生成树和共视图中。
- 拼接区域的局部BA。根据(M_m)共视图,它包含了所有与(K_a)共视的关键帧。为了固定尺度自由度(参数 s),在(M_a)中固定的关键帧在局部BA中仍保持固定,而其余关键帧在非线性优化过程中自由移动。我们应用第二个重复点检测和融合阶段更新(M_m)的共视图。
- 位姿图优化。最后,我们对(M_m)展开了位姿图优化
合并在与跟踪线程、局部建图线程并行的线程中运行,偶尔也运行一个全局约束调整线程(上图)。在开始合并之前,局部建图线程将停止,以避免在地图集中添加新的关键帧。如果一个全局约束调整线程正在运行,它也会停止,因为BA正在运行的生成树将被更改。跟踪线程保持在旧的活动地图上运行,以保持实时操作。完成地图合并后,我们继续局部建图线程。全局约束调整(如果已停止)将重新启动以处理新数据