開源視覺salm算法介紹

當前的開源SLAM方案

?

開源方案傳感器形式地址鏈接
MonoSLAM單目https://github.com/hanmekim/SceneLib2?
PTAM單目?http://www.robots.ox.ac.uk/~gk/PTAM/
ORB-SLAM?單目為主http://webdiis.unizar.es/~raulmur/orbslam/
ORB-SLAM2單目https://github.com/raulmur/ORB_SLAM2
LSD-SLAM單目為主

http://vision.in.tum.de/research/vslam/lsdslam

https://github.com/tum-vision/lsd_slam

?SVO單目?https://github.com/uzh-rpg/rpg_svo?
?RTAB-MAPRGB-D/雙目https://github.com/introlab/rtabmap?
?OKVIS多目+IMU?https://github.com/ethz-asl/okvis?
ROVIO單目+IMU?https://github.com/ethz-asl/rovio

?

【1】2007---MonoSLAM? (單目-濾波)? ?

背景:說到視覺SLAM,很多研究者第一個想到的就是A.J.Davison的單目SLAM工作,他2007年提出的MonoSLAM是第一個實時的單目視覺SLAM系統。

  • Davison, A. J., et al. "MonoSLAM: real-time single camera SLAM. "?IEEE Transactions on Pattern Analysis & Machine Intelligence29.6(2007):1052.
  • Davison, Andrew J. "Real-Time Simultaneous Localisation and Mapping with a Single Camera."?IEEE International Conference on Computer Vision?IEEE Computer Society, 2003:1403.

特點:擴展卡爾曼濾波為后端,追蹤前端非常稀疏的特征點。

意義:之前的SLAM系統基本不能在線運行,只能靠機器人攜帶相機采集數據,再離線的定位和建圖。

現在看來,應用場景窄,已經停止對其開發。

【2】2007---PTAM? (單目 -非線性優化)

背景:2007年,Klein等人提出了PTAM?(Parallel Tracking and Mapping)

  • Murray, Dw, and G. Klein. "Parallel tracking and mapping for small AR workspaces." (2007):1-10.

意義:實現了跟蹤與建圖過程的并行化;第一個使用非線性優化,而不是使用傳統的濾波器作為后端的方案。引入了關鍵幀機制,不必精細的處理每幅圖像,而是把幾個關鍵圖像串起來,然后優化其軌跡和地圖,在PTAM之后,視覺SLAM轉向以非線性優化為主導的后端。

PTAM同時是一個增強現實軟件,演示了炫酷的AR效果。根據PTAM估計的相機位姿,我們可以在一個虛擬的平面上放置虛擬物體,看起來就跟真實的場景中一樣。

【3】2015---ORB-SLAM ?(單目為主-特征點-圖優化)

背景:ORB-SLAM 是PTAM的繼承者中非常有名的一位。提出于2015年,是現代SLAM系統中做得非常完善的系統之一。

  • Mur-Artal, Raúl, J. M. M. Montiel, and J. D. Tardós. "ORB-SLAM: A Versatile and Accurate Monocular SLAM System."?IEEE Transactions on Robotics?31.5(2015):1147-1163.

優點:(1)支持單目、雙目、RGB-D三種模式;

(2)整個系統圍繞ORB特征進行計算,包括視覺里程計與回環檢測ORB字典。ORB特征不像SURF或SIFT費時,可在CPU上實時計算;相比Harris等簡單角點特征,又具有良好的旋轉和縮放不變性;ORB提供描述子,使在大范圍運動時能夠回環檢測和重定位。

(3)ORB的回環檢測是它的亮點,優秀的回環檢測算法保證了ORB-SLAM有效的防止累計誤差,并且在丟失后還能迅速找回。為此,ORB-SLAM在運行前需要加載一個很大的ORB字典文件。

(4)ORB創新使用了3個線程完成了SLAM:實時跟蹤特征點的Tracking線程,局部Bundle Adjustment的優化線程(俗稱小圖),全局Pose Graph的回環檢測與線性優化(俗稱大圖。)

Tracking線程:對每幅新來的圖像提取ORB特征點,并與最近的關鍵幀進行比較,計算特征點的位置并粗略的估計相機位姿。

