1. (前言)velodyne 驅動包的一些數據信息
以下參數不是理論參數,而是代碼編程測試的實際參數
掃描距離:0.4 - 100;
轉速: 600r/m ---> 10r/s(每秒鐘轉10圈);
數據包發送頻率: 754(for Last/Strongest) 1508 (for dual)
每一圈發送的數據包: 754/10 = 75個。
雷達掃描的精度: 0.007
因此,激光雷達每掃描一圈發送約75
個數據包, 每個數據包包含1206個字節`
uint8[1206] data // packet contents (42(開頭)+[1200(數據)+4(時間軸)+2(雷達型號)] == 1248)
2. 摘要
背景: 使用2軸雷達
來構建實時激光里程計。難點在於在不同時刻接收的距離測量值處理,以及運動估計的誤差造成的點雲誤配準。
迄今爲止,連續的地圖都是通過離線的捆綁法,常常使用閉環檢測來修正漂移。
我們的算法實現了低漂移+低計算複雜度同時,並不要求高精度距離測量和慣性傳感器。
該算法核心是SLAM分割爲定位和建圖兩個算法模塊
,一個算法負責以高速率更新里程計信息, 但以較低保真度更新雷達的速度
;(與視覺中PTAM原理類似)
另一個算法的運行頻率稍微低一些,主要實現精確匹配和點雲匹配。將這兩個算法合併就可以實現實時更新地圖。
-
雷達的優勢
對光照不明感,且適用於無紋理的環境下;
相比於攝像頭,激光雷達的最大優勢在於使用環境限制較小,即不管在白天或是夜晚都能正常使用(無人駕駛);
3. 核心算法
兩個算法都在邊緣
和平面
提取特徵點;
在里程計算法中, 特徵點對應關係的確定主要爲確保快速計算。
在地圖構建算法中, 通過檢查局部點簇的幾何分佈,以及關聯的特徵值和特徵向量來確定對應關係.
-
雷達里程計計算(Lidar Odometry)
- 求取特徵
首先根據一個值(這個值勉強可以翻譯爲
粗糙率
)的計算來區分特徵是屬於邊緣特徵還是平面特徵:
論文說明當這個值
大於閾值Cmax
時,可以認爲是邊緣點;
當這個值小於Cmin
時,可以認爲是平面點;(至於具體是爲什麼可以這個判斷,暫時還不清楚)
- 求點到直線的距離,點到平面的距離
注意: 與邊緣點最鄰近的點屬於邊緣點, 與平面點最鄰近的點屬於平面
在求取兩個距離之後,根據距離值建立優化目標函數:
根據1: 雷達在相鄰掃描之間有一個剛體變換矩陣(包括旋轉+平移);
根據2: 通過這個變換矩陣分別構建基於邊緣點集的方程和基於平面點集的方程;
對上述公式,利用LM優化算法,迭代求解。具體的算法求解僞碼如下:
-
地圖更新(Mapping)
1.獲取兩個周邊點集合,一個是邊緣線集合S', 一個是平面點集合S''; 2.然後計算S‘以及S''的協方差矩陣,並獲取該協方差矩陣的特徵值和特徵向量; 3.最大(或最小的)特徵值對應的特徵向量是邊緣線的方向/局部平面。 4.在獲取邊緣點集和平面集之後,然後計算相對應點的距離, 最後優化計算的部分與上一步里程計的求解一樣。最終可以得到世界座標系下的點雲集合Q
4.算法的實測結果
誤差對比圖
效果對比圖