2. 视觉SLAM基础

视觉SLAM(Simultaneous Localization and Mapping,同时定位与建图)要解决的核心问题是:一台搭载相机的移动平台,在未知环境中运动时,如何仅凭图像序列,实时估计自身的运动轨迹,并同时构建出环境的地图。这个定义里藏着两个互相耦合的任务——定位需要地图作为参照,建图又需要准确的位姿作为基础,二者互为条件,这正是SLAM区别于单纯里程计或单纯三维重建的关键难点。

从概率角度看,SLAM是一个后验估计问题:给定观测数据(图像特征、像素亮度等)和运动输入(轮速、IMU),求机器人状态(位姿、速度、路标点)的联合后验分布。工程上通常把它拆解为若干可实现的模块,形成一条从传感器到地图的完整数据链路。

2.1 传感器类型:视觉SLAM的输入从哪来

视觉SLAM的“视觉”二字决定了相机是主传感器,但不同相机配置带来的信息维度差异很大。单目相机成本最低,却存在尺度不确定性——仅凭单目图像无法区分“小物体近距离”和“大物体远距离”;双目相机通过左右目视差恢复绝对尺度,但需要精确标定和同步;RGB-D相机直接输出深度图,在室内近距离场景中非常方便,但受红外结构光或ToF的测量范围与光照干扰限制。此外,IMU提供高频角速度和加速度,可在图像帧间填补运动信息,视觉惯性SLAM(VIO)已成为主流方案;轮式编码器则常用于地面机器人,提供平面运动的粗略约束。

传感器选型的本质是权衡:单目轻量但尺度漂移,双目稳定但计算量大,RGB-D直接但范围受限,IMU高频但零偏需估计。工程中常采用“相机+IMU”组合,用视觉修正IMU漂移,用IMU弥补视觉快速运动时的跟踪丢失。

2.2 前端里程计:帧间运动如何估计

前端里程计负责从相邻图像帧中估计相机的相对运动,是整条链路的“心跳”。主流方法分为特征点法和直接法。特征点法先提取ORB、SIFT等关键点并计算描述子,再通过描述子匹配建立帧间对应关系,最后用对极几何或PnP求解位姿;直接法则跳过描述子,直接最小化像素光度误差,在纹理弱、特征少的场景中更有优势,但对光照变化敏感。

前端输出的位姿是“增量式”的,误差会随帧数累积,形成漂移。因此前端通常还会维护一个局部地图或滑动窗口,通过局部BA(Bundle Adjustment)对最近若干帧的位姿和路标点做联合优化,抑制短期漂移。前端的关键指标包括跟踪成功率、位姿估计精度和实时性,通常要求在30Hz以上运行。

2.3 后端优化与回环检测:消除累积误差

后端优化是SLAM的“大脑”,它把前端产生的位姿和路标点作为初值,构建一个大规模非线性最小二乘问题,用图优化方法求解。图中节点是待优化的位姿和路标点,边是观测约束(重投影误差、IMU预积分误差等)。常用的求解器包括g2o、Ceres Solver和GTSAM,核心算法是高斯-牛顿或列文伯格-马夸尔特迭代。

回环检测则是“记忆”机制:当相机重新经过曾经到过的地方时,识别出这一事实并建立当前帧与历史帧的约束,从而把累积漂移一次性拉回。回环检测通常用词袋模型(BoW)或深度学习描述子做场景识别,再通过几何验证排除误匹配。一个错误的回环会严重破坏地图,因此回环检测的准确率比召回率更重要。

视觉SLAM系统五大模块与数据流 传感器 单目 / 双目 / RGB-D IMU / 轮速计 前端里程计 特征提取与匹配 PnP / 对极几何 / 直接法 后端优化 图优化 / BA g2o / Ceres / GTSAM 回环检测 词袋 / 场景识别 几何验证 建图 稀疏点云 / 稠密地图 栅格 / 八叉树 / TSDF 回环约束 优化位姿 局部BA 模块职责速览 传感器:提供图像与惯性/里程信息,决定尺度与鲁棒性上限。 前端:帧间位姿估计,输出增量轨迹与局部地图,实时性要求最高。 后端:全局图优化,消除累积误差;回环:识别重访并建立长程约束;建图:输出可供导航/避障使用的地图。

2.4 建图模块:地图不只是给人看的

建图的输出形式取决于下游任务。稀疏特征点地图适合定位与重定位,但无法用于避障;稠密点云或TSDF(截断符号距离场)地图能恢复场景几何,适合导航和三维重建;栅格地图和八叉树地图则更贴近移动机器人路径规划的需求。在视觉SLAM中,建图通常与后端优化共享同一套路标点,回环修正后地图会整体更新,因此地图的一致性依赖于后端和回环的准确性。

2.5 模块协同与典型误区

五个模块并非线性流水线,而是存在多条反馈路径:前端局部BA的结果会送入后端作为初值,回环检测的约束会反馈到后端改变全局位姿,后端优化后的位姿又会更新建图结果。理解这些反馈关系,是排查SLAM系统问题的关键。

模块 核心输入 核心输出 常见问题
传感器 图像、IMU、轮速 同步后的观测数据 时间戳不同步、标定误差
前端里程计 相邻帧图像 相对位姿、局部地图 快速运动跟踪丢失、纹理弱
后端优化 位姿与路标初值、约束边 全局一致位姿 计算量过大、陷入局部最优
回环检测 历史帧与当前帧 回环约束 误回环导致地图扭曲
建图 优化后位姿、深度信息 点云/栅格/TSDF地图 地图漂移、动态物体污染
常见误区:把前端里程计当作完整SLAM,忽略回环与后端,导致长距离运行后轨迹严重漂移;或者盲目追求稠密建图而牺牲实时性,使系统无法在嵌入式平台运行。工程中应根据场景和算力,明确各模块的精度与频率预算。
复盘建议:当SLAM系统出现轨迹跳变时,先检查回环检测是否误触发;当轨迹缓慢弯曲时,优先排查前端标定与IMU零偏;当地图重影时,重点检查后端优化是否收敛以及回环约束是否正确。按“传感器→前端→后端→回环→建图”的顺序逐级排查,能快速定位问题模块。
# 典型视觉SLAM运行日志片段(示意)
[INFO] Frontend: tracked 312 features, inliers 287
[INFO] Frontend: PnP pose solved, reproj_err=0.42px
[INFO] Backend: local BA window=10, cost=1.83e+03
[INFO] Loop: candidate frame 142 matched, score=0.87
[INFO] Loop: geometric verification passed, adding constraint
[INFO] Backend: global BA converged, cost=4.21e+02
[INFO] Mapping: updated 58,432 points, TSDF integrated

掌握这五个模块的职责边界与数据流向,是后续学习回环检测与图优化工程实践的基础。只有先建立系统级认知,才能在面对具体算法和代码时,清楚每一步在整条链路中的位置与作用。