目录
[隐藏]SLAM 介绍
什么是SLAM
SLAM是Simultaneous Localization and Mapping的缩写,意为“同时定位与建图”。它是指运动物体根据传感器的信息,一边计算自身位置,一边构建环境地图的过程。目前,SLAM的应用领域主要有机器人、虚拟现实和增强现实。其用途包括传感器自身的定位,以及后续的路径规划、场景理解。
随着传感器种类和安装方式的不同,SLAM的实现方式和难度会有很大差异。按传感器来分,SLAM主要分为激光、视觉两大类。其中,激光SLAM研究较早,理论和工程均比较成熟。视觉方案目前(2016)尚处于实验室研究阶段,极少看到实际产品应用。
SLAM研究自1988年提出以来,已经过了近三十年。早期SLAM研究侧重于使用滤波器理论,最小化运动体位姿和地图的路标点的噪声。21世纪之后,学者们开始借鉴SfM(Structure from Motion)中的方式,以优化理论为基础求解SLAM问题。这种方式取得了一定的成就,并且在视觉SLAM领域中取得了主导地位。
- 激光传感器:激光传感器可以直接获得相对于环境的直接距离信息,从而实现直接相对定位,对于激光传感器的绝对定位及轨迹优化可以在相对定位的基础上进行。
- 视觉传感器:视觉传感器很难直接获得相对于环境的直接距离信息,而必须通过两帧或多帧图像来估计自身的位姿变化,再通过累积位姿变化计算当前位置。这种方法更类似于直接用里程计进行定位,即视觉里程计(Visual Odometry)。里程计的测量积分后才相当于激光传感器直接获得的定位信息,这就是图优化SLAM框架中的前端。而后端对定位和位姿轨迹的优化本质上与激光传感器的优化相同,都基于最优估计的理论框架进行。
SLAM与视觉里程计(Visual Odometry)
人们有时候会混淆SLAM和视觉里程计的概念。应该说,视觉里程计是SLAM的一个模块,其目的在于增量式地估计相机运动。然而,完整的SLAM还包括添加回环检测和全局优化,以获得精确的、全局一致的地图。
视觉里程计通常作为SLAM系统的前端。它增量式的计算方法能估计邻近帧间的相机运动,但这也意味着邻近帧间的误差会影响之后的轨迹估计,意味着它会随着时间推移,产生漂移。同时,视觉里程计也不含有建图模块。一个完整的SLAM系统会关心相机轨迹和地图的全局一致性,但这也意味着需要更多的计算资源来计算全局的优化。在资源有限、不关心全局路径的场合(如无人机的着陆、短时间控制中),可以考虑只使用视觉里程计,而不必使用完整的SLAM。
SLAM和SfM
视觉SLAM中大量使用了SfM中的方法,如特征点跟踪、捆集优化(Bundle Adjustment)等,以至于许多研究者把它们视为同一个研究领域。然而,尽管方法上很相似,SLAM和SfM的侧重点是不同的。SLAM的应用场合主要在机器人和VR/AR,计算资源有限,需要很强的实时性,故侧重点在于,如何在有限的资源里快速地对相机进行定位。而SfM方法通常是离线的,可以调用大量计算资源进行长时间的计算,侧重于重建出更精确、美观的场景。
主流开源SLAM方案
视觉传感器
- 稀疏法(特征点):
- 稠密法:
激光传感器
- Hector SLAM[18]
- Gmapping [19]
- tinySLAM(基于蒙特卡洛定位算法的简单SLAM实现) [svn co https://svn.openslam.org/data/svn/tinyslam]
参考论文 Steux B, Hamzaoui O E, Steux B. CoreSLAM: a SLAM Algorithm in less than 200 lines of C code[J].
- flirtlib 提取二维激光数据的感兴趣区域,对二维laser数据做特征检测和描述,代码内置若干特征检测算子和特征描述算子,提供样例代码和数据,包含RANSAC Loop Closure 以及完整的mapping过程 [20]
参考论文 Tipaldi G D, Arras K O. FLIRT - Interest regions for 2D range data.[C]// ieee International Conference on Robotics & Automation. 2010:3616-3622.
视觉(Visual)与IMU融合(VI)
- Release of OKVIS: Open Keyframe-based Visual Inertial SLAM[21]
后端优化工具
常用数据集
-
- RGB-D SLAM Dataset and Benchmark:来自TUM,采用Kinect采集的数据集
- KITTI Vision Benchmark Suite:装备4个相机、高精度GPS和激光雷达,在城市道路采集的数据
- The EuRoC MAV Dataset:来自ETH,采用装备了VI-Sensor的四旋翼采集数据
入门资料推荐
- 关于Computer Vision
- CMU computer vision 入门课件推荐(第16-19章关于visual odometry方面的基础知识推导非常清晰)。
- Multiple View Geometry
- Daniel Cremers的MVG课程视频。百度云分享链接
- An Invitation to 3D Computer Vision
- 宾夕法尼亚大学SLAM公开课,百度云链接(内含Videos、PPT、Subtitles)
- 关于SLAM(状态最优估计)
- State Estimation for Robotics, SLAM入门教材吐血推荐,对深入理解SLAM实质非常有帮助,下载链接:[25]
- Course on SLAM,作者Joan Sola关于Graph-SLAM的教程,包含位姿变换、传感器模型、图优化以及SLAM中的稀疏性求解。其EKF-SLAM教程见[26]
- Probabilistic Robotics
- 贝叶斯滤波与卡尔曼滤波:弗莱堡大学课件,推导详细,并包含基础知识,适合入门。
- 贝叶斯滤波到卡尔曼滤波的推导:从极大似然角度出发。
- 卡尔曼滤波中文讲解
- 西班牙萨拉戈萨大学机器人课程:José Neira Parra主页
- 1.Introduction
- 2.Sensor and feature modelling
- 3.The data association problem:关于数据关联的问题与讲解很详细,有实例.
- 4.The scaling problem:针对SLAM计算量过大的问题进行讲解.
- 5.Current trends in SLAM:关于DTAM,PTAM,SLAM++等系统的对比,并推荐了superpixel的方法,值得一看.
-
- 关于寻路算法的一些思考系列(翻译Amit Patel的博客[27])
- 关于寻路算法的一些思考(1):A*算法介绍 [28]
- 关于寻路算法的一些思考(2):Heuristics 函数 [29]
- 关于寻路算法的一些思考(3):A*算法的实现[30]
- 关于寻路算法的一些思考(4):A* 算法的变体 [31]
- 关于寻路算法的一些思考(5):处理移动中的障碍物[32]
- 关于寻路算法的一些思考(6):预先计算好的路径的所用空间 [33]
- 关于寻路算法的一些思考(7):地图表示 [34]
- 关于寻路算法的一些思考(8):长期和短期目标 [35]
- 关于寻路算法的一些思考(9):寻路者的移动成本 [36]
- 关于寻路算法的一些思考(10):最短路径的用户体验 [37]
- 关于寻路算法的一些思考(11):寻路算法的其他应用 [38]
- 关于寻路算法的一些思考(12):AI 技术 [39]
- 关于寻路算法的一些思考系列(翻译Amit Patel的博客[27])
泡泡机器人
微信搜索“paopaorobot_slam”微信公众号,或者扫描下面二维码:
- 公开课程b站主页:[40]
相关博客推荐
- 白巧克力[49]
- 冯兵的个人博客[62]
- Tombone's Computer Vision Blog, MIT博士后, CMU博士, vision.ai创始人: [84]
- Alexander Grau's blog, 德国的一个技术发烧友, 博客里有很多关于机器人, SLAM, 传感器等技术方面的个人记录: [85]
- 李建的个人博客: [86]
- 刘富强的个人博客: [87] [88]
机器人常用传感器
机器人领域优秀实验室及牛人汇总
Deep Learning for SLAM
近年来Deep Learning的大潮比较火,有很多同学希望了解关于SLAM与Deep Learning结合的工作方向。在这里给出一些比较有参考性的资源,希望对大家有所帮助。
PS友情提示: SLAM可以算作一个系统问题,中间有很多子问题,分别需要不同的算法解决。 Deep Learning是一个用于解决问题的其中一种算法,如果我们不是希望从事机器学习算法研究的话,没有必要较真于是否使用Deep Learning, 而更应该关注怎样做能更好地解决我们面对的问题。
- DL入门资源:
- Xiao Jianxiong's personal page:普林斯顿大学AP,正在从事cv dl与slam相结合的多项研究.
- Deep driving:Xiao Jianxiong组的工作,用游戏数据进行图像标注,训练CNN,在游戏中和KITTI数据集上验证了该方法实现自动驾驶的可能性。
- Posenet:最近比较火的posenet,使用SFM进行标注数据采集,训练CNN进行重relocalization。
- On the Visual Perception of Forest Trails:苏黎世大学计算机视觉组的工作,使用CNN实现无人机在森林里的自动路径规划,实现穿越。
- Tombone 关于ICLR2016的总结BLOG
- Deep Image Homography Estimation 使用CNN进行图像间homography矩阵的估计. 生成训练数据的方法十分有趣, 可以利用任何已有的dataset自动生成, 无需人工标注.
- gvnn: Neural Network Library for Geometric Computer Vision 在神经网络中定义几何变换层,为后续结合geometric computer vision和machine learning打下基础,值得关注。
- CV, 深度学习资源大集合包括CV中各种topic采用DL模型处理的资源整理。
Augmented Reality for SLAM
增强现实是SLAM的一个重要应用,需要高精度的相机姿态和所感知的环境地图。 虚拟现实可以通过SLAM辅助IMU高效获取头盔姿态并刷新。 混合现实与增强现实原理相同。
- 有标识(with artificial Marker or natural image Marker)增强现实:
- 无标识(Markerless)增强现实:
- PTAMM算法
- ORB-SLAM1 AR ios实现
- 基于opencv的无标识AR
- 基于opencv的无标识AR mobile版