第1章 · SLAM概述
什么是SLAM? 说白了,就是让机器在陌生环境里一边走路一边给自己画地图,同时还得知道自己站在地图的哪个位置。我经常跟刚入行的朋友讲:“SLAM就是机器人的‘我是谁、我在哪、要去哪’。” 没有SLAM,扫地机就是瞎转,自动驾驶就是盲开。
1.1 到底什么是SLAM?
SLAM 的全称是 Simultaneous Localization and Mapping,同步定位与建图。你想想看,一个机器人被丢进从没去过的地方,它没有GPS,也没有预先的地图——它只能靠自己的传感器(激光雷达、摄像头、IMU)一边走一边猜:“我走了多远?周围墙在哪儿?刚才那个转角我是不是来过?” 这就是SLAM要解决的核心问题。
我个人的理解更直白:SLAM 是一个“鸡生蛋蛋生鸡”的过程——要知道机器人的位姿,得先有地图;要建准确的地图,又得知道机器人的位姿。SLAM 算法就是把这个死循环解开的数学艺术。
1.2 SLAM 的应用领域
SLAM 早就不是实验室里的玩具了。我这些年接触过的落地场景,随便列几个:
- 🧹 扫地机器人 —— 最广为人知的SLAM应用。用激光或视觉建图,然后规划清扫路径。我在2018年调过一款扫地机,当时最大的坑是地毯边缘的误检测,回环一关掉地图就扭曲。
- 🚗 自动驾驶 —— L3级以上自动驾驶几乎离不开多传感器融合SLAM。高精地图的实时更新、车辆在隧道/地库的定位,全靠SLAM兜底。
- 🥽 AR/VR —— 手机AR和头戴设备需要实时知道设备在空间中的6DoF位姿。苹果的ARKit、谷歌的ARCore底层都跑着VIO(视觉惯性里程计),本质就是轻量级SLAM。
- 🤖 仓储物流AGV —— 工厂里的无人叉车、搬运机器人,用2D激光SLAM做定位,精度要求高,环境还经常变化。
嗯,其实还有无人机、水下机器人、甚至医疗内窥镜…… 只要环境没有先验地图,SLAM就是刚需。
1.3 主流SLAM框架对比
现在开源社区最火的三套系统:ORB-SLAM3、LIO-SAM、Cartographer。我三套都在实际项目里跑过,说说我的主观感受。
| 框架 | 传感器类型 | 核心特点 | 我遇到的坑 |
|---|---|---|---|
| ORB-SLAM3 | 单目/双目/RGB-D + IMU | 视觉特征点 + 多地图融合,纯视觉天花板 | 弱纹理场景(白墙)容易丢;初始化对运动有要求 |
| LIO-SAM | 激光雷达 + IMU(紧耦合) | 因子图优化,实时性极好,适合室外大场景 | IMU零偏初始化没做好,地图会分层 |
| Cartographer | 2D/3D激光雷达(可选IMU/odom) | 子图 + 局部回环,Google出品,扫地机最爱 | 计算资源消耗大,低端ARM上容易掉帧 |
简单总结:视觉选ORB-SLAM3,激光+IMU选LIO-SAM,2D室内选Cartographer。但别死套公式——我见过有人在室内小车上硬跑LIO-SAM,结果因为激光点云特征太少,效果反而不如Cartographer。
trajectory_builder_2d.submaps.num_range_data参数,导致子图一直不闭合。后来调大这个值,回环才稳定。调参时一定要看官方文档的默认值说明。
1.4 SLAM 知识体系总览
下面这张图是我自己梳理的SLAM核心脉络,从传感器到建图定位,再到避障应用。你跟着这个结构学,心里会更有底。
从图里能看出来:前端负责“猜”,后端负责“改”,回环负责“纠偏”。避障模块则依赖建图结果做路径规划。整个链条里,任何一个环节出问题,机器人都会“犯傻”。
1.5 为什么SLAM这么难?
说白了,难在“不确定性”。传感器有噪声,运动有打滑,环境有动态物体。我调LIO-SAM的时候,有一次在走廊里跑,路过一面玻璃墙,激光直接穿透,点云全飞了——回环检测直接失效。后来加了IMU约束才稳住。
所以学SLAM,本质上是在学如何与不确定性共舞。数学(概率论、李群李代数)是工具,工程经验是灵魂。