LeGO-LOAM學習

前言

在學習了LOAM之后,了解到LeGO-LOAM(面向復雜情況的輕量級優化地面的雷達里程計),進行了一個學習整理。

Github:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM
論文:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/blob/master/Shan_Englot_IROS_2018_Preprint.pdf

系統概述

系統接收來自3D激光雷達的輸入并輸出6個DOF姿勢估計。 整個系統分為五個模塊。 首先是segmentation,使用單次掃描的點云,并將其投影到范圍圖像上進行分段(線)。 然后將分段的點云發送到feature extraction模塊。 然后,激光雷達測距儀使用從前一模塊中提取的特征來找到與連續掃描相關的變換。 這些特征在lidar mapping中進一步處理,將它們注冊到全局點云圖。 最后,transform integration模塊融合了激光雷達測距和激光雷達測繪的姿態估計結果,并輸出最終的姿態估計。?

接下來,我們看具體每一個模塊完成的工作

一、Segmentation

首先將收到的一幀點云投影到一副1800*16的圖像上(水平精度0.2°,16線lidar),每一個收到的點代表圖像的一個像素,像素的值r_{i}表示相應的點p_{i}到sensor的歐式距離

完成圖像化之后得到一個矩陣,對矩陣的每一列進行估計(即完成對地面的估計),在分割之前進行地面點的提取。可能代表地面的點被標記為地面點而不用于分割。

然后,將基于圖像的分割方法應用于距離圖像以將點分組為多個聚類。同一類的點具有相同的一個標簽(地面是較為特殊的一類);同時,為了快速可靠地完成特征提取,忽略少于30個點的類。

完成這一步之后,圖像里只保留了可能代表大物體的點,然后記錄下點的三個值:(1)類的標簽;(2)點在矩陣中的坐標(x,y);(3)點的值即r_{i}?在接下來的模塊里使用。

二、Lidar Odometry

首先是特征點的提取,方法與LOAM中的相似,只是進行特征提取的點云是Segmentation處理之后得到的點云。

為了從所有方向均勻地提取特征,作者將圖像水平劃分為幾個相等的子圖像。 然后我們基于它們的平滑度c對子圖像的每一行中的點進行排序。然后通過設定的閾值c_{th}來判定平面點或者角點。效果如下圖:

接下來進行了LOAM中沒有的操作,即作者認為子圖像中的每一行具有最大c值的edge特征點,其不屬于地面;?類似地,子圖像中的每一行具有最小c值的平面特征點一定是地面點。處理之后效果如下:

三、Lidar Odometry

Lidar Odometry模塊估計兩次連續掃描之間的傳感器運動。 通過執行point-edge和point-plane掃描匹配找到兩次掃描之間的轉換。具體方法采用的與LOAM中一致。但在后續步驟中,作者做了一些改進。

1)Label matching

這個時候就用到了在Segmentation中記錄下的類的標簽(label)。然后在配準過程中,對任意一點的配準只在標簽相同的點里進行匹配。例如,平面點只考慮標記為地面點的點,邊緣點只考慮其他標記為大物體的點。

作者以這種方式查找對應關系有助于提高匹配準確性。 換句話說,更可能在兩次掃描之間找到相同對象的匹配對應關系。 這個過程也縮小了對應點的潛在對應點。

2)Two-step LM?Optimization

本文采用兩步得到最佳變換:(1)通過配準平面點來得到[t_{z},\theta _{roll},\theta_{pitch}](2)然后在以[t_{z},\theta _{roll},\theta_{pitch}]為約束的情況下,通過配準邊緣點來來估計[t_{x},t_{y},\theta_{yaw}]。雖然在第一步中也能估計[t_{x},t_{y},\theta_{yaw}],但它們不夠準確而且不用在第二步。

通過使用兩步優化方法,可以實現類似的精度,同時計算時間減少約35%。

四、Lidar Mapping

Lidar Mapping模塊中,將特征點與周圍點云圖進行配準,以進一步優化姿勢變換,但以較低頻率運行。具體細節與LOAM相似。

LeGO-LOAM的主要不同之處在于如何存儲最終點云圖。LeGO-LOAM選擇存儲每一個特征點集,而不是單一的點云圖。

M^{t-1}是保存所有先前特征點集的集合。在進行掃描時,M^{t-1}中的每個特征集也與傳感器的位姿相關聯。這樣,我們可以根據M^{t-1}來得到周圍點云圖(surrounding point cloud map)\bar{Q}^{t-1}:第一種方法,通過選擇通過選擇傳感器視場中的特征點集來獲得\bar{Q}^{t-1};為了簡單起見,選擇(特征點集關聯的)傳感器位姿在傳感器當前位置100米范圍內的特征點集。然后將所選擇的特征點集轉換并融合到單個周圍的地圖中,從而得到\bar{Q}^{t-1}

