一、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搭。

学习路线图(我建议你按这个顺序来):

  1. ROS基础——话题、服务、动作、TF坐标变换
  2. C++与Python基础——重点掌握Eigen、OpenCV、numpy
  3. 传感器数据处理——激光点云、图像特征、IMU预积分
  4. SLAM核心算法——前端里程计、后端优化、回环检测
  5. 建图与导航——栅格地图、路径规划、避障
  6. 工程实战——从零搭建一个完整的SLAM导航系统

我曾经带过一个实习生,他按这个路线学了三个月,最后能独立调通Cartographer并做二次开发。所以这条路是走得通的,关键是要动手。

避坑指南:不要一上来就啃。我见过太多人花两周看了一堆公式,结果连ROS的launch文件都不会写。先跑通一个Demo,再回头理解原理,效率会高很多。

1.5 本章知识体系

下面这张图是我手绘的本章知识结构,你可以把它当作整个课程的「导航地图」。

SLAM建图与导航一体化实战 - 知识体系 SLAM核心概念 同步定位与地图构建 应用场景:扫地机器人 / 自动驾驶 / AR/VR 主流SLAM框架对比 ORB-SLAM3(视觉) | Cartographer(激光) | LOAM(激光) 技术栈:ROS + C++ + Python 学习路线:ROS基础 → 编程语言 → 传感器 → 核心算法 → 建图导航 → 实战

这张图把本章的核心内容串起来了。你往后学的时候,可以时不时回来看一眼,确认自己没跑偏。

可可精品资料库