(秋招)闭环检测流程回顾

vins中的闭环检测和重定位

回环检测的关键就是如何有效检测出相机曾经经过同一个地方,这样可以避免较大的累积误差,使得当前帧和之前的某一帧迅速建立约束,形成新的较小的累积误差。由于回环检测提供了当前数据与所有历史数据的关联,在跟踪算法丢失后,还可以利用重定位。

在vins中重定位模块主要包含回环检测,回环候选帧之间的特征匹配,紧耦合重定位三个部分。

A.回环检测(只对关键帧)

1、采用DBoW2词袋位置识别方法进行回环检测。经过时间空间一致性检验后,DBoW2返回回环检测候选帧。

2、除了用于单目VIO的角点特征外,还添加了500个角点并使用BRIEF描述子,描述子用作视觉词袋在数据库里进行搜索。这些额外的角点能用来实现更好的回环检测。

3、VINS只保留所有用于特征检索的BRIEF描述子,丢弃原始图像以减小内存。

4、单目VIO可以观测到滚动和俯仰角,VINS并不需要依赖旋转不变性。

这部分回环检测的内容是在进行完回环候选帧匹配之后做的事情。

B.回环候选帧之间的特征匹配

1、检测到回环时,通过BRIEF描述子匹配找到对应关系。但是直接的描述子匹配会导致很多外点。

2、本文提出两步几何剔除法:

1)2D-2D:使用RANSAC进行F矩阵测试,

2)3D-2D:使用RANSAC进行PnP,基于已知的滑动窗特征点的3D位置,和回路闭合候选处图像的2D观测(像素坐标)。

当内点超过一定阈值时,我们将该候选帧视为正确的循环检测并执行重定位。

在vins中角点使用的是harris角点,然后这个地方的创新版本是Shi-To啥啥啥的一个角点,然后这里进行了brief描述子的计算,这个地方就是为了进行回环检测才进行的描述子的相关操作。同时需要注意,在回环的时候,角点的数量是增加的,一般来说光流也就追踪100个左右角点来进行运动估计,这里的话角点的数量是需要注意的。然后这里还进行了一步外点剔除的操作。这里的使用RANSAC进行F矩阵或者pnp就是基于F矩阵或者pnp,然后首先根据它们之一的公式来计算出一个模型,把其他点带到这个模型里面,计算内点和外点的数量来对模型的参数进行调整,通过不断调整模型,使得内点的数量增加,然后模型逐渐稳健,此时便完成了外点剔除的操作。这个思想就是用RANSAC来实现的,也即叫做了使用RANSAC进行F矩阵或者PnP的外点剔除方法。

C.紧耦合重定位

1、重定位过程使单目VIO维持的当前滑动窗口与过去的位姿图对齐。

2、将所有回环帧的位姿作为常量,利用所有IMU测量值、局部视觉测量和从回环中提取特征对应值,共同优化滑动窗口。

重定位就是说当系统遇到异常的时候,然后根据当前帧与历史帧之间的关系来恢复出当前所在的位置,并继续进行建图。

(秋招)闭环检测流程回顾_第1张图片

编辑切换为居中

添加图片注释,不超过 140 字(可选)

作者画的流程图,仅供参考

最后做个总结:

回环检测首先找到回环候选帧,然后针对局部地图进行回环匹配,将局部地图中的相关关键帧拉到对应的位置,最后针对全局地图进行闭环误差的传播,也即将误差加权到每个node上面,来调整全局地图的位置。这样就缓解了slam运行过程中产生的累积误差,使得建图和定位能够更加精确。针对不同的视觉slam系统,可能对闭环上面的处理多多少少有些区别,比如vins里面需要继续提取角点,并进行brief描述子匹配,同时还要引入ransac来对外点进行剔除。这都是一些提高闭环鲁棒性的做法,不同的视觉slam系统有不同的做法。(当然这些做法也是有目的性的,有的专门减少计算量,有的专门提升精度,反正各有各的目的,这个需要斟酌~)

 

你可能感兴趣的:(算法)