ORB-SLAM3和VINS-MONO的对比

news2025/5/12 19:14:05

 直接给总结,整体上orbslam3(仅考虑带imu)在初始化阶段是松耦合localmap全局地图优化是紧耦合。而vins mono则是全程紧耦合。然后两者最大的区别就在于vins mono其实没有对地图点进行优化,为了轻量化,它一直在做的事情其实就是在做关键帧位姿的优化,地图点仅仅在localmap阶段直接对每个点做三角化生成的(在localmap和全局优化阶段都没有对地图点进行优化)。所以vins mono的地图点就是拿来看的,无论是定位还是建图都是在和关键帧位姿图打交道,没用到地图点。而orbslam3则是在localmap全局优化阶段都会对地图点进行优化,所以它的地图点会比较准确,也会参与定位,所以鲁棒性会更高,同时计算量也更大。

1.初始化

内容ORB-SLAM3VINS-Mono
初始化目的建立视觉地图 + 后续重定位/回环初始化 VIO 状态:位姿、速度、重力、bias
是否 tightly-coupled 初始化❌ 否,视觉先建图后 IMU 对齐✅ 是,IMU 和视觉一开始就联合初始化
是否支持不带IMU运行✅ 支持纯视觉初始化❌ 不支持(VINS 必须有 IMU)

ORB-SLAM3和VINS-Mono是两种基于不同理论框架的视觉SLAM系统,它们的初始化过程在目标、方法和对传感器数据的处理上存在显著差异。以下是两者的详细对比:

1. 初始化目标

ORB-SLAM3VINS-Mono
主要目标:构建一个准确的稀疏特征点地图并初始化相机位姿,适用于长期定位和地图复用。主要目标:快速恢复相机-IMU的外参、尺度、重力方向、速度等,实现紧耦合的视觉-惯性融合。
依赖纯视觉初始化,后续融合IMU(若存在)。必须依赖IMU数据,视觉初始化仅为辅助。

2. 初始化的触发条件

ORB-SLAM3VINS-Mono
纯视觉模式:需连续成功匹配两帧间的特征点(基础矩阵/单应矩阵)并三角化出3D点。视觉-惯性模式:需满足以下条件:
- IMU预积分达到一定时间(默认≥1秒);
- 视觉成功计算滑动窗口中所有帧的位姿(SFM)。
视觉-惯性模式:需视觉初始化成功后,再通过IMU数据优化尺度、重力方向等。若纯视觉初始化失败,系统会持续等待IMU数据满足条件。

3. 初始化方法细节

ORB-SLAM3
  1. 特征匹配与几何验证

    • 提取ORB特征,匹配连续两帧的特征点。

    • 计算基础矩阵(Fundamental Matrix)单应矩阵(Homography),选择更适合的模型(基于评分)。

  2. 三角化地图点

    • 从匹配的特征点中三角化出初始3D点,构建稀疏地图。

  3. 全局BA优化

    • 对初始帧和地图点进行Bundle Adjustment(BA)优化。

  4. 视觉-惯性扩展(若启用IMU)

    • 通过IMU数据优化尺度、重力方向,并初始化速度、IMU偏置等参数。

VINS-Mono
  1. IMU预积分

    • 在滑动窗口内预积分IMU数据,计算帧间相对运动(旋转、速度、位置变化)。

  2. 纯视觉SFM(Structure from Motion)

    • 使用8点法或5点法计算帧间位姿,三角化特征点,构建局部地图。

    • 通过PnP和全局BA优化滑动窗口内所有帧的位姿。

  3. 视觉-惯性对齐

    • 紧耦合优化:将视觉和IMU的约束联合优化,初始化所有状态量。

4. 对IMU的依赖

ORB-SLAM3VINS-Mono
IMU是可选的。纯视觉模式无需IMU,视觉-惯性模式需视觉初始化成功后才融合IMU。IMU是必需的。初始化阶段直接依赖IMU数据,视觉仅提供初始位姿估计。
IMU参数(如偏置)在初始化后通过优化逐步修正。IMU参数(如偏置、外参)在初始化阶段即被显式估计。

5. 初始化的鲁棒性

ORB-SLAM3VINS-Mono
优点:纯视觉初始化对静止场景或低动态环境更鲁棒。
缺点:依赖特征匹配质量,纹理缺失时易失败;视觉-惯性模式下需等待视觉初始化完成。
优点:IMU提供运动激励,在快速运动或纹理缺失时更鲁棒。
缺点:需足够的IMU激励(如加速度变化),否则尺度估计可能不准。

6. 典型失败场景

