专栏算法工具链视觉 SLAM 算法的 6 个组成部分

视觉 SLAM 算法的 6 个组成部分

巴山夜雨2024-09-19
92
0

如果向朋友解释 “聊天-GPT”,你会怎么做?要讲的东西太多了,以至于很多人放弃了理解 LLM... 但是,如果我们不试图理解它,而是将其简化为以下 3 个想法呢?

  1. 核心架构是变压器网络。

  2. 它通过自我监督学习在整个互联网上进行训练,并可通过监督学习在数据集上进行微调

  3. 核心任务是在循环中预测下一个单词或标记。


这样我们就缩小了问题的范围,现在只需了解三件事: 变压器、自监督学习和下一个单词预测。在这之后,我们可能还需要更多的知识,但我们已经掌握了其中的要点。


许多概念起初看起来非常抽象,但一旦将它们拆解成几个部分,我们就会突然 “明白 ”了。


可视化 SLAM 也是一个类似的问题。起初,我们可能会觉得很难理解;有各种不同类型的 SLAM 算法,如卡尔曼滤波器、粒子滤波器、图,还有在线 SLAM 与离线 SLAM,以及循环闭合等等......


一旦我们将其拆分为更简单的概念,就能理解背后的工作原理,这 3 个概念遵循我在一篇关于深度学习的精彩研究论文中看到的地图:

可视化 SLAM 工作流程


可以看到这个工作流程中有很多想法,但实际上我们可以简化为 3 个核心部分:

  • 特征提取与视觉测距

  • 局部映射与优化

  • 闭环和全局优化


现在逐一查看这 3 个部分,我们将做两件事:

  1. 了解它们的 "作用

  2. 列出可能有效的算法,即 “怎么做”。

一、特征提取和视觉测距


首先,我想谈谈这里的两个小模块。一个叫做 “特征提取”,另一个叫做 “视觉轨迹估计”。


1 - 特征提取

为什么要提取特征?这里说的是哪种特征?我们需要了解的是,可视化 SLAM 使用的是摄像头,因此没有激光雷达。那么如何用激光雷达来替代点云呢?我们可以计算图像上的特征,然后将其视为点!

这里将使用算法来计算视觉特征(边、角、梯度等)。下图显示了上图(视觉特征)和下图(点云)。

顶部:视觉特征(视觉 SLAM) | 底部: 点云(普通 SLAM)


工作原理

它是如何工作的?寻找特征点的要点如下:

  • 边角检测器: FAST(Features from Accelerated Segment Test),哈里斯拐角检测器。

  • Blob 检测器: SIFT(尺度不变特征变换)、SURF(加速鲁棒特征)。

  • 边缘检测器 Canny 边缘检测器

  • 特征描述器 ORB(定向 FAST 和旋转 BRIEF)、BRIEF(二元鲁棒独立基本特征)、BRISK(二元鲁棒不变量可扩展关键点)。

  • 深度学习: 使用卷积神经网络(CNN)进行特征检测和描述。我不得不说,每一位尝试用深度学习取代视觉特征的勇敢研究者都失败了!不要这样做


检查算法:ORB, FAST, Harris Corner Detector, SIFT, SURF, ...


2 - 视觉测距

第二部分是视觉轨迹测量。视觉轨迹测量学是一门根据视觉信息计算汽车移动幅度的科学。例如,点云在上一秒移动了多少?视觉特征移动了多少?

为此,我们建立了一个管道,通过分析一系列图像中特征的视运动变化来估计摄像头的运动。


视觉检偏部分包括特征匹配、异常值剔除(通常使用 RANSAC),甚至还有光流!


现在能找出核心部分吗?它们是

  • 特征匹配:匹配和跟踪帧与帧之间的特征

  • 异常点剔除:剔除我们匹配错误的特征

  • 光流估计: 计算每个特征随时间移动的程度

  • 深度估计: 因为知道深度总是有帮助的;深度可以通过立体相机获得,这可能比使用单目相机更好。


输出结果?视觉里程计--摄像机的运动。请看下面的操作:

(资料)


工作原理

