比如,我在gmapping演算法中,使用激光里程計和高精度的輪式里程計表現出來的區別是什麼?


里程計作為SLAM的前端是值得專門研究的。畢竟後端的閉環是為了減小累計誤差。里程計的累計誤差越小,後端就越輕鬆。而一個糟糕的里程計配上非常厲害的閉環也不會有好的效果。

輪式里程計的精度很大程度上取決於標定。良好的標定可以達到極高的精度,甚至高於激光里程計。在實際工程中,我最推薦的做法是進行輪式里程計和激光的聯合標定。聯合標定包括內參和外參,這裡內參是指左右輪的半徑和輪距;而外參是指激光雷達與底盤的位置關係。經過聯合標定後,不僅輪式里程計誤差極低,還可以把兩種里程計進行融合。效果如下,在odom frame下可視化laserscan,憑肉眼是看不出漂移的。

輪式+激光里程計融合袁博融的視頻 · 289 播放

畢竟其它答主也提到了,輪子可能存在打滑,因此偶爾也有失效的情況。但輪式里程計在靜態時是絕對不會漂移的。減小輪子打滑影響的方式之一是在從動輪上增加編碼器做里程計。因為打滑主要發生在主動輪上。但這會導致更複雜的機械設計。激光里程計在靜態時仍可能漂移,產生累計誤差,取決於具體實現。據我測試,laser_scan_matcher精度並不算高,我更推薦rf2o_laser_odometry。激光里程計的挑戰是有動態障礙物的環境,尤其是當視野被嚴重遮擋時。就像你在火車上看對面的火車動了,可能並不確定是對面的車開了還是自己的車開了。如果有條件的話,盡量把激光雷達視野做大,會省掉很多麻煩。畢竟買個360度的激光只用180度也會有點不爽吧。至於聯合標定工具,推薦曠視SLAM組的OdomLaserCalibraTool。裡面文檔有詳細的理論推導。而在實際應用中,因為輪子磨損會導致輪子半徑減小,標定應定期更新。而改進聯合標定的調用方式可以做到在線自動標定和更新,保證機器人在整個生命週期內的精度。

除了題主問到的這兩種里程計外,視覺慣導里程計(VIO)也是推薦使用的。VIO目前看來性價比極高,千元以內的雙目慣導就有極高的精度。視覺和IMU也是取長補短的關係,近幾年發展出的演算法很多。這裡就不過多介紹了,可展開討論的太多了,以後在合適的問題下可以再仔細談談。


談一談個人理解哈,沒太深入思考,結論不一定正確,還望給位大佬批評指正。

輪式里程計:

優點:

  • 成本低。高精度編碼器其實也挺貴的……但是和激光雷達成本相比基本不在一個數量級;
  • 演算法相對簡單。
  • 免安裝。對於機器人底盤來講運動控制器一般是閉環調速,由編碼器提供轉速的反饋信息,並且可以直接讀取轉速信息(我用過的四五款知名不知名的底盤都有相關數據介面),幾乎省去了安裝的麻煩。

缺點:

  • 只有對自身運動情況的感知,因自身運動造成的外部環境的變化,對系統沒有任何反饋。在位姿估計上相當於只有運動先驗信息。這也是造成它用於位姿估計不準的根本原因。
  • 地面非水平/顛簸時:不準
  • 輪胎打滑時:不準

激光里程計:

優點:

  • 精度高,有環境的觀測信息作為後驗。對應輪式里程計的缺點,相當於對於自身運動造成的外部環境變化,系統有反饋。優點我覺得有這一條就夠了。
  • 相對輪式里程計而言,歷史觀測信息可以被重複利用起來進行更多功能,比如構建地圖、障礙物感知、機器人綁架後重定位、自主導航等等,這些應用潛力是輪式里程計無法企及的。

缺點:

  • 成本高。這個也不是絕對成立的,低端單線激光雷達500左右軟妹幣就能收入囊中,比一些高精度編碼器還便宜;但總體來說還是偏貴
  • 對環境還是有些要求,演算法設計考慮得多一些。長走廊,過於寬闊的環境,鏡子玻璃等使光線發生偏折的部件,環境中運動的物體等都是令人頭疼的問題。
  • 壽命低。畢竟機械活動部件,磨損是避免不了的。據說好些自動駕駛用的多線激光雷達,長時間工作壽命只有兩三年,不知真假。相控陣或MEMS激光雷達壽命相對要長好多。
  • 人眼安全。我不太懂什麼激光安全標準,只是單純覺得,如果人眼總盯著看,多多少少有影響吧(雖然我覺得沒有人這麼閑...)


輪式里程計的優點就是速度快,但是長時間了肯定不準,一是感測器不準,二是在運動過程中會有滑動存在;而通過scan_match計算位姿精度會更高,缺點就是計算量比較大。

一種更好的方法就是將兩者結合,在兩個scan_match之間使用輪式里程計的增量得噹噹前位姿,在有激光數據可用時執行scan_match進一步修正位姿;這樣的話位姿輸出速率就可以很高,同時保持精度。


前面幾位都說了輪式里程計和激光里程計各自的優缺點,其實在實際工程中,單一感測器存在測量的侷限性,魯棒性和精度都難以保證,因此一般都會選擇多感測器融合的方法;常見的就是基於濾波或者是優化的方法,比如gmapping就是一種濾波的方法,cartographer就是一種基於優化的方法,兩種方法本質上都可行,融合的難點在於怎麼準確的描述測量的不確定性,數據怎麼對齊(時間+空間),另外現在都2020年了,就不要再研究gmapping了。


後驗(定位/建圖)=先驗(里程計)*似然(激光觀測)

類似編碼器的這種里程計屬於內部感測器,只能提供先驗預測,而這種預測是可以可無的(勻速模型/隨便給個大概值...)。優缺點無從談起,只是不同使用場景下的不同方案。

硬要比較的話,按照題主提問中的這種場景(猜測室內小車),採用gmapping這種粒子濾波原理的定位時,首先要有個二維柵格地圖,然後走兩步才能完成初始化。遇到過於方正對稱的環境容易失效;高精度里程計開機就完成內部初始化,相對地圖的位姿初始化需要手動標定。


計算一個輪式里程計的過程通常不需要環境信息,其精度主要是受限於感測器本身精度,當然在凹凸不平和容易打滑的地方觀測精度會下降。

激光里程計的計算是依靠san to can 或者scan to map的scanMatch實現的。由於激光數據是對外部環境的觀測,儘管激光的測量精度很高,但是極其容易受環境影響的,如長走廊無法推理走廊方向上的運動,感測器被遮擋會導致直接無法進行推理。

總的來說是兩種不同類型的觀測信息,是高效互補的一對組合。在gmapping裡面,一般使用輪式里程計作為里程計的輸入源,在長走廊一般也不會表現的太差。更一般來說,如果有輪式里程計,就盡量用到它,它對維持系統的魯棒性尤為重要,其他觀測源用於提高精度。


輪式里程計頻率高,局部精度也高,但存在累計誤差,使用時間長了了絕對精度下降。兒激光里程計相反,使用scan_match演算法後絕對精度較高,但計算需要耗時,所以頻率相對前者低,精度則有激光雷達精度決定。但要注意的是,激光雷達里程計同樣存在累積誤差,需要通過迴環優化消除。


輪子里程計一般侷限在二維平面,scan match可以得到三維姿態。


輪式里程計+scan matching豈不是很完美

所以說多感測器融合纔是王道


輪式里程計精度再高也沒啥意義,打滑一下不也是涼涼的。


推薦閱讀:
相關文章