前端的视觉可以给出一个增量式的地图,但由于不可避免的误差累计,这个地图在长时间内是不准确的。当前端构建的地图增长到一定程度后,累计误差会使后来的数据越来越不准确。这时我们需要把所有地图数据放到一起做一次完整的优化,从而降低各部分的误差。
后端优化有很多种方案,过去采用以扩展卡尔曼滤波(Extended Kalman Filter,EKF)为主的滤波器方案,现在大多都采用非线性优化方案。EKF由于假设了马尔可夫性质,只利用前一状态来估计当前状态的值,这有点像视觉里程计中只考虑相邻两帧的关系一样,很难做到全局的优化。而现在常用的非线性优化方法,则是把所有数据都考虑进来,放在一起优化,虽然会增大计算量,但效果好得多。(具体方法可以自行搜索了解,这个过程可以做多种措施来实行优化)
3.回环检测
在整个SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说的累计误差。我们的位姿约束都是与上一帧建立的,第五帧的位姿误差中便已经积累了前面四个约束中的误差。但如果我们发现第五帧位姿不一定要由第四帧推出来,还可以由第二帧推算出来,显然这样计算误差会小很多,因为只存在两个约束的误差了。像这样与之前的某一帧建立位姿约束关系就叫做回环。回环通过减少约束数,起到了减小累计误差的作用。
通俗的讲:怎么知道可以由第二帧推算第五帧位姿呢?也许第一帧、第三帧也可以呢。确实,我们之所以用前一帧递推下一帧位姿,因为这两帧足够近,肯定可以建立两帧的约束,但是距离较远的两帧就不一定可以建立这样的约束关系了。找出可以建立这种位姿约束的历史帧,就是回环检测。所以说回环检测问题本质上是场景识别问题,传统的回环检测通过人工设计的稀疏特征或像素级别稠密特征进行匹配,此外还有一种基于视觉相似度的检测方法。
最新的回环检测技术是基于深度学习的闭环检测技术,该方法早期主要利用预训练的 CNN 网络架构进行图像特征提取,不同层级的网络层在图像特征描述方面具有一定的差异性.Chen等首次提出了基于 CNN 模型的位置识别技术,其核心在于通过 CNN 学习图像特征表示,在其所测数据集上以 100% 的准确率提升了 75% 的召回率.作者选择 ImageNet 大赛中用以物体识别的OverFeat 神经网络模型进行图像描述。
相关论文:Convolutional neural network-based place recognition
Hou等利用 caffe 框架下的 AlexNet 模型进行特征提取,通过实验对比,发现在光照变化明显的环境下,采用深度学习的特征描述鲁棒性能优于传统特征,且特征提取更加迅速.
相关论文:Convolutional neural network-based image representation for visual loop closure detection
4.地图重建
地图重建,其实就是知道了机器人的真实轨迹,然后根据轨迹描绘出大体地图。研究主要分为如下2种地图展开:
路标地图。
地图由一堆路标点组成,EKF中的地图就是这样的。路标图尽管很方便,但是可读性不高。
度量地图
通常指2D/3D的网格地图,也就是大家经常见的那种黑白的/点云式地图。点云地图比较酷炫,很有种高科技的感觉。它的优点是精度比较高,比如2D地图可以用0-1表示某个点是否可通过,对导航很有用。缺点是相当吃存储空间,特别是3D,把所有空间点都存起来了。
拓扑地图
拓扑地图是比度量地图更紧凑的一种地图。它将地图抽象为图论中的"点"和"边",使之更符合人类的思维。比如说我要去五道口,不知道路,去问别人。那人肯定不会说,你先往前走621米,向左拐94.2度,再走1035米……(这是疯子吧)。正常人肯定会说,往前走到第二个十字路口,左拐,走到下一个红绿灯,等等。这就是拓扑地图
混合地图。
既然有人要分类,就肯定有人想把各类的好处揉到一起。这个就不多说了吧。
这四步就是一个完整的SLAM过程,可以当入门看看,深入了解请对各个步骤的关键技术点去研究。
发现有个博主对SLAM讲得比较通俗,挂上链接 也可以去看下
https://www.cnblogs.com/hao-lingguang19/p/11746919.html