小圖線程:求解一個Bundle Adjustment問題,包括局部空間內的特征點與相機位姿,負責求解更精細的相機位姿與特征點空間位置。前面的這兩個線程完成了比較好的視覺里程計。

大圖線程:對全局的地圖與關鍵幀進行回環檢測,消除累積誤差。由于全局中地圖點太多了,所以優化不包括地圖點,只有相機位姿組成的位姿圖。 ? 【可詳細了解:http://www.cnblogs.com/Jessica-jie/p/7281944.html】

(5)ORB圍繞特征點進行了不少優化。

缺點:由于整個 SLAM系統采用特征點進行計算,對每幅圖像都計算一遍ORB特征,是非常耗時的;ORB-SLAM的三線程結構給CPU帶來了較大的負擔;ORB-SLAM的建圖為稀疏矩陣點,目前還沒有開放存儲和讀取地圖后重新定位的功能,稀疏特征點地圖只能滿足我們對定位的需求,而無法提供導航、避障、交互等功能。

【4】2014---LSD-SLAM [Large Scale Direct monocular SLAM]??? (單目-直接法) ? ? ? ??http://www.sohu.com/a/166136329_715754

背景:是J.Engle等人于2014年提出的SLAM工作,標志著單目直接法在SLAM中的成功應用。其核心貢獻是將直接法應用到半稠密的單目SLAM中,不需要計算特征點,還能構建半稠密地圖。(半稠密:估計梯度明顯的像素位置)

  • Engel, Jakob, T. Sch?ps, and D. Cremers. "LSD-SLAM: Large-Scale Direct Monocular SLAM." 8690(2014):834-849.
  • Engel, Jakob, and D. Cremers. "Semi-dense Visual Odometry for a Monocular Camera."?IEEE International Conference on Computer VisionIEEE Computer Society, 2013:1449-1456.

優點:(1)LSD-SLAM的直接法是針對像素進行的。

(2)LSD-SLAM在CPU上實現了半稠密場景的重建,這在之前的方案中很少見。基于特征點的方法只能是稀疏的,而進行稠密重建的方案大多要使用RGB-D傳感器,或者使用GPU構建稠密地圖。

(3)LSD-SLAM的半稠密追蹤使用了一些精妙的手段保證追蹤的實時性與穩定性。例如,LSD-SLAM既不是利用單個像素,也不是利用圖像塊,而是在極線上等距取5個點,度量其SSD;在深度估計時,LSD-SLAM首先用隨機數初始化深度,在估計完后又把深度均值歸一化,以調整尺度;在度量深度不確定時,不僅考慮三角化的幾何關系,而且考慮了極限與深度的夾角,歸納成一個光度不確定性項;關鍵幀之間的約束使用了相似變換群,在后端優化中可以將不同尺度的場景考慮進來,減小了尺度漂移現象。

半稠密地圖建模了灰度圖中有明顯梯度的部分,顯示在地圖上,很大一部分都是物體的邊緣或表面上帶紋理的部分。LSD-SLAM對它們進行跟蹤并建立關鍵幀,最后優化得到這樣的地圖,看起來比稀疏的地圖具有更多的信息,但又不像稠密地圖那樣擁有完整的表面。

缺點:由于LSD-SLAM使用了直接法進行跟蹤,所以它既有直接法的優點(對特征缺失區域不敏感),也繼承了直接法的缺點。例如,LSD-SLAM對相機內參和曝光非常敏感,并且在相機快速運動時容易丟失。在回環檢測部分,由于目前沒有基于直接法的回環檢測方式,因此LSD-SLAM必須依賴于特征點方法進行回環檢測,尚未完全擺脫特征點的計算。

【5】2014---SVO[Semi-direct Visual Odoemtry]? (單目-半直接法)?

背景:是Forster等人于2014年提出的一種基于稀疏直接法(半直接法)的視覺里程計。特征點法與直接法混用---SVO跟蹤了一些關鍵點(角點,沒有描述子),然后直接法那樣,根據關鍵點周圍的信息(4*4的小塊進行塊匹配)估計相機的運動及其位置。

  • Forster, Christian, M. Pizzoli, and D. Scaramuzza. "SVO: Fast semi-direct monocular visual odometry."?IEEE International Conference on Robotics and Automation?IEEE, 2014:15-22.