作者還將位姿圖SLAM集成到LeGO-LOAM中。 每個特征點集的傳感器位姿可以被建模為位姿圖中的節點。特征點集可以視為此節點的傳感器測量值。由于Lidar Mapping模塊的姿態估計漂移非常低,假設在短時間內沒有漂移。通過這種方式,可以通過選擇最近的一組特征點集來形成\bar{Q}^{t-1}。然后,可以使用在L-M優化之后獲得的變換來添加新節點與\bar{Q}^{t-1}中的所選節點之間的空間約束。可以通過執行閉環檢測來進一步消除該模塊的漂移。在這種情況下,如果在當前特征點集與使用ICP的先前特征點集之間找到匹配,則會添加新約束。然后通過將位姿圖發送到優化系統來更新傳感器的估計位姿。

?

運行結果如下

在這里插入圖片描述

具體安裝測試移步LeGO-LOAM初探:原理,安裝和測試

五、閑談

對論文的學習到此告一段落,大概了解了論文作者的思路以及該算法在LOAM基礎上的修改。。。。。。

由于最近比較忙,沒有時間詳細閱讀代碼以配合理解論文,后續再補上。。。。。。

?

順帶自撈一下關于LOAM學習的Blog:

LOAM_velodyne學習(一)

LOAM_velodyne學習(二)

LOAM_velodyne學習(三)

LOAM_velodyne學習(四)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253932.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253932.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

char data[0]用法總結

struct MyData { int nLen; char data[0]; }; 開始沒有理解紅色部分的內容,上網搜索下,發現用處很大,記錄下來。 在結構中,data是一個數組名;但該數組沒有元素;該數組…

(一)低功耗設計目的與功耗的類型

一、低功耗設計的目的 1.便攜性設備等需求 電子產品在我們生活中扮演了極其重要的作用,便攜性的電子設備便是其中一種。便攜性設備需要電池供電、需要消耗電池的能量。在同等電能提供下,低功耗設計的產品就能夠工作更長的時間。時間的就是生命&#xff…

(轉)徹底學會使用epoll(一)——ET模式實現分析

注:之前寫過兩篇關于epoll實現的文章,但是感覺懂得了實現原理并不一定會使用,所以又決定寫這一系列文章,希望能夠對epoll有比較清楚的認識。是請大家轉載務必注明出處,算是對我勞動成果的一點點尊重吧。另外&#xff0…

MFC的消息映射有什么作用

絕對以下這三個解釋的比較簡潔,特此做個記錄!以感謝回答的這些人! MFC的消息映射有什么作用: Windows操作系統主要是有消息來處理的,每個程序都有自己的消息隊列,并且這些消息是有優先級的,也就是誰會先…

線性表的鏈式存儲結構

鏈式存儲結構的定義 1.概念定義: - n個結點離散分配 - 彼此通過指針相連 - 每個結點只有一個前驅結點和一個后繼結點 - 首結點沒有前驅結點,尾結點沒有后繼結點 2.專業術語 -首結點:第一個有有效數據的結點 -尾結點:最后一個有有效…

Apache 設置http跳轉至HTTPS訪問

為什么80%的碼農都做不了架構師&#xff1f;>>> <VirtualHost>...</VirtualHost> 中添加如下配置 <IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*)$ https://域名/$1 [R301,L] </IfModule> 轉…

JAVA線程概念

一、程序與進程 1、程序&#xff1a;一段靜態的代碼。 2、進程&#xff1a;程序的一次動態執行過程&#xff0c;它對應從代碼加載、執行到執行完畢的一個完整過程。 3、進程也稱任務&#xff0c;支持多個進程同時執行的OS就被稱為多進程OS或多任務OS。 二、進程與線程 在一…

(二)功耗的分析

前面學習了進行低功耗的目的個功耗的構成&#xff0c;今天就來分享一下功耗的分析。由于是面向數字IC前端設計的學習&#xff0c;所以這里的功耗分析是基于DC中的power compiler工具&#xff1b;更精確的功耗分析可以采用PT&#xff0c;關于PT的功耗分析可以查閱其他資料&#…

Hibernate創建hqll時報錯

Hibernate 問題,在執行Query session.createQuery(hql) 報錯誤 出錯截圖&#xff1a; 這條語句在java運行環境下&#xff0c;直接連數據庫不出錯&#xff0c;如果在hiberante,struts環境下就出錯 出錯原因&#xff1a;jar包沖突&#xff0c;struts2和hibernate框架中都有antlr包…

