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.pswp.cn/web/79461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79461.shtml
英文地址,請注明出處:http://en.pswp.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…