前言:
现时各位老铁们对“机器人slam技术”都比较重视,小伙伴们都想要了解一些“机器人slam技术”的相关知识。那么小编也在网上收集了一些关于“机器人slam技术””的相关知识,希望我们能喜欢,看官们一起来学习一下吧!二十余年来,同时定位与建图(Simultaneous Localization And Mapping,SLAM)在移动机器人技术社区中一直是一个非常受欢迎的话题。它是指运动物体自身位置不确定的条件下,根据传感器的信息,一边计算自身位置,一边构建环境地图的过程,同时利用地图进行自主定位和导航。它主要用于解决机器人在未知环境运动时,如何通过对环境的观测确定自身的定位和运动轨迹,同时构建出周围环境的地图。SLAM有很多应用,例如空间探索和自动驾驶等。近几年来,在汽车制造商的参与下,对智能汽车的关注进一步推动了SLAM的研究工作。
自动驾驶汽车既需要在不同的驾驶环境下进行精确的定位,也需要在不同的驾驶环境下进行精确的测绘。在这种背景下,SLAM技术成为一个很好的研究解决方案。在自动驾驶领域,人们确实在尝试用摄像头取代LIDAR(光探测-测距)传感器,或者在摄像头的基础上集成其他传感器。通常,将SLAM问题视为真正实现自动驾驶机器人的关键问题之一。因此,SLAM技术也是自动驾驶汽车的核心技术。
SLAM经典结构与原理
视觉SLAM系统的经典结构可分为五个部分:摄像机传感器模块、前端模块、后端模块、闭环模块和映射模块。如图所示,摄像机传感器模块负责采集图像数据,前端模块负责跟踪相邻两帧之间的图像特征,实现摄像机的初始运动估计和局部映射,后端模块负责从前端进行数值优化并进一步进行运动估计,闭环模块负责在大尺度环境下通过计算图像相似度来消除累积误差,映射模块负责重构周围环境。
图1 视觉Slam系统结构
相机的传感器
根据传感器类型的不同,常见的视觉传感器主要分为单目、双目、RGB-D和事件摄像机。摄像头传感器如图2所示。
(a) 单目摄像机:单目摄像机具有成本低、布局简单的优点。然而,地标的深度无法很好地估计,在地图制作过程中存在比例尺模糊的问题。此外,当相机静止(无平移)或仅纯旋转时,无法获得像素距离。
(b) 双目摄像机:与单目摄像机相比,双目SLAM可以在静态状态下依靠摄像机的测量值来计算像素深度,并且在室外环境下被证明比单目SLAM更具鲁棒性。然而,深度测量的范围受基线长度和分辨率的限制,参数配置和标定过程复杂,由于相机需要处理双重图像信息,计算对中央处理器(CPU)来说成本较高。
(c) RGB-D相机:与单目和双目相机不同,RGB-D相机可以通过红外结构光和/或飞行时间(Time of Flight, TOF)直接获得像素深度,避免了复杂的计算。TOF的原理是通过测量激光的飞行时间来计算距离。但RGB-D相机由于测量范围窄,极容易受到阳光干扰,被认为不适合自动驾驶等户外应用场景。
(d) 事件相机:事件相机具有较高的动态范围,可达140 dB,而其他相机则达不到60 dB,并且具有较高的时间分辨率,低功耗,不存在运动模糊。相关研究发现,事件相机不是以固定速率捕获图像,而是异步测量每像素的亮度变化。因此,事件相机在高速、高动态条件下具有较好的测距性能。事件摄像机传感器可分为动态线性传感器、动态和有源像素视觉传感器以及基于异步时间的图像传感器。
图2 常用相机传感器
前端视觉
SLAM的前端被称为视觉测程(VO)。它负责根据相邻帧的信息粗略估计相机运动和特征方向。为了在快速响应的情况下获得准确的姿态,需要一个高效的VO。目前,前端主要可以分为两类:基于特征的方法和直接方法。
基于特征点的VO系统运行更加稳定,对光线和动态物体相对不敏感。具有高尺度和井眼旋转不变性的特征提取方法可以大大提高VO系统的可靠性和稳定性。相关研究人员提出了尺度不变特征变换(Scale Invariant Feature Transform, SIFT)算法。整个算法分为三个步骤来完成图像特征点的提取和描述。
(1)通过高斯差分金字塔方法构造尺度空间,通过高斯微分函数确定兴趣点。
(2)确定每个候选人职位的位置和规模,然后定位这些关键点。
(3)为关键点分配指向特征,以获得描述子。
SIFT特征对旋转、缩放和光照变化不变形,但它消耗大量的计算。加速健壮特征(SURF)是SIFT的改进。解决了SIFT计算量大、实时性差的缺点,保持了SIFT算子的优良性能。尽管如此,SURF算法在应用于实时SLAM系统时有较大的局限性。
后端
后端接收前端估计的摄像机姿态,并对初始姿态进行优化,以获得全局一致的运动轨迹和环境地图。相对于前端多样化的算法,目前的后端算法类型主要可以分为两类:基于滤波的方法(如扩展卡尔曼滤波(EKF)和基于优化的方法。
(a) 基于滤波的方法:该方法主要是利用贝叶斯原理,根据前一状态和当前观测数据估计当前状态。典型的基于滤波的方法有扩展卡尔曼滤波(EKF), 无迹卡尔曼滤波(UKF)和粒子过滤器(PF)。以典型的基于EKF的SLAM方法为例,它在小规模环境下的应用是比较成功的。然而,由于协方差矩阵被存储时,其存储容量随状态量的平方而增加,在大型未知场景的应用总是有限的。
(b) 基于优化的方法:基于非线性优化(图优化)方法的核心思想是将后端优化算法转化为图的形式,以不同时刻的主体姿态和环境特征为顶点,顶点之间的约束关系用边表示。图构建完成后,利用基于优化的算法求解被测对象的姿态,使顶点上要优化的状态更好地满足相应边上的约束。优化算法执行后,对应的图形为受试者运动轨迹和环境图。目前主流的视觉SLAM系统大多采用非线性优化方法。
闭环
闭环的任务是让系统根据传感器信息识别当前场景,并在返回原处时判断该区域已经被访问过,这是为了消除SLAM系统的累积误差。对于视觉SLAM,传统的环路检测方法主要使用Bag-of-Words (BoW)模型,实现步骤为:(i).对从图像中提取的局部特征进行K-means聚类,构建包含K个单词的单词列表。(ii).根据每个单词出现的次数,将图像表示为k维数值向量。(iii)判断现场差异,识别自动驾驶车辆是否已到达识别现场。
建图
自动驾驶汽车的一个基本组成部分是建立环境地图并在地图上定位的能力。建图是视觉SLAM系统的两项任务之一(即定位和建图),它在自动驾驶的导航、避障和环境重建中发挥着重要作用。一般来说,地图的表示可以分为两类:度量地图和拓扑地图。度量地图描述了地图元素之间的相对位置关系,而拓扑地图强调了地图元素间的连接关系。对于经典的SLAM系统,度量地图可以进一步分为稀疏地图和密集地图,稀疏地图仅包含场景中的少量信息,这适合于定位,而密集地图包含更多信息,这有利于车辆根据地图执行导航任务。
SLAM先进研究方法
根据利用图像信息的方法,纯视觉SLAM系统可分为两类:基于特征的方法和直接方法。基于特征的方法是指通过提取和匹配特征点来估计相邻帧之间的相机运动和构建环境地图。这种方法的缺点是提取特征点和计算描述符需要很长时间。直接方法放弃了关键点和描述符的计算。此外,根据传感器的类型,视觉SLAM可以分为单目、双目、RGB-D和基于事件相机的方法。根据地图的密度,可分为稀疏、密集和半密集SLAM。
基于特征的方法:
图3(a)展示了实时特征斑块方向估计法。在后端使用EKF算法来跟踪从前端获取的稀疏特征点,并使用相机位姿和界标点方向作为状态量来更新其均值和协方差。
图3(b)展示了并行跟踪和测绘系统PTAM,首次通过非线性优化方法区分了前端和后端,并提出了关键帧机制。关键图像串联连接以优化运动轨迹和特征方向。许多随后的视觉SLAM系统设计也采用了类似的方法。
图3(c)是大学道路环境中单目相机的实时特征提取过程(左)和轨迹跟踪和建图结果(右)。
图3(d)的左列显示了ORB-SLAM2的双目轨迹估计和特征提取。右栏显示了RGB-D相机在室内场景中的关键帧和密集点云建图效果。图片中连续的绿色小方块构成了关键帧的轨迹,RGB-D相机构建的密集3D场景地图围绕着关键帧。
图3 典型的基于特性的视觉SLAM框架
基于直接的方法:
基于直接方法(DTAM)的单目SLAM框架。
图4(a)采用基于逆深度的方法来估计特征的深度,通过直接图像匹配计算相机的位姿,并通过基于优化的方法构建密集地图。
图4(b)中的LSD-SLAM方法是直接方法在单眼视觉SLAM框架中的成功应用。该方法将面向像素的方法应用于半密集单目SLAM系统。与基于特征的方法相比,LSD-SLAM的灵敏度较低,但当相机内参和照明变化时,系统很脆弱。
图4(c)使用稀疏直接法(也称为半直接法)来跟踪关键点(的底部),并基于关键点周围的信息来估计位姿。顶部显示了室内环境中稀疏地图的轨迹。由于半直接方法跟踪稀疏特征,既不计算描述符,也不处理密集信息,具有较低的时间复杂度和较强的实时性。
图4(d)显示了DSO(单目视觉里程计)的3D重建和跟踪效果。该方法还使用半直接方法以确保在更快的操作速度下获得更高的精度。然而,它们只是视觉里程计。由于缺少后端优化模块和回环模块,系统的跟踪误差会随着时间累积。
直接法具有计算速度快、对弱特征条件不敏感等优点。然而,它基于灰度级不变的强烈假设,因此它对照明的变化非常敏感。相反特征点方法具有良好的不变性。
图4 典型的直接视觉SLAM框架
视觉SLAM的核心算法在预备阶段,主要包括传感器的选型和各种标定。视觉SLAM 自 PTAM 算法以来,框架基本趋于固定。通常包括 3 个线程,前端 tracking 线程、后端 mapping 优化线程、闭环检测(loop closure)线程。
前端 tracking 线程主要涉及到:特征的提取、特征的匹配;多视图几何的知识,包括对极几何、PnP、刚体运动、李代数等。而后端优化线程则涉及到非线性最小二乘优化,属于数值优化的内容。闭环检测线程涉及到地点识别,本质上是图像检索问题。对于 VIO,还涉及到滤波算法、状态估计等内容。将 SLAM 算法拆解了看,用到的技术是偏传统的。与当前大热的深度学习「黑箱模型」不同,SLAM 的各个环节基本都是白箱,能够解释得非常清楚。但 SLAM 算法并不是上述各种算法的简单叠加,而是一个系统工程,里面有很多 tradeoff。如果仅仅跑跑开源程序,没有什么核心竞争力。不论是做产品还是做学术研究,都应当熟悉各种技术,才能有所创造。
新型传感器的出现会不停地为SLAM注入活力。如果我们能够直接获取高质量的原始信息,SLAM 的运算压力就可以减轻很多。
自从深度学习在诸多领域所向披靡,不少研究者试图用深度学习中 end-to-end 的思想重构 SLAM 的流程。目前有些工作试图把 SLAM 的某些环节用深度学习代替。不过这些方法没有体现出压倒性优势,传统的几何方法依然是主流。在深度学习的热潮之下,SLAM 涉及的各个环节应该会逐渐吸收深度学习的成果,精度和鲁棒性也会因此提升。也许将来 SLAM 的某些环节会整体被深度学习取代,形成一个新的框架。
注:文章中引用数据和图片来源网络
您的点赞留言,是我们的最大动力!
赞助广告:
标签: #机器人slam技术