最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一點Cartographer的調(diào)參心得:前端篇

2023-08-03 23:26 作者:懂的都懂你細(xì)細(xì)品  | 我要投稿

上一篇文章介紹了 Cartographer 里和傳感器有關(guān)系的參數(shù)調(diào)整(傳感器篇),這次介紹一些前端部分里經(jīng)常調(diào)的參數(shù)。

Cartographer 前端部分比較簡單,主要就是負(fù)責(zé)點云匹配和生成 Submap。

參數(shù)的配置文件是 trajectory_builder_2d.lua。


調(diào)參整前端的參數(shù)之前,最好先關(guān)閉后端,方便觀察參數(shù)調(diào)整后對建圖的直接影響,可以將下面三個參數(shù)設(shè)置成 0 來關(guān)閉后端:


前端中最重要的一個參數(shù)就是?submaps.num_range_data,這個參數(shù)決定了用多少幀點云來構(gòu)造一副 Submap,取值非常有講究,需要考慮到各個傳感器的精度和運行平臺的算力。通??梢灾苯涌紤] 30/60/90 三個值作為參數(shù)。

Submap 是基于圖優(yōu)化的 SLAM 算法的精髓,使用很多幅的 Submap?來構(gòu)成一大地圖,Submap 包含了若干個 Node,每個 Node 就是一幀點云。建圖過程中的累計誤差,就是通過后端的圖優(yōu)化算法調(diào)整每一副 Submap 的位姿來消除的,讓整體地圖形成最優(yōu)。

submaps.num_range_data?取值越小,每一副 Submap 內(nèi)的累計誤差就會越小,后端的參數(shù)調(diào)的合適,那最終得到的地圖質(zhì)量就是最好的。

我們可以從兩個角度來考慮?submaps.num_range_data?的取值,一個是累計誤差,另一個是性能。

前端會帶來累計誤差的來源有兩個,分別是點云匹配誤差和傳感器誤差。

如果說傳感器質(zhì)量真的很差,會帶來大量的誤差,那最好把?submaps.num_range_data?設(shè)置成 30,讓前端生成盡可能多的 Submap,每一副 Submap 的累計誤差盡可能少。但代價就是需要消耗更多內(nèi)存,后端優(yōu)化也會需要更多的算力,如果 CPU 性能不夠,會讓整個 SLAM 算法無法實時運行,建圖和定位都出現(xiàn)延遲。如果傳感器質(zhì)量非常好,那可以毫不猶豫的把參數(shù)值設(shè)置成 90,既不影響建圖質(zhì)量,也能降低計算資源需求。


第二部分要介紹的是點云匹配器相關(guān)的參數(shù),前端中有兩個匹配器,一個是 Real Time Correlative Scan Match,另一個是 Ceres Scan Match。

Real Time Correlative Scan Match?是前端部分中的第一個匹配器,通過 use_online_correlative_scan_matching 來開關(guān)。在 Submap 構(gòu)建的流程中該匹配器用于較大范圍較粗略的搜索點云在 Submap 上的位置,目的是為了盡可能的消除傳感器帶來的錯誤。

在點云匹配前,carto 會利用先前的位姿加上 IMU 和里程計的角速度線速度來預(yù)測當(dāng)前點云可能的位置,如果里程計和IMU的質(zhì)量比較差,很可能會預(yù)測出錯誤的結(jié)果,導(dǎo)致第二個匹配器在有限的迭代步驟內(nèi)無法匹配出正確的位姿,從而給 Submap 帶來點云匹配的累計誤差,這種因為匹配失敗帶來的誤差是無法消除的,一旦插入了 Submap ,那就會永遠出現(xiàn)在地圖上了,看起來就是一面墻在地圖上有兩條黑線或者是很糊很厚。

在 IMU 和里程計的不可靠或者是沒有這倆傳感器的情況下最好打開?use_online_correlative_scan_matching 。RTCSM 匹配器的參數(shù)里,兩個搜索窗口的參數(shù)是重點觀察對象,real_time_correlative_scan_matcher.linear_search_window 和?real_time_correlative_scan_matcher.angular_search_window,這兩個參數(shù)作用指定 RTCSM 在預(yù)測位置的平移半徑和旋轉(zhuǎn)角度范圍內(nèi)進行搜索,linear_search_window?的單位是米,angular_search_window?的單位是弧度。

設(shè)置這兩個參數(shù)有一個比較直接好用的技巧,那就是先把兩個值都設(shè)置的很大,例如 1 和 math.rad(90),然后修改 carto 的源碼,?位置是?local_trajectory_builder_2d.cc 里的?AddAccumulatedRangeData 函數(shù),把函數(shù)內(nèi)的預(yù)測位姿 pose_prediction 和最終匹配位姿 pose_estimate_2d 都記錄下來,建圖完成后計算全部預(yù)測位姿和匹配位姿中的最大距離差和角度差,把這個差值作為兩個搜索窗口的參數(shù)值。

如果IMU和里程計都非??煽?,精度非常高,預(yù)測位姿和匹配位姿的差很小很小,可以嘗試關(guān)閉 RTCSM 匹配器,節(jié)約計算資源。當(dāng)搜索窗口設(shè)置的太大的時候,會消耗大量的內(nèi)存和算力,如果運行平臺的性能無法支撐,可以考慮關(guān)閉 IMU 和 里程計數(shù)據(jù)的輸入,只用激光雷達,同時保證機器人移動的盡可能慢和平滑,只有激光雷達的情況下 carto 會假設(shè)機器人是勻速移動,使用先前的兩個匹配位姿計算預(yù)估位姿。


未完待續(xù),等有空再更新





一點Cartographer的調(diào)參心得:前端篇的評論 (共 條)

分享到微博請遵守國家法律
文水县| 宜君县| 拜城县| 洞头县| 抚顺县| 台南市| 永州市| 泉州市| 南涧| 云安县| 常山县| 罗城| 安阳市| 沁源县| 永清县| 海南省| 海城市| 永春县| 上饶县| 合阳县| 福州市| 蒙自县| 大同市| 巴南区| 南开区| 鱼台县| 巴青县| 大城县| 枣庄市| 德兴市| 阜阳市| 洪湖市| 宁南县| 军事| 通榆县| 鄄城县| 邻水| 西畴县| 长葛市| 平南县| 水富县|