1. SLAM 技术全景:从传感器原理到地图表示
各位同学,欢迎来到《地图构建与导航调参双核心进阶》的第一章。
做 SLAM 这些年,我见过太多人一上来就调参数、跑数据集,结果地图飞了、导航撞了,完全不知道问题出在哪。说白了,就是没把整个链路看清楚。这一章,我带你把 SLAM 的「全链路」走一遍——从传感器怎么采集数据,到最终地图长什么样,中间每一步都在干什么。
你想想看,建图和导航其实是两件事,但很多人把它们混在一起调。我习惯把这两个核心拆开看:建图是「我在哪、周围长什么样」,导航是「我怎么过去」。搞懂这个,后面调参才有方向。
1.1 传感器原理:SLAM 的「眼睛」
SLAM 的第一步,是感知世界。传感器就是机器人的眼睛。我最早做项目时用的是单目相机,那时候踩过一个坑——纯视觉在弱纹理环境下直接崩了。后来才明白,不同传感器有各自的脾气。
主流传感器分三类:
| 传感器类型 | 核心原理 | 典型输出 | 我的经验 |
|---|---|---|---|
| 单目相机 | 透视投影,丢失深度 | RGB 图像(2D) | 尺度不确定,初始化容易飘 |
| 双目/深度相机 | 视差/结构光计算深度 | RGB-D 或视差图 | 室内好用,室外阳光直射会失效 |
| 激光雷达 | TOF 测距,直接获取 3D 点云 | 点云(x,y,z,intensity) | 精度高,但贵,而且运动畸变要处理 |
| IMU | 加速度+角速度积分 | 线加速度、角速度 | 短时准,长时飘,必须和视觉/激光融合 |
1.2 前端:数据关联与位姿估计
传感器拿到数据后,SLAM 系统要回答第一个问题:机器人动了多少?这就是前端干的事。
前端核心就两件事:
- 特征提取与匹配:从图像或点云中找角点、边缘、平面等特征,然后在相邻帧之间找对应关系。
- 位姿估计:根据匹配关系,解算出两帧之间的旋转和平移。
我记得有一次做视觉 SLAM,走廊全是白墙,特征点提取出来不到 10 个,位姿估计直接发散。后来加了 IMU 预积分,才把系统稳住。所以现在我做项目,只要条件允许,一定会用视觉+IMU 的紧耦合方案。
1.3 后端:优化与一致性维护
前端给的位姿是「短时估计」,误差会累积。后端的作用,就是把这些误差摊平,让整个轨迹和地图保持一致。
后端优化有两种主流思路:
- 滤波方法(EKF):只维护当前状态,计算快,但线性化误差大。适合小场景、低算力平台。
- 图优化(Graph Optimization):把位姿和路标点建成图,用非线性最小二乘整体优化。精度高,但计算量大。现在主流 SLAM 系统基本都用图优化。
我个人的习惯是:如果场景小于 100 平米,EKF 够用;超过这个范围,老老实实上图优化。别为了省算力牺牲精度,后面导航会还回来的。
1.4 地图表示:从稀疏到稠密
SLAM 的最终产出是地图。但地图长什么样,取决于你要用它干什么。
建图与导航对地图的需求完全不同:
| 地图类型 | 建图用途 | 导航用途 | 典型代表 |
|---|---|---|---|
| 稀疏特征地图 | 定位用,只存路标点 | 不能直接导航 | ORB-SLAM 的地图 |
| 稠密点云地图 | 可视化、三维重建 | 需要降采样成栅格 | RTAB-Map 的点云 |
| 占据栅格地图 | 建图时生成 | 路径规划直接使用 | GMapping、Cartographer |
| TSDF / ESDF | 高精度重建 | 用于避障和轨迹优化 | Voxblox、FIESTA |
1.5 SLAM 全链路框架图
下面这张图,是我自己总结的 SLAM 全链路流程。每次带新人,我都会先让他们看这张图,把每个模块的输入输出搞清楚,再动手调参。
1.6 双核心思维模型:建图 vs 导航
好,现在我们把整个链路走完了。最后我想重点说说「双核心思维」——这是贯穿整个课程的主线。
建图核心:目标是让地图「准」。你希望地图里的每个点、每条边都和真实世界对得上。所以建图调参的重点在:
- 传感器标定要准(内参、外参、时间戳对齐)
- 前端匹配要稳(特征提取参数、匹配阈值)
- 后端优化要收敛(迭代次数、核函数、信息矩阵)
- 回环检测要可靠(词袋规模、几何验证)
导航核心:目标是让路径「通」。地图有点误差没关系,但机器人不能撞墙、不能卡死。导航调参的重点在:
- 代价地图的膨胀半径、障碍物阈值
- 全局路径规划的启发式权重、平滑度
- 局部路径规划的速度限制、避障灵敏度
- 恢复行为触发条件
所以,从今天开始,我希望你养成一个习惯:拿到一个 SLAM 系统,先问自己——我现在是在优化建图,还是在优化导航?这两个目标有时候冲突,但你必须清楚当前在做什么。
这一章的内容就到这里。后面的章节,我们会深入每个模块,手把手带你调参、避坑、实战。准备好了吗?