.NET Core TDD 前傳: 編寫易于測試的代碼 -- 全局狀態

第1篇: 講述了如何創造"縫". "縫"(seam)是需要知道的概念. 第2篇, 避免在構建對象時寫出不易測試的代碼. 第3篇, 依賴項和迪米特法則. 本文是第4篇, 將介紹全局狀態引起的問題. 全局狀態 全局狀態, 也可以叫做應用程序狀態, 它是一組變量, 這些變量維護著…

(三)系統與架構級低功耗設計

前面講解了使用EDA工具&#xff08;主要是power compiler&#xff09;進行功耗分析的流程&#xff0c;這里我們將介紹在數字IC中進行低功耗設計的方法&#xff0c;同時也結合EDA工具&#xff08;主要是Design Compiler&#xff09;如何實現。我們的講解的低功耗設計主要是自頂向…

python---統計列表中數字出現的次數

1 import collections 2 3 a [1,2,3,1,2,3,4,1,2,5,4,6,7,7,8,9,6,2,23,4,2,1,5,6,7,8,2] 4 b collections.Counter(a) 5 for c in b&#xff1a; print c,b[c] 轉載于:https://www.cnblogs.com/lxs1314/p/7236321.html

MFC入門(一)——MFC是一個編程框架

MFC (Microsoft Foundation Class Library)中的各種類結合起來構成了一個應用程序框架&#xff0c;它的目的就是讓程序員在此基礎上來建立Windows下的應用程序&#xff0c;這是一種相對SDK來說更為簡單的方法。因為總體上&#xff0c;MFC框架定義了應用程序的輪廓&#xff0c;并…

2.數據結構筆記學習--線性表基本操作

線性表的結構定義&#xff1a; 順序表的結構定義&#xff1a; typedef struct {int data[maxSize]; //存放順序表元素的數組&#xff0c;一般用 int A[maxSize];int length; //存放順序表的長度,一般用 int n; }SeqList; 單鏈表結點定義&#xff1a; typedef struct L…

(四)RTL級低功耗設計

前面介紹了系統級的低功耗設計&#xff0c;換句話說就是在系統級降低功耗可以考慮的方面。系統級的低功耗設計&#xff0c;主要是由系統級設計、具有豐富經驗的人員實現&#xff0c;雖然還輪不到我們設計&#xff0c;我們了解一下還是比較好的。我們前端設計人員的重點不在系統…

Unity3D 游戲前端開發技能樹(思維導圖)

如果做游戲也是一種游戲,那么這個游戲的自由度實在是太高了.(導圖源文件鏈接&#xff1a;http://pan.baidu.com/s/1eSHpH5o 密碼&#xff1a;qzl5) 最近要用思維導圖軟件Xmind把自己的思路好好捋一捋,算是溫故知新吧. 轉載于:https://www.cnblogs.com/qiaogaojian/p/6098962.ht…

js forEach

&#xfeff;&#xfeff;forEach()函數從頭到尾把數組遍歷一遍。有三個參數各自是&#xff1a;數組元素。元素的索引&#xff0c;數組本身&#xff08;假設是一個參數就是數組元素&#xff0c;也就是數組的值。var data[1,2,3,4,5,6]; var sum0; data.forEach(function(v){//當…

SQL Server 死鎖的告警監控

原文:SQL Server 死鎖的告警監控今天這篇文章總結一下如何監控SQL Server的死鎖&#xff0c;其實以前寫過MS SQL 監控錯誤日志的告警信息&#xff0c;這篇文章著重介紹如何監控數據庫的死鎖&#xff0c;當然這篇文章不分析死鎖產生的原因、以及如何解決死鎖。死鎖&#xff08;D…

關于web性能一些特性匯總

關于web性能一些特性匯總 DOMContentLoaded & load load事件是window對象上的事件。指的是網頁資源已經加載完畢&#xff08;包括但不限于DOM、圖片、音頻、腳本、插件資源以及CSS&#xff09;。 DOMContentLoaded事件是document對象上的事件。指的是DOM已經加載完畢。IE中…

(五)門級電路低功耗設計優化

&#xff08;1&#xff09;門級電路的功耗優化綜述 門級電路的功耗優化(Gate Level Power Optimization&#xff0c;簡稱GLPO)是從已經映射的門級網表開始&#xff0c;對設計進行功耗的優化以滿足功耗的約束&#xff0c;同時設計保持其性能&#xff0c;即滿足設計規則和時序的要…