天天看點

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

一、概述

Loam主要是一種雷射比對slam的方法,也就是一種定位與建圖的方法,相比于其他的制圖方法,loam主要解決的是雷達快速移動的過程中的畸變問題,如果雷達的掃描速度和雷達的移動速度相差太大,會導緻掃描過程中偏差太大,利用loam就可以一定程度上改善這個問題。

對于這篇論文,一個很關鍵的點就是搞明白一些量的定義,首先對于雷達的掃描過程需要有一個大體的了解。雷達是分線的,一般有十六線、三十二線等等,線代表的就是豎直方向上發送雷射的數目,這堆線是在同一列上的,十六線就代表一個時刻掃描的一列上發出了16條射線,下一個時刻掃描方向水準移動一定角度,再掃描下一列的點,如此重複,就得到了全部的點雲資料。可以看出,線越多,掃描的内容也就越多。在這篇論文中,将一個sweep定義為對空間全部掃描一次,也就是取到了範圍内的所有列,而一個scan代表同一線上掃描到的所有點,換個角度來看,如果将所有的點放到一個矩陣裡面,對于一個十六線的雷達,每次移動0.5°,掃描範圍是180°,那麼矩陣有十六行,每一行都對應一線,一共有360列,每一列代表每次移動掃描到的列,一個scan就代表一行的全部資料,一個sweep就代表整個矩陣。

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

了解了雷達的工作過程,就不難發現,一幀點雲的建構并不是一瞬間就完成的,而是一點一點拼出來了,在轉向速度和雷達移動速度偏差不太大的情況下,掃描也不會出現太大的偏差,一旦偏差過大,甚至極限一點,移動速度遠大于轉向速度,那麼對于一個sweep來說,可能現在這一列是在原點掃描的結果,到了下一列掃描的時候已經到終點了,那建構的結果必然也偏差很大。這篇論文提供的解決方法就是一方面執行高頻率的裡程計但是低精度的運動估計用于定位;另一方面在比定位低一個數量級的頻率執行比對和注冊點雲資訊,實作建圖和校正裡程計。

由于loam主要的目的在于推進偏移的最小化,是以在這篇論文裡面并沒有加入回環檢測的部分,這個算法主要的結構如下圖所示:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

這篇論文将複雜的問題劃分為了兩部分:高頻率的裡程計和低頻率的制圖,裡程計用于提取特征點來進行相鄰幀之間點雲資料的比對,也就是找出變換關系,用這個變換關系去消除畸變,制圖則是用校正後的資料進行點雲的拼接。可以看見雷達的資料送入odometry之後産出的結果一部分送入了mapping,之後再變換整合的部分又将這兩部分的變換整合了一下,進而達到了一個很好的效果。

二、Lidar Odometry

在裡程計的部分中,主要有三部分:特征點提取、建立比對關系和運動估計。

特征點提取主要是提取兩類點:邊點和平面點。從名字就可以看出,邊點其實是原來三維空間上邊上的點,而平面點則是原來三維空間裡面平面上的點。這裡的特征點提取是針對scan來操作的,也就是說是在一次scan上提取特征點。

提取特征點本質上是根據點的曲率來計算平面光滑度作為提取目前幀的特征,平面點是在三維空間中處于平滑平面上的點,其和周圍點的大小差距不大,曲率較低,平滑度較低。相反邊緣點是在三維空間中處于尖銳邊緣上的點,其和周圍點的大小差距較大,曲率較高,平滑度較高。提取時按照下面的公式計算c值,c值最大的為邊點,c值最小的稱為平面點。

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

為了保證特征點分布的均勻,提取時将一個scan分為了四個區域,對每個區域上限制了特征點的數目:一個區域隻能有2個邊點和4個平面點。同時選的點周圍不能有點已經被選中。并且,為了避免選到一些可靠性比較低的點,選點的時候還排除了下面的兩種情況:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

左圖的情況是指不希望出現點B這樣物體面本身與雷射的射線方向接近平行的平面上的點,右圖的情況是指不希望出現這種存在間隔的情況,AB可能在一條線上,但是因為間隔的存在,會存在距離的偏差。

是以,候選的點必須滿足三個條件:子區域數量要求、周圍沒有别的被選點、位置要求。滿足要求的候選點送入計算c值的子產品,通過計算c值,找出最大的兩個和最小的四個點,進而得到了2個邊點和4個平面點。

建立比對關系則是找出前後兩幀特征點的對應關系,從這部分開始,最頭痛的就是裡面的時間戳關系,也就是下面這張圖:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

tk時間開始,到tk+1時刻,也就是藍色的線,由于點雲資料是一點一點生成的,是以藍色線表現為一個不斷上升的過程,這一個時間段生成的原始點雲資料記作pk,前面也提到過了,在這篇論文的背景下藍色的pk是存在偏差的,對這部分偏差進行校正,得到的點雲會投射到結束時刻也就是tk+1時刻,這部分無偏差的點雲資料稱為pk-(橫線畫在上面),算法實際上是從這個時刻開始的,也就是已知上一幀的變換矩陣和無偏點雲資料pk-,對未校正的pk+1進行處理得到下一個時刻的轉換矩陣。

這裡的比對關系主要是選取特征點間的比對關系,我們現在得到了校正後的且投影到tk+1時刻的點雲pk-,這裡面是有上一個時刻的特征點的,之後在未校正的點雲pk+1中,利用粗略的轉換矩陣,将點雲前投影回tk+1時刻,也就是這一幀點雲的開始時刻,這時我們就得到了tk+1時刻的兩個點雲,我們點的選擇也是在這兩個點雲中進行的。對于邊點,首先選擇前投影點雲中的一個邊點i,再在pk-中選擇距離i最近的點j,最後選擇pk-中與i最近且不在同一個scan的點,這樣做主要是為了防止在建構特征區域的時候出現三點共線的情況。

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

