本篇綜述是本人與知乎的一位大佬博主華神共同完成的。在這里感謝華神的幫助,同時希望本篇能為在SLAM道路上探索的同僚們盡些綿薄之力,歡迎各位一同探討和進步。
01? 引言:SLAM概念與結構
1.1? SLAM概述
首先,本人認為需要思考一個問題:為什么要做SLAM?SLAM技術可以解決什么問題?簡單的引入。 這個問題的回答可以是:1.大部分的路徑規劃需要基礎地圖;2.定位時,為消除IMU、Wheel Odometry等里程計模型的“誤差累加”特性引入觀測參考;3. 提供一個全局表征(frame、origin)的參考,等。 再回到SLAM概念的定義:SLAM(Simultaneous Localization and Mapping)是以定位和建圖兩大技術為目標的一個研究領域。目前主流的slam技術為激光slam(基于激光雷達)和視覺slam(基于單/雙目攝像頭),實現上主要分為基于濾波 (Filter-Based) 的SLAM和基于圖優化(Graph-Based)的SLAM。歸結其本質,其實就是——State Estimation in Robotics
1.2 SLAM結構
▲?此處以cartographer框架為例
1.2.1 數據預處理
Sensor data的的接收;
多傳感器數據同步;
傳感器數據預處理(無效值去除、序列檢查、點云遮擋點與平行點去除、坐標系處理,etc);
點云去畸變處理(運動畸變,重力對齊,etc);
1.2.2 前端LIO
基于sensor-tracker形式的pose-extrapolator;
點云注冊&配準;
e,g, CSM:Correlative Scan Matcher & Ceres Scan Matcher;
1.2.3 后端Refinement
基于前端LIO選擇的key nodes形成位姿圖;
利用多傳感器數據計算約束實現位姿圖的優化(e,g, 基于Google Ceres構建Pose Graph,利用node-submap constraints & submap-submap constraints & node-node constraints作為edges,scan-pose為node);
基于SPA加速的后端優化;
1.2.4 閉環檢測
根據key node搜索neighbor key nodes,嘗試進行點云配準(scan2scan or scan2map);
e,g, LoopClosure:Correlative Scan Matcher & Branch and Bound;
1.2.5 地圖構建保存與顯示
pbstream文件:建圖軌跡信息保存與加載;
根據優化后的key nodes和對應的point cloud生成點云地圖;
基于RangefindersRayCasting的概率柵格地圖的構建、更新和擴展。
1.3 基于濾波的傳感器融合算法方案
歸結基于濾波的定位算法的核心技術,其實就是貝葉斯濾波或者其衍生算法。整體上的流程大抵都是基于上一時刻的狀態量,通過控制量輸入和運動方程的推演獲取預測的狀態量,再由相關傳感器的觀測對預測進行融合“補償”。
目前常見的應用在SLAM系統中的濾波算法主要有以下幾種:
Bayesian Filter;
Kalman Filter;
Particle Filter(adaptive Monte Carlo Localization);
Extended Kalman Filter;
Iterated Extended Kalman Filter;
Error-State Kalman Filter;
Multi-State Constraint Kalman Filter;
1.4 基于優化的傳感器融合算法方案
歸結基于優化的定位算法的核心技術,其實就是最小二乘,但應用在SLAM技術中,其關鍵的地方在于:如何設計與建立SLAM的problem structure:
?
? 也就是上述的目標函數是由哪些部分構成的?殘差項有哪些?還是以cartographer為例,殘差項可以包含關鍵幀之間的odom約束,關鍵幀與submap之間的約束(intra和inter),landmark引入產生的約束,等等。以上一起由通過不同的殘差項權重整合在一起,共同組成后端優化的目標函數。 那么除去這些呢,還可以引入哪些約束來優化整體的優化結構?或者又有什么方式可以優化優化的處理過程?
▲?lio-sam中的因子圖結構 目前常見的應用在SLAM系統中的優化庫主要有以下幾種:
G2o;
Ceres;
Gtsam;
Isam;
各個優化庫的使用和特點就不在此處進行說明了,感興趣的小伙伴可以自行網上查閱資料~
1.5 地圖構建的基本原理
地圖可以根據具體的應用場景和功能特性簡單地分為幾種:
語義地圖;
基于概率更新的占柵格地圖(黑白灰三色圖);
3D點云地圖(稀疏、稠密);
基于TSDF的占柵格地圖(或點云地圖?)
? 2D柵格地圖的基本原理大抵會涉及以下幾個技術點:
柵格地圖的生成與維護;
概率更新算法;
Bresenham畫線算法;
而與柵格地圖特性相對應的是基于TSDF(Truncated Signed Distance Function)原理生成的柵格地圖,TSDF生成的地圖最大的特性就是生成的地圖邊界是可以保證單像素級別的,而基于概率更新的柵格地圖的邊界往往都會由多個像素“混合”在一起。
▲?TSDF示意圖
▲?TSDF定義與柵格生成方法
02? 激光SLAM主流方案
2.1 Gmapping
簡介:基于粒子濾波框架的激光SLAM,RBpf粒子濾波算法,即將定位和建圖過程分離,先進行定位再進行建圖,結合里程計和激光信息,每個粒子都攜帶一個地圖,構建小場景地圖所需的計算量較小,精度較高。但在高分辨率建圖時,在靜止狀態下更新不好,存在震蕩并noise過多。
Github鏈接: https://github.com/ros-perception/openslam_gmapping https://github.com/ros-perception/slam_gmapping 相關論文: Giorgio Grisetti, Cyrill Stachniss, and Wolfram Burgard: Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters, IEEE Transactions on Robotics, Volume 23, pages 34-46, 2007. Giorgio Grisetti, Cyrill Stachniss, and Wolfram Burgard: Improving Grid-based SLAM with Rao-Blackwellized Particle Filters by Adaptive Proposals and Selective Resampling, In Proc. of the IEEE International Conference on Robotics and Automation (ICRA), 2005.
2.2?Hector_SLAM
簡介:利用優化方法進行幀間匹配的激光slam算法,search space不大,不需要里程計信息,代碼較短。且只處理scan的endpoints(不利用laser scan structure),故而可利用IMU調整laser scan attitude。缺點是在雷達頻率不夠的設備上效果不佳,快速轉向時容易錯誤匹配;沒有loop closure故而若累計誤差過大,HectorSLAM沒有地圖調整能力,且幀間優化匹配時也是全局地圖上進行,cpu資源消耗大。 Github鏈接: https://github.com/tu-darmstadt-ros-pkg/hector_slam 相關論文: Kohlbrecher, Stefan , et al. “A flexible and scalable slam system with full 3d motion estimation.” 2011 IEEE International Symposium on Safety, Security, and Rescue Robotics IEEE, 2011.
2.3 Karto
簡介:基于圖優化的SLAM,包含回環檢測,適用于大面積建圖。前端幀匹配采取的的是correlative scan matcher的方式進行粗、精兩次匹配, 回環檢測上karto沒有submap的概念,全部以keyScan的形式存儲在Mapper-sensor-Manager中,keyScan的插入依據pose的距離窗口生成localMap進行匹配。local與gloal的loop closure依據graph的結構和Mapper-sensor-Managerss順序存儲分配的ID信息,選擇candidates生成localMap進行匹配,依據score進一步確定閉環。 Github鏈接: https://github.com/ros-perception/open_karto https://github.com/ros-perception/slam_karto 相關論文: Olson, E. B. . “Real-time correlative scan matching.” Robotics and Automation, 2009. ICRA '09. IEEE International Conference on IEEE, 2009. Konolige, Kurt , et al. “Efficient sparse pose adjustment for 2D mapping.” 2010 IEEE/RSJ International Conference on Intelligent Robots and Systems IEEE, 2010.
2.4 Cartographer
簡介:基于圖優化的SLAM,源自谷歌,代碼優美,是非常完整的激光slam系統,包含相對魯棒的前端,基于submap和node約束獨立的pose graph后端及各類評測工具。模塊化、系統化、工程化程度很高, 封裝很完善。可將其視為升級版本的Karto的頂配豪華版本,搭載了傳感器同步、位姿外推器、激光數據預處理(去畸變、重復點云刪除)功能,前端幀匹配上融合使用了karto的暴力匹配csm和hector的基于LM的梯度優化方法匹配,由于引入了submap的概念,后端回環檢測上使用分支定界的方法進行快速搜索,后端優化過程基于SPA完成。同時carto還開放了landmark、GPS等數據融合的接口,提供了地圖續掃和定位的功能。 Github鏈接: https://github.com/cartographer-project/cartographer 相關論文: Hess, Wolfgang , et al. “Real-Time Loop Closure in 2D LIDAR SLAM.” 2016 IEEE International Conference on Robotics and Automation (ICRA) IEEE, 2016.
2.5 LOAM方案
簡介:經典制作,長期霸榜kitti odometry門類第一,也衍生很多相關SLAM算法,如A-LOAM、LeGO-LOAM等。其主要思想是通過兩個算法:一個高頻激光里程計進行低精度的運動估計,即使用激光雷達做里程計計算兩次掃描之間的位姿變換;另一個是執行低頻但是高精度的建圖與校正里程計,利用多次掃描的結果構建地圖,細化位姿軌跡。在點云匹配與特征提取時,由于scan-to-scan匹配精度低但速度快, map-to-map匹配精度高但是速度慢,創新性使用scan-to-map來兼具精度與速度,這種思路給后續很多基于激光里程計或多傳感器融合框架提供思路。原本的LOAM沒有IMU輔助,不帶有回環檢測,因而不可避免引起漂移。沿著此思路,產生了很多算法如LeGO-LOAM, LINS, LIO-Mapping, LIO-SAM等。 Github鏈接: LOAM中文注解版:https://github.com/cuitaixiang/LOAM_NOTED 相關論文: Ji Zhang and Sanjiv Singh. “LOAM: Lidar Odometry and Mapping in Real-time.” Proceedings of Robotics: Science and Systems Conference, 2014.
2.6 LeGo-LOAM方案
簡介:在LOAM的基礎上細化了特征提取與優化,帶有回環功能。可以在低功耗嵌入式系統上實現實時姿態估計。主要也是由一個高頻低精度激光里程計與一個低頻高精度建圖回環檢測組成。區別在于LeGO-LOAM在LOAM基礎上采用地面分割方式將點云分為地面點與非地面點,進一步縮小特征提取范圍,以加快計算速度,能夠在嵌入式設備上實時運行;在建圖模塊添加了位姿圖與回環檢測,解決了LOAM沒有后端優化的弊端,提供建圖效率,其效果對比如下圖。 Github鏈接: LeGo-LOAM中文注解版:https://github.com/wykxwyc/LeGO-LOAM_NOTED/tree/master/src 相關論文: T. Shan and B. Englot, “LeGO-LOAM: Lightweight and Groundoptimized Lidar Odometry and Mapping on Variable Terrain,”IEEE/RSJ International Conference on Intelligent Robots and Systems,pp. 4758-4765, 2018.
2.7 LIO-SAM方案
簡介:這是LeGO-LOAM作者新作,通過平滑和匹配的緊密耦合激光雷達慣性SLAM框架。LIO-SAM在因子圖(factor graph)上方制定了激光雷達慣性里程表,從而可以將不同來源的大量相對和絕對測量值(包括回路閉合)作為因子合并到系統中,通過慣性測量單元(IMU)預積分的估計運動使點云偏斜,并為激光雷達里程計優化提供了初始預測。為了確保實時高性能,將之前的激光雷達掃描邊緣化以進行姿勢優化,而不是將激光雷達掃描與全局地圖匹配。選擇性地引入關鍵幀以及以有效的滑動窗口將新的關鍵幀注冊到固定大小的先驗“子關鍵幀”集合中,在局部范圍而不是全局范圍內進行掃描匹配。 算法可以添加不同的模塊,組合不同的方案。當同時禁用GPS和閉環檢測時,此方法稱為LIO-odom,它僅利用IMU預積分和激光雷達里程計因子;當添加GPS因子時,則將此方法稱為LIO-GPS;若使用IMU、激光雷達里程計、GPS、回環檢測時則稱之為LIO-SAM方法。 Github鏈接: https://github.com/TixiaoShan/LIO-SAM 相關論文: T. Shan and B. Englot, “LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping,”IEEE/RSJ International Conference on Intelligent Robots and Systems”,2020. 性能介紹:在論文作者錄制的數據集上,對比了LOAM、LIOM與自身幾種組合方案的建圖效果如下左圖所示,也比較了幾種算法在平移誤差及處理單幀數據時所耗時間如右圖所示,由此可見LIO-SAM處理速度較LOAM提高很多,精度上也有一定提高。
?
2.8 hdl_graph_slam方案
簡介:這是一個基于圖優化的3D激光SLAM框架,主要由激光里程計、回環檢測以及后端圖優化構成,同時融合了IMU、GPS以及地面檢測的信息作為圖的額外約束。算法首先讀入激光雷達的點云數據,然后將原始的點云數據進行預濾波,經過濾波后的數據分別給到點云匹配里程計以及地面檢測節點,兩個節點分別計算連續兩幀的相對運動和檢測到的地面的參數,并將這兩種消息送到hdl_graph_slam節點進行位姿圖(pose graph)的更新以及回環檢測,并發布地圖的點云數據。hdl_graph_slam在資源消耗、代碼復雜度等方面具有優勢,且帶有定位模塊,右圖顯示了帶GPS的室外建圖結果。 Github鏈接: https://github.com/koide3/hdl_graph_slam 相關論文: Kenji Koide, Jun Miura, and Emanuele Menegatti, “A Portable 3D LIDAR-based System for Long-term and Wide-area People Behavior Measurement”, Advanced Robotic Systems, 2019
?
2.9 SegMap方案
原理介紹:這是一種基于3D點云中線段提取的方式去建圖與定位的解決方案。將三維點云進行分割,把不同的環境目標劃分為不同的段(segment),從而提出了一種新的地圖表達方法:Segmap。相比于現有僅用來做定位的特征提取器,Segmap利用了數據驅動(深度學習)的描述子提取了語義特征信息。在語義信息層進行數據處理大大減小了計算量,較小維度的語義特征描述子解決了單機器人與多機器人系統的實時數據壓縮問題。這種利用CNN語義信息的3D激光SLAM框架,在多機器人全局路徑規劃場景時比傳統SLAM更具有優勢。 Github鏈接: https://github.com/ethz-asl/segmap 相關論文: R. Dubé, A. Cramariuc, D. Dugas, J. Nieto, R. Siegwart, and C. Cadena. “SegMap: 3D Segment Mapping using Data-Driven Descriptors.” Robotics: Science and Systems (RSS), 2018. R. Dubé, MG. Gollub, H. Sommer, I. Gilitschenski, R. Siegwart, C. Cadena and , J. Nieto. “Incremental Segment-Based Localization in 3D Point Clouds.” IEEE Robotics and Automation Letters, 2018. R. Dubé, D. Dugas, E. Stumm, J. Nieto, R. Siegwart, and C. Cadena. “SegMatch: Segment Based Place Recognition in 3D Point Clouds.” IEEE International Conference on Robotics and Automation, 2017.
2.10 SuMa方案
原理介紹:此算法使用Surfel地圖去實現前端里程計和閉環檢測,此前Surfel地圖曾被用在RGBD-SLAM中,第一次被用在在室外大場景三維SLAM中。Surfel地圖最早是用在基于RGB-D相機的三維重建任務中的。SuMa的整體流程就是先處理點云把點云從三維展開成二維,然后生成局部地圖用來給當前幀做匹配,接著通過ICP方法進行位姿更新,然后更新surfel地圖,最后做閉環檢測與后端優化。 Github鏈接: https://github.com/jbehley/SuMa 相關論文: J. Behley, C. Stachniss. Efficient Surfel-Based SLAM using 3D Laser Range Data in Urban Environments, Proc. of Robotics: Science and Systems (RSS), 2018.
2.11 SuMa++
原理介紹:這是一種新的基于語義信息的激光雷達SLAM系統,可以更好地解決真實環境中的定位與建圖問題。該系統通過語義分割激光雷達點云來獲取點云級的密集語義信息,并將該語義信息集成到激光雷達SLAM中來提高激光雷達的定位與建圖精度。通過基于深度學習的卷積神經網絡,可以十分高效地在激光雷達“范圍圖(range image)”上進行語義分割,并對整個激光雷達點云進行語義標記。通過結合幾何深度信息,進一步提升語義分割的精度。基于帶語義標記的激光雷達點云,此方法能夠構建帶有語義信息且全局一致的密集“面元(surfel)”語義地圖。基于該語義地圖,也能夠可靠地過濾移除動態物體,而且還可以通過語義約束來進一步提高投影匹配ICP的位姿估計精度。 Github鏈接: https://github.com/PRBonn/semantic_suma 相關論文: Chen, Xieyuanli & Milioto, Andres & Palazzolo, Emanuele & Giguère, Philippe & Behley, Jens & Stachniss, Cyrill. SuMa++: Efficient LiDAR-based Semantic SLAM. 4530-4537. (IROS 2019).
?
?
03? 視覺SLAM主流方案
以視覺傳感器作為主要感知方式的SLAM稱為視覺SLAM 。按照建圖稀疏程度來分,視覺SLAM技術可以分為稀疏SLAM、半稠密SLAM和稠密SLAM。雖然同為SLAM系統,但它們的側重點并不完全一樣。 SLAM 系統最初的設想是為機器人提供在未知環境中探索時的定位和導航能力,其核心在于實時定位。以定位為目的,需要建立周圍環境的路標點地圖,進而確定機器人相對路標點的位置,這里的路標點地圖即稀疏地圖,地圖服務于定位。 但隨著算法和算力的進步,SLAM逐漸被用于對環境的重建,也即把所有看到的部分都完整的重建出來,此時,SLAM所建立的地圖必須是稠密的,而SLAM系統的首要任務也從定位轉變為了建立環境的精確稠密地圖。這種首要任務的差異最終會反映在SLAM系統的技術方案上,稠密SLAM系統對精度的評價也從“定位精度”轉變為“建圖精度”。此外,相比于稀疏SLAM系統,稠密SLAM的建圖部分要消耗大得多的算力,通常都需要GPU加速來達到實時性。
3.1 LSD-SLAM 方案
LSD-SLAM 即 Large-Scale Direct SLAM,兼容單目相機和雙目相機。LSD-SLAM是一種基于光流跟蹤的直接法SLAM,但是實現了半稠密建圖,建圖規模大,可以在線實時運行。作者有創見地提出了像素梯度與直接法的關系,并利用這種關系實現了簡單直接法所無法實現的半稠密重建。作為一種基于關鍵幀的SLAM系統,LSD-SLAM的主要處理流程為:
通過直接法對相機位姿進行追蹤,當當前幀所包含的信息與最后一個關鍵幀有足夠差別時,建立新的關鍵幀。
對當前關鍵幀的深度信息進行估計,對于雙目LSD-SLAM,首先根據左右圖像的視差估計深度,然后結合不同時序的幀優化深度。
對全局的關鍵幀進行位姿圖優化,獲得全局一致的地圖。
? LSD-SLAM 在 CPU 上實現了半稠密場景的重建,這在當時(2014)是非常有創見的工作,是作者(TUM 計算機視覺組)多年對直接法進行研究的成果。LSD-SLAM 的半稠密追蹤使用了一些精妙的手段,來保證追蹤的實時性與穩定性。 另一方面,由于 LSD-SLAM 使用了直接法進行跟蹤,所以它既有直接法的優點(對特征缺失區域不敏感),也繼承了直接法的缺點。例如,LSD-SLAM 對相機內參和曝光非常敏感,并且在相機快速運動時容易丟失。
3.2 ORB-SLAM2 方案
ORB-SLAM 系列是最為經典的SLAM 方案之一,ORB-SLAM2 發表于2017年,是ORB-SLAM的升級版,同時支持單目、雙目、RGB-D相機。ORB-SLAM2的算法流程與ORB-SLAM幾乎相同,共包含三個模塊(線程),如下所示。
需要注意的是,重定位和回環檢測都是基于DBoW2詞袋實現的,而詞袋需要預先建立好,通常可以通過一個大型圖片數據集離線建立起詞袋,數據集數據越廣泛,建立的詞袋越實用。
3.3 ORB-SLAM3 方案
? 在前作的基礎上,西班牙Zaragoza大學于2020年7月最新開源了ORB-SLAM3的論文和源碼。ORB-SLAM3支持的設備和功能更多,支持單目、雙目、RGB-D相機,針孔、魚眼,視覺慣性里程計,多地圖SLAM等,幾乎全覆蓋了視覺SLAM各個分支。總體來說,ORB-SLAM3 基本框架、代碼結構都是ORB-SLAM2的延伸,但是加入了很多新的方法,實現了更好的效果,體現在以下三個方面:
構建了基于特征的高度集成視覺-慣導SLAM系統,更加魯棒,適應于室內/外的大/小場景,精度提升2~5倍。
是一個多地圖系統,VO丟失時,會建立新的地圖,當找回場景后,會與之前的地圖自動融合。
系統魯棒性與state-of-the-art相當,但精度更高,在無人機數據集上平均精度3.6cm,室內數據集平均精度9mm。
3.4 DSM 方案:Direct Sparse Mapping
DSM 方案由西班牙的學者(作者之一同為ORB系列的作者)于2019年發表,這是一個基于直接法的完整單目SLAM系統。直接法SLAM系統通常采用光度誤差進行BA優化,但直接法不能依賴自身解決相同場景的 reobservation問題和相同點的融合問題(因此直接法的回環檢測多依賴特征點解決,如LSD-SLAM);DSM則解決了這一問題,是首個完全基于直接法實現回環檢測和地圖重用的SLAM系統,并在 EuRoC 數據集上取得了直接法SLAM中最高的精度。 DSM設計了獨特的“局部窗口選擇策略”來選擇共視點,通過 coarse-to-fine 的策略來實現 reobservation,并以此實現回環檢測;在優化方面,仍然基于光度誤差做BA優化。
? 基于以上特點,DSM 具有較快的運行速度(無需計算特征點描述子),精度很高;除了直接法自身的缺點之外,其缺點還在于單目無法恢復出尺度信息。
3.5 VINS-Fusion 方案
VINS系列由港科大沈劭劼課題組發表和公開,其中VINS-Fusion 是繼 VINS-Mono (單目視覺慣導 SLAM 方案)后的雙目視覺慣導 SLAM 方案,VINS-Fusion 是一種基于優化的多傳感器狀態估計器,可實現自主應用(無人機,無人車, AR / VR)的精確自定位。VINS-Fusion 是 VINS-Mono 的擴展,支持多種視覺慣性傳感器類型(單目相機+ IMU,雙目相機+ IMU,雙目相機-only),但兩者的技術框架是相同的,如下圖所示。其主要技術模塊有:
輕量級前端(視覺光流跟蹤+IMU預積分)
傳感器在線標定+視覺慣導聯合初始化
緊耦合滑窗優化(同時具有快速重定位功能)
回環檢測
全局四自由度位姿優化
(注:紅色加粗表示核心工作)
? VINS方案本身是基于特征點的,因此只能用于稀疏建圖。VINS的優點在于實現了很高的定位精度,這種精度來源于視覺+IMU融合以及緊耦合滑窗優化算法。VINS對計算資源的消耗比較小,在普通CPU上既可以實現在線實時運行,適合于對實時性有要求的移動設備。
3.6 ElasticFusion 方案
ElasticFusion (2016) 是由帝國理工發表的一項優秀RGB-D SLAM系統,具有稠密建圖、在線實時運行、輕量級等顯著特點。如前文所述,ElasticFusion 以稠密建圖為主要目標(而非定位),建圖的精度和質量是主要指標。ElasticFusion 的技術特點如下:
基于 RGB-D 的稠密三維重建一般使用網格模型融合點云,ElasticFusion 是為數不多使用 surfel 模型的方案。
傳統的 SLAM 算法一般通過優化位姿或者路標點來提高精度,而 ElasticFusion 采用優化 deformation graph 的方式。
融合了重定位算法(當相機跟丟時,重新計算相機的位姿)。
ElasticFusion 算法融合了 RGB信息(顏色一致性約束) 和深度信息(ICP 算法)進行位姿估計。
ElasticFusion首先根據RGB-D圖像配準估算位姿,根據位姿誤差決定進行重定位還是回環檢測;若存在回環,則首先優化Deformation graph 然后優化 surfel地圖;若不存在,則更新和融合全局地圖,并估算當前視角下的模型,用于下一幀圖像配準。總體來說,ElasticFusion具有較高的重建精度,在重建房間大小的場景時效果很好;但沒有對代碼做特別的優化,在大場景重建時效果不佳。
?
3.7?InfiniTAM 方案
InfiniTAM 是牛津大學于2016年發表的稠密 SLAM 方案,該方案基于 KinectFusion 和 體素塊哈希表(voxel block hashing)發展而來。首先,InfiniTAM 方案在建圖部分利用 TSDF 模型(截斷符號距離場)進行建模,只是在建模的時候,不是對整個空間都劃分等大小的網格,而是只在場景表面的周圍劃分網格(voxel blocks),且只為待重建的表面上的Voxel block分配顯存,并使用哈希表這一結構來管理GPU對Voxel block的內存分配和數據訪問。通過這樣的方法,InfiniTAM 大大減小了稠密建圖對 GPU 的內存消耗,提升了算法效率。 InfiniTAM 的?算法流程?如右圖所示,InfiniTAM 系統的前端與KinectFusion較為相似,主要分為三個階段:
跟蹤階段:對新輸入的圖像進行定位,估算對應的相機位姿;
融合階段:用于將新數據集成到現有的3D世界模型當中(更新voxel中存儲的SDF值);
渲染階段:利用光線投影算法(Raycasting)從世界模型中提取與下一個跟蹤步驟相關的模型區域,用于下一幀的位姿估算;
在后端部分,InfiniTAM 維護一個 Active Submaps List(基于Voxel block + Hashing),從而實現輕量級的后端優化。
? InfiniTAM 是一個完整的稠密SLAM系統,包括前端位姿估計,回環檢測,重定位,后端優化等全部SLAM功能。InfiniTAM使用哈希表來管理體素(voxel),大大節約了GPU內存占用,因此可以構建更大規模場景的地圖。
?
3.8?BundleFusion 方案
斯坦福大學2017年提出的BundleFusion技術,被認為可能是目前基于RGB-D相機進行稠密三維重建效果最好的方法。BundleFusion的整體流程是比較清晰的:輸入的color+depth的數據流首先需要做幀與幀之間的匹配信息搜索,然后基于“稀疏特征+稠密特征”融合匹配以求得精確位姿變化;把連續相鄰幀聚合為“幀段”并在幀段內做局部位姿優化,獲得幀段地圖/Chunk;然后基于“幀段”做全局位姿優化,將整體的漂移矯正;融合相鄰Chunk,得到全局位姿和地圖。整個過程持續動態更新。
? 【融合匹配】在匹配方面,論文使用的是一種sparse-then-dense的并行全局優化方法。也就是說,先使用稀疏的SIFT特征點來進行比較粗糙的配準,因為稀疏特征點本身就可以用來做loop closure檢測和relocalization。然后使用稠密的幾何和光度連續性進行更加細致的配準。圖1展示了sparse+dense這種方式和單純sparse的對比結果。 【優化】在位姿優化方面,論文使用了一種分層的 local-to-global 優化方法,如圖2所示。總共分為兩層,在第一層,每連續10幀組成一個chunk,第一幀作為關鍵幀,然后對chunk內所有幀做局部位姿優化。在第二層,只使用所有的chunk的關鍵幀進行互相關聯然后進行全局優化。通過這種分層處理技巧,一方面可以剝離出關鍵幀,減少存儲和待處理的數據;另一方面,分層優化方法減少了每次優化時的未知量,保證該方法可擴展到大場景而漂移很小。
▲?local-to-global 優化策略
▲?稀疏匹配與融合匹配效果對比 BundleFusion 方案在算法上具有明顯的優點:
使用持續的local to global分層優化,去除了時域跟蹤的依賴。
不需要任何顯示的loop closure檢測。因為每一幀都和歷史幀相關,所以其實包含了持續的隱式的loop closure。
支持在GPU上實時魯棒跟蹤,可以在跟蹤失敗時移動到重建成功的地方進行relocalization,匹配上后繼續跟蹤。
實驗表明,BundleFusion的重建效果確實是目前該領域效果最好的方法,下圖是和其他方法的對比,重建優勢明顯。
? BundleFusion 的良好效果除了算法的功勞,還必須有強大硬件算力的支撐。當使用兩塊GPU(GTX Titan X + GTX Titan Black)時,BundleFusion在各大數據集上可以達到 36 fps 左右的處理深度;當使用一塊 GTX Titan X 時,處理速度則是 20 fps 左右。也即:目前算法需要兩塊GPU才能實時運行,因此算法的優化和加速仍是可改進的地方。
?
?
04? 激光SLAM中的挑戰和階段分析
?
4.1 非結構化道路的SLAM問題?抑或者激光SLAM的退化特性?
在廣場、機場等開闊區域,即使是多線激光,也只能看到幾圈地面上的點云。僅使用地面點云進行匹配,很可能在水平面上發生隨機移動。
在長隧道、單側墻、橋梁等場地中,激光匹配會存在一個方向上的額外自由度。也就是說,沿著隧道前進時,獲取到的激光點云是一樣的,使得匹配算法無法準確估計這個方向上的運動。類似地,如果機器繞著一個圈柱形物體運動時,也會發生這種情況。
在一些異形建筑面前,激光可能發生意想不到的失效情形。
解決思路:建圖算法適當降低激光軌跡的權重,利用其他軌跡(或者數據約束)來補償激光的失效。
?
4.2 地圖表達與實際環境的差異?
機器人用的柵格地圖,主要表達何處有障礙物,何處是可通行的區域,此外就沒有了。它具有基礎的導航與定位功能,精度也不錯(厘米級),制作起來十分簡單,基本可以讓機器人自動生成。
但除了通行區域,還有什么是需要機器人從地圖中獲取的環境信息?
?
4.3 占柵格地圖和高精地圖有哪些差別?
在室內,機器人可以去任意可以通過的地方,不會有太多阻攔,而對于自動駕駛來說,每條路都有對應的交通規則:有些地方只能靠右行駛,有些地方不能停車,十字路口還有復雜的通行規則。
室內機器人可以利用柵格地圖進行導航,但在室外可不能在十字路口上橫沖直撞。所以,在導航層面,室內與室外的機器人出現了明顯的區別。室內的導航可以基于柵格來實現諸如A*那樣的算法,但室外基本要依賴事先畫好的車道。
但自動化的高精地圖標注該如何進行和實現工程落地?
目前SLAM程序的流程大抵上都一樣,基本的流程都是:
對陌生環境進行一次掃描,建立地圖;
保存地圖;
以后運行時,打開這張地圖進行定位。
而在第一和第三流程階段,回到文章的開頭,其本質就是State Estimation in Robotics。而由此進行分析的話,受到一致認可的方向大抵有以下三類:
精度:傳感器選型、傳感器布局和傳感器標定,但若相同的傳感器“條件”,精度本質上還是由硬件決定了上限;
魯棒性:多傳感器融合,傳感器差異特性互補;
效率:點云配準 & 優化計算的效率提升
05??總結
以上內容都是經過網上各位大佬的經驗分享和個人簡單的整理,匯整而成,本人也是十分感激能站在巨人們的肩膀上看整個SLAM技術大體樣貌。望與各位技術同僚共勉,一同在SLAM技術道路上高歌猛進。 審核編輯:黃飛
?
評論