2. 视觉SLAM基础
视觉SLAM(Simultaneous Localization and Mapping)要解决的是一个“鸡生蛋、蛋生鸡”的耦合问题:机器人要在未知环境中同时估计自身运动轨迹,并构建环境地图。轨迹依赖地图做定位,地图又依赖轨迹做拼接,两者互为条件。因此SLAM本质上是一个在线、增量、带噪声的联合估计问题,而不是先建图再定位的串行流程。
一、SLAM问题的数学描述
设机器人在离散时刻 t = 1, 2, ..., T 的状态为 x_t(通常包含位姿,双目/惯性系统中还可能包含速度、零偏),观测为 z_t,地图为 m。SLAM要求估计后验概率:
P(x_{1:T}, m | z_{1:T}, u_{1:T})
其中:
x_{1:T} 机器人轨迹(待估计)
m 地图(路标点/栅格/面元,待估计)
z_{1:T} 传感器观测(图像特征、像素、IMU等)
u_{1:T} 运动输入(轮速、IMU预积分、控制量)
工程上通常把它拆成两个可计算的部分:前端负责数据关联与帧间/帧到地图的位姿初估计,后端负责对位姿和地图做全局优化,消除累积漂移。前端决定“能不能跑”,后端决定“跑得准不准”。
二、传感器分类与观测模型
SLAM传感器可按“是否直接测运动”和“是否直接测环境几何”两个维度分类。理解这一点,才能理解单目与双目差异的根源。
| 类别 | 典型传感器 | 提供的信息 | 在SLAM中的角色 |
|---|---|---|---|
| 本体感知 | 轮式编码器、IMU | 自身运动增量、角速度、加速度 | 运动预测、尺度观测(IMU) |
| 外部感知-主动 | 激光雷达、RGB-D、结构光 | 直接深度/点云 | 直接建图,尺度天然已知 |
| 外部感知-被动 | 单目相机、双目相机 | 图像(像素亮度) | 特征/光度约束,需恢复深度 |
| 辅助 | GNSS、磁力计、气压计 | 全局位置/姿态/高度 | 全局约束、消除漂移 |
被动视觉的核心困难在于:单张图像丢失了深度信息。像素只给出方向,不给出距离。因此视觉SLAM必须通过“运动”或“多视角”来恢复三维结构,这就是三角化的来源。
三、单目与双目SLAM的差异与联系
单目SLAM用相邻帧的视差三角化路标,尺度不可观测:把整个场景和轨迹同时放大或缩小,投影到图像上完全一致。因此单目SLAM只能得到“相对尺度”的轨迹和地图,无法回答“走了多少米”。双目SLAM通过左右相机基线与视差,在每一帧即可计算像素深度 Z = f·B / d,尺度由基线 B 和焦距 f 直接确定,因此天然具备绝对尺度。
但两者并非对立。双目SLAM在退化场景(纹理缺失、远距离、强光)中,若某帧立体匹配失败,仍可退化为单目模式,用帧间三角化维持跟踪;单目SLAM若加入IMU,通过加速度计观测重力与运动,也能恢复尺度。这说明“尺度可观测性”取决于系统中是否存在提供绝对长度或绝对运动的约束,而不是相机数量本身。
四、典型场景与工程取舍
在室内服务机器人上,若使用单目SLAM,常见做法是加入轮式编码器或IMU提供尺度与重力方向,否则建出的地图无法与真实房间尺寸对应,导航层无法使用。在无人机、AR眼镜等对重量和功耗敏感的场景,双目基线受体积限制,远距离深度误差随 Z² 增长,此时往往采用双目+IMU紧耦合,用IMU短时高精度运动约束弥补立体匹配在远端的不足。
f·B 乘积是否与标定文件一致。
五、常见误区与复盘
- 误区一:双目一定比单目准。 在近距离纹理丰富场景,双目深度确实稳定;但在远距离、低纹理、强逆光下,双目视差趋近于零,深度不确定性急剧放大,此时单目+IMU的帧间约束可能更鲁棒。
- 误区二:单目没有尺度就不能用。 单目SLAM的相对轨迹在局部一致,可用于避障、回环检测和相对导航;只要不要求绝对米制,它依然有效。
- 误区三:把尺度恢复当成一次性标定。 尺度是随轨迹和地图联合估计的状态量,会随优化窗口变化,必须持续维护,而不是启动时算一次就固定。
复盘时可用一个简单判据:系统里是否存在“绝对长度”或“绝对运动”的观测源。有,则尺度可观测;没有,则只能得到相似变换下的解。单目、双目、RGB-D、激光的差异,本质上都是这条判据在不同传感器配置下的具体表现。