優點:相比其他方案,最大的優點就是速度快。由于使用稀疏的直接法,既不用費力去計算描述子,也不必處理稠密和半稠密那么多信息,因此在低端計算平臺上也能達到實時性,適用于無人機。SVO的另一創新之處:提出了深度濾波器概念,并推導了基于均勻-高斯混合分布的深度濾波器。SVO將這種濾波器用于關鍵點的位置估計,并使用了逆深度作為參數化形式,使之能更好的計算特征點位置。

開源版的SVO代碼清晰易讀,適合讀者作為第一個SLAM實例進行分析。但它也存在一些問題:

(1)由于目標應用平臺為無人機的俯視相機,其視野內的物體主要是地面,而且相機的運動主要是水平和上下移動,SVO的許多細節是圍繞這個應用設計的,這使得它在平視相機中表現不佳。

(2)SVO為了速度和輕量化,舍棄了后端優化和回環檢測部分,也基本沒有建圖功能。這意味著SVO的位姿估計必然存在累積誤差,而且丟失后不太容易進行重定位(因為沒有描述子用來回環檢測)。

【6】RTAB-MAP ? ?RGB-D傳感器上的SLAM方案

背景:RTAB-MAP?(Real Time Appearance-Based Mapping)是RGB-D SLAM中比較經典的方案。它實現了RGB-D SLAM中所以應該有的東西:基于特征的視覺里程計、基于詞袋的回環檢測、后端的位姿圖優化,以及點云和三角網格地圖。RTAB-MAP支持一些常見的RGB-D和雙目傳感器,像kinect、Xtion等,且提供實時的定位和建圖功能。不過由于集成度較高,更適合作為SLAM應用而非研究。

  • Labbé, Mathieu, and F. Michaud. "Online global loop closure detection for large-scale multi-session graph-based SLAM."?Ieee/rsj International Conference on Intelligent Robots and Systems?IEEE, 2014:2661-2666.

優點:相比于單目和雙目,RGB-D SLAM的原理要簡單很多,而且能在CPU上實時建立稠密的地圖。

?

擴展: ?

【1】?OKVIS---提出了一種緊耦合、基于非線性優化的IMU與多目視覺的實時融合方法,屬于VIO(Visual Inertial Odometry),通過視覺融合IMU做里程計。

? ?http://blog.csdn.net/fuxingyin/article/details/53368649---okvis理論? ??

? ??http://blog.csdn.net/fuxingyin/article/details/53428523---okvis代碼

  • Stefan L, Simon L, Michael B and Roland S . "Keyframe-based visual-inertial odometry using nonlinear optimization."?International Journal of Robotics Research34.3(2015):314-334.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

【2】ROVIO---緊耦合、提出了一種基于EKF的IMU與單目視覺的融合方法;基于圖像塊的濾波實現的VIO。 ?

? ?http://www.cnblogs.com/shhu1993/p/7003670.html

  • ?Bloesch Michael, et al. "Robust visual inertial odometry using a direct EKF-based approach."?Ieee/rsj International Conference on Intelligent Robots and Systems?IEEE, 2015:298-304.

?

未來的SLAM話題:

SLAM將來的發展趨勢有兩大類:一是朝輕量級、小型化方向發展,讓SLAM能夠在嵌入式或手機等小型設備上良好運行,然后考慮以它為底層的應用。另一方面是,利用高性能計算設備,實現精密的三維重建、場景理解等功能。在這些應用中我們的目的是完美的重建場景,由于可以利用GPU,所以這個方向和深度學習有結合點。

【1】視覺+慣性導航SLAM

慣性傳感器(IMU)能夠測量傳感器本體的角速度和加速度,被認為與相機傳感器有明顯的互補性。

(1)IMU雖然可以測得角速度和加速度,但是這些都存在明顯的漂移,使得積分兩次得到的位姿數據非常不可靠。但是,對于短時間內的快速運動,IMU能提供一些較好的估計,這正是相機的弱點。當相機運動過快時,相機會出現運動模糊,或者兩幀之間重疊區域太少以至于無法進行特征匹配,所以純視覺的SLAM很怕快速運動。有了IMU,即使在相機無效的那段時間內,我們也能保持一個較好的位姿估計。

(2)相比于IMU,相機數據基本不會有飄移,相機數據可以有效的估計并修正IMU讀數中的飄移。