ORB-SLAM3VINS-Mono
- 场景纹理不足,特征匹配失败。
- 纯旋转运动导致三角化失效。
- IMU静止或匀速运动,导致尺度不可观。
- 视觉SFM失败(如动态物体过多)。

7. 总结

维度ORB-SLAM3VINS-Mono
核心思想先视觉后惯性,分阶段初始化。(松耦合视觉-惯性紧耦合联合初始化。
速度较慢(需视觉收敛)。较快(IMU提供即时运动估计)。
适用场景静态或低速场景,长期定位。高动态、快速运动场景。
代码复杂度较高(多阶段逻辑)。较高(紧耦合优化)。

ORB-SLAM3初始化流程:
视觉匹配 → 三角化 → BA优化 →(若IMU)→ 视觉-惯性对齐

VINS-Mono初始化流程:
IMU预积分 → 视觉SFM → 视觉-惯性松耦合对齐 → 紧耦合优化

两者初始化过程的差异反映了其设计哲学:ORB-SLAM3以视觉为主导,IMU为辅助;而VINS-Mono将IMU视为核心,视觉用于约束漂移。选择取决于应用场景(如是否需要高频输出或应对快速运动)。

2.Localmap阶段

ORB-SLAM3VINS-MonoLocalMap 阶段虽然都做局部优化,但本质差异非常大,主要体现在:

✅ 总体定位:LocalMap 阶段的作用

系统LocalMap 目的
ORB-SLAM3建立/维护局部地图、BA优化、提升追踪准确性
VINS-Mono滑动窗口内紧耦合优化(视觉+IMU)以输出精确轨迹

🔍 核心差异对比(结构化总结)

对比项ORB-SLAM3VINS-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 前端 VOVINS-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-SLAM3VINS-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 GraphPose Graph Optimization(4DOF)
典型效果地图结构大幅校正,重定位能力强校正轨迹漂移,结构一致性较弱

 

🔍 关键点详细对比

1️⃣ 回环检测触发机制

  • ORB-SLAM3:

    • 利用 BoW(词袋)对关键帧之间进行图检索;

    • 基于 ORB 特征生成描述子向量,快速查找潜在回环帧;

    • 匹配后使用 2D-3D PnPSim(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 的回环是“校正型”回环,主要校正轨迹并保持轻量,适合实时系统


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 阻塞和非阻塞 I/O 简明指南

目录 声明 1. 阻塞和非阻塞简介 2. 等待队列 2.1 等待队列头 2.2 等待队列项 2.3 将队列项添加/移除等待队列头 2.4 等待唤醒 2.5 等待事件 3. 轮询 3.1 select函数 3.2 poll函数 3.3 epoll函数 4. Linux 驱动下的 poll 操作函数 声明 本博客所记录的关于正点原子…

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…

机器人手臂“听不懂“指令?Ethercat转PROFINET网关妙解通信僵局

机器人手臂"听不懂"指令?Ethercat转PROFINET网关妙解产线通信僵局 协作机器人(如KUKA iiWA)使用EtherCAT控制,与Profinet主站(如西门子840D CNC)同步动作。 客户反馈:基于Profinet…

深度学习 CNN

CNN 简介 什么是 CNN? 卷积神经网络(Convolutional Neural Network)是专为处理网格数据(如图像)设计的神经网络。核心组件: 卷积层 :提取局部特征(如边缘、纹理)通过卷…

MySQL索引原理以及SQL优化(二)

目录 1. 索引与约束 1.1 索引是什么 1.2 索引的目的 1.3 索引分类 1.3.1 数据结构 1.3.2 物理存储 1.3.3 列属性 1.3.4 列的个数 1.4 主键的选择 1.5 索引使用场景 1.6 索引的底层实现 1.6.1 索引存储 1.6.2 页 1.6.3 B 树 1.6.4 B 树层高问题 1.6.5 自增 id 1.7 innod…

MATLAB中矩阵和数组的区别

文章目录 前言环境配置1. 数据结构本质2. 运算规则(1)基本运算(2)特殊运算 3. 函数与操作4. 高维支持5. 创建方式 前言 在 MATLAB 中,矩阵(Matrix) 和 数组(Array) 的概…

Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写C#示例源码

本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bYhsS9c&ftt&id917152255720 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using S…

MySQL核心内容【完结】

MySQL核心内容 文章目录 MySQL核心内容1.MySQL核心内容目录2.MySQL知识面扩展3.MySQL安装4.MySQL配置目录介绍Mysql配置远程ip连接 5.MySQL基础1.MySQL数据类型1.数值类型2.字符串类型3.日期和时间类型4.enum和set 2.MySQL运算符1.算数运算符2.逻辑运算符3.比较运算符 3.MySQL完…

C++类和对象进阶 —— 与数据结构的结合

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 […

Django之账号登录及权限管理

账号登录及权限管理 目录 1.登录功能 2.退出登录 3.权限管理 4.代码展示合集 这篇文章, 会讲到如何实现账号登录。账号就是我们上一篇文章写的账号管理功能, 就使用那里面已经创建好的账号。这一次登录, 我们分为三种角色, 分别是员工, 领导, 管理员。不同的角色, 登录进去…

EXCEL中嵌入其他表格等文件

在EXCEL中嵌入其他表格 先放链接:https://jingyan.baidu.com/article/295430f11708c34d7e00509a.html 步骤如下: 1、打开一个需要嵌入新表格的excel表。 2、切换至“插入”菜单中,单击选择“对象”。 3、如下图所示,会弹出“对象…

21. LangChain金融领域:合同审查与风险预警自动化

引言:当AI成为24小时不眠的法律顾问 2025年某商业银行的智能合同系统,将百万级合同审查时间从平均3周缩短至9分钟,风险条款识别准确率达98.7%。本文将基于LangChain的金融法律框架,详解如何构建合规、精准、可追溯的智能风控体系…

Springboot使用事件流调用大模型接口

什么是事件流 事件流(Event Stream) 是一种处理和传递事件的方式,通常用于系统中的异步消息传递或实时数据流。在事件驱动架构(Event-Driven Architecture)中,事件流扮演着至关重要的角色。 事件流的概念…

计算机网络--2

TCP三次握手 TCP连接为什么需要三次握手 1. 由于网络情况复杂,可能会出现丢包现象,如果第二次握手的时候服务器就认为这个端口可用,然后一直开启,但是如果客户端未收到服务器发送的回复,那么就会重新发送请求,服务器就会重新开启一个端口连接,这样就会浪费一个端口。 三…

尤雨溪宣布:Vue 生态正式引入 AI

在前端开发领域,Vue 框架一直以其易用性和灵活性受到广大开发者的喜爱。 而如今,Vue 生态在人工智能(AI)领域的应用上又迈出了重要的一步。 尤雨溪近日宣布,Vue、Vite 和 Rolldown 的文档网站均已添加了llms.txt文件,这一举措旨在让大型语言模型(LLM)更方便地理解这些…

蓝桥杯第十六届c组c++题目及个人理解

本篇文章只是部分题目的理解&#xff0c;代码和思路仅供参考&#xff0c;切勿当成正确答案&#xff0c;欢迎各位小伙伴在评论区与博主交流&#xff01; 题目&#xff1a;2025 题目解析 核心提取 要求的数中至少有1个0、2个2、1个5 代码展示 #include<iostream> #incl…

硬件工程师笔记——电子器件汇总大全

目录 1、电阻 工作原理 欧姆定律 电阻的物理本质 一、限制电流 二、分压作用 三、消耗电能&#xff08;将电能转化为热能&#xff09; 2、压敏电阻 伏安特性 1. 过压保护 2. 电压调节 3. 浪涌吸收 4. 消噪与消火花 5. 高频应用 3、电容 工作原理 &#xff08;…

微软推动智能体协同运作:支持 A2A、MCP 协议

今日凌晨&#xff0c;微软宣布 Azure AI Foundry 和 Microsoft Copilot Studio 两大开发平台支持最新 Agent 开发协议 A2A&#xff0c;并与谷歌合作开发扩大该协议&#xff0c;这一举措对智能体赛道意义重大。 现状与变革意义 当前智能体领域类似战国时代&#xff0c;各家技术…

Linxu实验五——NFS服务器

一.NFS服务器介绍 NFS服务器&#xff08;Network File System&#xff09;是一种基于网络的分布式文件系统协议&#xff0c;允许不同操作系统的主机通过网络共享文件和目录3。其核心作用在于实现跨平台的资源透明访问&#xff0c;例如在Linux和Unix系统之间共享静态数据&#…

20242817李臻《Linux⾼级编程实践》第9周

20242817李臻《Linux⾼级编程实践》第9周 一、AI对学习内容的总结 第十章 Linux下的数据库编程 10.1 MySQL数据库简介 MySQL概述&#xff1a;MySQL是一个开源的关系型数据库管理系统&#xff0c;最初由瑞典MySQL AB公司开发&#xff0c;后经SUN公司收购&#xff0c;现属于O…