本文目录导读:

什么是视觉里程计?
视觉里程计(Visual Odometry,简称VO)是一种仅通过分析连续图像序列(例如来自摄像头),来估计自身运动(特别是位置和姿态)的技术。
可以这样理解:它就像一个“视觉导航员”,通过观察周围环境的变化(比如路边的树、墙角的纹理),来判断自己正在朝哪个方向移动,移动了多远。
核心目标: 增量式地恢复相机的运动轨迹,即计算出每一帧图像相对于上一帧的旋转矩阵 (\mathbf{R}) 和平移向量 (\mathbf{t})。
与里程计的关系: 这个名字借鉴了轮式里程计(Wheel Odometry)和惯性测量单元(IMU),传统的轮式里程计通过轮子转圈数推算距离,但容易打滑;VO 则通过“看”来推算,没有打滑问题,但受光照、纹理等影响。
为什么需要视觉里程计?
- 无GPS环境下的定位: 在室内、地下、水下、森林或太空等GPS信号弱或不可用的场景,VO是自主定位的核心方法。
- 辅助其他传感器: 可以与IMU、激光雷达、GPS等传感器融合(形成VIO、SLAM系统),提供更鲁棒、更精确的定位,VO可以在GPS短时失效时进行补充。
- 成本低、信息丰富: 相比激光雷达,摄像头非常便宜,而且图像包含了丰富的纹理和语义信息,可用于场景理解、目标检测等高级任务。
- 应用于机器人、无人机、AR/VR、自动驾驶: VO是这些领域实现自主导航、姿态跟踪的基础技术。
视觉里程计的核心工作原理
VO的核心工作流程通常遵循一个经典的 同步估计与映射 思路,但VO通常只专注于短期轨迹,而不会去维护一个全局一致的地图(那是SLAM的任务),典型的VO流程包含以下四个关键步骤:
-
图像获取与预处理:
- 获取: 从摄像头(单目、双目或RGB-D)获取连续的图像帧。
- 预处理: 去畸变、直方图均衡化、图像缩放等,以减少噪声和光照影响,提高后续步骤的鲁棒性。
-
特征提取与匹配(核心步骤):
- 特征提取: 在每一帧图像中,找出一些具有显著性的点(角点、斑点等),并为其计算一个描述子(例如SIFT、SURF、ORB特征),这些点通常是图像中纹理丰富的区域(如墙角的边缘、书页上的文字)。
- 特征匹配: 将当前帧提取的特征点与上一帧的特征点进行匹配,建立对应关系,这一步非常关键,错误的匹配会导致后续运动估计失败,常用的匹配算法包括暴力匹配、FLANN匹配,并会使用RANSAC(随机抽样一致性)来剔除误匹配。
-
运动估计(从2D到3D): 这是VO的核心数学过程,根据所用的摄像头类型,方法不同:
-
2D-2D(单目VO的初始化或纯视觉):
- 利用两帧之间匹配的2D像素点,通过对极几何约束来求解。
- 需要求解基础矩阵 (\mathbf{F}) 或本质矩阵 (\mathbf{E})。
- 输出: 两帧之间的旋转和平移,但平移的方向已知,尺度未知(单目相机存在尺度模糊性)。
-
3D-2D(最常用的方法,双目或单目初始化后):
- “3D”点来自上一帧恢复的深度(可通过双目视差或三角化已知的匹配点得到),“2D”点来自当前帧的观测。
- 这是一个经典的PnP(Perspective-n-Point) 问题。
- 输出: 可以直接求解出当前帧相对于上一帧的位姿,且尺度已知,这是最稳健和常用的方法。
-
3D-3D(双目或RGB-D相机):
- 两帧图像都已知完整的3D点云。
- 通过ICP(Iterative Closest Point,迭代最近点) 算法来对齐两组点云,从而求解旋转和平移。
-
-
局部优化与轨迹更新:
- 将估计出的相对位姿累积起来,形成完整的运动轨迹。
- 局部光束法平差(Bundle Adjustment,BA): 为了避免误差累积,VO通常会维护一个小的、滑动窗口的优化问题,它会同时优化窗口内的所有相机位姿和地图点的3D位置,使得重投影误差最小化,这是提高精度的关键一步。
- 输出: 更新后的、平滑的相机轨迹。
视觉里程计的主要分类
根据摄像头类型和算法重点,VO有不同分类:
-
按摄像头类型:
- 单目VO: 结构简单、成本低,但尺度不可知(无法知道物体真实大小),需要其他传感器或运动假设来恢复尺度,精度相对较低。
- 双目VO: 通过基线距离可以直接计算深度,尺度已知,精度较高,但标定和计算量更大。
- RGB-D VO: 直接提供深度图(例如Kinect),深度准确,适合室内场景,但受环境光影响大,室外效果差。
-
按算法流派:
- 特征点法VO: 主流方法,提取并匹配特征点(如ORB-SLAM中的ORB特征),优点是鲁棒性好,对光照、运动模糊有一定容忍度,缺点是特征提取和匹配耗时,可能丢失纹理弱的区域。
- 直接法VO: 不提取特征点,而是直接基于图像的像素亮度来进行运动估计(如LSD-SLAM、DSO),优点是快速,在纹理丰富或运动模糊时表现好,能利用边缘和半稠密信息,缺点是对光照变化敏感,容易陷入局部最优。
视觉里程计 vs. 视觉SLAM
这是一个常见的模糊点,可以这样区分:
| 特性 | 视觉里程计 (VO) | 视觉SLAM (V-SLAM) |
|---|---|---|
| 核心目标 | 短期、增量式地估计运动轨迹,强调实时性和局部一致性。 | 同时估计相机轨迹和构建全局一致的地图,强调全局回环检测和地图修正。 |
| 地图 | 通常只维护一个短期、局部的地图或特征点云,用于跟踪。 | 维护一个全局的、持久的地图,并做回环检测来消除累积误差。 |
| 全局优化 | 有,但受限:通常只做局部的滑动窗口BA,不进行全局回环修正。 | 有,且是核心:进行全局的位姿图优化或BA,利用回环检测闭合全局误差。 |
| 典型输出 | 一条平滑的短期轨迹,用于局部导航或高频控制。 | 一个全局一致的地图 + 完整的、经全局修正的轨迹,用于导航、规划、建图。 |
| 容错性 | 相对较低,一旦跟踪丢失,只能重新初始化。 | 高,检测到回环后可以重新定位。 |
一句话总结: VO更侧重于高频、低延迟的局部运动估计,是SLAM的前端;而SLAM在VO基础上增加了全局优化和回环检测,解决累积误差。
挑战与局限性
- 累积误差: 即使每个小步骤误差很小,从第一帧到最后一帧的累积误差会越来越大,导致轨迹漂移(这是VO的核心弱点,也是SLAM通过回环解决的根本问题)。
- 光照和场景变化: 光照剧烈变化、快速运动模糊、低纹理区域(如白墙、雪地)、动态物体(行人、车辆)都会导致特征跟踪失败。
- 纯旋转: 如果相机只进行纯旋转(没有平移),无法通过2D-2D方法恢复深度和运动。
- 计算资源: 高分辨率、高帧率的图像处理、特征提取和BA优化对计算能力要求较高。
视觉里程计是一个优雅而强大的技术,它利用最直观的视觉信息解决了“我在哪,要去哪”的基本问题,它广泛应用于机器人、自动驾驶、AR/VR等领域。
- 简单理解: 通过看连续的照片,计算出自己的运动轨迹。
- 核心流程: 图像 -> 特征点 -> 匹配 -> 通过几何关系算出运动 -> 优化。
- 重要分类: 单目(尺度未知)、双目(尺度已知)、特征点法(鲁棒)、直接法(快速)。
- 和SLAM的关系: VO是SLAM的快速、短期的前端,而SLAM是有全局视野和记忆能力的完整系统。
希望这个回答能帮助你全面理解视觉里程计,如果你对某个具体步骤(比如对极几何、PnP解法、BA优化)或其应用(比如VIO)感兴趣,可以继续探讨。