(3)當圖像發生變化時,本質上我們沒法知道是相機自身發生了運動,還是外界條件發生了變化,所以純視覺SLAM難以處理動態的障礙物。而IMU能感受到自身的運動信息,某種程度上減輕動態物體的影響。

雖然說起來比較簡單,但是無論在理論還是實踐上VIO(Visual Inertial Odometry)都是相當復雜的。目前VIO框架定位兩大類:松耦合---IMU和相機分別進行自身的運動估計,然后對其位姿估計進行融合;緊耦合---把IMU的狀態和相機狀態合并在一起,共同構建運動方程和觀測方程,然后進行狀態估計。緊耦合理論可分為基于濾波和基于優化兩個方向。濾波方面---MSCKF(Multi-State Constraint KF);優化方面---盡管在純視覺SLAM中優化方案占了主流,但在VIO中由于IMU的數據頻率非常高,對狀態優化需要的計算量就更大了,因此目前處于濾波和優化并存的階段。

【2】語義SLAM

SLAM與深度學習技術結合。(語義分割是深度學習圖像處理方面的有一個發展方向,與目標檢測很相似)

【3】除此之外,基于線/面特征的SLAM、動態場景下的SLAM、多機器人的SLAM等,都是研究者感興趣并發力的地方。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256972.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習筆記(27):Python網絡編程并發編程-GIL與多線程

立即學習:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL與多線程 1.須知: 1)cpu主要是為了提升計算性能,增加CPU提升計算性能; 2)每一個CPU一旦遇到阻塞狀態都會處于等待狀態&#xff0c…

J0ker的CISSP之路:復習-Access Control(3)