我们已经看到了单目视觉测距的工作原理,但这并不是唯一的方法。可以使用立体视觉,并以不同的方式进行计算。我们完全可以将这部分内容抽象化,有很多方法可以计算摄像头的运动,甚至可以使用 IMU(惯性测量单元),这样就可以得到视觉惯性运动轨迹测量法(VIO)。


检查算法: RANSAC、透视 N 点 (PnP)、5 点算法、特征匹配、直接稀疏测距 (DSO)


第 1 部分是关于提取特征并识别其运动。这将用于什么呢?让我们一探究竟。

第 2 部分:局部优化和映射

局部映射和优化是 SLAM 的核心


接下来的两个部分是局部映射和局部优化。


3 - 本地制图

还记得我说过可以用可视化特征代替点云吗?这个想法有一个缺陷:

  • 点云是三维的

  • 而视觉特征是图像上的二维像素


因此,当你观察机器人测绘以及机器人使用的地图类型时,会发现我们有点云地图、矢量地图、占位地图、特征地图等...... 但并没有真正使用视觉特征的方法。


如果我们能将这些二维像素 “投射 ”到三维空间,那就再好不过了。局部映射将深度图和提取的特征放入三维图中。这是一个真正的 “映射 ”步骤,我们将二维特征映射到三维中的相应位置。

论文: VIRAL SLAM:紧密耦合的相机-IMU-UWB-激光雷达 SLAM


如何操作?

有很多方法可以实现这一步,这正是 SLAM 的核心。我们可以使用稀疏地图或密集地图;可以使用三维重建技术,如多视图立体和运动结构;可以使用卡尔曼滤波器或粒子滤波器,因为在每一个步骤中,我们都需要:

  1. 预测和更新每个特征在 3D 中的位置

  2. 预测并更新摄像机在三维环境中的位置


检查算法: 三角测量、立体视觉、LSD-SLAM、EKF-SLAM、快速-SLAM


4 - 局部优化

在这一步中,每帧都有一个微型局部地图。这很酷,但有一个问题:容易造成误差累积。把它想象成卡尔曼滤波器,如果没有卡尔曼滤波器,我们就无法真正实现时间上的一致性,而在这里,我们也面临着同样的问题:我们希望对齐我们的地图,使其在帧与帧之间保持一致。

如果我们在每一步都将特征投影到三维空间,就会积累误差,因此这一步就是重新对齐连续的地图。

论文 基于激光雷达的三维在线测绘的高效连续时间 SLAM


工作原理

这一步取决于使用的核心 SLAM 算法:

  • 如果使用卡尔曼滤波器,更新步骤将处理所有内容的对齐。

  • 如果使用的是图-SLAM,则需要将每个地标的姿势和你的姿势保存在一个巨大的图中,这一步就变成了图优化。

  • 像迭代最接近点这样的算法在这里也非常有用。


需要检查的算法: 迭代最接近点 (ICP)、捆绑调整、Ceres 解算器


在这一点上,我们拥有大量的本地地图,并通过时间同步和对齐,已经在本地完成了这一切,但从未真正在全球范围内完成过。因此,是时候调整全球地图了!


第 3 部分:环路闭合与全局优化

最后一步是全局优化,我们希望地图在大尺度上更有意义


前两个步骤是 “局部 ”的,我们处理的是连续地图。接下来的最后 2 个模块是全局性的,我们要为正在访问的世界绘制全局地图,这要用到两个想法:


5 - 循环闭合检测

环路闭合是可视化 SLAM 和 SLAM 中最有趣的想法之一,是将很久以前已经访问过的点或特征对齐的想法。我的无人机经过帝国大厦,然后绕曼哈顿一圈,然后再次看到帝国大厦。嘭!关闭循环,对齐第一次和第二次访问的点云。


从这个可视化 SLAM 示例中,我们可以看到它是如何工作的:识别之前访问过的区域,纠正地图或轨迹随时间发生的漂移,更新整体地图和机器人在其中的姿态。

闭环检测示例(KITTI 数据集)


工作原理

“闭环检测 "步骤就是检测,最常见的方法是使用 “词袋”(Bag-Of-Words),也有基于图的方法。


检查算法: 词袋算法、FLANN、DBoW2


6 - 全局优化

