第1章:SLAM技术概述
大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊SLAM到底是什么玩意儿。
说实话,我入行那会儿,SLAM还是个挺小众的方向。记得2015年我刚开始做机器人定位时,翻遍全网能找到的中文资料也就那么几篇。现在不一样了,SLAM几乎成了机器人、自动驾驶、AR/VR领域的标配技能。你想想看,一个移动设备要是不知道自己在哪里、周围长什么样,那它跟瞎子有什么区别?
1.1 什么是SLAM?
SLAM,全称是Simultaneous Localization and Mapping,中文叫「同时定位与地图构建」。说白了,就是让一个运动中的设备,在未知环境里一边确定自己的位置,一边把周围的环境地图给画出来。
我经常跟新人打比方:你蒙上眼睛走进一个陌生房间,一边走一边用手摸墙,脑子里慢慢形成房间的轮廓,同时判断自己站在哪个位置——这就是SLAM。只不过机器用的是摄像头或激光雷达,而不是手。
核心问题:定位需要地图,建图需要位置。这是个鸡生蛋蛋生鸡的问题。SLAM的精髓就在于,用数学方法把这个循环解耦,让两者同时收敛。
嗯,这里要注意:SLAM不是某个具体的算法,而是一类问题的统称。解决SLAM问题的方法有很多,比如基于滤波器的、基于图优化的,后面我们会一一讲到。
1.2 视觉SLAM的发展历程
视觉SLAM的发展,我大致分成三个阶段来讲。
1.2.1 萌芽期(1986-2004)
最早SLAM的概念是在机器人领域提出的,用的主要是激光雷达。那时候视觉SLAM还只是个想法。我记得读博士时翻到一篇1988年的论文,作者用非常简陋的摄像头做实验,结果嘛……只能说精神可嘉。
1.2.2 经典时代(2004-2015)
这个阶段出了几个里程碑式的工作。2007年,MonoSLAM问世,这是第一个实时的单目视觉SLAM系统。虽然它只能处理很小范围的环境,但意义重大——证明了摄像头可以干激光雷达的活。
2014年,ORB-SLAM横空出世。我个人觉得,这是视觉SLAM领域最值得学习的开源项目之一。它的代码结构清晰,算法模块化,后来很多工作都基于它改进。我在项目里移植ORB-SLAM到嵌入式平台时,踩了不少坑,后面会专门讲。
1.2.3 深度学习时代(2015至今)
深度学习火了之后,SLAM也开始跟神经网络结合。比如用CNN做特征提取、用端到端网络直接估计位姿。但说实话,纯学习的SLAM在精度和泛化性上,目前还干不过传统几何方法。我个人的习惯是:用深度学习辅助传统方法,而不是完全替代。
我的建议:如果你是初学者,先把ORB-SLAM2吃透。深度学习那套东西,等你有扎实的几何基础再碰,否则容易飘。
1.3 主流传感器介绍
视觉SLAM用的传感器,主要有三类。我挨个说说它们的脾气秉性。
| 传感器类型 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|
| 单目相机 | 成本低、体积小、功耗低 | 尺度不确定、纯旋转失效 | 手机AR、无人机 |
| 双目相机 | 可直接获得深度、尺度确定 | 标定复杂、计算量大、基线限制 | 机器人、自动驾驶 |
| RGB-D相机 | 直接获取深度、室内效果好 | 室外受干扰、测量范围有限 | 室内机器人、VR |
1.3.1 单目相机
单目SLAM最大的问题是什么?尺度不确定性。你想想看,一个物体在远处看起来小,在近处看起来大,单目相机没法区分到底是物体小还是距离远。所以单目SLAM估计出的轨迹和地图,只有相对尺度,没有绝对尺度。
我曾经在一个项目里用单目做AGV导航,结果地图缩放了0.8倍,机器人直接撞墙了。后来加了轮式里程计才解决。
1.3.2 双目相机
双目通过左右眼的视差计算深度,相当于人眼的工作原理。它的好处是尺度确定,坏处是计算量大。而且基线(两个镜头之间的距离)决定了有效测距范围——基线越长,能测的距离越远。
我建议做室外SLAM的朋友优先考虑双目。室内的话,RGB-D更香。
1.3.3 RGB-D相机
RGB-D相机,比如Kinect、Intel RealSense,可以直接输出每个像素的深度值。室内3米以内效果非常好,但一到室外,红外结构光就被太阳光淹没了。
避坑指南:我曾经在室外用RealSense D435做SLAM,大太阳底下深度图全是噪点。后来换成了双目+IMU的组合才搞定。所以选传感器一定要看使用场景。
1.4 应用场景分析
SLAM的应用场景,我挑三个最典型的说说。
1.4.1 机器人
这是SLAM最传统的应用领域。扫地机器人、送餐机器人、仓储AGV,都需要SLAM来定位和建图。我参与过一款扫地机器人的开发,用的是激光SLAM,因为激光在室内更稳定。但视觉SLAM的优势在于能识别物体(比如沙发、桌子),所以现在很多高端产品开始用视觉+激光融合的方案。
1.4.2 AR/VR
AR/VR对SLAM的要求是:低延迟、高精度、小体积。你想想,手机AR应用里,虚拟物体要稳稳地贴在现实场景中,SLAM的位姿估计稍微抖一下,用户体验就崩了。
我记得苹果ARKit刚出来时,我拿iPhone X试了一下,效果惊艳。但背后的VIO(视觉惯性里程计)算法,其实跟SLAM一脉相承。
1.4.3 自动驾驶
自动驾驶对SLAM的要求最高。高速场景下,车辆每秒移动几十米,SLAM必须实时输出厘米级的位姿。而且环境复杂——隧道、高架、雨雪天气,每个都是挑战。
目前主流方案是多传感器融合:GPS+IMU+视觉+激光雷达。视觉SLAM在其中扮演「视觉里程计」的角色,提供相对位姿约束。
总结一下:SLAM不是万能的,但没有SLAM是万万不能的。后面29章,我会带大家从原理到代码,从PC到嵌入式,把视觉SLAM彻底吃透。
好,第一章就到这里。下一章我们聊聊SLAM的数学基础——坐标系与刚体运动。这部分是基本功,别跳哈。