本文同時發表在:[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里,J0ker給大家介紹了訪問控制CBK里面一些常見的破壞信息資產保密性的威脅類型,那么什么類型的威脅會破壞信息資產的完…

C#中對泛型List進行分組輸出元素

背景:在輸出列表時,往往需要按照某一字段進行分組,比如在輸出城市列表時,按照首字母進行分組,輸出學生列表時,按照年級進行分組,然后再對分組的結果按照其他的字段進行排序。 如存在以下STU學生…

分頁3

http://www.cnblogs.com/ChrisLee2011/p/4288194.html 頁面的HTML部分如下&#xff1a; < div class "tableContainer"> < input id "currentPage" type "hidden" value " ViewData[ "currentPage"] "/> < i…

最優化課堂筆記01: 第一章 最優化的基本概念

第一章 最優化的基本概念 1.最優化求解的數學模型建立 2.例題&#xff08;考試第一大題&#xff1a;數學模型建立&#xff09; 解析&#xff1a;優化變量、目標函數&#xff08;一般取最小化&#xff09;、約束條件 注意&#xff1a; 1&#xff09;約束條件一般形式為&#…

面向對象中構造函數的小練習

//寫一個Ticket類&#xff0c;有一個距離屬性&#xff08;本屬性只讀&#xff0c;在構造方法中賦值&#xff09;&#xff0c;不能為負數//有一個價格屬性&#xff0c;價格屬性為只讀&#xff0c;并且根據距離distance計算價格Price(1元/公里)//0--100公里 票價不打折//101-20…

EIGRP非等價負載均衡

1、等價負載均衡 當到達目的地有多條路徑時&#xff0c;而有多條路徑的metric值一樣&#xff0c;這時就可以做等價負載均衡&#xff0c;讓數據包均衡轉發&#xff0c;不過要看該路由器的轉發方式&#xff0c;如果是快速轉發方式&#xff0c;這種方式無用&#xff08;本地產生的…

ubuntu100%快速安裝搜狗輸入法

1、進入搜狗官方網站&#xff0c;下載最新版本的for ubuntu輸入法deb安裝包 2、下載完成以后&#xff0c;進入下載好的文件目錄&#xff0c;在空白處點擊鼠標右鍵&#xff0c;打開終端 在終端窗口輸入如下的指令開始安裝搜狗拼音輸入法。 #sudo dpkg -i sogoupinyin_2.2.0.01…

提升權限終極技巧

文章作者&#xff1a;WekweN本篇文章結合了許多高手提升權限的技巧和自己的一些想法 當我們取得一個webshell時候&#xff0c;下一部要做的就是提升權限 個人總結如下&#xff1a; 1: C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\ 看能否跳轉到…

移動設備頁面高度不足時min-height 的尷尬處理

移動設備頁面高度不足時min-height 的尷尬處理 在做html5的頁面時&#xff0c;經常遇到頁面內容太少撐不起來整個手機屏幕的高度。 我們經常使用min-height來處理&#xff0c;比如min-height:568px; 對應的是iPhone5 的高度&#xff1b; 而這樣iPhone6plus下方就會出現空白。 而…

最優化課堂筆記02:第二章 線性規劃

第二章 線性規劃&#xff08;重點&#xff1a;單純形法&#xff09; 1.線性規劃問題及其模型&#xff08;重點&#xff1a;標準形式&#xff09; 題型&#xff1a;是否為標準形式&#xff1f;不是的話化為標準形式&#xff01; 1&#xff09;問題的提出 提出問題&#xff1…

客戶端是選擇Java Swing還是C# Winform

登錄 | 注冊 mentat的專欄 目錄視圖摘要視圖訂閱【專家問答】韋瑋&#xff1a;Python基礎編程實戰專題 【知識庫】Swift資源大集合 【公告】博客新皮膚上線啦 快來領福利&#xff1a;C幣、機械鍵盤 客戶端是選擇Java Swing還是C# Winform 標簽&#xff1a; swi…

linux下怎么編譯動態庫并且調用

樣例描述&#xff1a;我有一個main.cpp文件件&#xff0c;add.cpp &#xff0c;add.h &#xff0c;subtract.cpp &#xff0c;subtract.h文件&#xff0c;main.cpp里面調用加法和減法的函數&#xff0c;把加法和減法準備編譯成動態庫 libalgorithm.so&#xff0c;然后main調用這…

NDK編譯錯誤expected specifier-qualifier-list before...

基于cocos2d-x在win7下開發android程序&#xff0c;一般都會選擇先在win32下調試&#xff0c;等最后再在eclipse環境下安裝測試到真機上。期間&#xff0c;要使用到cocos2d-x提供的一些簡化方案進行NDK編譯&#xff08;一般使用gcc)。但是&#xff0c;VISUAL STUDIO 2010 C編譯…

學習筆記(28):Python網絡編程并發編程-死鎖與遞歸鎖

立即學習:https://edu.csdn.net/course/play/24458/296445?utm_sourceblogtoedu 1.死鎖&#xff08;Lock()的局限性&#xff09; 知識點&#xff1a;Lock(&#xff09;只能被獲得&#xff08;acquire&#xff09;一次&#xff0c;要想再次獲得必須釋放后才能獲得 1)死鎖情況…

VScode 快速更改編碼格式

1、view下的 Cmmand Palette 下的Change file Encoding simplifiled chinese GB2312

iostat

r/s: 每秒讀取的請求數。 w/s: 每秒寫入的請求數。 Avgqu-sz: 平均I/O隊列長度 Await:平均每次設備I/O操作的等待時間(毫秒) Svctm:平均每次設置I/O操作的服務時間(毫秒)&#xff0c;Svctm越接近Await則說明等待時間少 %util:表示設備的繁忙程度&#xff0c;80%表示設備設備已經…

學習筆記(29):Python網絡編程并發編程-信號量

立即學習:https://edu.csdn.net/course/play/24458/296446?utm_sourceblogtoedu 信號量&#xff08;了解&#xff09;&#xff1a;也是一把鎖semaphore 1. from threading import Thread,Semaphore,currentThread import time#定義信號量(3把鎖) sm Semaphore(3)def task()…

Ajax基礎2

什么是服務器 網頁瀏覽過程的分析 如何配置自己的服務器程序&#xff08;AMP&#xff09; 什么是Ajax 無刷新數據讀取 異步&#xff0c;同步 Ajax基礎(2) 使用Ajax 基礎請求顯示txt的文件 字符集編碼 緩存&#xff0c;阻止緩存 動態數據&#xff0c;請求js或&#xff08;json&a…

動態SQL應用(成績排名)

Code-- 年級排名和班級排名declare sql varchar(4000),nclassid int,nexamid int select sql select nclassid38 select nexamid19select sqlsqlmax(case scoursename when scoursename then descore else 0 end) scoursename,from (select distinct scoursename from t_card_…