第十一、十二章

回环检测

回环检测的意义:前端(视觉里程计)和后端(优化)会导致累积误差,使得长期地图和轨迹不准确。回环检测通过识别相机是否回到曾经经过的位置,为后端提供额外的、非相邻的约束,从而有效消除累积误差,实现全局一致性。

回环检测的主流方法

  • 基于外观的方法:不依赖前端和后端的位姿估计,直接根据两幅图像的相似性判断。由于摆脱了累积误差的影响,成为主流方法。
  • 其他方法包括理论上“朴素”的任意图像匹配(复杂度高)和基于里程计的几何关系(存在循环论证问题,误差大时失效)

基于词袋模型(Bag-of-Words, BoW)的回环检测

  • 核心思想:用“图像包含哪些视觉单词”的直方图向量来描述图像,通过比较这些向量的相似度来检测回环。
  • 步骤
    • 字典生成:对大量图像提取特征点(如ORB),使用K-means等聚类算法将特征点聚合成“视觉单词”,并组织成k叉树结构以实现快速查找。
    • 图像描述:对单张图像提取特征点,并在字典树中查找每个特征对应的单词,形成TF-IDF加权的词袋向量。
    • 相似度计算:比较两幅图像对应的词袋向量,计算相似度评分

整个回环检测的意义是很好理解的,具体的做法就是传统的基于外观的方法,它没有利用任何的几何信息,所以一般都需要一个验证步骤,具体验证的内容书中说了两种,第一是建立缓存机制,认为单次检测到的回环不足以构成良好的约束,而在一段时间中已知检测到的回环,才是正确的回环;第二,对回环检测到的两帧进行特征匹配,估计相机的运动,然后,把运动放到之前的位姿图中,检查与之前的估计是否有较大的出入。

再重新捋一遍书中关于整个回环检测的流程,首先是要用外观方法进行回环检测,然后介绍了基于词袋模型的回环检测,先使用K叉树的结构创建字典(利用ORB特征),然后在使用TF-IDF进行相似度计算得到结果。
最后是结果分析,看看哪些部分可以优化,通过增加字典的规模,再取先验相似度以增强鲁棒性,在关键帧的处理中采用稀疏的帧,即彼此间不太相同,又能涵盖整个环境,最后就是之前已经提到过的验证。

建图

主旨是:SLAM不仅是为了定位,更是为了构建能服务于不同应用(如导航、避障、交互)的地图。文章重点从“稀疏特征点地图”扩展到“稠密地图”。

文章的核心概念与流程可总结如下:

1. 为什么需要稠密地图?

稀疏特征点地图(如几个桌角)能满足定位,但无法用于需要知道“面”信息的任务,如导航、避障、三维重建和增强现实交互。这些任务需要知道环境中每个看到的部分,即稠密地图

2. 如何用单目相机做稠密重建?(核心难点与方案)

单目相机无法直接测距,文章介绍了经典的立体视觉思路:

  • 核心问题:如何为第一张图的每个像素在其他图像中找到对应点?
  • 解决方案
    • 极线搜索:利用相机运动几何,将对应点的搜索范围从整张图缩小到一条线(极线)上。
    • 块匹配:比较像素周围的小图像块(而非单个像素)的相似度(如用NCC算法),在极线上找到最匹配的点。
    • 深度滤波器:单次匹配不可靠。文章引入概率模型,将每个像素的深度视为一个服从高斯分布的状态。通过不断融入新的图像观测,像滤波器一样更新深度的均值(估计值)和方差(不确定性),使其从初始猜测逐渐收敛到稳定值。这个过程就是“深度估计”。

3. 单目稠密重建的实践与局限性

文章提供了一个实践程序,演示了上述流程,并指出了关键问题

  • 对纹理依赖性强:在缺乏纹理的均匀区域(如白墙),块匹配容易失败。
  • 计算量大:每个像素都需独立进行极线搜索和滤波,非常耗时。
  • 改进方向:文章讨论了使用逆深度参数化、考虑图像仿射变换、以及利用GPU并行计算来提升鲁棒性和效率。

4. 更实用的方案:RGB-D稠密建图

相较于“费力不讨好”的单目稠密估计,使用RGB-D相机直接获取深度是更高效可靠的选择。文章介绍了由此生成的几种地图形式

  • 点云地图:最基本的形式,将深度图转换成三维点并拼接。需进行滤波(如体素网格滤波)来降采样和去噪。
  • 八叉树地图:一种高效压缩、概率化、支持动态更新的地图。它将空间递归划分为体素,每个体素存储“被占据”的概率。其优势是:
    • 存储空间极小(可比点云小99%以上)。
    • 支持多分辨率查询概率更新,能融合多次观测并处理动态变化。
    • 可直接用于机器人导航和避障的空间查询。
  • 表面重建(网格/面片):在点云基础上重建出物体表面,更美观,适合可视化与人机交互。

5. 高级方向预览
文章最后简要提到了以重建为核心、依赖GPU并行计算的实时三维重建方向(如KinectFusion),其使用TSDF等结构能构建出非常精细、无缝的三维模型。

总结:文章系统阐述了从单目深度估计的原理与实践,到利用RGB-D传感器构建各种实用地图(点云、八叉树、表面) 的全链条知识,指明了稠密建图是实现SLAM高级应用的关键

(AI太好用了你知道吗)
赶时间,这部分内容就用AI代替了。

简单总结一下,建图就是为了构建稠密地图,以满足导航、避障、三维重建和增强现实交互等需求。接着就是看具体的做法了,本文中介绍了单目和RGB-D两种方法,单目看看就可以了,它需要根据几何信息一点点的去测每个像素的深度,计算量大,速度慢,效果还差,对纹理的依赖强。所以不用它,只要知道大概是一种通过位姿找到极线,再使用深度滤波器一次次迭代找到深度的方法就可以了。

对于RGB-D,深度信息直接得到,作者接着介绍了两种地图形式,点云地图和八叉树地图。
点云就是空间离散的点组成的图,得到后再经过体素滤波减少冗余点就成为了点云地图,不过,想要能够满足定位、导航、可视化、交互的需求,还需要进一步生成网络模型,网络重建后,原本没有表面信息的点云就可以构建出法线、纹理等信息了。

令一种八叉树地图就是把一个大方块沿三个表面对半分,分成8块。每块中限制有多少个点,和体素滤波有点像,但是它的压缩程度很强,书中的例子是原本6.9MB的点云地图文件,改用八叉树就变成了56KB。总之八叉树就是一颗非均匀的、带概率的体素树,压缩率高,便于更新和查询。关键地解决了点云地图数据量大和不能去除动态物体的问题。

实时三维重建的内容书里说的不多,也没有什么实践,这里也不说了。

放个八叉树图在这吧。