對于平面點,選擇前投影的點雲中的一個平面點i,之後在pk-的平面點中選擇與i距離最近的點j,再在j同一個scan找一個最近點l和與j不在一個scan的另一個最近點m,這樣相當于在pk-的平面點中找了三個平面點。

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

找這些點最基本的出發點是想建立一個優化的方向,前面提到過,前投影本身是粗略的,也就是存在偏差的,在沒有偏差的情況下,前投影的特征點應該是和pk-的特征點重合的,但因為偏差存在,特征點之間也是存在距離的,是以我們優化的方向應該是讓這個距離盡可能小,為了增加算法的魯棒性,這裡沒有選擇特征點之間的距離最小,而是讓點到特征區域的距離最小,這個距離對于邊點就是點i到直線jl的距離:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

對于平面點就是點i到平面jlm的距離:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

對于這兩個式子,隻有前投影的i的坐标是不知道的,這裡就涉及到前面提到的粗略的轉換矩陣,這個矩陣其實就對應着第三部分也就是運動估計。

對這篇論文而言,它假設雷達的運動是勻速的,是以變換矩陣理論上是可以根據時間關系,進行線性插入的,也就是下面的式子:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

這個式子最難看懂的地方就是那些該死的時間戳下标,首先對這個式子來說,時間軸的關系式tk——tk+1——ti——t,其中tk+1——t正好對應這一個sweep的時間,是以右邊分數的部分實際上就是掃描的i的時候用的時間在整個sweep耗時中所占的比例。再看兩個變換矩陣,變換矩陣上标L表示的是這個變換矩陣是在雷達坐标系下的,這個上标倒還好了解,主要是在後面制圖的時候區分坐标系的,下标就離譜,不帶括号的實際上是帶括号的一種縮寫,左邊的部分表示的是tk+1時刻與ti時刻的坐标轉換,右邊不加括号的,表示的是tk+1與t時刻的坐标轉換,也可以看成是幀間的變換矩陣,也就是我們最終的目标。

也就是說,利用上面的式子我們可以利用粗略的幀間轉換矩陣通過時間關系實作ti時刻與tk+1時刻的坐标轉換,而這個坐标轉換被用在前面的前投影中,進而和距離挂上了鈎,我們要優化的距離,最終變成優化一個最優的幀間變換矩陣,讓特征點到達特征區域的距離最小。

這裡就省略一下了,大量的數學運算過後,我們得到了對于邊點和平面點的兩個優化式子:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time
【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

讓這些式子最優化,可以聯合寫成下面的式子:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

之後利用列文伯格-馬誇特法(LM)法去進行非線性優化,最終得到一個最優的幀間變換矩陣TLk+1。這個矩陣也就是我們要求的運動估計。

三、Lidar Mapping

前面的幀間優化的執行頻率是高于這部分制圖的執行頻率的,也就是說大量的優化少量的制圖,累計一定的幀數目的點雲資料才會進行建圖,雖然頻率較低,但是精度很高。

本質上來說建圖的目的就是将點雲資料融入到世界地圖裡面去,精确估計點雲資料在世界坐标系下面的位姿。

就過程而言,制圖和前面的裡程計實際上是很像的,差別在于制圖多了一個坐标系的轉換。

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

上圖是制圖的一個過程的模拟,行駛方向是從右向左,已經知道的量有:k+1幀之前的掃描的點雲在全局坐标系下面的投影QK,可以了解為目前為止前面全部的已經校正的點雲資料;第k次掃描的末尾也就是k+1幀起始的時候的位姿變換資訊TKW,注意這裡的轉換矩陣是在世界坐标系下的,而在裡程計中已知的是雷達坐标系下的;利用裡程計得到的輸出TK+1L,也就是在雷達坐标系下将第K+1幀映射到k+2時刻的變換矩陣。

利用這三個量,我們可以首先将TKW通過TK+1L向後推演一個時刻,也就是得到TK+1W,再利用這個轉換關系,将k+1幀點雲投影到全局坐标系下,即為QK+1-(這裡加橫杠變成了前投影)。這樣問題轉換為對TK+1W的優化,優化用到的工具是QK和QK+1-兩個點雲資料。問題和裡程計很像,同樣都是利用兩個投影到同一個時刻的點雲進行距離最優化,最後變成位姿的最優化,進而得到前後兩幀的轉換關系。轉換關系得到後進行點雲的比對拼接,就可以擴大地圖的範圍。

因為針對的對象換成了制圖,是以需要做一定的改變,一方面使用的QK+1-是十幀裡程計輸出的資料,而QK是之前的地圖資料。也就是說QK+1-是攢了十次sweep的資料。對于QK,如果采用之前全部的地圖來計算,必然會導緻開銷很大,是以這裡變為使用邊長為10m的立方體,用來代替全局地圖進行TK+1W的計算。

由于實時性的緣故,找對應的特征點更換了方法,制圖其他的算法步驟和裡程計的基本一緻:

【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time
【論文閱讀】LOAM: Lidar Odometry and Mapping in Real-time

參考連結:

https://zhuanlan.zhihu.com/p/111388877

https://www.cnblogs.com/zhjblogs/p/14221647.html

https://blog.csdn.net/i_robots/article/details/108331306

繼續閱讀