從零開始搭二維雷射SLAM --- 前言

2021-03-02 從零開始搭SLAM
我眼中的SLAM

從最開始接觸SLAM已經3年了,從二維雷射SLAM到三維雷射SLAM,再到視覺SLAM,都有一些接觸,現將簡單梳理一下SLAM的各個模塊的功能以及實現方式,為本系列文章起到個總領作用。

1 SLAM是什麼

SLAM(simultaneous localization and mapping)的中文翻譯為 同步定位與地圖構建。目的有2個,一個是進行定位,一個是進行周圍環境的地圖的構建,二者相互依賴,只有同時進行求解才能夠解決這個問題。

為什麼一定要同時進行求解呢?

人通過眼睛,通過手部等肢體的觸摸進行感知,從而了解周圍的環境,人的大腦自動的為周圍環境進行了模型搭建(地圖構建),所以人可以做到閉著眼睛通過感覺拿到水杯等物體。同時,人可以通過眼睛的感知,知道自己的手處於水杯的前方(定位),通過再向前伸手就可以碰到水杯,所以,當人看著水杯的時候,幾乎所有人都可以準確的拿到水杯。

機器人想要屋子裡進行導航,也是同樣的道理。首先通過雷射雷達,攝像頭等傳感器確定了周圍環境的地圖(地圖構建),當機器人向前走了1米,這時候再將周圍的環境建成地圖,而且要將地圖準確地放到之前建的地圖的相應位置處(定位)。

定位,是通過將當前傳感器感知到的環境信息與構建好的環境地圖進行匹配,確定機器人在當前地圖中的位置,只有地圖準確了,定位才能夠準確。

地圖構建,通過將當前傳感器感知到的環境信息構建成地圖,這時的地圖是要放到機器人當前位置處的,所以只有定位準確了,構建的地圖才能夠與真實環境相符合。

所以定位與地圖構建,二者相互依賴,必須要同時進行求解才能構建好地圖。

2 SLAM的目的或應用是什麼

個人認為SLAM最大的應用就是建圖,通過SLAM的處理,獲得一個能夠在之後繼續使用的地圖。而由於SLAM本身包含了定位,當不保存地圖的時候,SLAM也可以當成個定位算法來用。

二維雷射SLAM構建的二維柵格地圖,可以用來做機器人的定位與導航。

三維雷射SLAM構建的三維點雲地圖,可以用來做無人車的定位與導航,也可以用來做三維建模。

視覺SLAM構建的稀疏點雲地圖,可以用來做定位。

視覺SLAM構建的半稠密與稠密的點雲地圖,可以用來做定位與導航,也可以用來做VR領域的交互場景,也可以用來做三維建模。

上圖為二維雷射SLAM構建的二維柵格地圖

上圖為三維雷射SLAM構建的三維點雲地圖

上圖為視覺SLAM(ORB-SLAM2)構建的稀疏點雲地圖


上圖為視覺SLAM構建稠密點雲地圖

3 SLAM的三個模塊

眾所周知,目前階段,SLAM的框架大體上已經固定了,分為前端裡程計模塊,後端優化模塊,以及迴環檢測模塊。

接下來,我將簡要介紹這三個模塊的功能,以及實現每個模塊的方法。

3.1 前端裡程計3.1.1 什麼是前端裡程計

機器人的輪子上有種叫做編碼器的傳感器,用於測量輪子具體走了多遠。前端裡程計也是同樣的目的,就是為了測量機器人從開始後到現在到底走了多遠,與初始位置處的相對距離和相對姿態(位姿)。

3.1.2 怎麼實現呢

對於雷射SLAM來說,雷射雷達的頻率一般是10Hz-40Hz之間。我只要確定第一幀雷達數據與第二幀雷達數據的時間間隔內,機器人走了多遠,再確定第二幀到第三幀雷達數據的時間間隔內,機器人走了多遠(位姿變換),依次類推,我們就可以一直確定機器人到底走了多遠,確定機器人當前的位姿與初始時刻的相對位姿。

對於視覺SLAM來說,攝像頭的數據是一幀一幀的圖像,可能是RGB彩色圖像,也可能是彩色圖像加上深度圖像。一般的處理方法為在圖像中提取特徵點,然後確定特徵點在空間中的坐標值,通過這些特徵點,確定機器人在2幀圖像間的位姿變換,再確定第二幀圖像與第三幀圖像間的位姿變換,依次類推,就可以確定了機器人當前的位姿與初始時刻的相對位姿。

