直接给总结,整体上orbslam3(仅考虑带imu)在初始化阶段是松耦合,localmap和全局地图优化是紧耦合。而vins mono则是全程紧耦合。然后两者最大的区别就在于vins mono其实没有对地图点进行优化,为了轻量化,它一直在做的事情其实就是在做关键帧位姿的优化,地图点仅仅在localmap阶段直接对每个点做三角化生成的(在localmap和全局优化阶段都没有对地图点进行优化)。所以vins mono的地图点就是拿来看的,无论是定位还是建图都是在和关键帧位姿图打交道,没用到地图点。而orbslam3则是在localmap和全局优化阶段都会对地图点进行优化,所以它的地图点会比较准确,也会参与定位,所以鲁棒性会更高,同时计算量也更大。
1.初始化
内容 | ORB-SLAM3 | VINS-Mono |
---|---|---|
初始化目的 | 建立视觉地图 + 后续重定位/回环 | 初始化 VIO 状态:位姿、速度、重力、bias |
是否 tightly-coupled 初始化 | ❌ 否,视觉先建图后 IMU 对齐 | ✅ 是,IMU 和视觉一开始就联合初始化 |
是否支持不带IMU运行 | ✅ 支持纯视觉初始化 | ❌ 不支持(VINS 必须有 IMU) |
ORB-SLAM3和VINS-Mono是两种基于不同理论框架的视觉SLAM系统,它们的初始化过程在目标、方法和对传感器数据的处理上存在显著差异。以下是两者的详细对比:
1. 初始化目标
ORB-SLAM3 VINS-Mono 主要目标:构建一个准确的稀疏特征点地图并初始化相机位姿,适用于长期定位和地图复用。 主要目标:快速恢复相机-IMU的外参、尺度、重力方向、速度等,实现紧耦合的视觉-惯性融合。 依赖纯视觉初始化,后续融合IMU(若存在)。 必须依赖IMU数据,视觉初始化仅为辅助。 2. 初始化的触发条件
ORB-SLAM3 VINS-Mono 纯视觉模式:需连续成功匹配两帧间的特征点(基础矩阵/单应矩阵)并三角化出3D点。 视觉-惯性模式:需满足以下条件:
- IMU预积分达到一定时间(默认≥1秒);
- 视觉成功计算滑动窗口中所有帧的位姿(SFM)。视觉-惯性模式:需视觉初始化成功后,再通过IMU数据优化尺度、重力方向等。 若纯视觉初始化失败,系统会持续等待IMU数据满足条件。 3. 初始化方法细节
ORB-SLAM3
特征匹配与几何验证:
提取ORB特征,匹配连续两帧的特征点。
计算基础矩阵(Fundamental Matrix)或单应矩阵(Homography),选择更适合的模型(基于评分)。
三角化地图点:
从匹配的特征点中三角化出初始3D点,构建稀疏地图。
全局BA优化:
对初始帧和地图点进行Bundle Adjustment(BA)优化。
视觉-惯性扩展(若启用IMU):
通过IMU数据优化尺度、重力方向,并初始化速度、IMU偏置等参数。
VINS-Mono
IMU预积分:
在滑动窗口内预积分IMU数据,计算帧间相对运动(旋转、速度、位置变化)。
纯视觉SFM(Structure from Motion):
使用8点法或5点法计算帧间位姿,三角化特征点,构建局部地图。
通过PnP和全局BA优化滑动窗口内所有帧的位姿。
视觉-惯性对齐:
紧耦合优化:将视觉和IMU的约束联合优化,初始化所有状态量。
4. 对IMU的依赖
ORB-SLAM3 VINS-Mono IMU是可选的。纯视觉模式无需IMU,视觉-惯性模式需视觉初始化成功后才融合IMU。 IMU是必需的。初始化阶段直接依赖IMU数据,视觉仅提供初始位姿估计。 IMU参数(如偏置)在初始化后通过优化逐步修正。 IMU参数(如偏置、外参)在初始化阶段即被显式估计。 5. 初始化的鲁棒性
ORB-SLAM3 VINS-Mono 优点:纯视觉初始化对静止场景或低动态环境更鲁棒。
缺点:依赖特征匹配质量,纹理缺失时易失败;视觉-惯性模式下需等待视觉初始化完成。优点:IMU提供运动激励,在快速运动或纹理缺失时更鲁棒。
缺点:需足够的IMU激励(如加速度变化),否则尺度估计可能不准。6. 典型失败场景
ORB-SLAM3 VINS-Mono - 场景纹理不足,特征匹配失败。
- 纯旋转运动导致三角化失效。- IMU静止或匀速运动,导致尺度不可观。
- 视觉SFM失败(如动态物体过多)。7. 总结
维度 ORB-SLAM3 VINS-Mono 核心思想 先视觉后惯性,分阶段初始化。(松耦合) 视觉-惯性紧耦合联合初始化。 速度 较慢(需视觉收敛)。 较快(IMU提供即时运动估计)。 适用场景 静态或低速场景,长期定位。 高动态、快速运动场景。 代码复杂度 较高(多阶段逻辑)。 较高(紧耦合优化)。 ORB-SLAM3初始化流程:
视觉匹配 → 三角化 → BA优化 →(若IMU)→ 视觉-惯性对齐VINS-Mono初始化流程:
IMU预积分 → 视觉SFM → 视觉-惯性松耦合对齐 → 紧耦合优化两者初始化过程的差异反映了其设计哲学:ORB-SLAM3以视觉为主导,IMU为辅助;而VINS-Mono将IMU视为核心,视觉用于约束漂移。选择取决于应用场景(如是否需要高频输出或应对快速运动)。
2.Localmap阶段
ORB-SLAM3 和 VINS-Mono 在
LocalMap
阶段虽然都做局部优化,但本质差异非常大,主要体现在:✅ 总体定位:LocalMap 阶段的作用
系统 LocalMap 目的 ORB-SLAM3 建立/维护局部地图、BA优化、提升追踪准确性 VINS-Mono 滑动窗口内紧耦合优化(视觉+IMU)以输出精确轨迹 🔍 核心差异对比(结构化总结)
对比项 ORB-SLAM3 VINS-Mono 核心数据结构 局部关键帧集合 + 地图点 滑动窗口帧 + 特征点 + IMU测量 IMU 融合方式 可选,松耦合/紧耦合,构造虚拟观测加入BA 强紧耦合(IMU预积分 + 视觉重投影一起优化) 优化目标(变量) 关键帧位姿 + 地图点位置 + IMU偏置 所有滑窗内帧的位姿、速度、bias + 地图点 优化方法 局部 Bundle Adjustment (BA) 滑动窗口非线性优化(通常基于 Ceres) 地图点来源 特征点三角化自多个关键帧 特征点在滑窗中两帧间三角化 处理频率 通常在后台触发或关键帧插入时触发 实时持续进行,每帧新图像都优化 地图点更新/剔除机制 地图点维护机制,融合、剔除、替换 无全局地图点维护,点只在滑窗内短暂存在 与回环连接 可以触发全局BA、Pose Graph、关键帧融合 回环仅4DoF图优化,不作用于局部地图点 输出内容 优化后的当前帧位姿 + 局部地图点 精确的当前帧轨迹(平滑连续)
🧠 更深入地讲讲每个系统的设计哲学
🔷 ORB-SLAM3 的 LocalMap 特征:
更偏向 地图维护 与 跟踪精度提升;
在
Tracking
模块中,根据当前帧位置选出最近的局部关键帧和地图点;然后进行 PnP + 局部 BA;
IMU 部分在 LocalMap 阶段只是可选增强(松耦合时构造边),不一定每次都用;
非实时优化,重点在于稳定建图。
📌 优点:
地图一致性更好;
支持回环后地图修正;
支持大规模建图。
🔶 VINS-Mono 的 LocalMap 特征:
本质是一个滑动窗口优化器;
维护一个固定长度(如 10 帧)的窗口;
每次新图像进来,旧帧被边缘化,加入新帧后重新优化;
优化内容非常全面(视觉、IMU、bias),但只在小范围内;
输出非常平滑、低延迟的轨迹。
📌 优点:
轨迹估计非常精确;
系统适合实时状态估计(如无人机、AR);
融合 IMU 的能力非常强。
🎯 总结一句话
ORB-SLAM3 的 LocalMap 更像是“地图构建 + 关键帧优化”的局部图优化,而 VINS-Mono 的 LocalMap 则是一个滑动窗口内的“紧耦合状态估计器”,重点完全不同
3. Altas地图管理系统
由于vins mono没有地图管理系统,这里不需要比较。
4. 前端视觉里程计
项目 | ORB-SLAM3 前端 VO | VINS-Mono 前端 VO |
---|---|---|
主目标 | 快速建图 + 建立局部地图点 + 保持轨迹连续性 | 提供精确的位姿估计供 IMU 融合(VIO) |
特征提取 | ORB 特征(快速 + 稀疏) | FAST + Shi-Tomasi 特征(稀疏,但更鲁棒) |
匹配方式 | 基于 ORB 特征匹配(双向匹配 + RANSAC) | 基于 KLT 光流跟踪(图像金字塔) |
深度来源 | 建图期间通过三角化生成地图点 | 通常只使用单帧对之间的视差,形成临时点 |
位姿估计方法 | PnP(当前帧 vs 参考帧) + 局部 BA | 光流跟踪 + 三角化 + 非线性最小化 |
是否持续建图点 | ✅ 是,持续维护地图点,供回环和重定位使用 | ❌ 否,只在滑窗中临时存在 |
IMU 使用情况 | 可选(Loosely-或Tightly-coupled) | 紧耦合(与视觉始终联合优化) |
是否有 KeyFrame 策略 | ✅ 有,关键帧维护机制驱动地图构建 | ✅ 有,滑窗内关键帧驱动优化窗口 |
前端优化方式 | Local BA(对局部关键帧和地图点优化) | Sliding Window Optimization(只对滑窗内位姿优化) |
运行频率 | 可做到实时,但更偏地图构建 | 高频,追求低延迟和高精度 |
对地图依赖性 | 强,需维护地图点和其观测 | 弱,不依赖地图点长时稳定存在 |
📌 核心设计差异详解
1. ⭐ 视觉特征处理方式:
ORB-SLAM3:
使用 ORB 特征(方向 + 不变性强);
匹配时使用BoW + 特征描述子匹配;
构建地图点、三角化、融合地图。
VINS-Mono:
使用光流法(Lucas-Kanade + 金字塔)进行帧间跟踪;
精度高,时间延迟低;
不依赖描述子,适合 IMU 联合优化。
2. ⭐ 位姿估计策略:
ORB-SLAM3:
当前帧通过与参考关键帧进行 2D-3D PnP 位姿估计;
然后再进行局部 BA 优化,联合多个关键帧和地图点。
VINS-Mono:
用光流跟踪特征点(2D-2D),再进行三角化;
联合 IMU 做紧耦合滑窗优化,解算当前帧位姿;
位姿不是直接由 PnP 得到,而是联合优化残差后的结果。
3. ⭐ 地图点维护策略:
ORB-SLAM3 会将地图点作为图优化中的长期变量来维护,供回环、重定位、地图优化用;
VINS-Mono 中的地图点只用于滑动窗口内的三角化,不进入长期地图,也不用于回环后的地图修正。
4. ⭐ 与 IMU 的配合方式:
ORB-SLAM3:
IMU 是可选组件,松耦合或紧耦合可配置;
初始化阶段可用视觉轨迹辅助 IMU 对齐;
前端本身可单独运行纯视觉 VO。
VINS-Mono:
天生为 VIO 设计,IMU 是不可或缺的;
从初始化开始就是视觉 + IMU 紧耦合;
视觉只为辅助 IMU 精确建模。
✅ 总结一句话:
ORB-SLAM3 的前端视觉里程计以“构建可维护地图”为目标,强调特征匹配与三角化建图;而 VINS-Mono 的前端则以“高频、精确、轻量”的 VIO 输入为目标,强调光流跟踪与 IMU 紧耦合优化。
5. 回环检测
项目 | ORB-SLAM3 | VINS-Mono |
---|---|---|
回环检测触发方式 | BoW(词袋)+ 关键帧图检索 | BoW(词袋)+ 关键帧间相似性 |
使用数据 | ORB 特征 + 词袋向量 | 特征点(光流跟踪)+ 词袋向量 |
回环验证方式 | 2D-3D PnP + Sim(3) 优化 | 2D-2D 单应性/基础矩阵 + 4DoF PGO |
回环后处理 | 生成闭环约束,触发全局 BA 或 Pose Graph 优化(Sim(3)) | 只做 4DoF Pose Graph 优化(x, y, z, yaw) |
地图点处理 | 触发地图点融合、全图优化 | 地图点不参与优化,仅关键帧位姿调整 |
对地图影响 | 可全局修正,地图点更新 | 仅优化位姿,不修正地图点 |
回环闭合类型 | 强闭环(全局地图重构) | 弱闭环(轨迹位姿约束) |
IMU 耦合影响 | 可进行 Sim(3)+IMU 联合优化(闭环后) | 回环中 IMU 信息基本不再使用 |
后端优化类型 | 全局 Bundle Adjustment / Pose Graph | Pose Graph Optimization(4DOF) |
典型效果 | 地图结构大幅校正,重定位能力强 | 校正轨迹漂移,结构一致性较弱 |
🔍 关键点详细对比
1️⃣ 回环检测触发机制
ORB-SLAM3:
利用 BoW(词袋)对关键帧之间进行图检索;
基于 ORB 特征生成描述子向量,快速查找潜在回环帧;
匹配后使用 2D-3D PnP 和 Sim(3) 优化验证匹配精度和尺度一致性。
VINS-Mono:
同样使用词袋进行图检索;
匹配后用**2D-2D(单应/基础矩阵)**粗匹配+滑动窗口相似性验证;
不再使用地图点进行 3D 验证,匹配更为宽松,效率高但鲁棒性稍弱。
2️⃣ 回环后的优化策略
ORB-SLAM3:
成功匹配后构建 Sim(3) 闭环约束(包括尺度);
构造优化图(Pose Graph),加入闭环边;
通常会触发全局 BA(Bundle Adjustment)或 Pose Graph 优化;
同时融合重复地图点,调整整个地图结构,精度极高。
VINS-Mono:
成功匹配后,仅加入4DoF 闭环边(x, y, z, yaw);
执行全局 4DoF Pose Graph Optimization;
并不会融合地图点,也不会进行全局 BA;
更偏向于校正轨迹而不是地图本体。
3️⃣ 地图点与结构维护差异
ORB-SLAM3:
地图点是长期维护资源;
回环可触发地图点融合(MapPoint merge);
新建地图后会进行结构校正,保证地图一致性;
重定位、重建时可用地图点 PnP 精准恢复。
VINS-Mono:
地图点只存在于滑动窗口中;
回环不会触发地图点融合;
不做全局地图维护,地图点不可复用;
重定位时仅依靠关键帧位置约束。
4️⃣ 对系统漂移与结构一致性的影响
ORB-SLAM3:
长期运行后仍可保证地图一致性;
地图和轨迹双重矫正;
回环后的地图可以用于可视化、AR、再定位等应用。
VINS-Mono:
长期运行可能存在地图点漂移、结构误差;
轨迹偏差被修正,但地图结构未修正;
回环主要作用是“轨迹拉直”,非重建地图。
5️⃣ 性能与实时性
ORB-SLAM3:
回环检测和处理相对复杂,适合计算资源较强设备;
可后台异步处理,线程间协调。
VINS-Mono:
回环检测简化、只优化位姿图;
实时性好,轻量,适合嵌入式或移动设备。
✅ 总结一句话:
ORB-SLAM3 的回环检测是“重建型”回环,强调地图一致性与闭环融合;而 VINS-Mono 的回环是“校正型”回环,主要校正轨迹并保持轻量,适合实时系统