SLAM全称为Simultaneous Localization and Mapping,同步定位与建图方法,可以实时估计车辆位置,同时构建周围环境地图。按照使用传感器类型的不同,SLAM分为激光雷达SLAM和视觉SLAM两大类。视觉SLAM系统主要有五部分组成,分别是视觉传感器模块、前端模块、后端模块、闭环模块和建图模块,如下所示。
1.视觉传感器模块
视觉传感器模块是视觉SLAM系统的“眼睛”。常见的视觉传感器有单目、双目、RGB-D和事件相机等多种类型,它们负责捕捉周围环境的图像数据,为系统提供丰富的环境信息。
👀单目传感器通过单个摄像头捕获图像,利用连续图像帧的处理来估计相机的运动并构建地图。这种传感器的成本较低,设备体积小且轻便,非常适合用于移动平台(如无人机和手机)。然而,由于仅使用一个摄像头,它无法直接获取深度信息,必须依赖结构光或运动来进行估计。此外,在特征跟踪和地图构建的精度方面,单目传感器相对较低。
👀双目视觉传感器利用一对相机从不同角度捕获图像,运用立体视觉技术直接测算出场景的深度信息。这种立体视觉方法通过分析图像间的视差,能够精确地测量深度,优化特征匹配,从而提升地图构建的精确度和可靠性。然而,这种技术通常伴随着较高的成本、较大的设备体积,并且对光照条件有一定的要求。
👀RGB-D传感器通过融合彩色图像与深度数据,能够同时提供RGB图像和精确的深度图,从而获取更详尽的环境信息。这种传感器在各种光照环境下都表现出较强的鲁棒性,特别适合室内场景的应用。不过,与单目或双目传感器相比,RGB-D传感器的成本相对较高,且其深度探测的有效范围有限,不适用于远距离测量。此外,处理RGB和深度数据的结合也增加了计算的复杂性。
👀事件相机是一种突破传统的新型成像设备,它与传统帧式相机的工作原理截然不同。相较于传统相机按固定帧率捕获完整图像帧,事件相机专注于检测场景中每个像素的亮度变化。每个像素点独立且异步地监测并记录亮度变化,一旦变化超过设定的阈值,便会生成一个包含事件详情、位置和变化方向(亮度增加或减少)的数据点。因此,事件相机产生的输出不是连续的图像序列,而是一个由离散事件组成的数据流。
这种相机的核心优势在于其极高的时间分辨率,能够以微秒级别的精度捕捉场景中的动态变化。由于事件相机仅在像素亮度变化时触发记录,它能够实现极快的响应速度和较短的延迟,同时显著降低数据量。然而,事件相机无法提供传统相机所能捕捉的静态图像,它只能记录亮度变化的瞬间,缺少全面的画面信息。此外,处理事件相机产生的异步事件流需要专门的算法和软件框架。最值得注意的是,事件相机对快速变化的亮度非常敏感,但在静态或变化缓慢的场景中,其记录的事件较少,可能不如传统相机实用。
总结来说,单目传感器成本低廉、体积小,适合移动平台但需依赖运动或结构光估计深度;双目传感器能直接获取深度信息,提高地图精度,但成本高、体积大、对光照敏感;RGB-D传感器提供丰富环境信息,适用于室内,但成本高、有效范围有限、数据处理复杂;事件相机以极高时间分辨率捕捉动态变化,适用于快速变化场景,但不适合静态或缓慢变化环境,且需要特殊处理。
2.前端模块----基于特征的方法
视觉SLAM的前端称为视觉里程计(Visual Odometry,VO)。它根据相邻帧的图像信息,初步估计摄像机的运动轨迹和特征方向。为了获得更准确的姿态估计和更快的响应速度,研究者们不断优化VO算法,主要分为基于特征的方法和直接方法两大类。基于特征的方法是通过提取图像中的特征点进行匹配,从而估计相机运动;而直接方法则直接利用像素强度信息,通过最小化光度误差来估计相机运动。本文主要研究基于特征的方法。
基于特征点的视觉SLAM的定位过程如下图所示。特征点对视觉SLAM 定位的重要性是显著的。在视觉 SLAM 中,特征点是用于进行相邻帧间匹配的关键点,被用来计算相机的运动和场景的深度信息。特征点数量越充足时,视觉SLAM 算法在定位中就有越多可用的信息。 在视觉SLAM 定位中,需要依靠匹配当前帧与先前帧之间的特征点来获取相机的运动估计。
特征点是图像里一些特别的地方,由关键点和描述子两部分组成。关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。描述子通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息。描述子是按照“外观相似的特征应该有相似的描述子”的原则设计的。因此,只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。
ORB特征
充分考虑在图像变换过程中出现的光照、尺度、旋转等变化会带来极大的计算量,极大地降低实时性,因此考虑适当降低精度和鲁棒性,以提升计算的速度。FAST关键点属于计算特别快的一些特征点,而ORB特征则是目前看来非常具有代表性的实时图像特征。它改进了FAST检测子不具有方向性的问题,并采用速度极快的二进制描述子BRIEF,使整个图像特征提取的环节大大加速。提取ORB特征分为如下两个步骤:
①FAST角点提取:找出图像中的“角点”。相较于原版的FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变特性。
②BRIEF描述子:对前一步提取出特征点的周围图像区域进行描述。
FAST关键点
FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:比较圆心点O且半径等于3的圆上16个连续像素点与O的灰度差来提取FAST点。若圆周上连续着M个(M一般取12)像素点的灰度值与O的差已超出规定阈值T,则判定被选中的圆心O作为特征点。详细过程如下:
1)在图像上选取一点O,灰度值假设为I0,以O为圆心且3为半径作圆,共有16个点。
2)设定灰度阈值,比如T=I0*0.2。
3)若圆上有连续N个点的灰度值大于T+I0或小于T-I0,判断O为关键点(N通常取12,即FAST-12)。
4)循环以上三步,对每一个像素执行相同的操作。
FAST特征点的计算仅仅是比较像素间亮度的差异,所以速度非常快,但它也有重复性不强、分布不均匀的缺点。此外,FAST角点不具有方向信息。同时,由于它固定取半径为3的圆,存在尺度问题:远处看着像是角点的地方,接近后看可能就不是角点了。针对FAST角点不具有方向性和尺度的弱点,ORB添加了尺度和旋转的描述。尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法实现的。
金字塔是计算图视觉中常用的一种处理方法,示意图如下。金字塔底层是原始图像。没往上一层,就对图像进行一个固定倍率的缩放,这样就有了不同分辨率的图像。较小的图像可以看成是远处看过来的场景。在特征匹配算法中,可以匹配不同层上的图像,从而实现尺度不变性。例如,如果相机在后退,那我们应该能够在上一个图像金字塔的上层和下一个图像金字塔的下层中找到匹配。
在旋转方面,我们计算特征点附近的图像灰度质心。所谓质心是指以图像块灰度值作为权重的中心。其具体操作步骤如下:
1)在一个小的图像块B中,定义图像块的矩为:
2)通过矩可以找到图像块的质心:m10表示图像在x方向上的加权和,即所有像素的x坐标与其强度值的乘积之和;m01表示图像在y方向上的加权和,即所有像素的y坐标与其强度值的乘积之和;m00则是表示图像的总强度。
3)连接图像块的几何中心O与质心C,得到一个方向向量,于是特征点的方向可以定义为:
图像的矩是对图像亮度分布的统计描述,而质心则是图像亮度分布的几何中心。一阶矩提供了图像亮度分布的“重心”,而质心坐标就是这个“重心”的具体位置。例如,如果一个图像的大部分亮度集中在左上角,那么它的质心坐标会偏向于图像的左上角。反之,如果亮度分布均匀,质心坐标将接近图像的几何中心。
BRIEF描述子
BRIEF是一种二进制描述子,其描述向量由许多个0和1组成,用来描述关键点周围区域的一系列二进制特征的向量。其具体思想是在特征点P周围以特定模式选取N对点,比较灰度值的大小(比如P(x),P(y))。若P(x)>P(y),则取1;反之取0。将N个比较结果从最低位到最高位依次组成字符串,即为BRIEF描述子。其他的特征点在选取的时候也要保持相同的点数(N)和顺序。
BRIEF使用了随机选点的比较,速度非常快,并且由于使用了二进制表达,存储起来也十分方便,适用于实时的图像匹配。原始的BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而ORB在FAST特征点提取阶段计算了关键点的方向,所以可以利用方向信息,计算旋转滞后的“Steer BRIEF”特征使ORB的描述子具有较好的旋转不变性。
3.后端模块
后端模块则是对前端估计的相机姿态进行优化,以获得全局一致的运动轨迹和环境地图。与前端算法的多样性相比,后端算法主要分为基于滤波的方法和基于优化的方法。如果假设马尔可夫性,即k时刻状态只与k-1时刻状态有关,而与之前的状态无关,则会得到以扩展卡尔曼滤波(EKF)为代表的滤波器方法。在滤波方法中,本文会从某时刻的状态估计推导到下一个时刻。另外一种方法是考虑k时刻与之前所有状态的关系,这将得到非线性优化为主体的优化框架,求解最优的相机轨迹。
4.闭环模块
闭环模块是视觉SLAM系统中的“记忆”部分。它负责识别当前场景,并在返回到之前访问过的区域时,确定该区域已被访问过。通过消除累积误差,闭环模块提高了地图的准确性和一致性。目前,大多数视觉SLAM系统采用词袋模型(Bag-of-Words,BoW)进行回环检测,这种方法通过提取图像中的视觉词汇,构建视觉词典,从而实现高效的场景识别。
5.建图模块
建图模块是视觉SLAM系统的输出部分,它根据优化后的相机轨迹和特征点信息,构建出环境地图。根据应用场景的不同,地图可以是公制地图或拓扑地图。公制地图描述了地图元素之间的相对位置关系,适用于精确导航;而拓扑图则强调了地图元素之间的连接关系,更适用于路径规划和决策。
参考:
1.视觉十四讲-高翔
2.阳霜,韦晓慧,彭国超.视觉SLAM技术在自动驾驶领域的应用[J].中国科技信息,2024,(16):83-85.
本文主要是本人(零基础小白菜一枚)对视觉SLAM的初步认识,借鉴了挺多大佬的文章,有错误的地方还麻烦路过的佬指导下!