06-定位与SLAM-视觉SLAM入门

作者:姚博文 · 2026-09-15

视觉SLAM入门 — 用相机"看清"自己在哪:特征法 / 直接法 / VIO 与智能小车落地

定位: 一句话——视觉SLAM是"只用相机(±IMU)同时估计相机位姿并建图"的定位与建图技术, 是小车在无GPS、无激光环境下定位的主要候选方案。
适用: 智能小车/移动机器人开发

1\. 概述

1.1 这篇解决什么问题

激光SLAM(见同目录《激光SLAM》)依赖测距传感器, 而相机更便宜、信息量更大(颜色/纹理/语义), 是消费级机器人和多数高校项目的首选视觉前端。视觉定位技术按能力从弱到强排成一条链:

| 技术 | 英文 | 输入 | 输出 | 有没有地图 | 有没有IMU |

| --- | --- | --- | --- | --- | --- |

| 视觉里程计 | Visual Odometry (VO) | 连续图像 | 相邻帧间相对位姿 | 无 | 可选 |

| 视觉SLAM | Visual SLAM | 图像 | 全局位姿 + 稀疏地图 | 有(稀疏点云) | 可选 |

| 视觉惯性里程计 | Visual-Inertial Odometry (VIO) | 图像 + IMU | 米制绝对尺度位姿 | 无/滑动窗口 | 必须 |

| 视觉惯性SLAM | Visual-Inertial SLAM (VI-SLAM) | 图像 + IMU | 全局位姿 + 地图, 尺度绝对 | 有 | 必须 |

本篇讲清四件事:

1. 特征法(feature-based) 与直接法(direct method) 两条技术路线各自怎么工作(以 ORB-SLAM2/3、DSO 为代表);

2. VIO 为什么是"单体视觉 + IMU"的破局点(尺度问题);

3. 智能小车上"VIO + 轮式里程计"融合是怎么落地的(含可运行代码);

4. 从公开数据集跑到实车上, 常见的坑与排查方法。

1.2 在自主导航链路中的位置

回顾总链路(见 `00-路线图/学习路线图.md`):

视觉SLAM 直接挂在**里程计 → 定位**这一环:

· **纯定位模式**: 已知地图上, VIO/SLAM 的位姿输出可替代轮式里程计, 喂给 Nav2 做导航(VIO 短期精度远好于轮式);

· **建图模式**: 未知环境里, 视觉SLAM 建稀疏地图 + 记录位姿轨迹; 要建可导航的栅格地图通常还要叠加激光/深度相机做 occupancy 栅格;

· **替代/增强激光**: 在激光被遮挡(玻璃、强光)或多层楼(需楼层信息)时, 视觉/视觉惯性是唯一可行的连续定位源。

💡 路线图中阶段 E4 "ORB-SLAM3 跑通室内序列" 的验收标准就是本篇的产物: 先在 PC 上跑通公开数据集并评估误差, 再考虑上小车。小车上视觉SLAM 的定位输出通常作为 Nav2 的 odom 来源, 而不是直接当 map 坐标系用(map 坐标系需要地图匹配或回环来"锚定")。

1.3 与《定位与状态估计》的分工

· 《定位与状态估计》: 讲 EKF 框架、TF 树、AMCL——**"怎么融合、怎么表示"的通用语言**;

· 本篇: 讲视觉前端\*\*"从像素到位姿"\*\*的具体算法, 以及 VIO 这种特殊融合源的工程落地。

· 相机内参/畸变/外参标定细节在 `04-传感器与感知/相机与标定.md`, 本篇默认你已完成相机标定。

· * *

2\. 基本原理

2.1 共同框架: 前端 + 后端 + 回环

所有视觉SLAM 系统(ORB-SLAM2/3、DSO、VINS-Mono…)都长一个样: