精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

LT-mapper系統的原理和實現應用分析

3D視覺工坊 ? 來源:深藍AI ? 作者:SkyShaw ? 2022-10-09 15:01 ? 次閱讀

1、 前言

不得不承認的一件事情是,在SLAM的這個技術領域內各位大佬們的內卷可以說是越來越嚴重了,每一次在拜讀了行業內頂尖的論文或者是觀看了行業大佬們發出來的技術demo視頻后,我本人就會陷入無限的自我懷疑當中……

精度、魯棒性、效率等等問題大家好像在各自的數據集中都實現了solved,而我卻還在我“目前的數據集”掙扎(文字狗頭)。摒棄掉妄自菲薄的念頭,針對之前的文章中各位大佬在life-long問題中提出的勘誤點:

1) Life-long問題中需要克服的問題在于如何應對視角變化,天氣變化,光照變化條件以及動態障礙物環境下,確保定位和建模的精度。

2) Life-long實際是包含了兩個維度的問題:long term和large scale。若是基于圖優化的激光匹配算法,需要考慮怎么保證約束的準確性,當環境發生變化之后,匹配算法非常容易產生歧義,需要避免感知混淆的問題。根據上述的問題點,我們可以發現在life-long問題解決的關鍵流程中都會出現環境變換檢測的功能,這個功能既需要包括針對短期的高動態障礙物的檢測,也需要包括針對長期的緩慢環境變化的檢測。而針對這個關鍵的環境變換檢測功能,學術界也提出了很多種方案,本片文章則將簡單分析一下韓國KAIST Department of Civil and Environmental Engineering 在2021年發表的“LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping“論文。

2、 LT-mapper系統總概

圖:LT-Mapper系統的主要流程框圖由LT-Mapper系統的主要流程框圖,我們可以發現其系統主要由LT-SLAM, LT-removert, and LT-map三個模塊組成,各個模塊各司其職又互相獨立共同保證整個life long框架的正常運行。

(1) LT-SLAM, 在LT-SLAM模塊中,Kim團隊利用multi-session SLAM,基于激光雷達的global localizer實現回環檢測,以此內部聯合優化多個session SLAM的軌跡。在這個模塊中,query map被注冊添加到現有的central map(target map)。

(2) LT-removert, 該模塊用于處理在query map和central map(target map)對齊時的”模糊性”問題,一方面用以去除map中的噪聲,一方面用以去除map中的高動態物體點云(High Dynamic Points)

(3) LT-map,將query map注冊添加到現有的central map并移除HD點后,通過在query map和central map間進行set difference operation的操作來檢測環境上的變化。此時檢測變化的time scale就會大于之前LT-removert模塊檢測高動態物體點云的time scale了,即是探測不同session靜態地圖的變化,其階段檢測出來的動態點云稱為低動態點云(LD)。低動態點云(LD)隨后將其進一步分為“新出現“點(positive difference (PD))和”消失“點(negative difference (ND))兩類。

3、 LT-SLAM方法

該模塊本質上就是multi-session SLAM中多SLAM Trajectories的拼接對齊問題,論文中使用的匹配方案是ICP或者SCAN-CONTEXT(SC-Loops也是Kim團隊研究和發表的一種回環檢測方法。論文可詳見鏈接:Scan Context: Egocentric Spatial Descriptor for Place Recognition within 3D Point Cloud Map)來計算過兩個點云“關鍵幀”之間的6自由度的變換關系。在通過回環檢測計算出frame之間的約束關系后,在pose-graph中引入相關的對象和約束進行multiple sessions的優化計算以實現軌跡間的對齊。值得說明的是,論文中提出了anchor node(錨點)的概念,該anchor node用以替代SLAM中的key node(frame),因為LT-SLAM中會處理許多不同時期的SLAM trajectories,若是以傳統意義上的關鍵幀作為一個處理單元的話,則計算量和復雜度太大了。

因此,anchor node(錨點)則代表了若干個key node(frame)形成的map的原點,在SLAM軌跡的優化過程中也將優化的處理單元改為了anchor node(類似cartographer中submap的概念)。而系統中使用anchor node,一方面減少了在回環檢測后pose-graph優化調整的復雜度,另一方面也減少了系統地圖環境變化和更新的復雜度。

4、 LT-REMOVERT方法

回到對環境中動態物體點云的處理和分類,文章將所有的動態點分類成了兩類:HD(高變化的動態障礙物)和LD(緩慢變化的場景點)。根據以上的分類,再將整個環境變化的檢測功能分成兩個sessions:

1. 首先刪除HD而不刪除LD點,在這個過程中文章是使用了REMOVERT算法作為HD的刪除引擎,具體的算法原理和流程可以詳見本人的另一篇文章SLAM動態障礙物濾除 | IROS 2020 REMOVERT:Remove, then Revert的論文解析與實現結果。

2. 在完成對HD點的刪除后,進入LD的檢測階段,該階段中會先將query map和target map的坐標系對齊并且移除兩者中的HD后,為target map構造了一個kd-tree并判斷query map中的點云在半徑r米的范圍內是否有足夠多的target map點云,如果沒有,則該query map中的點為LD。然后再對LD點進行ND和PD的劃分。其中PD(Positive Difference)指的是在query map中新增加上的點云變化,ND(Negative Difference)則是指原先存在而現在query map中消失了的點云,所以根據上述的定義我們相應需要去除的點云即為ND,需要添加的點云為PD。

而Kim在LD的基礎上進行ND和PD的區分,主要是為了解決一種點云“誤殺”的問題:Occlusions(遮擋),試想一種情況:target map中有一個靜態物體O并在完整構建了其點云“形狀”,而在query map中實際的環境是該靜態物體O前突然多了一堵墻遮擋住了傳感器關于物體O的識別。

那么在query map中該物體O點云會被先識別為LD,但進一步的分析是該物體O的點云是應當保留而非去除的,Kim稱此類被遮擋住的點云為weak ND,并且weak ND是不會被去除以避免“誤殺”的情況。對于這一步關于“Weak ND Preservation”的問題,Kim團隊再次使用了Removert,但進行了修改:不同于原來的Removert只刪除視點原點近處的地圖點,而修改版本的Removert則關注于刪除原始ND map中的遠處的點,并然后將它們還原到static map中。

說完這么多,我們參照論文中的實例進行一下說明,下圖A、B分別為同一街道不同時期的地圖(MulRan dataset DCC 01和DCC 02),其關鍵的不同之處在于馬路邊上是否存在墻面。而且在有墻面的地圖后面是不存在點云的(因為遮擋的原因)。

圖A:MulRan dataset DCC 01(有墻面)

圖B:MulRan dataset DCC 02(無墻面)

具體步驟的結果可詳見下圖,其中標記為藍色的點云為PD,標記為紅色的點云為ND,灰色的點云為weak ND。情況(1):選擇A為target map,B為query map,左列的環境檢測結果圖片是普通的kd-tree取半徑集合差操作的獲取的na?ve ND和PD點,右欄則顯示了在檢測處LD后進一步PD和ND區分的結果。在Case 1中,紅色ND點大部分被刪除,而添加了整個藍色PD點(相對于A,B中新增了許多點云,所以為PD)。

圖:情況1下的環境檢測結果情況(2):選擇B為target map,A為query map,在map A中的部分地面點被遮擋,并在左欄中錯誤地標記為ND。在右欄中,只有強ND(紅色)點被移除,弱ND點被還原(即灰色標記的地面點)。由此可見,Kim團結針對LD點云的進一步PD、ND 和weak ND區分是可以有效避免遮擋引起的誤殺問題的。

圖:情況2下的環境檢測結果

5、 LT-MAP方法

該部分的主要任務就是地圖的更新(map update)和地圖的長期管理(Long-term Map Management)。

針對地圖的更新(map update),論文中使用了一個公式進行了表述,該公式就是LT-map部分最核心的邏輯:

其中為去除了HD關鍵幀點云,函數ND(*)和PD(*)表示返回在關鍵幀中類型為ND 和 PD的點云,一言以蔽之,給到central map和query map,去除HD和ND的點云并保證PD點云保留。

針對地圖的長期管理(Long-term Map Management),在論文中的進一步測試說明了LT-mapper在更新world representation時分為兩種方法,如下圖所示。第一,LT-mapper可以高效地通過只發送LD類型的環境變化點云(而不是整個關鍵幀點云地圖),以更改到一個central server來維護一個live map。第二個表述為meta map(區別于live map), LT-mapper在更新擴展時沒有考慮添加weak PD類型的點云,即不考慮短期靜止或周期性的變化的點云。

圖:地圖的長期管理的兩種形式

6、 LT-MAPPER關鍵代碼實現方法

第一, 先上LT-Mapper的GitHub開源代碼鏈接:https://github.com/gisbi-kim/lt-mapper該開源代碼整體流程和函數的設計都比較清晰,較為晦澀的地方可能也就是LT-REMOVERT模塊了,本節也將根據系統框圖的順序從LT-SLAM, LT-removert, and LT-map各個模塊進行關鍵部分代碼的展示。

6.1 LT-SLAM

該部分和其他SLAM的回環檢測和因子圖優化的過程實現并沒有本質上的區別,僅僅是該模塊是直接加載Single session SLAM的軌跡和因子圖信息。在multiple sessions間進行回環檢測的操作,并在計算出約束后添加到已有的因子圖中完成優化匹配以實現multipleSessions SLAM 軌跡信息的對齊拼接。

1、void LTslam::run( void )

2、{3、initOptimizer();4、initNoiseConstants();5、6、loadAllSessions();7、addAllSessionsToGraph();8、9、optimizeMultisesseionGraph(true); // optimize the graph with existing edges10、writeAllSessionsTrajectories(std::string("bfr_intersession_loops"));11、12、detectInterSessionSCloops(); // detectInterSessionRSloops was internally done while sc detection13、addSCloops();14、optimizeMultisesseionGraph(true); // optimize the graph with existing edges + SC loop edges15、16、bool toOpt = addRSloops(); // using the optimized estimates (rough alignment using SC)17、optimizeMultisesseionGraph(toOpt); // optimize the graph with existing edges + SC loop edges + RS loop edges18、19、writeAllSessionsTrajectories(std::string("aft_intersession_loops"));20、}

6.2 LT-removert

整個Removerter::run(void)的流程分為了(1)初始化加載地圖和預處理,(2)高動態點云HD的去除,(3)低動態點云LD的檢測,(4)LT-map。代碼詳見如下:

1、void Removerter::run(void)2、{3、// # Step 0: Preparations4、loadSessionInfo();5、6、parseKeyframes();7、loadKeyframes();8、precleaningKeyframes(2.5); // optional. remove points within near radius from the lidar9、10、makeGlobalMap();11、12、// # Step 1: HD noise removal13、removeHighDynamicPoints();14、parseStaticScansViaProjection();15、16、// # Step 2: LD change detection17、detectLowDynamicPoints();18、19、// # Step 3: LT-map20、updateCurrentMap();21、parseUpdatedStaticScansViaProjection();22、parseLDScansViaProjection(); // TODO23、updateScansScanwise(); // == eq(4) in the paper24、saveAllTypeOfScans(); // TODO25、26、} // Removerter::run 其中對于(2)部分,該部分的代碼可以詳見另一篇文章:SLAM動態障礙物濾除 | IROS 2020 REMOVERT:Remove, then Revert的論文解析與實現結果,該文章中有詳細的注釋和說明。針對(3)中低動態點云LD的檢測,代碼實現如下: 1、void Removerter::detectLowDynamicPoints(void)2、{3、//先對classSession的兩個實例:central_sess_ & query_sess_進行基于KnnDiffLD檢測。4、central_sess_.extractLowDynPointsViaKnnDiff(query_sess_.map_global_curr_static_);5、query_sess_.extractLowDynPointsViaKnnDiff(central_sess_.map_global_curr_static_);6、7、// strong ND8、central_sess_.constructGlobalNDMap();9、filterStrongND(central_sess_, query_sess_); // filtering central_sess_.scans_knn_diff_10、central_sess_.removeWeakNDMapPointsHavingStrongNDInNear(); // propagation"11、12、// strong PD13、query_sess_.constructGlobalPDMap();14、filterStrongPD(query_sess_, central_sess_); // filtering central_sess_.scans_knn_diff_15、query_sess_.revertStrongPDMapPointsHavingWeakPDInNear(); // propagation"16、17、//1.保存PD map(querysess實例中)central sess實例18、//2.地圖已經在全局(centralsess)坐標系下,但由于后續會重新投影這個地圖保存到centralcoord所以先在此使用query coord19、*central_sess_.map_global_pd_ = *query_sess_.map_global_pd_;20、*central_sess_.map_global_pd_orig_ = *query_sess_.map_global_pd_orig_;21、*central_sess_.map_global_pd_strong_ = *query_sess_.map_global_pd_strong_; // Removerter::run22、}

上述代碼中,extractLowDynPointsViaKnnDiff(_target_map)是使用了pcl庫中KdTreeFLANN的結構進行LowDynamicPoints的檢測并儲存。constructGlobalNDMap()函數是基于Session類中的坐標和對于點云數據進行點云拼接生成point cloud map,filterStrongND()和removeWeakNDMapPointsHavingStrongNDInNear()與函數名的定義符合,就是為了將strong ND獨立的返回出來以便在LT-map中使用。

6.3 LT-map

在整個代碼工程中,LT-map和LT-removert都放在了`ltremovert`的文件目錄下,和論文中的說明對應:LT-map中在session間環境變化的檢測方法是基于LT-removert進行的修改。removert是用以進行single session中map的高動態點云的清洗,LT-map則是實現sessions間“靜態”環境物體的變化檢測。在6.2中的Removerter::run(void)的流程中,我們可以看到在完成了地圖加載初始化、高動態點云HD的去除和低動態點云LD的檢測后,就進入了LT-map的地圖更新處理了。

1、// # Step 3: LT-map2、updateCurrentMap();3、parseUpdatedStaticScansViaProjection();4、updateScansScanwise(); // == eq(4) in the paper

updateCurrentMap()函數的功能就是將query sess map和central sess map對齊整合到一起,并保證去除了strong ND points和保留weak ND points以及添加strong PD points到整合對齊后的地圖中。

1、void Removerter::updateCurrentMap(void)2、{3、pcl::PointCloud::Ptr map_global_updated(new pcl::PointCloud());4、//1.querysessmap和centralsessmap對齊整合到一起并在整合的時候去除了strongNDpoints5、auto map_global_union_queryside = mergeScansWithinGlobalCoordUtil(query_sess_.scans_knn_coexist_, query_sess_.keyframe_poses_, query_sess_.kSE3MatExtrinsicLiDARtoPoseBase);6、octreeDownsampling(map_global_union_queryside, map_global_union_queryside, 0.05);7、8、auto map_global_union_centralside = mergeScansWithinGlobalCoordUtil(central_sess_.scans_knn_coexist_, central_sess_.keyframe_poses_, central_sess_.kSE3MatExtrinsicLiDARtoPoseBase);9、octreeDownsampling(map_global_union_centralside, map_global_union_centralside, 0.05);10、11、*map_global_updated = *map_global_union_queryside; // init12、*map_global_updated += *map_global_union_centralside; // init13、14、//2.保留weakNDpoints15、*map_global_updated += *central_sess_.map_global_nd_weak_; // append16、17、//3-1:添加strongPDpoints18、pcl::PointCloud::Ptr map_global_updated_strong_(new pcl::PointCloud());19、*map_global_updated_strong_ = *map_global_updated; // == pcl::copyPointCloud(*map_global_updated, *map_global_updated_strong_);20、*map_global_updated_strong_ += *central_sess_.map_global_pd_strong_;21、octreeDownsampling(map_global_updated_strong_, map_global_updated_strong_, 0.05);22、23、//3-2:添加PDpoints24、*map_global_updated += *central_sess_.map_global_pd_orig_; // append25、octreeDownsampling(map_global_updated, map_global_updated, 0.05);26、27、//4:寫操作28、*central_sess_.map_global_updated_ = *map_global_updated;29、pcl::savePCDFileBinary(save_pcd_directory_ + "updated_map.pcd", *central_sess_.map_global_updated_);30、31、*central_sess_.map_global_updated_strong_ = *map_global_updated_strong_;32、pcl::savePCDFileBinary(save_pcd_directory_ + "updated_map_strong.pcd", *central_sess_.map_global_updated_strong_);33、34、} // updateCurrentMap

updateScansScanwise()函數則是在central sess map上進行論文中公式(4)的更新,具體的操作也是在class Session上實現的。

7、 總結

簡單的來說,Kim團隊發布的論文《LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping》貢獻領域在于三點:

(1)地圖的管理策略map management,

(2)一種解決highlow dynamic change detection(類型HD和LD點云的區分)

(3)LD類型點云的PDND點云管理和處理策略(positive egative change management)的方法

由此,我們可以發現LT-mapper 的側重點在于Life-long SLAM的建圖階段以及地圖管理階段,其研究解決的即是life-long問題中都會出現環境變換檢測的功能。再者,由于LT-Mapper系統框架在設計時各個模塊的功能封裝性較好,其為代碼的移植和工程化提供了便利性,也為目前手頭上的研究項目的系統擴展和優化提供了很好的思路和方向。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 激光雷達
    +關注

    關注

    967

    文章

    3938

    瀏覽量

    189594

原文標題:值得一讀|LT-mapper原理思路和實現分析

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    多核系統設計平臺

    ,開發人員能夠不斷的對自己的假設進行修改和優化。也就是說,應用Poly-Mapper,開發人員可以實現在虛擬的數字環境中設計并驗證自己的系統。之后,通過Poly-Generator,將設計具體
    發表于 10-11 10:35

    MaxCompute讀取分析OSS非結構化數據的實踐經驗總結

    摘要: 本文背景 很多行業的信息系統中,例如金融行業的信息系統,相當多的數據交互工作是通過傳統的文本文件進行交互的。此外,很多系統的業務日志和系統日志由于各種原因并沒有進入ELK之類的
    發表于 06-20 15:01

    電影評論網絡數據抓取與分析系統的設計與實現

    電影評論網絡數據抓取與分析系統設計與實現
    發表于 05-29 10:36

    <<I2C總線應用系統設計>>

    <<I2C總線應用系統設計>>
    發表于 04-18 20:27 ?3次下載

    客車開行方案效益分析系統的設計與實現

    本文討論了鐵路客運效益分析的現狀和方法。簡單闡述了列車開行方案效益分析系統的設計與實現。在這個系統中,采用Dijkstra 算法求得最短路徑
    發表于 08-06 09:14 ?13次下載

    如何使用Python來設計和實現語料分析系統設計?

    語料分析系統是利用計算機軟件技術實現語料分析與研究的重要手段,利用它可以實現對大量語料的分析、詞
    發表于 09-29 17:23 ?17次下載
    如何使用Python來設計和<b class='flag-5'>實現</b>語料<b class='flag-5'>分析</b><b class='flag-5'>系統</b>設計?

    Mapper為自動駕駛汽車提供機器可讀地圖

    為機器提供高精度測繪的Mapper公司近日推出了其首款產品:On-Demand Maps。該產品為開發人員和自動駕駛汽車公司提供了機器可讀的地圖。
    的頭像 發表于 10-24 09:03 ?2675次閱讀

    ASML競爭對手光刻機制造商Mapper宣布破產

    荷蘭的***制造是世界有名的,其中的ASML就是全球最大的***廠商。上周有消息傳出,其荷蘭的競爭對手、代爾夫特的***制造商Mapper證實正式宣布破產。 Mapper有員工270人
    的頭像 發表于 01-07 11:29 ?4401次閱讀

    信號與系統教程之LT、連續時間系統的S域分析

    頻域分析法:信號處理和系統分析與設計的基礎 局限性:一些信號的傅里葉變換不存在 復頻域分析法:擴展了對輸入信號的使用范圍
    發表于 03-19 08:00 ?0次下載
    信號與<b class='flag-5'>系統</b>教程之<b class='flag-5'>LT</b>、連續時間<b class='flag-5'>系統</b>的S域<b class='flag-5'>分析</b>

    你知道linux內核中的device mapper

    LVM2是Linux 下的邏輯卷管理器,它可以對磁盤進行分區等。但是我們這里用LVM主要是利用用戶空間的device mapper 庫以及它提供的 dmsetup 工具。
    發表于 04-29 15:19 ?4431次閱讀

    你了解過Linux內核中的Device Mapper 機制?

    Device mapper 是 Linux 2.6 內核中提供的一種從邏輯設備到物理設備的映射框架機制,在該機制下,用戶可以很方便的根據自己的需要制定實現存儲資源的管理策略,當前比較流行
    發表于 04-29 15:25 ?738次閱讀

    SLAMTEC Mapper使用技巧大集錦

    *300m地下停車場建圖效果重復建圖除了地圖不閉環之外,還有小伙伴反饋重復建圖問題。小嵐:評測的環境為長直走廊,如果超出了開發版Mapper的20米測距半徑,有可能會出現以上問題,同時影響閉環系統工作
    的頭像 發表于 10-16 17:48 ?1656次閱讀

    連續時間系統時域分析的MATLAB實現

    掌握應用 MATLAB 實現對線性時不變連續時間系統的時域分析,即熟悉應用 MATLAB 實現微分方程的求解、連續時間信號卷積計算等。
    發表于 11-10 08:00 ?0次下載
    連續時間<b class='flag-5'>系統</b>時域<b class='flag-5'>分析</b>的MATLAB<b class='flag-5'>實現</b>

    LT6108/LT6109-電流檢測系統

    LT6108/LT6109-電流檢測系統
    發表于 05-12 14:37 ?1次下載
    <b class='flag-5'>LT</b>6108/<b class='flag-5'>LT</b>6109-電流檢測<b class='flag-5'>系統</b>

    用Systemview實現對QPSK系統的仿真與分析

    用Systemview實現對QPSK系統的仿真與分析(測試測量計量的區別)-該文檔為用Systemview實現對QPSK系統的仿真與
    發表于 09-30 12:16 ?11次下載
    用Systemview<b class='flag-5'>實現</b>對QPSK<b class='flag-5'>系統</b>的仿真與<b class='flag-5'>分析</b>