目录
根据前面的介绍,视觉SLAM前端主要是视觉里程计,负责提取特征点和轨迹,地图的初值;后端负责对数据进行优化。视觉里程计会计算前后帧之间的相对运动,这样会导致前面计算的误差会累加到下一时刻,使得SLAM出现不断增加的累计误差,无法构建全局一致的轨迹和地图。
一. 回环检测
1.1 回环检测的定义
如下图所示,当前端只给出了相邻帧间的估计,由于当前帧的位姿由上一帧的位姿加上相邻帧的相对位姿决定,所以上一帧位姿的误差就延续到了当前帧。以此类推,误差就会越累计越大,使得结果跟真实轨迹越差越远,满满趋向于不稳定。

后端虽然可以在一定程度上缓解误差问题,但是只有相邻帧的时候,对于累计误差也无法消除。这时候就要引入回环检测,来给出除了相邻帧外的,一些时隔更久远的约束。回环检测的目的就是识别相机是否经过同一个地方,采集到了相似的数据。如果成功检测,可以为后端提供额外的约束信息,使得最终的估计是一个全局一致(Global Consistent)的估计。而回环检测的关键就是如何有效的检测出相机经过同一个地方这个事。
回环检测除了为后端优化提供额外的约束条件以外,还为SLAM提供了重定位的功能。当跟踪算法失效,例如特征点丢失,这时候的就需要使用回环检测来重新定位机器人现在的位置。一般定义的SLAM问题是包括前端和局部后端优化以及回环检测的算法框架,而只有前两者的系统称为视觉里程计,即VO。
1.2 回环检测方法
对于回环检测的实现方法,最简单的就是将当前的帧的图像特征点与之前的所有的图像特征点做一遍特征匹配[1],根据匹配得分来确定是否存在回环。但是这样的问题就是随着机器人的运动,过去的图像会越来越多,盲目的假设当前帧与之前的所有帧都可能存在匹配关系会导致检测数量不断增加,算法的复杂度就是,这样对于大部分的场景是不适用的。另一个简单的办法就是,随机抽取历史帧进行回环检测,例如抽取历史中的五帧与当前帧进行对比[2],这样算法的复杂度就是一个常数。但是这样的问题就是随着轨迹不断增多,如果真的存在回环,那么抽到回环的概率会随着帧数的增长而不断减小,使得检测效率不高。(如果抽取的帧数随着帧数增大而不断增大会不会好好一点?)
另一种回环检测的方法是基于外观的,仅根据两张图像的相似度来判断是否存在回环。这种方法摆脱了累计误差,使得回环检测成为SLAM系统中一个相对独立的模块。基于外观的回环检测方法再参考文献[3]-[5]中有提到。基于外观回环检测核心问题就是如何计算图像之间的相似度:,当这个值大于某一个阈值的时候,就可以认为出现了回环。对于计算图像相似度最简单的方法就是让两个图像相减,然后取某种范数来表示相似度,例如
,但是这种方法会受到光照,相机曝光等的影响,同样当相机的视角发生改变时,即使光度不变,像素也会存在位移,导致最终匹配结果不佳。
对于相似关系函数的好坏,可以从感知偏差(Perceptual Aliasing)和感知变异(Perceptual Variablity)两个角度来讨论。
1.3 准确率和召回率
回环检测会根据检测的情况分为真阳,假阳,假阴和真阴四种情况,如下表所示:

假阳性(True Positive)又称为感知偏差,而假阴性(False Negative)称为感知变异。一个回环检测算法的优略,取决于它TP和TN的概率。所以对于特定的算法,可以在数据集中测试他的TP,TN,FP,FN的出现次数,并计算两个统计量:准确率和召回率(Percision&Recall)。


准确率描述的是回环检测算法中,检测为回环并且真是回环的概率,而召回率则是所有正确检测的回环中,回环被正确检测出的概率。通常来说,这两个量存在矛盾性。

文章详细介绍了回环检测在视觉SLAM系统中的重要性,包括其定义、方法、准确率和召回率的衡量标准。回环检测通过特征匹配和图像相似度计算来识别相机是否重复经过同一地点,以纠正累计误差并提供重定位功能。词袋模型和K-means聚类用于生成字典,进行图像特征的表示和比较。在实际应用中,还需要考虑回环验证以确保检测的准确性。
最低0.47元/天 解锁文章
1623





