ORB-SLAM3和VINS-MONO的对比

 直接给总结,整体上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.mzph.cn/web/79461.shtml

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

相关文章

安装typescript时,npm install -g typescript报错

删除C:\Users\用户\下的.npmrc文件,如果你的没有,看是不是因为将隐藏的项目勾选上了,然后去掉勾选。 重新输入

[GESP202503 四级] 二阶矩阵c++

题目描述 小 A 有一个 n 行 m 列的矩阵 A。 小 A 认为一个 22 的矩阵 D 是好的,当且仅当 。其中 表示矩阵 D 的第 i 行第 j 列的元素。 小 A 想知道 A 中有多少个好的子矩阵。 输入 第一行,两个正整数 n,m。 接下来 n 行,每行 m 个整数…

基于flask+pandas+csv的报表实现

基于大模型根据提示词去写SQL执行SQL返回结果输出报表技术上可行的,但为啥还要基于pandas去实现呢? 原因有以下几点: 1、大模型无法满足实时性输出报表的需求; 2、使用大模型比较适合数据量比较大的场景,大模型主要…

Java学习笔记(对象)

一、对象本质 状态(State):通过成员变量(Field)描述 行为(Behavior):通过成员方法(Method)实现 class Person {String name;int age;void eat() {System.o…

Qt学习Day0:Qt简介

0. 关于Qt Qt是C的实践课,之前在C中学习的语法可以有具体的应用场景。Qt的代码量很大,不要死记硬背,学会查询文档的能力更加重要。 建议提升一下相关单词的储备量: 1. Qt是什么? Qt是一个基于C语言的图形用户界面&a…

React知识框架

一、核心概念 1. 组件化开发 核心思想:将 UI 拆分为独立、可复用的组件(函数组件/类组件)。组件特性:props(接收参数)、state(组件状态)、生命周期(类组件特有&#xf…

Django之账号登录及权限管理

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

[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c

本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…

java 破解aspose.words 18.6 使用

资源包&#xff1a;https://download.csdn.net/download/qq_36598111/90787167 jar包是破解过的&#xff0c;直接可以使用。 引入jar&#xff0c;要引入本地的&#xff0c;不要直接引入仓库的 <dependency><groupId>com.aspose</groupId><artifactId>…

vue使用rules实现表单校验——校验用户名和密码

编写校验规则 常规校验 const rules {username: [{ required: true, message: 请输入用户名, trigger: blur },{ min: 5, max: 16, message: 长度在 5 到 16 个字符, trigger: blur }],password: [{ required: true, message: 请输入密码, trigger: blur },{ min: 5, max: 1…

宝塔服务安装使用的保姆级教程

宝塔介绍&#xff1a; 宝塔面板&#xff08;BT Panel&#xff09; 是一款 国产的服务器运维管理面板&#xff0c;主要用于简化 Linux/Windows 服务器的网站、数据库、FTP、防火墙等管理操作。它通过图形化界面&#xff08;Web端&#xff09;和命令行工具&#xff08;bt 命令&a…

数字化转型-4A架构之数据架构

4A架构系列文章 数字化转型-4A架构&#xff08;业务架构、应用架构、数据架构、技术架构&#xff09; 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数字化转型-4A架构之数据架构 数字化转型-4A架构之技术架构 数据架构 Data Architecture&#xff08;DA&…

每日脚本 5.11 - 进制转换和ascii字符

前置知识 python中各个进制的开头 二进制 &#xff1a; 0b 八进制 &#xff1a; 0o 十六进制 : 0x 进制转换函数 &#xff1a; bin() 转为2进制 oct() 转换为八进制的函数 hex() 转换为16进制的函数 ascii码和字符之间的转换 &#xff1a; chr(97) 码转为字符 …

Vulnhub Lazysysadmin靶机攻击实战(一)

导语   靶机下载地址 https://download.vulnhub.com/lazysysadmin/Lazysysadmin.zip   靶机信息地址 https://www.vulnhub.com/entry/lazysysadmin-1,205/ 文章目录 信息收集扫描路径提权其他思路探索其他方式找密码总结下载安装好靶机之后启动虚拟机如下所示。 信息收集 我…

【DB2】DB2启动失败报错SQL1042C

在本地某次启动db2时报错SQL1042C&#xff0c;具体报错如下 [db2inst1standby ~]$ db2start 05/07/2025 16:32:53 0 0 SQL1042C An unexpected system error occurred. SQL1032N No start database manager command was issued. SQLSTATE57019在网上百度到说是需要…

Python中的re库详细用法与代码解析

目录 1. 前言 2. 正则表达式的基本概念 2.1 什么是正则表达式&#xff1f; 2.2 常用元字符 3. re库的适应场景 3.1 验证用户输入 3.2 从文本中提取信息 3.3 文本替换与格式化 3.4 分割复杂字符串 3.5 数据清洗与预处理 4. re库的核心功能详解 4.1 re.match()&#…

蓝桥杯2025年第十六届省赛真题-水质检测

C语言代码&#xff1a; #include <stdio.h> #include <string.h>#define MAX_LEN 1000000int main() {char a[MAX_LEN 1], b[MAX_LEN 1];// 使用 scanf 读取字符数组scanf("%s", a);scanf("%s", b);int ans 0;int pre -1;int state -1;i…

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 创建 3D 图形

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 创建 3D 图形 实现效果 在该案例中&#xff0c;Three.js 被用来创建一个包含多个 3D 对象的场景。其中包括&#xff1a; 圆环结&#xff08;TorusKnot&#xff09;立方体&#xff08;Box&#xff09;球体&…

Python学习笔记--Django的安装和简单使用(一)

一.简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。Django 提供了一套强大的工具和约定&#xff0c;使得开发者能够快速构建功能齐全且易于维护的网站。Django 遵守 BSD 版权&#xff0c;初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1…

《汽车噪声控制》复习重点

题型 选择 填空 分析 计算 第一章 噪声定义 不需要的声音&#xff0c;妨碍正常工作、学习、生活&#xff0c;危害身体健康的声音&#xff0c;统称为噪声 噪声污染 与大气污染、水污染并称现代社会三大公害 声波基本概念 定义 媒质质点的机械振动由近及远传播&am…