自動駕駛車輛通常都是預先建立地圖,然后利用此圖進行定位,所以真正的、完整的、高貴的SLAM只發生在第一次采集并生成地圖之后,后續就是如何用這些地圖進行定位導航的問題。另一方面,自動駕駛用的地圖和機器人的地圖。
低速自動駕駛車輛的地圖
乘用車,大家也了解,一年半載的肯定沒法實際上路,上了路還有一系列的法律法規問題,還有一堆的世(shi)界(shi)難(ju)題(keng)等著各位工程師去解決(tian keng)呢,所以這會兒我們也不需要多么著急(反正有更著急的人在)。
而對于低速車來說,相對安全,避不了障大不了先停在原地讓人先過,還顯得文明禮讓(我家的產品避障完全沒問題啊!)。這兩年各種配送、清掃、挖礦之類的自動駕駛低速車會慢慢的抬頭,大家應該會漸漸看到一些功能和價格都能夠接受的產品。而我自己是做SLAM的,所以主要談談這類車上的SLAM問題。
和學術界平時說的SLAM不同,自動駕駛車輛通常都是預先建立地圖,然后利用此圖進行定位,所以真正的、完整的、高貴的SLAM只發生在第一次采集并生成地圖之后,后續就是如何用這些地圖進行定位導航的問題。另一方面,自動駕駛用的地圖和機器人的地圖,對,就是你平時見到的那種,ROS里的黑白灰圖,也會有點差別。
ROS里的占據柵格地圖,我喜歡叫它黑白灰圖
機器人用的柵格地圖,很顯然,主要表達何處有障礙物,何處是可通行的區域,此外就沒有了。它具有基礎的導航與定位功能,精度也不錯(厘米級),制作起來十分簡單,基本可以讓機器人自動生成。對于送餐掃地的室內機器人來說,這種地圖基本就夠用了。但是為什么自動駕駛不用這種圖呢?它和高精地圖有哪些差別呢?
一條很明顯的區別是:在室內,機器人可以去任意可以通過的地方,不會有太多阻攔。而對于自動駕駛來說,每條路都有對應的交通規則:有些地方只能靠右行駛,有些地方不能停車,十字路口還有復雜的通行規則。
智行者科技無人清掃消毒車蝸小白
室內機器人可以利用柵格地圖進行導航,但在室外可不能在十字路口上橫沖直撞。所以,在導航層面,室內與室外的機器人出現了明顯的區別。室內的導航可以基于柵格來實現諸如A*那樣的算法,但室外基本要依賴事先畫好的車道。如果你希望你的外賣機器人既能在室內取貨,又要跑到馬路上送到2公里外面的客戶家中,那么就得同時考慮這兩種地圖的使用方法了。所以你看,低速車輛是界于傳統移動機器人與乘用車之間的產物,它的地圖比兩邊現成產品都要復雜。
我們會用不同的術語來描述地圖的構建階段。大體來說,從一無所有的采集過程開始,我們會碰到兩個大階段:
1、SLAM階段:解決從原始傳感器數據開始,構建某種基礎地圖的過程(一般是三維點云或二維圖像、柵格);
2、標注階段:在SLAM結果基礎上進行人為標注,實現更精細的交通規則控制。
SLAM階段往往是自動的,而標注階段目前還主要是人工的,完美體現了“人工智能”相合作的過程。目前乘用車高精地圖生產主要成本是在標注階段,通常是一群人在在電腦前加班加點地趕著各種工程排期。顯然,這個標注過程的好壞直接影響地圖質量,一旦標錯就等著觀賞車輛各種怪異行為吧。
然而,我們也沒法完全實現標注過程的自動化,因為很多人為規則并不體現在場景數據里。比如公園里的草坪,物流車大概不能走上去,而灑水車大概就應該在草坪上行走,而我們無法通過點云或圖像識別出此類規則,給此類地圖帶來了很大的人工工作量。
比如下面這個點云圖,雖然結構上看不出來,但實際上中間一圈是一個草坪,正常情況下車輛是不能進去的。所以,只能通過人工來標注車輛的行駛區域,才能讓小車正確地導航。
標注過程通常是一些非常繁瑣的步驟,而且因為繁瑣所以價格還挺高。根據2019年的《高精地圖產業發展現狀及趨勢》,一公里高精地圖的成本費用還在幾千至幾萬元。采集車雖然貴但畢竟只有幾臺,計算機開一下程序也只需要一些電費,所以成本主要還是在標注上面。這里的商業化道路還是挺困難的,然而也沒什么辦法(攤手)。
問題低速車輛的SLAM
由于我個人是做SLAM的,咱們還是把主題回到SLAM上來。目前室外車輛的SLAM還是以多線激光為主。雖然激光SLAM原理上比較成熟,然而實際結合其他傳感器來SLAM,還是有一些問題的。學術界的論文總喜歡挑好看的結果來發表,而現實問題往往是骯臟的、動態的、復雜的,這一點,沒解決過實際問題的人可能感受不深。
低速車輛如果真正應用,那么地圖構建時間就不能太長。如果我們在意地圖質量的話,標注工作基本是省不了的,所以對SLAM端的要求就可以總結為:自動化、高可靠性,以及對復雜環境的適應能力(不需要現場人員調參)。這件事情看似簡單,但實際用來總有各種各樣的問題。
激光SLAM
激光SLAM的基本原理就是點云拼接,有些地方也叫注冊、配準,等等。可以利用柱狀物等特征信息來拼接,也可以直接用點來拼接,總之這方面各種方法大同小異,區別不大。激光SLAM的開源項目也有很多,感興趣同學可以看看LOAM/Lego-Loam等經典的方案。
Lego-LOAM Demo圖
當然,論文上的圖片肯定是美麗的,實際當中也肯定是會遇到問題的。如果只靠激光配準就可以把地圖生成出來,那這邊SLAM也就沒什么難度可言了。我們不妨來看看激光SLAM有什么實際問題。
1、點云拼接是個類似于里程計的過程,它們計算的是局部點云之間的相對運動關系。這個運動誤差會逐漸累計,直到地圖出現嚴重變形。其中,高度上的變形會比較明顯,你會發現地圖一端可能會“翹起”或“下沉”。
激光SLAM的累計誤差使得地圖高度出現錯誤,兩側對不上
2、點云拼接的結果依賴于現場的實際三維結構。在結構化道路中,基本可以期待地圖由中間的馬路與兩側的路牙、樹木、護欄組成;但在非結構化道路中,很難對場景結構有一個先驗的知識。它可以是普通馬路,也可能是人來人往的商業街,也可能是萬眾聚會的廣場……總之,你很容易看到激光失效的場景。
激光匹配在廣場或單側臺階等場景下會導致失效,原本直線前進的軌跡會出現扭曲情形,并使得遠處物體模糊
3、更常見的就是來回路段由于匹配失誤導致地圖出現重影,有些論文也稱為“鬼影”。這種現象出現的原因,是兩個激光點云看到了同樣的結構,但由于距離較遠,匹配算法沒法將它們完整匹配起來。
4、最后,純粹由激光匹配得到的地圖,沒有現實世界物理位置信息。如果缺少物理世界信息,那么你沒法按照點云圖把車輛導航到指定位置;如果有兩個激光點云時,也很難把它們完美地拼接起來。
所以,我們需要處理激光與其他傳感器的組合。在點云失效時,嘗試用其他傳感器進行補償;在點云出現累計誤差時,用其他傳感器來進行修復。
激光SLAM和GPS組合
室外自動駕駛車輛通常有一個GPS接收器,指示其物理世界位置。結合GPS信號,我們就可以構建帶有物理世界經緯度的地圖。這個物理坐標在某些業務中是很重要的,因為車輛很可能需要導航到另一個真實世界的建筑物中。相對的,純室內的小車就不需要這種坐標,因為它們只在一間或幾間屋里導航,而不必關心這間屋子在真實世界當中什么位置。
智行者科技無人清掃消毒車蝸小白
GPS的一大特點就是“看天吃飯”。信號好的時候它可以到達厘米級定位,可以直接使用差分GPS+IMU的結果來進行組合導航。這種做法在如今的無人車、無人機里還很常見。對于天天在高速公路上奔跑的乘用車來說,絕大部分情況下可以以GPS為主導;但是,對于園區里運營的小車,進個樹林穿個夾層都是稀松平常的,GPS“信號不好”比“信號良好”更加常見。你能夠接受無人車因為“信號不好”半路拋錨的情況嗎?
在公園、景區的道路上,小車會經常穿梭于樹林、橋梁之中。這些地形上GPS很有可能出現大范圍不可用的情形
GPS噪聲是個很有意思的模型。通常GPS接收器根據自身接收情況,會給出一個信號強弱的判斷。然而,由于著名的多徑效應,GPS也可能給出一個信號很強,但位置錯誤的數據。這就要求SLAM算法對各種信號下的GPS都有穩定的表現。在GPS好時,應該聽從GPS的軌跡走向;在GPS不好的區域,能夠正確識別并改進。
GPS信號良好的路段例子。左側:點云地圖;右側:軌跡圖。軌跡圖中紅色為優化后軌跡,藍色為GPS軌跡。由于GPS全程良好,優化軌跡與GPS重合。
GPS信號不佳的例子。可以看到右側藍色軌跡在無規律跳動,但是點云仍需要正常構建。
GPS信號的不確定還會帶來一些實際的問題。例如,如果車輛開機時GPS信號不好,那么車輛如何確定自身的物理位置?它應該是開到一個開闊區域,等待GPS信號變好,還是以一種“不確定物理位置,但有相對位置”的狀態開始運行?
假設如此,那么運行一段時間后GPS信號變為正常,定位信息應該直接跳到GPS指向的物理位置嗎?這種跳變會不會對控制產生不良的影響?另一方面,在建圖時,我們通常需要按照物理位置來區分不同的地圖,例如公園北側和南側很可能使用兩個不同的地圖。如果GPS信號不好,車輛應該如何確定使用哪一張地圖?這些問題都需要一個實際的解決方案。
GPS的處理方式是室內外車輛SLAM的一個很大的不同點。這會讓SLAM的邏輯變得更加復雜。我們需要結合其他的傳感器位置來判斷GPS信號的有效性,這往往要用到一些全局軌跡的估計方法,而像卡爾曼濾波器這樣有時間順序的算法會受到干擾。
另外,如果我們還使用了基于位置的回環檢測算法,那么它會明顯受到GPS信號好壞的影響。一旦GPS信號變差,激光SLAM的性質就變為一個里程計,其累計誤差變大之后,基于位置的回環檢測算法就很可能失效。
激光SLAM的退化特性
激光SLAM存在各種失效情況,有些你甚至很難事先預料到,例如:
在廣場、機場等開闊區域,即使是多線激光,也只能看到幾圈地面上的點云。僅使用地面點云進行匹配,很可能在水平面上發生隨機移動。
在長隧道、單側墻、橋梁等場地中,激光匹配會存在一個方向上的額外自由度。也就是說,沿著隧道前進時,獲取到的激光點云是一樣的,使得匹配算法無法準確估計這個方向上的運動。類似地,如果機器繞著一個圈柱形物體運動時,也會發生這種情況。
在一些異形建筑面前,激光可能發生意想不到的失效情形。
這些結果被稱為激光的“退化”,也就是說,本來能夠估計6自由度的激光匹配算法,由于場景結構的限制,某幾個自由度上的運動無法估計。這時,就需要建圖算法來降低激光軌跡的權重,利用其他軌跡來補償激光的失效了。
位于長沙的梅溪湖藝術中心是令我印象深刻的地方(雖然我本人并沒有去過現場)。但在這個區域的中心,激光匹配就會非常不穩定,給出一些錯誤的結果
大型地圖的拼接與回環檢測
室外SLAM的另一個特點是:室內地圖通常有一個面積限制,例如大多家居面積都在200平方米以內;而室外地圖可能達到幾十萬平米,乘用車甚至可以建立城市公路級別的地圖。
智行者科技無人乘用車星驥系列
對于掃地機這些家用機器人,我們允許它自由地在室內探索,因為室內面積畢竟是有限的;而對于室外車輛,如果自由探索的話,很可能沿著一個方向出去就回不來了。這就要求室外高精地圖有一個事先的采集過程。
目前各家公司對高精地圖的采集方式并不一樣。乘用車通常需要駕駛員在采集區域內行駛固定圈數,然后把數據帶回數據中心進行解算。乘用車的數據量非常大,一般幾十GB至TB級別水平,其解算也需要大量計算資源。
而對于低速車,它們運動范圍受業務和電池限制,通常在幾十公里以內,適配時間在一兩天以內。而對更大的區域,往往進行分塊、分區的建圖方式。
對于較大的地圖,通常使用分段采集、建圖、拼接的方式
低速車輛由于業務變更較快,對地圖的構建時間和靈活性有一定的要求。例如,清掃車這一周可能在東區運行,下一周就可能在西區運行。或者,可能要求在以往的清掃區域基礎上添加一塊新的區域。這種需求一方面要求地圖能夠以更快的速度進行構建,一方面也要求地圖能夠快速地進行拼接與合并。同時,由于場景的客觀通行限制,低速車輛有時候并不能“繞場景一整圈”,而必須一段一段地采集數據。
在這個數據中,我們先采集了橫向的道路,然后分別采集兩次縱向道路,最后進行合并
地圖合并算法可以自由設計。我們可以把兩個局部地圖視為固定不變的點云,然后使用簡單的ICP進行剛性拼接。如果局部地圖本身沒有畸變,這種做法的效果也挺不錯。但是,如果拼接地圖存在多個重疊區域,這種剛性拼接就可能導致“拼對了頭但拼錯了尾”的情況。所以,我們更傾向于借助類回環檢測與Pose Graph的方法,對兩條軌跡進行融合而非剛性拼接。
團隊溝通和其他問題
當然,現實當中還會存在算法之外的問題。畢竟大多數地方只有幾位算法工程師,而數據則來自全國各地成千上萬臺運營的小車。終端的運營人員也好,采集人員也好,大部分并不具備地圖定位的相關知識,往往不理解“怎樣才是科學的采圖軌跡”。這種溝通問題是我們日常工作中見到的最多的問題。
智行者科技無人物流配送車
由于場景的復雜性,建圖算法不可能保證100%的成功率。如果碰到一個全程缺少GPS的開闊、弱紋理、高動態場景,任何算法都無法完全保障。這聽著像是在抬杠,但是很遺憾的是,現實當中某些大型車庫、大型車站內部、高樓間商業街正屬于此類場景。這些場景中最容易出現的問題是由于GPS的缺失,地圖累計誤差過大,出現錯位或重影的情況。在這些情況中,我們就只能借助人工的方式來輔助建圖了。
在地圖出現明顯錯位情況下,我們利用可視化軟件,對融合軌跡進行人工干預,修復累計誤差,使地圖回到正確的情況
小結
以上我們談論了一部分低速自動駕駛車輛在建圖中碰到的實際問題。對于建圖算法的開發人員來說,能夠足不出戶看到全國各地的地圖,也是一件令人欣慰的事情。相信很多人也會享受這一過程,參與到地圖構建算法研發的過程中來吧。
雖然非結構化道路激光SLAM中的挑戰很多,但是在發現問題中去享受解決問題的快感,是一件能讓人很爽的事情,我將永遠樂此不疲。
機器人招商 Disinfection Robot 機器人公司 機器人應用 智能醫療 物聯網 機器人排名 機器人企業 機器人政策 教育機器人 迎賓機器人 機器人開發 獨角獸 消毒機器人品牌 消毒機器人 合理用藥 地圖 |