前端提供特征点的提取和轨迹,地图的初值,而后端负责对所有这些数据进行优化。如果如同VO那样仅考虑相邻时间上的关邻,那么之前的误差将不可避免地累积到下一时刻,这样整个SLAM会出现累积误差,长期的结果将不可靠。
如上图,a表示真实轨迹,b中前端只给出相邻帧间的估计,优化后Pose Graph出现漂移 ,c添加回环检测后的Pose Graph在碰到相同特征点时可以借此消除累积误差。
1. 方法
a. 朴素类:最简单的方式就是对任意2副图像进行一遍特征匹配,根据正确匹配的数量确定哪2副图像存在关联。但盲目地假设“任意2副图像都可能存在回环”,使得检测的数量实在太大,对于N个可能的回环,我们要检测Cn2次。在大多数实时系统当中是不实用的。另一种是,随机抽取历史数据并进行回环检测,比如在n帧当中随机抽取5帧与当前帧比较,这种做法能够维持常数时间的运算量,但这种盲目试探方法在帧数N增长时,抽到回环的几率会大幅下降,使得检测效率不高。
b. 基于外观(Appearance)的回环检测。它和前端,后端的估计无关,仅根据两副图像的相似性确定回环检测关系。目前基于外观的回环检测方式以成为视觉SLAM中主流的做法,并被应用于实际的系统中去。而其核心问题:如何计算图像间的相似性。设计一种方法,计算相似性评分:s(A, B),但其中使用到的像素灰度是个不稳定的值,故该函数不能很好的反映图像间的相似关系。
c. 视觉slam一直是以人类视觉作为标准的,可目前尚未掌握人脑的工作原理。
上述借用医学上的说法。假阳性(False Positive)又称感知偏差,而假阴性(False Negative)称为感知变异。而我们希望算法与人类的判断一致,所以希望TP, TN尽量高。则对某个特定的算法,我们统计它在某个数据集上的TP,TN,FP,FN的出现次数,并计算两个统计量:准确率和召回率(Precision & Recall)