上述過程確定了機器人相對於初始時刻以及相對於每幀數據到來時的位姿變換,這個過程就是定位的過程。

3.1.3 具體實現方法

對於雷射SLAM來說,求從前一幀雷達數據到當前幀雷達數據間的位姿變換,一般將這個過程稱為 掃描匹配(scan-matching) 過程。scan就是雷達的數據,通過與前一幀數據進行匹配,從而確定處位姿變換。

目前的掃描匹配方法為:

對於視覺SLAM來說,求從前一幀圖像到當前幀圖像間的位姿變換,一般將這個過程稱為 BA(Bundle Adjustment),求解BA的方法有很多,由於目前我對視覺SLAM了解不多,不在這裡進行更多的說明。

3.2 後端優化3.2.1 為什麼需要後端優化

不管是使用編碼器得到的裡程計,還是前端計算出來的裡程計,都不是完全準確的。

即使選用的編碼器十分精確,當輪子在光滑的地面上出現打滑時(數據比實際值偏大)或者在輪子路過了一個坑或者土包時,都會導致裡程計的測量值與實際值不匹配。

同樣的,由於所有傳感器都是存在誤差的,我們通過前端裡程計計算出來的裡程計數值也一定是存在誤差的,而且這個誤差將隨著時間的增長而不斷增大。

這將導致機器人的位置與實際的位置相差的越來越大,最終導致機器人的位置與真實的位置不符,不能構建很好的地圖。

3.2.2 什麼是後端優化

由於前端裡程計會有累計誤差,那有沒有一種方法可以將這種累計誤差減小甚至消除掉呢?

這就是後端優化的作用,通過圖結構,將機器人的各個位姿以及生成的地圖數據,進行聯合優化,通過優化求解,將所有的誤差平均分散到每個機器人位姿以及每個地圖數據上去,當我的優化過程十分完美的時候,這些累計誤差可以減小到可以忽略的地步。

對於雷射SLAM與視覺SLAM,他們的後端優化過程都是差不多的,都是通過圖結構來減小誤差,只不過由於傳感器的數據類型不同,具體的實現方法也不完全相同。

3.3 迴環檢測

我們可以通過後端優化來減小位姿,那麼,有沒有一種比較強的約束來對優化的方程進行約束呢?

答案肯定是存在的,那就是迴環檢測。

當我們人類從公園的東門出發,轉了10分鐘之後再回到東門,我們可以輕而易舉的分辨出這就是之前我來過的地點,和之前的東門是同一個東門。

但是,對於機器人而言,同樣從東門出發,走了10分鐘。由於機器人的位姿是通過逐步累加得到的,這樣的計算存在累計誤差,當機器人再次回到東門時,有可能機器人認為自己還和東門差距20米。這20米就是機器人由於長時間定位產生的偏差。

我們可以通過某種手段,將當前傳感器感知的環境信息,與機器人之前構建的地圖相對比,如果匹配程度很高,則我們認為,機器人到了一個之前去過的地方,那麼當前的位置應該與之前路過這個位置時相距不會太遠(約束)。

我們可以將這個約束,輸入到後端優化過程中,當做一個新的並且十分強烈的約束,通過這個強烈的約束,當我們進行優化完成後,能夠大幅度的進行誤差的消除。

4 SLAM的發展4.1 高精確度地圖

這是目前學術研究的重點,很多的工作量都是為了如何構建更準確,更精確的地圖。

4.2 長期環境下的建圖

人們接觸的環境從來沒有一成不變的,但是我們每次進行SLAM保存的地圖都是不會再變換的,如何在不佔資源的情況下,一邊運行著導航任務,一邊將之前的地圖進行更新,也是一個研究重點。目前已經有幾家公司可以做到。

4.3 減小計算量

目前的各個SLAM算法都有著不小的計算量,如果要是能夠實時運行稠密地圖的構建,那麼將會把VR領域抬到一個新的高峰。這也是我一直關注這VR領域的原因。

4.4 語義SLAM

人們可以通過眼睛來感知環境的同時,識別出能看到的物體的名字與種類。語義SLAM同樣可以做到這樣,具有語義標籤的環境地圖將會對導航產生更大的幫助。

4.5 感知代替SLAM

