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 的紧耦合方案。

避坑指南:我曾经在动态场景下吃过亏——有人走过就把特征点匹配带偏了。前端一定要加异常剔除,比如 RANSAC 或者基于卡方检验的拒判。别信「纯匹配」能搞定一切。

1.3 后端:优化与一致性维护

前端给的位姿是「短时估计」,误差会累积。后端的作用,就是把这些误差摊平,让整个轨迹和地图保持一致。

后端优化有两种主流思路:

  1. 滤波方法(EKF):只维护当前状态,计算快,但线性化误差大。适合小场景、低算力平台。
  2. 图优化(Graph Optimization):把位姿和路标点建成图,用非线性最小二乘整体优化。精度高,但计算量大。现在主流 SLAM 系统基本都用图优化。

我个人的习惯是:如果场景小于 100 平米,EKF 够用;超过这个范围,老老实实上图优化。别为了省算力牺牲精度,后面导航会还回来的。

1.4 地图表示:从稀疏到稠密

SLAM 的最终产出是地图。但地图长什么样,取决于你要用它干什么。

建图与导航对地图的需求完全不同:

地图类型 建图用途 导航用途 典型代表
稀疏特征地图 定位用,只存路标点 不能直接导航 ORB-SLAM 的地图
稠密点云地图 可视化、三维重建 需要降采样成栅格 RTAB-Map 的点云
占据栅格地图 建图时生成 路径规划直接使用 GMapping、Cartographer
TSDF / ESDF 高精度重建 用于避障和轨迹优化 Voxblox、FIESTA
双核心思维在这里体现:建图阶段,我建议输出两种地图——一份稀疏特征图用于定位,一份占据栅格图用于导航。别指望一张地图打天下,那是新手思维。

1.5 SLAM 全链路框架图

下面这张图,是我自己总结的 SLAM 全链路流程。每次带新人,我都会先让他们看这张图,把每个模块的输入输出搞清楚,再动手调参。

SLAM 全链路框架图 SLAM 全链路框架 传感器(相机/激光/IMU) 原始数据(图像/点云/IMU) 预处理(去畸变/同步) 前端:特征提取 + 数据关联 帧间匹配 / 特征点跟踪 前端:位姿估计 PnP / ICP / 直接法 后端:图优化 / 滤波 BA / Pose Graph / EKF 回环检测 词袋模型 / Scan Context 稀疏特征地图 用于定位 占据栅格地图 用于导航 稠密点云 / TSDF 用于重建 双核心思维:建图关注「一致性」,导航关注「可行性」,两者在地图表示层分道扬镳 调参时先确定你要优化哪个核心,再针对性调整对应模块的参数

1.6 双核心思维模型:建图 vs 导航

好,现在我们把整个链路走完了。最后我想重点说说「双核心思维」——这是贯穿整个课程的主线。

建图核心:目标是让地图「准」。你希望地图里的每个点、每条边都和真实世界对得上。所以建图调参的重点在:

  • 传感器标定要准(内参、外参、时间戳对齐)
  • 前端匹配要稳(特征提取参数、匹配阈值)
  • 后端优化要收敛(迭代次数、核函数、信息矩阵)
  • 回环检测要可靠(词袋规模、几何验证)

导航核心:目标是让路径「通」。地图有点误差没关系,但机器人不能撞墙、不能卡死。导航调参的重点在:

  • 代价地图的膨胀半径、障碍物阈值
  • 全局路径规划的启发式权重、平滑度
  • 局部路径规划的速度限制、避障灵敏度
  • 恢复行为触发条件
我曾经犯过的错:有一回做仓储机器人,建图精度很高,但导航老是绕远路。后来发现是代价地图的膨胀半径设得太小,机器人贴着障碍物走,路径规划器以为能过,实际过不去。调大膨胀半径后,路径虽然长了点,但机器人一次都没卡住。这就是典型的「建图好但导航差」——两个核心要分开调。

所以,从今天开始,我希望你养成一个习惯:拿到一个 SLAM 系统,先问自己——我现在是在优化建图,还是在优化导航?这两个目标有时候冲突,但你必须清楚当前在做什么。

这一章的内容就到这里。后面的章节,我们会深入每个模块,手把手带你调参、避坑、实战。准备好了吗?