GSLAM | 一個通用的SLAM架構(gòu)和基準(zhǔn)
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
突然發(fā)現(xiàn)了一篇19年的論文
GSLAM:A General SLAM Framework and Benchmark
開源代碼:https://github.com/zdzhaoyong/GSLAM
直接上全文,感受這項工作的質(zhì)量吧~
1 摘要
SLAM技術(shù)最近取得了許多成功,并吸引了高科技公司的關(guān)注。然而,如何同一現(xiàn)有或新興算法的界面,一級有效地進行關(guān)于速度、穩(wěn)健性和可移植性的基準(zhǔn)測試仍然是問題。本文,提出了一個名為GSLAM的新型SLAM平臺,它不僅提供評估功能,還為研究人員提供了快速開發(fā)自己的SLAM系統(tǒng)的有用工具。GSLAM的核心貢獻(xiàn)是一個通用的??缙脚_的、完全開源的SLAM接口,旨在處理輸入數(shù)據(jù)集、SLAM實現(xiàn)、可視化和應(yīng)用程序的統(tǒng)一框架中的交互。通過這個平臺,用戶可以以插件形式實現(xiàn)自己的功能,以提高SLAM的性能,并進一步將SLAM的應(yīng)用推向?qū)嶋H應(yīng)用。
2 介紹
從上世紀(jì)80年代以來,同時定位與地圖構(gòu)建(SLAM)一直是計算機視覺和機器人領(lǐng)域的熱門研究主題。SLAM為許多需要實時導(dǎo)航的應(yīng)用提供了基本功能,如機器人技術(shù)、無人機(UAVs)、自動駕駛、以及虛擬現(xiàn)實和增強現(xiàn)實。近來年,SLAM技術(shù)得到了迅速發(fā)展,提出了各種SLAM系統(tǒng),包括單目SLAM系統(tǒng)(基于特征點,直接和半直接方法)、多傳感器SLAM系統(tǒng)(RGBD、雙目和慣性輔助的方法)以及基于學(xué)習(xí)的SLAM系統(tǒng)(有監(jiān)督和無監(jiān)督方法)。
然而,隨著SLAM技術(shù)的迅速發(fā)展,幾乎所有的研究人員都集中精力于自己的SLAM系統(tǒng)的理論和實施,這使得難以交流思想,并且不容易實現(xiàn)遷移到其他系統(tǒng)。這妨礙了SLAM技術(shù)快速應(yīng)用于各種行業(yè)領(lǐng)域。此外,目前存在許多SLAM系統(tǒng)的不同實現(xiàn)版本,如何有效地進行速度、穩(wěn)健性和可移植性的基準(zhǔn)測試仍然是一個問題。最近,Nardi等人和Bodin等人提出了統(tǒng)一的SLAM基準(zhǔn)測試系統(tǒng),以進行定量、可比較和可驗證的實驗研究,也探究各種SLAM系統(tǒng)之間的權(quán)衡。通過這些系統(tǒng),可以使用數(shù)據(jù)集和度量評估模塊輕松進行評估實驗。
由于現(xiàn)有的系統(tǒng)僅提供評估基準(zhǔn),該論文認(rèn)為有可能建立一個平臺,以服務(wù)SLAM算法的整個生命周期,包括開發(fā)、評估和應(yīng)用階段。此外,近年來深度學(xué)習(xí)基礎(chǔ)的SLAM已取得顯著進展,因此有必要創(chuàng)建一個平臺,不僅支持C++,還支持Python,以更好地支持幾何和深度學(xué)習(xí)基礎(chǔ)的SLAM系統(tǒng)的集成。因此,在本文中,介紹了一個新型的SLAM平臺,不僅提供評估功能,還為研究人員提供了有用的工具,以快速開發(fā)他們自己的SLAM系統(tǒng)。通過這個平臺,常用功能以插件形式提供,因此用戶可以直接使用它們或創(chuàng)建自己的功能以實現(xiàn)更好的性能。希望這個平臺能進一步推動SLAM系統(tǒng)的實際應(yīng)用。總而言之,本文的主要貢獻(xiàn)如下:
- 本文提出了一個通用的、跨平臺的、完全開源的SLAM平臺,旨在用于研究和商業(yè)用途,超越了以往的基準(zhǔn)測試系統(tǒng)。SLAM接口由多個輕量級、無依賴的頭文件組成,這使得在統(tǒng)一框架中以插件形式與不同數(shù)據(jù)集、SLAM算法和應(yīng)用進行交互變得容易。此外,還提供了JavaScript和Python,以支持基于Web和深度學(xué)習(xí)的SLAM應(yīng)用。
- 提出的GSLAM平臺中,引入了三個經(jīng)過優(yōu)化的模塊作為實用工具類,包括Estimator、Optimizer和Vocabulary。Estimator旨在提供一組封閉形式的求解器,涵蓋所有情況,具有強大的樣本一致性(RANSAC);Optimizer旨在提供流行的非線性SLM問題的統(tǒng)一接口;Vocabulary旨在提供高效且可移植的詞袋實現(xiàn),用于多線程和SIMD優(yōu)化的地點識別。
- 受益于上述接口,該工作在一個統(tǒng)一的框架中實現(xiàn)并評估了現(xiàn)有數(shù)據(jù)集、SLAM實現(xiàn)和可視化應(yīng)用的插件,未來出現(xiàn)的基準(zhǔn)測試或應(yīng)用也可以輕松地進行進一步集成。
下面首先介紹GSLAM框架的接口,并解釋GSLAM的工作原理。其次,介紹三個實用組件,即Estimator, Optimizer和Vocabulary。然后,使用幾個典型的公共數(shù)據(jù)集,使用GSLAM框架來評估不同流行的SLAM實現(xiàn)。最后,總結(jié)這些工作,并展望未來的研究方向。
3 相關(guān)工作
Simultaneous Localization And Mapping
SLAM技術(shù)用于在未知環(huán)境中構(gòu)建地圖,并將傳感器在地圖中進行定位,主要側(cè)重于實時操作。早期的SLAM主要基于擴展卡爾曼濾波(EKF)。將6自由度的運動參數(shù)和3D地標(biāo)以概率方式表示為單一狀態(tài)向量。經(jīng)典EKF的復(fù)雜性隨著地標(biāo)數(shù)量的增加呈二次增長,限制了其可拓展性。近年來,SLAM技術(shù)得到了快速發(fā)展,提出了許多單目視覺SLAM系統(tǒng),包括基于特征點、直接法和半直接方法。然而,單目SLAM系統(tǒng)缺乏尺度信息,無法處理純旋轉(zhuǎn)情況,因此一些其他多傳感器SLAM系統(tǒng),包括RGBD,雙目和慣性輔助方法出現(xiàn),以提高魯棒性和精度。
盡管提出了大量的SLAM系統(tǒng),但在統(tǒng)一這些算法的接口方面幾乎沒有什么工作,也沒有對它們的性能進行全面的比較。此外,這些SLAM算法的實現(xiàn)通常以獨立的可執(zhí)行文件的形式發(fā)布,而不是以庫的形式,而且往往不符合任何標(biāo)準(zhǔn)結(jié)構(gòu)。
最近,基于深度學(xué)習(xí)的有監(jiān)督和無監(jiān)督的視覺里程計(VO)與傳統(tǒng)的基于幾何的方法相比,提出了新穎的思路。但是,進一步優(yōu)化多個關(guān)鍵幀的一致性仍然不容易。GSLAM提供的工具可以幫助獲得更好的全局一致性。通過該框架,更容易可視化或評估結(jié)果,并進一步應(yīng)用于各種行業(yè)領(lǐng)域。
Computer Vision and Robotics Platform
在機器人技術(shù)和計算機領(lǐng)域,機器人系統(tǒng)(ROS)提供了節(jié)點之間非常便捷的通信方式,受到大多數(shù)機器人研究人員的青睞。許多SLAM實現(xiàn)提供了ROS包裝器,以訂閱傳感器數(shù)據(jù)并發(fā)布可視化結(jié)果。但它并未統(tǒng)一SLAM實現(xiàn)的輸入和輸出,難以進一步評估不同SLAM系統(tǒng)。
受ROS消息架構(gòu)的啟發(fā),GSLAM實現(xiàn)了一個類似的進程間通信實用類,稱為Messenger。這為替代SLAM實現(xiàn)內(nèi)部的ROS提供了另一種選擇,并保持了兼容性,也就是說,該框架內(nèi)支持所有ROS定義的消息,并自然地實現(xiàn)了ROS包裝器。由于采用了進程內(nèi)設(shè)計,消息傳遞時沒有序列化和數(shù)據(jù)傳輸,消息可以無延遲和額外成本地發(fā)送。與此同時,消息的有效載荷不僅限于ROS定義的消息,還可以是任何可復(fù)制的數(shù)據(jù)結(jié)構(gòu)。此外,不僅提供評估功能,還為研究人員提供了有用的工具,以快速開發(fā)和集成他們自己的SLAM算法。
SLAM Benchmarks
目前存在幾種SLAM基準(zhǔn)測試系統(tǒng),包括KITTI基準(zhǔn)測試、TUM RGB-D基準(zhǔn)測試和ICL-NUIM RGB-D基準(zhǔn)數(shù)據(jù)集,這些系統(tǒng)僅提供評估功能。此外,SLAMBench2將這些基準(zhǔn)測試擴展為算法和數(shù)據(jù)集,要求用戶將已發(fā)布的實現(xiàn)與SLAMBench2兼容,以進行評估,這難以擴展到更多應(yīng)用領(lǐng)域。與這些系統(tǒng)不同,本文提出的GSLAM平臺提供了一個解決方案,可為SLAM實現(xiàn)的整個生命周期提供服務(wù),從開發(fā)、評估到應(yīng)用。為研究人員提供了有用的工具,以快速開發(fā)他們自己的SLAM系統(tǒng),并進一步基于統(tǒng)一接口開發(fā)可視化、評估和應(yīng)用程序。
4 通用SLAM架構(gòu)
Framework Overview
GSLAM的框架如圖所示??偟膩碚f,接口旨在處理三個部分的交互。
- 處理SLAM實現(xiàn)的輸入。運行SLAM時,需要傳感器數(shù)據(jù)和一些參數(shù)。對于GSLAM,使用Svar類進行參數(shù)配置和命令處理。所有SLAM實現(xiàn)所需的傳感器數(shù)據(jù)都由Dataset實現(xiàn)提供,并使用Messenger進行傳輸。GSLAM實現(xiàn)了幾個流行的視覺SLAM數(shù)據(jù)集,用于可以自由實現(xiàn)自己的數(shù)據(jù)集插件。
- SLAM實現(xiàn)。GSLAM將每個實現(xiàn)視為插件庫。開發(fā)人員可以非常容易地基于GSLAM接口和實用類設(shè)計一個SLAM實現(xiàn)。開發(fā)人員還可以使用接口包裝實現(xiàn),而無需引入額外的依賴。用戶可以專注于核心算法的開發(fā),而無需關(guān)心SLAM實現(xiàn)外部需要處理的輸入和輸出。
- 可視化部分或使用SLAM結(jié)果的應(yīng)用。在SLAM實現(xiàn)處理輸入幀后,用戶可能希望展示或利用結(jié)果。為了通用性,SLAM結(jié)果應(yīng)以標(biāo)準(zhǔn)格式發(fā)布。默認(rèn)情況下,GSLAM使用Qt進行可視化,但用戶可以自由實現(xiàn)自定義的可視化工具,并添加應(yīng)用插件,如評估應(yīng)用程序。
該框架被設(shè)計為與各種不同類型的SLAM實現(xiàn)兼容,包括但不限于單目、雙目、RGBD和多攝像頭視覺慣性里程計與多傳感器融合?,F(xiàn)代深度學(xué)習(xí)平臺和開發(fā)人員更喜歡使用Python進行編碼,因此GSLAM提供了Python綁定,開發(fā)人員能夠使用Python實現(xiàn)SLAM,并使用GSLAM調(diào)用它,或者使用Python調(diào)用基于C++的SLAM實現(xiàn)。此外,還支持JavaScript用于基于Web的用途。
Basic Interface Classes
SLAM接口通常使用的一些數(shù)據(jù)結(jié)構(gòu)包括參數(shù)設(shè)置/讀取、圖像格式、姿態(tài)變換、相機模型和地圖數(shù)據(jù)結(jié)構(gòu)。以下是一些基本接口類的簡要介紹。
Paramter Setting
GSLAM使用一個小巧的參數(shù)解析和參數(shù)設(shè)置類Svar,它僅包含一個頭文件,依賴于C++11,并具有以下特點:
a.參數(shù)解析和配置加載以及幫助信息。類似于流行的參數(shù)解析工具,如Google gflags,變量配置可以從命令行參數(shù)、文件和系統(tǒng)環(huán)境中加載。用戶還可以定義不同類型的參數(shù),并提供介紹信息,這些信息將顯示在幫助文檔中。
b.一個小型腳本語言,支持變量、函數(shù)和條件語句,使配置文件更加強大。
c.線程安全的變量綁定和共享。建議將使用頻率非常高的變量綁定到指針或引用上,這不僅提供了高效性,還提供了便利性。
d,簡單的函數(shù)定義和從C++或純腳本進行調(diào)用。命令和函數(shù)之間的綁定有助于開發(fā)人員解耦文件依賴關(guān)系。
e.支持樹形結(jié)構(gòu)表示,這意味著可以輕松地使用XML、JSON和YAML格式加載或保存配置。
Intra-Process Messaging
由于ROS提供了一個非常便捷的節(jié)點間通信方式,受到大多數(shù)機器人研究人員的青睞。受到ROS2消息架構(gòu)的啟發(fā),GSLAM實現(xiàn)了一個類似的進程間通信實用類,稱為Messenger。這為替代SLAM實現(xiàn)內(nèi)部的ROS提供了另一種選擇,并保持了兼容性。由于采用了進程間設(shè)計,Messenger能夠發(fā)布和訂閱任何類,而無需額外成本。以下是更多功能的介紹:
a.該接口采用了ROS的風(fēng)格,對用來說容易上手。而且支持所有ROS定義的消息,這意味著只需要很少的工作就能替代原來的ROS消息傳遞系統(tǒng)。
b.由于沒有序列化和數(shù)據(jù)傳輸,消息可以無延遲和額外成本地發(fā)送。與此同時,消息的有效載荷不僅限于ROS定義的消息,還支持任何可復(fù)制的數(shù)據(jù)結(jié)構(gòu)。
c.源代碼只包括基于C++11的頭文件,沒有額外的依賴,使其具有可移植性。
d.API是線程安全的,并在列隊大小大于零時支持多線程條件通知。在發(fā)布者和訂閱者相互連接之前,會對主題名稱和RTTI數(shù)據(jù)結(jié)構(gòu)進行檢查,以確保正確地調(diào)用。
3D Transforamtion
對于旋轉(zhuǎn)部分,有幾種表示方式可供選擇,包括矩陣、歐拉角、單位四元數(shù)和李代數(shù)so(3)。對于給定的變換,可以使用其中任何一種來表示,并可以相互轉(zhuǎn)換。但是,當(dāng)考慮多個變換和流形優(yōu)化時,需要密切關(guān)注所選擇的表示方式。矩陣表示法使用9個參數(shù)進行過度參數(shù)化,而旋轉(zhuǎn)只有3個自由度(DOF)。歐拉角表示使用3個變量,易于理解,但面臨著萬向鎖的問題,而且不方便進行多重變換。單位四元數(shù)是執(zhí)行多次旋轉(zhuǎn)的最高效方式,而李代數(shù)則是執(zhí)行流行優(yōu)化的常見表示方法。
類似地,定義了剛體和相似性變換的李代數(shù)se(3)和sim(3)。GSLAM使用四元數(shù)來表示旋轉(zhuǎn)部分,并提供了一種表示形式轉(zhuǎn)換為另一種表示形式的函數(shù)。表格1展示了變換實現(xiàn),并于另外三種流形的實現(xiàn)(Sophus, TooN和Ceres)進行了比較。由于Ceres實現(xiàn)使用角軸表示,因此不需要旋轉(zhuǎn)的指數(shù)和對數(shù)。如表格所示,GSLAM的實現(xiàn)性能更佳,因為它使用四元數(shù)并具有更好的優(yōu)化,而TooN使用矩陣實現(xiàn),在點變換方面性能更好。
Image format
圖像數(shù)據(jù)的存儲和傳輸是視覺SLAM中最重要的功能之一。為了提高效率和便利性,GSLAM使用了一個數(shù)據(jù)結(jié)構(gòu)GImage,它與cv::Mat兼容。它具有智能指針計數(shù)器,以確保內(nèi)存安全釋放,并且可以在不進行內(nèi)存復(fù)制的情況下輕松傳輸。數(shù)據(jù)指針對齊,以便更容易進行單指令多數(shù)據(jù)(SIMD)加速。用戶可以在GImage和cv::Mat之間無縫、安全地進行轉(zhuǎn)換,而無需進行內(nèi)存復(fù)制。
Camera Models
由于SLAM可能包含由于制造不完美而引起的徑向和切向畸變,或者是由魚眼或全景相機捕捉的圖像,因此提出了不同的相機模型來描述投影。GSLAM提供了包括OpenCV(ORB-SLAM使用)、ATAN(PTAM使用)和OCamCalib(MultiCol-SLAM使用)在內(nèi)的實現(xiàn)。用戶也可以輕松繼承這些類并實現(xiàn)其他相機模型,如Kannala-Brandt和等距全景模型。
Map Data Structure
對于SLAM實現(xiàn),其目標(biāo)是實時定位并生成地圖。GSLAM建議使用一個統(tǒng)一的地圖數(shù)據(jù)結(jié)構(gòu),有多個地圖幀和地圖點組成。這個數(shù)據(jù)結(jié)構(gòu)適用于大多數(shù)已有的視覺SLAM系統(tǒng),包括基于特征或直接方法。
地圖幀用于表示不同時間的位置狀態(tài),包括由傳感器捕捉的各種信息或估算結(jié)果,包括IMU或GPS原始數(shù)據(jù)、深度信息和相機模型。SLAM實現(xiàn)估算它們之間的關(guān)系,它們之間的連接形成了一個姿勢圖。
地圖點用于表示由幀觀察到的環(huán)境,通常由基于特征的方法使用。但是,一個地圖點不僅可以表示一個關(guān)鍵點,還可以表示一個GCP(地面控制點)、邊緣線或3D對象。它們與地圖幀的對應(yīng)關(guān)系形成了一個觀察圖,通常被稱為捆綁圖。
5 SLAM實現(xiàn)工具
為了更容易實現(xiàn)一個SLAM系統(tǒng),GSLAM提供了一個實用類。本節(jié)將簡要介紹三個經(jīng)過優(yōu)化的模塊,分別是Estimator, Optimizer和Vocabulary。
Estimator
純幾何計算仍然是一個需要強大和準(zhǔn)確的實時解決方案的基本問題。傳統(tǒng)的視覺SLAM算法或現(xiàn)代的視覺慣性解決方案都依賴與幾何視覺算法來進行初始化、重定位和回環(huán)閉合。OpenCV提供了多個幾何算法,Kneip提供了一個用于幾何視覺的工具箱OpenGV,該工具箱僅限于相機姿態(tài)計算。GSLAM的Estimator旨在提供一系列包括所有情況的封閉形式解算器,并使用了魯棒的隨機采樣一致性方法(RANSAC)。
表2列出了Estimator支持的算法。根據(jù)給定的觀測數(shù)據(jù),它們被分成三類。2D-2D匹配用于估計極線或單應(yīng)約束,并且可以從中分解相對姿態(tài)。2D-3D對應(yīng)于估計單目或多攝像頭系統(tǒng)的中心或非中心絕對位姿,這是著名的PnP問題。還支持3D幾何函數(shù),如平面擬合,以及估算兩個點云的SIM變換。大多數(shù)算法都依賴與開源線性代數(shù)庫Eigen,它是一個僅包含頭文件的庫,并且適用于大多數(shù)平臺。
Optimizer
非線性優(yōu)化是現(xiàn)代幾何SLAM系統(tǒng)的核心部分。由于Hessian矩陣的高緯度和稀疏性,圖結(jié)構(gòu)被用來建模SLAM的復(fù)雜估計問題。提出了幾種框架,包括Ceres、G2O和GTSAM,用于解決一般的圖優(yōu)化問題。這些框架在不同的SLAM系統(tǒng)中廣泛使用。ORB-SLAM、SVO使用G2O進行BA和位姿圖優(yōu)化。OKVIS、VINS使用Ceres進行帶IMU因素的圖優(yōu)化,滑動窗口用于控制計算復(fù)雜性。Forster等人提出了一種基于SVO的視覺初始化方法,并使用GTSAM實現(xiàn)后端。
GSLAM的Optimizer旨在為大多數(shù)非線性SLAM問題提供一個統(tǒng)一的接口,如PnP求解器,BA,姿態(tài)圖優(yōu)化?;贑eres庫實現(xiàn)了這些問題的通用插件。對于特定問題,如BA,還可以提供一些更高效的實現(xiàn),如PBA和ICE-BA作為插件。使用優(yōu)化器工具,開發(fā)人員可以使用統(tǒng)一的接口訪問不同的實現(xiàn),特別是用于基于深度學(xué)習(xí)的SLAM系統(tǒng)。
Vocabulary
地點識別是SLAM系統(tǒng)中最重要的部分之一,用于重新定位和回環(huán)檢測。詞袋(BoW)方法在SLAM系統(tǒng)中廣泛使用,因為它高效且性能出色。FabMap提出了一種基于外觀的地點識別的概率方法,該方法用于RSLAM、LSD-SLAM等系統(tǒng)。由于它使用了像SIFT和SURF這樣的浮點描述子,DBoW2為訓(xùn)練和檢測構(gòu)建了一個詞匯樹,支持二進制和浮點描述子。Refael提出了DBoW2的兩個改進版本,DBoW3和FBoW,它們簡化了接口并加快了訓(xùn)練和加載速度。之后,ORB-SLAM采用了ORB描述子,并使用DBoW2進行回環(huán)檢測、重定位和快速匹配。隨后,一系列SLAM系統(tǒng),如ORB-SLAM2、VINS-Mono和LDSO,使用DBoW3進行回環(huán)檢測。它已經(jīng)成為實現(xiàn)SLAM系統(tǒng)地點識別的最流行工具。
受上述工作的啟發(fā),GSLAM對DBoW3詞匯進行了僅包含頭文件的實現(xiàn),具有以下特點:
- 去除了對OpenCV的依賴,所有函數(shù)都在一個僅依賴C++11的頭文件中實現(xiàn)。
- 結(jié)合DBoW2/3和FBoW的優(yōu)點,具有極快的速度和易于使用。提供了類似于DBoW3的接口,并使用SSE和AVX指令加速了二進制和浮點描述子。
- 改進了內(nèi)存使用和加速了加載、保存或訓(xùn)練詞匯以及從圖像特征到BoW向量轉(zhuǎn)換的速度。
表3展示了四個詞袋庫的比較。在實驗中,每個父節(jié)點有10個子節(jié)點,ORB特征檢測使用ORB-SLAM,SIFT檢測使用SiftGPU。實現(xiàn)結(jié)果中使用了ORB詞匯,分別有4級和6級,以及一個SIFT詞匯。FBoW和GSLAM都使用多線程進行詞匯訓(xùn)練。GSLAM的實現(xiàn)在幾乎所有項目中的表現(xiàn)都優(yōu)于其他實現(xiàn),包括加載和保存詞匯、訓(xùn)練新詞匯、將描述符列表轉(zhuǎn)換為用于地點識別的BoW向量和用于快速特征匹配的特征向量。此外GSLAM實現(xiàn)使用更少的內(nèi)存,并分配了更少的動態(tài)內(nèi)存塊,因為DBoW2需要大量內(nèi)存的主要原因是碎片問題。
6 SLAM評估基準(zhǔn)
現(xiàn)有的基準(zhǔn)需要用戶下載測試數(shù)據(jù)集并上傳結(jié)果以進行精確性評估,這不足以統(tǒng)一運行環(huán)境并評估公平的性能比較。得益于GSLAM的統(tǒng)一接口,SLAM系統(tǒng)的評估變得更加優(yōu)雅。在GSLAM的幫助下,開發(fā)人員只需上傳SLAM插件,便可以在一個使用固定資源的docker化環(huán)境中進行速度、計算成本和準(zhǔn)確性的各種評估。在本節(jié)中,將首先介紹一些數(shù)據(jù)集和已實現(xiàn)的SLAM插件。然后,對速度、準(zhǔn)確性、內(nèi)存和CPU使用率進行三個代表SLAM實現(xiàn)的評估。此評估旨在展示具有不同SLAM插件的統(tǒng)一SLAM基準(zhǔn)實現(xiàn)的可能性。
Datasets
運行SLAM系統(tǒng)通常需要傳感器數(shù)據(jù)流和相應(yīng)的配置。為了讓開發(fā)人員專注于核心SLAM插件的開發(fā),GSLAM提供了一個標(biāo)準(zhǔn)的數(shù)據(jù)集接口,開發(fā)人員不需要關(guān)心SLAM的輸入。通過不同的數(shù)據(jù)集插件,提供了在線傳感器輸入和離線數(shù)據(jù),正確地插件會根據(jù)給定的數(shù)據(jù)集路徑后綴動態(tài)加載。數(shù)據(jù)集的實現(xiàn)應(yīng)該提供所有請求的傳感器流以及相關(guān)配置,因此不需要為不同的數(shù)據(jù)集進行額外設(shè)置。所有不同的傳感器流通過Messenger發(fā)布,使用標(biāo)準(zhǔn)的主題名稱和數(shù)據(jù)格式。
GSLAM已經(jīng)實現(xiàn)了幾個流行的視覺SLAM數(shù)據(jù)集插件,如表4所示。用戶也可以非常容易地基于僅包含頭文件的GSLAM核心來實現(xiàn)一個數(shù)據(jù)集插件,并將其發(fā)布為插件并與應(yīng)用程序一起進行編譯。
SLAM Implementations
圖2展示了一些使用內(nèi)置Qt可視化器運行的開源SLAM和SfM插件的屏幕截圖。該框架支持不同體系結(jié)構(gòu)的SLAM系統(tǒng),包括直接法、半直接法、基于特征的方法,甚至SfM方法。DSO實現(xiàn)需要發(fā)布結(jié)果,例如點云、相機姿勢、軌跡和姿態(tài)圖,以便像基于ROS的實現(xiàn)一樣進行可視化。用戶可以使用統(tǒng)一的框架訪問不同的SLAM插件,根據(jù)C++、Python和Node-JS接口開發(fā)基于SLAM的應(yīng)用程序非常方便。由于許多研究人員在開發(fā)中使用ROS,GSLAM還提供了ROS可視化插件,以無縫傳輸ROS定義的消息,并使開發(fā)人員可以利用Rviz進行顯示或繼續(xù)開發(fā)其他基于ROS的應(yīng)用程序。
Evaluation
由于大多數(shù)現(xiàn)有的基準(zhǔn)只提供數(shù)據(jù)集,或者沒有g(shù)roundtruth供用戶自行進行評估,GSLAM提供了一個內(nèi)置插件和一些腳本工具,用于計算性能和精度評估。
論文中使用TUM RGBD數(shù)據(jù)集中的序列nostructure-texture-near-withloop來演示評估的執(zhí)行情況。接下來的實驗采用三個開源的單目SLAM插件DSO, SVO和ORB-SLAM。在所有實驗中,使用一臺搭載i7-6700 CPU、GTX 1060 GPU和16GB RAM的計算機,運行64位Ubuntu 16.04。
計算性能評估包括內(nèi)存使用、分配內(nèi)存塊數(shù)量、CPU使用率以及統(tǒng)計每幀所用的時間,如圖3所示。結(jié)果表明,SVO使用的內(nèi)存和CPU資源最少,并獲得了最快的速度。而且由于SVO只是一個視覺里程計,在實現(xiàn)內(nèi)部只維護了一個本地地圖,所以成本保持穩(wěn)定。DSO分配的內(nèi)存塊數(shù)較少,但消耗了100MB以上的內(nèi)存,且增長較慢。DSO的一個問題是當(dāng)幀數(shù)低于500時,處理時間會急劇增加,此外,關(guān)鍵幀的處理時間甚至更長。ORB-SLAM使用了最多的CPU資源,計算時間穩(wěn)定,但內(nèi)存使用快速增加,并且它分配和釋放了大量的內(nèi)存塊,因為其BA使用了G2O庫,沒有使用增量優(yōu)化方法。
圖4展示了里程計軌跡的評估結(jié)果。如圖所示,SVO速度較快,但漂移較大,而ORBSLAM在絕對姿態(tài)誤差(APE)方面達(dá)到了最高的精度。由于綜合評估是一個可插拔的插件應(yīng)用程序,可以重新實施更多的評估指標(biāo),例如點云的精度。
7 總結(jié)
本文介紹了一個名為GSLAM的新型通用SLAM平臺,該平臺提出了從開發(fā)、評估到應(yīng)用的支持。通過這個平臺,常用的工具包以插件形式提供,用戶還可以輕松地開發(fā)自己的模塊。為了使平臺易于使用,使接口只依賴于C++11。此外,還提供了Python和JavaScript接口,以更好地集成傳統(tǒng)SLAM和基于深度學(xué)習(xí)的SLAM,或在Web上進行分布式操作。
在接下來的研究中,會提供更多的SLAM實現(xiàn)、文檔和演示代碼,以便學(xué)習(xí)和使用。此外,還將提供傳統(tǒng)SLAM和基于深度學(xué)習(xí)的SLAM的集成,以進一步探索SLAM系統(tǒng)的未知可能性。
這項工作的主頁如下:
GSLAM: Main Page
感覺是可學(xué)習(xí)SLAM各部分原理的框架~
原文鏈接:https://mp.weixin.qq.com/s/PCxhqhK3t1soN5FI0w9NFw