这篇博客
ORBSLAM-Altas
这个系统
系统方法
两类子地图
ORBSLAM-Atlas系统会保留两类子地图:Active map和Non-active map。其中Active map是当前跟踪线程所使用的地图(Active Map >=Local Map),Non-active则是之前跟踪丢失后保留下来的所有地图。如果Active map与Non-active map存在闭环,那么就会将两个存在闭环的地图融合起来,然后系统使用融合后的地图作为新的Active map使用。
每个子地图都是独立的,它们的第一参考帧也都是独立的。系统使用一个能够适应于所有子地图的DBoW2词袋来描述每一个子地图,以便完成地图融合操作。
这种做法的好处有:
1、在跟踪丢失后系统通过创建新的地图来继续工作;
2、构建多个子地图可以降低误差的累积;
3、所有子地图融合后获得完整地图。这个融合后的地图相比于ORB-SLAM构建的一整个地图,在精度方面会有所提高(有部分原因是剔除了一些精度较低或是跟踪丢失的轨迹)。
新地图的构建
相机位姿的可观测性
通过相机位姿的误差协方差来估计其位姿的观测性。首先假设 Active map 中的地图点都是精确的,然后用 Ω i , j \Omega _{i,j} Ωi,j表示地图点观测 x i , j x_{i,j} xi,j的不确定性,其中 x i , j x_{i,j} xi,j表示的是地图点 j j j 在第 i i i 个相机上的观测值。
定义 T ^ i , w ϵ S E ( 3 ) \hat{T}_{i,w} \epsilon SE(3) T^i,wϵSE(3)是当前相机的位姿估计值,用 ε i \varepsilon _{i} εi表示估计值的不确定性( ε i \varepsilon _{i} εi是六维向量且服从均值为0的高斯分布)。然后有以下式子:

其中 C i C_{i} Ci表示估计位姿的精度, J i , j J_{i,j} Ji,j是第 i 个相机的位姿估计值关于第 j 个地图点的雅可比矩阵。然后通过 公式 (1) 就能判断相机的可观测性了:

子地图融合
如果在两个地图之间检测到了闭环,那么就要进行地图融合。然后用融合后的地图替换掉那两个地图。下面介绍具体的融合方法,以及融合后的优化操作。以下用 a , s , m a , s , m a,s,m 下标分别标记:Active map,Non-active map和融合后地图(用 a 地 图 a地图 a地图表示Active map, s 地 图 s地图 s地图表示Non-active map, m 地 图 m地图 m地图表示融合后的地图)。
1、检测到Active 和Non-active 两地图间的闭环,产生两个匹配的 K F s : K a , K s KFs:Ka,Ks KFs:Ka,Ks,以及两个地图间匹配的地图点集合 M a , M s Ma,Ms Ma,Ms。
2、估计两个地图之间的对齐变换矩阵。对齐变换矩阵(在双目情况下属于 S E 3 SE3 SE3,单目则是 S i m 3 Sim3 Sim3)用来完成 s 地 图 s地图 s地图中地图和关键帧到 a 地 图 a地图 a地图坐标系的转换。具体分为两步:
1)通过 M a Ma Ma和 M s Ms Ms这些匹配的地图点来进行初始估计,并用 RANSAC 算法提高估计值精度。
2)再根据 M a Ma Ma在 K s Ks Ks 上的匹配点,构建重投影误差。最后由非线性优化来优化重投影误
差,以获得最终的位姿估计值。
3、融合子地图:完成地图对齐后,将两个地图中重叠的地图点进行融合、更新,获得精度更高的地图点。两个子地图的可视图也保留在融合后的 m 地 图 m地图 m地图中。
4、在子地图的闭环部分进行局部 BA 优化。在融合后的 m 地 图 m地图 m地图中,找到 K a Ka Ka和 K s Ks Ks。根据 a 地 图 a地图 a地图原有的可视图,确定 a 地 图 a地图 a地图中哪些 K F s KFs KFs是固定的(不再 Local Map 中)。这些固定的 K F s KFs KFs在 m 地 图 m地图 m地图中仍然固定。然后对 m 地 图 m地图 m地图中剩余的 K F s KFs KFs进行 BA 优化。
5、对 m 地 图 m地图 m地图 进行完整的位姿图优化。
如果是在Active map中检测到闭环,那么就和ORB-SLAM中的操作一样,只对Active map进行闭环操作。
系统线程
论文还提到了各线程之间的一些关系。地图融合会在一个单独的线程中进行。在融合开始前,会将Local Mapping线程暂停,以防止新的 K F KF KF产生。在地图融合的过程中,跟踪线程会继续使用 Active map 来达到实时工作的目的。当融合结束后,跟踪线程会将融合后的地图作为新的 Active map 来使用。
结尾
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210277.html原文链接:https://javaforall.net
