?轉(zhuǎn):https://www.cnblogs.com/qcloud1001/p/7978238.html????? 文章在幾種slam項(xiàng)目方面做了很好的介紹,但是在濾波器和圖優(yōu)化那講的不夠清楚,可以做補(bǔ)充~ 導(dǎo)語(yǔ)隨著最近幾年機(jī)器人、無(wú)人機(jī)、無(wú)人駕駛、VR/AR的火爆,SLAM技術(shù)也為大家熟知,被認(rèn)為是這些領(lǐng)域的關(guān)鍵技術(shù)之一。本文對(duì)SLAM技術(shù)及其發(fā)展進(jìn)行簡(jiǎn)要介紹,分析視覺(jué)SLAM系統(tǒng)的關(guān)鍵問(wèn)題以及在實(shí)際應(yīng)用中的難點(diǎn),并對(duì)SLAM的未來(lái)進(jìn)行展望。 1. SLAM技術(shù)SLAM(Simultaneous Localization and Mapping),同步定位與地圖構(gòu)建,最早在機(jī)器人領(lǐng)域提出,它指的是:機(jī)器人從未知環(huán)境的未知地點(diǎn)出發(fā),在運(yùn)動(dòng)過(guò)程中通過(guò)重復(fù)觀測(cè)到的環(huán)境特征定位自身位置和姿態(tài),再根據(jù)自身位置構(gòu)建周圍環(huán)境的增量式地圖,從而達(dá)到同時(shí)定位和地圖構(gòu)建的目的。由于SLAM的重要學(xué)術(shù)價(jià)值和應(yīng)用價(jià)值,一直以來(lái)都被認(rèn)為是實(shí)現(xiàn)全自主移動(dòng)機(jī)器人的關(guān)鍵技術(shù)。 如下圖,通俗的來(lái)講,SLAM回答兩個(gè)問(wèn)題:“我在哪兒?”“我周圍是什么?”,就如同人到了一個(gè)陌生環(huán)境中一樣,SLAM試圖要解決的就是恢復(fù)出觀察者自身和周圍環(huán)境的相對(duì)空間關(guān)系,“我在哪兒”對(duì)應(yīng)的就是定位問(wèn)題,而“我周圍是什么”對(duì)應(yīng)的就是建圖問(wèn)題,給出周圍環(huán)境的一個(gè)描述。回答了這兩個(gè)問(wèn)題,其實(shí)就完成了對(duì)自身和周邊環(huán)境的空間認(rèn)知。有了這個(gè)基礎(chǔ),就可以進(jìn)行路徑規(guī)劃去達(dá)要去的目的地,在此過(guò)程中還需要及時(shí)的檢測(cè)躲避遇到的障礙物,保證運(yùn)行安全。 2. SLAM發(fā)展簡(jiǎn)介自從上世紀(jì)80年代SLAM概念的提出到現(xiàn)在,SLAM技術(shù)已經(jīng)走過(guò)了30多年的歷史。SLAM系統(tǒng)使用的傳感器在不斷拓展,從早期的聲吶,到后來(lái)的2D/3D激光雷達(dá),再到單目、雙目、RGBD、ToF等各種相機(jī),以及與慣性測(cè)量單元IMU等傳感器的融合;SLAM的算法也從開(kāi)始的基于濾波器的方法(EKF、PF等)向基于優(yōu)化的方法轉(zhuǎn)變,技術(shù)框架也從開(kāi)始的單一線程向多線程演進(jìn)。下面介紹這些過(guò)程中一些代表性的SLAM技術(shù)。 (1)激光雷達(dá)SLAM發(fā)展 基于激光雷達(dá)的SLAM(Lidar SLAM)采用2D或3D激光雷達(dá)(也叫單線或多線激光雷達(dá)),如下圖所示。在室內(nèi)機(jī)器人(如掃地機(jī)器人)上,一般使用2D激光雷達(dá),在無(wú)人駕駛領(lǐng)域,一般使用3D激光雷達(dá)。 激光雷達(dá)的優(yōu)點(diǎn)是測(cè)量精確,能夠比較精準(zhǔn)的提供角度和距離信息,可以達(dá)到 激光雷達(dá)SLAM建立的地圖常常使用占據(jù)柵格地圖(Ocupanccy Grid)表示,每個(gè)柵格以概率的形式表示被占據(jù)的概率,存儲(chǔ)非常緊湊,特別適合于進(jìn)行路徑規(guī)劃。 現(xiàn)任Udacity創(chuàng)始人CEO、前Google副總裁、谷歌無(wú)人車領(lǐng)導(dǎo)者Sebastian Thrun大神(下圖)在他2005年的經(jīng)典著作《Probabilistic Robotics》一書中詳細(xì)闡述了利用2D激光雷達(dá)基于概率方法進(jìn)行地圖構(gòu)建和定位的理論基礎(chǔ),并闡述了基于RBPF粒子濾波器的FastSLAM方法,成為后來(lái)2D激光雷達(dá)建圖的標(biāo)準(zhǔn)方法之一GMapping[1][2]的基礎(chǔ),該算法也被集成到機(jī)器人操作系統(tǒng)(Robot Operation System,ROS)中。 2013年,文獻(xiàn)[3]對(duì)ROS中的幾種2D SLAM的算法HectorSLAM,KartoSLAM,CoreSLAM,LagoSLAM和GMapping做了比較評(píng)估,讀者可前往細(xì)看。 2016年,Google開(kāi)源其激光雷達(dá)SLAM算法庫(kù)Cartographer[4],它改進(jìn)了GMapping計(jì)算復(fù)雜,沒(méi)有有效處理閉環(huán)的缺點(diǎn),采用SubMap和Scan Match的思想構(gòu)建地圖,能夠有效處理閉環(huán),達(dá)到了較好的效果。 (2)視覺(jué)SLAM發(fā)展 相比于激光雷達(dá),作為視覺(jué)SLAM傳感器的相機(jī)更加便宜、輕便,而且隨處可得(如人人都用的手機(jī)上都配有攝像頭),另外圖像能提供更加豐富的信息,特征區(qū)分度更高,缺點(diǎn)是圖像信息的實(shí)時(shí)處理需要很高的計(jì)算能力。幸運(yùn)的是隨著計(jì)算硬件的能力提升,在小型PC和嵌入式設(shè)備,乃至移動(dòng)設(shè)備上運(yùn)行實(shí)時(shí)的視覺(jué)SLAM已經(jīng)成為了可能。 視覺(jué)SLAM使用的傳感器目前主要有單目相機(jī)、雙目相機(jī)、RGBD相機(jī)三種,其中RGBD相機(jī)的深度信息有通過(guò)結(jié)構(gòu)光原理計(jì)算的(如Kinect1代),也有通過(guò)投射紅外pattern并利用雙目紅外相機(jī)來(lái)計(jì)算的(如Intel RealSense R200),也有通過(guò)TOF相機(jī)實(shí)現(xiàn)的(如Kinect2代),對(duì)用戶來(lái)講,這些類型的RGBD都可以輸出RGB圖像和Depth圖像。 現(xiàn)代流行的視覺(jué)SLAM系統(tǒng)大概可以分為前端和后端,如下圖所示。前端完成數(shù)據(jù)關(guān)聯(lián),相當(dāng)于VO(視覺(jué)里程計(jì)),研究幀與幀之間變換關(guān)系,主要完成實(shí)時(shí)的位姿跟蹤,對(duì)輸入的圖像進(jìn)行處理,計(jì)算姿態(tài)變化,同時(shí)也檢測(cè)并處理閉環(huán),當(dāng)有IMU信息時(shí),也可以參與融合計(jì)算(視覺(jué)慣性里程計(jì)VIO的做法);后端主要對(duì)前端的輸出結(jié)果進(jìn)行優(yōu)化,利用濾波理論(EKF、PF等)或者優(yōu)化理論進(jìn)行樹(shù)或圖的優(yōu)化,得到最優(yōu)的位姿估計(jì)和地圖。 采用濾波器的SLAM,如下圖(a),估計(jì)n時(shí)刻的相機(jī)位姿Tn需要使用地圖中所有路標(biāo)的信息,而且每幀都需要更新這些路標(biāo)的狀態(tài),隨著新的路標(biāo)的不斷加入,狀態(tài)矩陣的規(guī)模增長(zhǎng)迅速,導(dǎo)致計(jì)算和求解耗時(shí)越來(lái)越嚴(yán)重,因此不適宜長(zhǎng)時(shí)間大場(chǎng)景的操作;而采用優(yōu)化算法的SLAM,如下圖(b),通常結(jié)合關(guān)鍵幀使用,估計(jì)n時(shí)刻的相機(jī)位姿Tn可以使用整個(gè)地圖的一個(gè)子集,不需要在每幅圖像都更新地圖數(shù)據(jù),因此現(xiàn)代比較成功的實(shí)時(shí)SLAM系統(tǒng)大都采取優(yōu)化的方法。 下面介紹視覺(jué)SLAM發(fā)展歷程中幾個(gè)比較有代表性的SLAM系統(tǒng)進(jìn)行介紹: MonoSLAM[5]是2007年由Davison 等開(kāi)發(fā)的第一個(gè)成功基于單目攝像頭的純視覺(jué)SLAM 系統(tǒng)。MonoSLAM使用了擴(kuò)展卡爾曼濾波,它的狀態(tài)由相機(jī)運(yùn)動(dòng)參數(shù)和所有三維點(diǎn)位置構(gòu)成, 每一時(shí)刻的相機(jī)方位均帶有一個(gè)概率偏差,每個(gè)三維點(diǎn)位置也帶有一個(gè)概率偏差, 可以用一個(gè)三維橢球表示, 橢球中心為估計(jì)值, 橢球體積表明不確定程度(如下圖所示),在此概率模型下, 場(chǎng)景點(diǎn)投影至圖像的形狀為一個(gè)投影概率橢圓。MonoSLAM 為每幀圖像中抽取Shi-Tomasi角點(diǎn)[6], 在投影橢圓中主動(dòng)搜索(active search)[7]特征點(diǎn)匹配。由于將三維點(diǎn)位置加入估計(jì)的狀態(tài)變量中,則每一時(shí)刻的計(jì)算復(fù)雜度為O(n3) , 因此只能處理幾百個(gè)點(diǎn)的小場(chǎng)景。 同年,Davison在Oxford的師父Murray和Klein發(fā)表了實(shí)時(shí)SLAM系統(tǒng)PTAM(Parallel Tracking and Mapping)[8]并開(kāi)源(如下圖),它是首個(gè)基于關(guān)鍵幀BA的單目視覺(jué)SLAM 系統(tǒng), 隨后在2009 年移植到手機(jī)端上[9]。PTAM在架構(gòu)上做出了創(chuàng)新的設(shè)計(jì),它將姿態(tài)跟蹤(Tracking)和建圖(Mapping)兩個(gè)線程分開(kāi)并行進(jìn)行,這在當(dāng)時(shí)是一個(gè)創(chuàng)舉,第一次讓大家覺(jué)得對(duì)地圖的優(yōu)化可以整合到實(shí)時(shí)計(jì)算中,并且整個(gè)系統(tǒng)可以跑起來(lái)。這種設(shè)計(jì)為后來(lái)的實(shí)時(shí)SLAM(如ORB-SLAM)所效仿,成為了現(xiàn)代SLAM系統(tǒng)的標(biāo)配。具體而言,姿態(tài)跟蹤線程不修改地圖,只是利用已知地圖來(lái)快速跟蹤;而建圖線程專注于地圖的建立、維護(hù)和更新。即使建立地圖線程耗時(shí)稍長(zhǎng),姿態(tài)跟蹤線程仍然有地圖可以跟蹤(如果設(shè)備還在已建成的地圖范圍內(nèi))。此外,PTAM還實(shí)現(xiàn)丟失重定位的策略,如果成功匹配點(diǎn)(Inliers)數(shù)不足(如因圖像模糊、快速運(yùn)動(dòng)等)造成跟蹤失敗時(shí),則開(kāi)始重定位[10]——將當(dāng)前幀與已有關(guān)鍵幀的縮略圖進(jìn)行比較,選擇最相似的關(guān)鍵幀作為當(dāng)前幀方位的預(yù)測(cè)。 2011年,Newcombe 等人提出了單目DTAM 系統(tǒng)[11], 其最顯著的特點(diǎn)是能實(shí)時(shí)恢復(fù)場(chǎng)景三維模型(如下圖)?;谌S模型,DTAM 既能允許AR應(yīng)用中的虛擬物體與場(chǎng)景發(fā)生物理碰撞,又能保證在特征缺失、圖像模糊等情況下穩(wěn)定地直接跟蹤。DTAM采用逆深度(Inverse Depth)[12]方式表達(dá)深度。如下圖,DTAM將解空間離散為M×N×S 的三維網(wǎng)格,其中M× N為圖像分辨率,S為逆深度分辨率,采用直接法構(gòu)造能量函數(shù)進(jìn)行優(yōu)化求解。DTAM 對(duì)特征缺失、圖像模糊有很好的魯棒性,但由于DTAM 為每個(gè)像素都恢復(fù)稠密的深度圖, 并且采用全局優(yōu)化,因此計(jì)算量很大,即使采用GPU 加速, 模型的擴(kuò)展效率仍然較低。 2013年,TUM機(jī)器視覺(jué)組的Engel 等人提出了一套同樣也是基于直接法的視覺(jué)里程計(jì)(visual odometry, VO)系統(tǒng),該系統(tǒng)2014年擴(kuò)展為視覺(jué)SLAM 系統(tǒng)LSD-SLAM[13],并開(kāi)源了代碼。與DTAM相比,LSD-SLAM 僅恢復(fù)半稠密深度圖(如下圖),且每個(gè)像素深度獨(dú)立計(jì)算, 因此能達(dá)到很高的計(jì)算效率。LSD-SLAM 采用關(guān)鍵幀表達(dá)場(chǎng)景,每個(gè)關(guān)鍵幀K包含圖像 Ik、逆深度圖Dk和逆深度的方差Vk。系統(tǒng)假設(shè)每個(gè)像素x的逆深度值服從高斯分布N(Dk (x),Vk (x))。LSD-SLAM 的前臺(tái)線程采用直接法計(jì)算當(dāng)前幀t與關(guān)鍵幀k之間相對(duì)運(yùn)動(dòng),后臺(tái)線程對(duì)關(guān)鍵幀中每個(gè)半稠密抽取的像素點(diǎn)x(梯度顯著區(qū)域), 在It中沿極線搜索Ik (x)的對(duì)應(yīng)點(diǎn), 得到新的逆深度觀測(cè)值及其方差,然后采用EKF更新Dk和Vk 。LSD-SLAM采用位姿圖優(yōu)化來(lái)閉合回環(huán)和處理大尺度場(chǎng)景。2015年,Engel等人對(duì)LSD-SLAM進(jìn)行了功能拓展,使其能夠支持雙目相機(jī)[14]和全景相機(jī)[15]。 2014年,蘇黎世大學(xué)機(jī)器人感知組的Forster等人提出開(kāi)源的SVO系統(tǒng)[16],該系統(tǒng)對(duì)稀疏的特征塊使用直接法配準(zhǔn)(Sparse Model-based Image Alignment),獲取相機(jī)位姿,隨后根據(jù)光度不變假設(shè)構(gòu)造優(yōu)化方程對(duì)預(yù)測(cè)的特征位置進(jìn)行優(yōu)化(Feature Alignment),最后對(duì)位姿和結(jié)構(gòu)進(jìn)行優(yōu)化(Motion-only BA和Structure-only BA),而在深度估計(jì)方面,構(gòu)造深度濾波器,采用一個(gè)特殊的貝葉斯網(wǎng)絡(luò)[17]對(duì)深度進(jìn)行更新。SVO的一個(gè)突出優(yōu)點(diǎn)就是速度快,由于使用了稀疏的圖像塊,而且不需要進(jìn)行特征描述子的計(jì)算,因此它可以達(dá)到很高的速度(作者在無(wú)人機(jī)的嵌入式ARM Cortex A9 4核1.6Ghz處理器平臺(tái)上可以達(dá)到55fps的速度),但是SVO缺點(diǎn)也很明顯,它沒(méi)有考慮重定位和閉環(huán),不算是一個(gè)完整意義上的SLAM系統(tǒng),丟失后基本就掛了,而且它的Depth Filter收斂較慢,結(jié)果嚴(yán)重地依賴于準(zhǔn)確的位姿估計(jì);2016年,F(xiàn)orster對(duì)SVO進(jìn)行改進(jìn),形成SVO2.0[18]版本,新的版本做出了很大的改進(jìn),增加了邊緣的跟蹤,并且考慮了IMU的運(yùn)動(dòng)先驗(yàn)信息,支持大視場(chǎng)角相機(jī)(如魚眼相機(jī)和反射式全景相機(jī))和多相機(jī)系統(tǒng),該系統(tǒng)目前也開(kāi)源了可執(zhí)行版本[19];值得一提的是,F(xiàn)oster對(duì)VIO的理論也進(jìn)行了詳細(xì)的推導(dǎo),相關(guān)的文獻(xiàn)[20]成為后續(xù)SLAM融合IMU系統(tǒng)的理論指導(dǎo),如后面的Visual Inertial ORBSLAM等系統(tǒng)。 2015年,Mur-Artal 等提出了開(kāi)源的單目ORB-SLAM[21],并于2016年拓展為支持雙目和RGBD傳感器的ORB-SLAM2[22],它是目前支持傳感器最全且性能最好的視覺(jué)SLAM系統(tǒng)之一,也是所有在KITTI數(shù)據(jù)集上提交結(jié)果的開(kāi)源系統(tǒng)中排名最靠前的一個(gè)[23]。ORB-SLAM 延續(xù)了PTAM 的算法框架,增加了單獨(dú)的回環(huán)檢測(cè)線程,并對(duì)框架中的大部分組件都做了改進(jìn),歸納起來(lái)主要有以下幾點(diǎn):1)ORB-SLAM追蹤、建圖、重定位和回環(huán)檢測(cè)各個(gè)環(huán)節(jié)都使用了統(tǒng)一的ORB 特征[24],使得建立的地圖可以保存載入重復(fù)利用;2)得益于共視圖(convisibility graph)的使用,將跟蹤和建圖操作集中在一個(gè)局部互見(jiàn)區(qū)域中,使其能夠不依賴于整體地圖的大小,能夠?qū)崿F(xiàn)大范圍場(chǎng)景的實(shí)時(shí)操作;3)采用統(tǒng)一的BoW詞袋模型進(jìn)行重定位和閉環(huán)檢測(cè),并且建立索引來(lái)提高檢測(cè)速度;4)改進(jìn)了PTAM只能手工選擇從平面場(chǎng)景初始化的不足,提出基于模型選擇的新的自動(dòng)魯棒的系統(tǒng)初始化策略,允許從平面或非平面場(chǎng)景可靠地自動(dòng)初始化。后來(lái),Mur-Artal又將系統(tǒng)進(jìn)行了拓展,形成了融合IMU信息的Visual Inertial ORB-SLAM[25],采用了Foster的論文[]提出的預(yù)積分的方法,對(duì)IMU的初始化過(guò)程和與視覺(jué)信息的聯(lián)合優(yōu)化做了闡述。 2016年,LSD-SLAM的作者,TUM機(jī)器視覺(jué)組的Engel等人又提出了DSO系統(tǒng)[26]。該系統(tǒng)是一種新的基于直接法和稀疏法的視覺(jué)里程計(jì),它將最小化光度誤差模型和模型參數(shù)聯(lián)合優(yōu)化方法相結(jié)合。為了滿足實(shí)時(shí)性,不對(duì)圖像進(jìn)行光滑處理,而是對(duì)整個(gè)圖像均勻采樣。DSO不進(jìn)行關(guān)鍵點(diǎn)檢測(cè)和特征描述子計(jì)算,而是在整個(gè)圖像內(nèi)采樣具有強(qiáng)度梯度的像素點(diǎn),包括白色墻壁上的邊緣和強(qiáng)度平滑變化的像素點(diǎn)。而且,DSO提出了完整的光度標(biāo)定方法,考慮了曝光時(shí)間,透鏡暈影和非線性響應(yīng)函數(shù)的影響。該系統(tǒng)在TUM monoVO、EuRoC MAV和ICL-NUIM三個(gè)數(shù)據(jù)集上進(jìn)行了測(cè)試,達(dá)到了很高的跟蹤精度和魯棒性。 2017年,香港科技大學(xué)的沈紹劼老師課題組提出了融合IMU和視覺(jué)信息的VINS系統(tǒng)[27],同時(shí)開(kāi)源手機(jī)和Linux兩個(gè)版本的代碼,這是首個(gè)直接開(kāi)源手機(jī)平臺(tái)代碼的視覺(jué)IMU融合SLAM系統(tǒng)。這個(gè)系統(tǒng)可以運(yùn)行在iOS設(shè)備上,為手機(jī)端的增強(qiáng)現(xiàn)實(shí)應(yīng)用提供精確的定位功能,同時(shí)該系統(tǒng)也在應(yīng)用在了無(wú)人機(jī)控制上,并取得了較好的效果。VINS-Mobile使用滑動(dòng)窗口優(yōu)化方法,采用四元數(shù)姿態(tài)的方式完成視覺(jué)和IMU融合,并帶有基于BoW的閉環(huán)檢測(cè)模塊,累計(jì)誤差通過(guò)全局位姿圖得到實(shí)時(shí)校正。 |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》