一、SLAM概述与课程导论
1.1 什么是SLAM?
SLAM,全称是 Simultaneous Localization and Mapping,中文叫「同步定位与地图构建」。说白了,就是让一台机器人或设备,在完全陌生的环境里,一边走路一边画地图,同时还得知道自己在地图上的哪个位置。
我经常跟刚入行的朋友打个比方:你蒙上眼睛走进一个房间,一边摸墙一边在脑子里画这个房间的布局,同时还要记住自己走到哪了——这就是SLAM。只不过机器人用的是激光雷达或摄像头,而不是手。
这里有个关键点:定位和建图是互相依赖的。你要建图,得先知道自己的位置;你要定位,又得先有地图。这就像「先有鸡还是先有蛋」的问题。SLAM算法就是解决这个循环依赖的。
核心三要素:
- 传感器数据——激光雷达、相机、IMU等
- 状态估计——机器人的位姿(位置+姿态)
- 地图表示——栅格地图、点云地图、拓扑地图等
1.2 SLAM的应用场景
你想想看,现在生活中哪些地方用到了SLAM?其实比你想象的要多得多。
扫地机器人
这是SLAM最接地气的应用。我拆过好几台市面上的扫地机器人,里面基本都跑着轻量级的SLAM算法。它需要实时建图,规划清扫路径,还得避开拖鞋和电线。嗯,这里要注意:扫地机器人对成本敏感,所以传感器通常只有单线激光雷达或低分辨率摄像头,算法必须足够轻量。
自动驾驶
自动驾驶对SLAM的要求就苛刻多了。车速快、环境复杂、安全要求极高。我记得有个项目里,车辆在隧道中GPS信号丢失,全靠SLAM撑着定位,偏差超过10厘米就可能出问题。所以L4级自动驾驶通常会用多传感器融合的方案,激光雷达+摄像头+IMU+轮速计一起上。
AR/VR
这个领域我接触得相对少一些,但原理是相通的。AR设备需要知道你的头部位置和朝向,才能在正确的位置叠加虚拟物体。比如你戴着AR眼镜看桌子,上面要显示一个虚拟茶杯——如果定位不准,茶杯就会飘来飘去,体验极差。
| 应用场景 | 传感器 | 精度要求 | 实时性要求 |
|---|---|---|---|
| 扫地机器人 | 单线激光/低分辨率相机 | 厘米级 | 中等 |
| 自动驾驶 | 多线激光+相机+IMU | 厘米级 | 极高 |
| AR/VR | 双目相机+IMU | 毫米级 | 极高 |
1.3 主流SLAM框架对比
市面上SLAM框架不少,但真正经得起工程考验的就那么几个。我挑三个最有代表性的说说。
ORB-SLAM3
这是视觉SLAM的标杆。支持单目、双目、RGB-D,还能融合IMU。它的回环检测做得相当漂亮,用的是词袋模型。我在一个室内巡检项目里用过它,跑了两个小时,累计误差不到0.5米。不过它有个毛病——纯视觉方案在光照变化大的场景容易翻车。
Cartographer
Google出品的激光SLAM框架,也是我目前用得最多的。它最大的特点是支持2D和3D,而且能处理大场景。它的核心思想是「子图+回环约束」,说白了就是先建一堆小地图,再通过回环检测把它们拼起来。我曾经用它给一个2000平米的仓库建图,效果相当稳。
LOAM
LOAM是激光SLAM的经典之作。它把SLAM问题拆成了两个模块:一个高频低精度的里程计,一个低频高精度的建图模块。这种设计思路很巧妙,既保证了实时性,又保证了精度。不过它没有回环检测,长时间运行会漂移。
| 框架 | 传感器类型 | 回环检测 | 适用场景 |
|---|---|---|---|
| ORB-SLAM3 | 视觉(单/双/RGB-D)+IMU | ✅ 有 | 室内、小场景 |
| Cartographer | 激光(2D/3D)+IMU | ✅ 有 | 室内外、大场景 |
| LOAM | 激光(3D) | ❌ 无 | 室外、大场景 |
我的建议:如果你是初学者,先从Cartographer入手。它的文档最全,社区最活跃,而且ROS集成做得最好。等你把激光SLAM吃透了,再碰视觉SLAM会轻松很多。
1.4 本课程技术栈与学习路线
这门课的技术栈我选了很久,最终定下来的是:ROS + C++ + Python。
为什么选ROS?因为它是机器人领域的「操作系统」,几乎所有SLAM框架都跑在ROS上。你学会了ROS,就等于拿到了进入这个行业的钥匙。
C++是SLAM的核心语言。你想想看,SLAM算法要处理大量矩阵运算和优化问题,Python那点性能根本扛不住。不过Python也不是没用——数据分析、可视化、快速原型验证,Python比C++方便得多。所以我的习惯是:核心算法用C++写,辅助工具用Python搭。
学习路线图(我建议你按这个顺序来):
- ROS基础——话题、服务、动作、TF坐标变换
- C++与Python基础——重点掌握Eigen、OpenCV、numpy
- 传感器数据处理——激光点云、图像特征、IMU预积分
- SLAM核心算法——前端里程计、后端优化、回环检测
- 建图与导航——栅格地图、路径规划、避障
- 工程实战——从零搭建一个完整的SLAM导航系统
我曾经带过一个实习生,他按这个路线学了三个月,最后能独立调通Cartographer并做二次开发。所以这条路是走得通的,关键是要动手。
避坑指南:不要一上来就啃。我见过太多人花两周看了一堆公式,结果连ROS的launch文件都不会写。先跑通一个Demo,再回头理解原理,效率会高很多。
1.5 本章知识体系
下面这张图是我手绘的本章知识结构,你可以把它当作整个课程的「导航地图」。
这张图把本章的核心内容串起来了。你往后学的时候,可以时不时回来看一眼,确认自己没跑偏。