當機器人的理解能力逐步提升,我們就不需要再去單純地構建地圖,機器人所見即可為一個地圖,像人一樣的感知周圍環境,即可確定自身位置,這就不再需要去保存地圖。

總結

本文將我自己理解的雷射SLAM與視覺SLAM進行簡單說明,由於認知有限,如有錯誤請見諒,並於公眾號中回復告知,十分感謝。

下篇文章將簡要介紹本系列文章寫的主要方向與要實現的功能。



相關焦點

  • 源碼詳解專題直播公開課 | ORBSLAM2特徵均勻化、雷射SLAM數據處理
    為了讓我們的公開課更加系統化和全面化,能讓更多小夥伴融入進來,擺脫因為知識盲區導致的一知半解,研習社籌備了源碼講解專題,目前開展了視覺SLAM:ORBSLAM2專題和雷射SLAM:Cartographer專題,在理論的基礎上,以源碼解讀為主,目前有多個成員在協同注釋代碼,希望做到全網最詳細、權威代碼詳解
  • 從零開始一起學習SLAM | ICP原理及應用
    ICP在點雲配準領域應用的非常廣泛,因此基於深度相機、雷射雷達的算法使用ICP的頻率比較高。小白:那我是學視覺SLAM的,是不是不用關注了啊(內心OS:畢竟SLAM要學的太多了)師兄:哈哈,這個懶不能偷的。ICP現在在視覺SLAM中用的也非常多了。我總結了一下下ICP的應用場景:ICP到底有什麼用呢?
  • 碩士研究生階段如何學習slam機器人?
    4.可以自己模仿寫一個視覺裡程計對於雷射SLAM其實我也推薦先看視覺SLAM十四講,因為SLAM間結構和原理相似,且視覺SLAM有這樣好的入門教材沒有不看的理由。同時由於相機的觀測模型相比雷射雷達會更複雜一些,所以互相轉換起來會比較快。
  • 學SLAM的女生,很酷
    Ubuntu,不會ROS,好在做飛思卡爾有一點C語言和硬體基礎,還學過那麼一點Python,雖然SLAM大多情況下用的是C++,但語言都是相通的,於是一周過了一遍C++,一周過了一遍Linux,又兩周學了ROS;我這個人越有挑戰性學的就越起勁兒,實驗室也就我一個人在學,遇到一個bug,自己一個人悶在實驗室急得跳樓的心都有,然後厚著臉皮請教素不相識大牛,原以為大家都很忙,未必搭理我,結果出乎意料的是他們在雷射
  • SLAM綜述(3)-視覺與慣導,視覺與深度學習SLAM
    Popup slam: Semantic monocular plane slam for low-texture environments. In 2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), pages 1222–1229. IEEE, 2016.
  • 【泡泡機器人SLAM原創專欄-滑動窗算法】: Sliding Window Filter for SLAM
    這篇專題的idea主要來源於2006年Gabe Sibley的論文A Sliding Window Filter for SLAM,此論文詳細說明了SLAM後端優化的稀疏性的緣由,並提出了應用於slam
  • 雷射打標機怎麼使用,雷射打標機的功能及用途-京廣商訊
    此時機器抽風及製冷系統通電,電流表顯示數值7A左右;②等待5~10秒鐘,按動外控制面板上觸發按鈕,電流表顯示數值為零,3~5秒鐘之後,氪燈點燃,電流表顯示數值7A。(參照雷射電源操作說明書);③打開振鏡電源;④打開計算機,調出所需打標文件;⑤調節雷射電源到工作電流(10~18A),即可開始打標;打標結束後,按以上順序逆向關閉各組件電源:①將雷射電源工作電流調至最小
  • 從零開始學Python【16】--matplotlib(雷達圖)
    (含爬蟲代碼)從零開始學Python【15】--matplotlib(散點圖)從零開始學Python【14】--matplotlib(折線圖)從零開始學Python【13】--matplotlib(直方圖)從零開始學Python【12】--matplotlib(箱線圖)從零開始學Python
  • 物理學家提出完美的雷射材料
    俄歇重組限制了現代雷射在可見光和紅外範圍內的效率,並嚴重破壞了太赫茲雷射。它會吞噬可能產生輻射的電子 - 空穴對。此外,該過程會加熱設備。近一個世紀以來,研究人員一直尋求一種「奇蹟材料」,其中輻射複合在俄歇複合中佔主導地位。這一搜索是由Paul Dirac於1928年提出的一個想法引導的。
  • Slam dunk? 巨大成功
    Reader question:Please explain 「slam dunk」, as in someone saying 「the new smartphone is a slam dunk」.
  • 從零開始學Python【4】--numpy
    使用numpy構建矩陣數組的創建可以使用numpy模塊中的array函數實現,一維數組只需要給array函數傳入一個列表或元組,二維數組則是傳入嵌套的列表或元組。具體舉例可知:arr1和arr2為一維數組,arr3為二維數組,返回一個數組的行數和列數可使用shape方法,即
  • 關上close,shut,slam區別
    3-slam:強調「關」傳送出來的情緒。最早指關上門的聲音,很明顯,這個詞是帶情緒的詞,什麼樣的情緒會促使你去大聲的關門,你在生氣你在憤怒。情緒在激動,放東西也是呯的一下「猛放」;氣得想打人系列-單詞有含義「猛烈攻擊」;表現在語言上「猛烈抨擊」。
  • LOAM SLAM原理之論文原理解讀
    分為兩個部分:10Hz的雷射裡程計和1Hz的建圖雷射裡程計使用基於特徵點進行相鄰點雲幀數據匹配,雷射建圖使用基於特徵點進行校正後輸入點雲數據和地圖拼接。sweep表示一次完整的數據,一幀點雲數據,是多次scan之後得到的點雲數據,對應於現在的多線雷射雷達,一線代表一個scan,16線雷射雷達一次獲得的數據就是一次sweep,包含16個scan數據.對於3維點雲數據,每次處理的都是一次sweep數據,這樣才叫三維,否則不就是二維了嗎?
  • 綜述:基於二維材料光電子學信息功能器件的新發展
    其中,利用不同的二維材料結合光纖、光波導和諧振腔等豐富的載體平臺,發展新型光電器件(如雷射、調製器、光電探測器、等離子體發生器和傳感器),已經成為該領域的研究熱點,並不斷有高質量的工作被報導。1.3黑磷圖 4 黑磷原子結構黑磷是另一種直接帶隙半導體,可通過改變層數調節帶隙,黑磷的帶隙會隨著層數的減少而增加,單層黑磷(圖4)帶隙為2 eV,其填補了零帶隙石墨烯和較寬帶隙過渡金屬硫化物間的空白,可用於光探測,光調製,甚至生物光子學。
  • 從零開始學Python數據分析【16】-- matplotlib(雷達圖)
    作者:劉順祥個人微信公眾號:每天進步一點點2015前文傳送門:從零開始學Python數據分析
  • 新手入門SLAM必備資料
    CS 287: Advanced Robotics, Fall 2012 University of California at BerkeleyDept of Electrical Engineering & Computer Sciences Introduction to Mobile Robotics - SS 2012 slam
  • 大功率雷射二極體泵浦固體雷射研究進展
    2017 年山東大學張懷金等人總結了近幾年國內外摻 Pr3+雷射增益介質的研究進展和趨勢,以藍光雷射二極體為泵浦源,摻 Pr3+離子的 GdLiF4 (氟化釓鋰晶體)為增益介質,採用二維可飽和吸收材料 MoS2 (二硫化鉬),分別研究了摻 Pr3+氟化物增益介質在全固態調Q 脈衝雷射和全固態鎖模脈衝雷射,Pr3+離子的GdLiF4增益介質在脈衝可見雷射輸出上將會有更大的應用潛能。
  • 進展|它山之石,可以攻玉——太赫茲二維相干光譜學打開探索量子...
    圖一,太赫茲二維相干譜學示意圖。(a)太赫茲二維相干譜學用一個太赫茲脈衝A激發體系中一對自旋子,用另一個太赫茲脈衝B探測它們。(b)自旋子在常規太赫茲光譜中表現為連續吸收譜,但在二維相干光譜中能展現出它們的本徵線寬和線型。(來自文獻[1])。
  • 100多 項開源視覺 SLAM 方案夠你用了嗎?
    前言:最近在了解一些視覺SLAM算法,發現這篇文章總結的很不錯,所以給需要的朋友的也分享一下,感謝前輩的總結
  • 2019學個英語單詞第十二回:The word of Slam
    To slam someone or something means to criticize them very severely. 據外媒報導,1月19日星期六晚,32歲的流行歌手Lady Gaga在拉斯維加斯駐唱演出時突然中斷表演借政府關門風波直接向唐納·川普總統開火。