最后,我们汇总来自局部地图的所有信息,运行捆绑调整并完全优化地图。这一步是对整个地图进行对齐!我们可以在全球范围内再次使用局部优化的技术。在许多方法中,我们都在使用图优化。


检查算法: 姿态图优化、ATLAS、捆绑调整


这就是视觉 SLAM 的 6 个组成部分!先做一个简单的总结,然后去看看 Visual SLAM 的一些常用算法。


总结

视觉 SLAM 算法的最终工作流程


以下是 6 个步骤,请注意我们是如何从图像自然流向地图和姿势的!让我们来做最后的分解:

  1. 特征提取是从图像中提取视觉特征的步骤。

  2. 视觉运动测量是紧接着的一步,我们通过计算帧与帧之间的特征运动来计算摄像机的运动。

  3. 在局部映射中,我们将特征投射到三维空间中。这一步是 SLAM 的核心步骤,我们在此创建地图,可以使用三角测量法、深度图或其他方法。

  4. 在局部优化中,我们要使用局部地图和里程计对帧与帧之间的连续地图进行对齐。

  5. 环路闭合检测的目标是识别出之前到过的地方。我们将通过比较当前特征和历史特征来实现这一目标。

  6. 最后,全局优化就是对齐整个地图并生成最终输出:地图和姿势。


现在,让我们来看个例子...


示例 1: ORB-SLAM

视觉 SLAM 中最著名的算法之一叫做 ORB-SLAM。

  • 特征提取: 顾名思义,我们使用的是 ORB 特征。这些特征非常流行,在本例中也非常有效。

  • 视觉测距: 接下来,我们将把这些特征与上一帧或本地映射中的特征进行匹配,根据这些匹配结果估算摄像机的运动轨迹,并通过 RANSAC 等优化技术对估算结果进行改进,以尽量减少重投影误差,从而确定摄像机相对于上一位置的姿态。

  • 局部映射: 我们通过对匹配的 ORB 特征进行三角测量来创建局部映射,并使用局部束调整对其进行优化。3D "是通过特征的运动来计算的。

  • 局部优化: 这一步使用名为 “捆绑调整 ”的方法完成。我不会在这里对它进行描述,但它是一种算法,可以最大限度地缩小图像中观察到的特征位置与根据摄像机模型和 3D 点估算得出的预测位置之间的差距。

  • 闭环:这一步的工作原理是使用词袋(BoW)模型将当前帧与之前的所有关键帧进行有效比较。当发现具有高相似性得分的潜在匹配时,就会执行几何验证,以确保循环闭合有效,从而进行姿态图优化,以纠正累积漂移并确保地图的全局一致性。

  • 全局优化: 这一步是最后的优化,在这种情况下,我们要更新一个图,所以是 GraphSLAM。


其实要更复杂一些,实际步骤如下:

ORB SLAM 算法--你能找出这里的 6 个步骤吗?


结论

可视化同步定位与测绘(Visual Simultaneous Localization And Mapping)是指在用摄像头绘制世界地图的同时,对机器人进行可视化定位。如今,可视化 SLAM 系统已经变得非常出色,甚至可以用来绘制地图!最初,SLAM 是在没有地图的情况下使用的,属于边缘情况。如今,它可能是公司用来构建高清地图的主要方法之一。


在本文中,我向大家介绍了检测点特征的想法,但这是非常 “稀疏 ”的。事实上,我们甚至可以称之为 “稀疏 SLAM”。当我们有了激光雷达,或者至少有了 RGB-D 摄像头,我们也可以建立密集视觉 SLAM 算法。可以查看 “弹性融合 ”或 “LSD-SLAM”,了解在进行密集绘图时的不同之处,这也是构建更加精确的单目 SLAM 系统的一种方法。


我们已经讨论了自动驾驶中的 SLAM,但我们也意识到视觉 SLAM 还可以应用于许多其他领域...... 比如三维重建、计算机视觉、混合现实和增强现实。事实上,我很确定苹果的 Vision Pro 中就有这样的算法。


原文链接:https://www.thinkautonomous.ai/blog/visual-slam/

算法工具链
技术深度解析前沿技术
评论0
0/1000