自動駕駛車輛通常都是預先建立地圖,然後利用此圖進行定位,所以真正的、完整的、高貴的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機器人公司機器人應用智能醫療物聯網機器人排名機器人企業機器人政策教育機器人迎賓機器人機器人開發獨角獸消毒機器人品牌消毒機器人合理用藥地圖 |