高精地圖和定位在自動駕駛的應用
分享嘉賓: 樑基巨集 Pony.ai Tec h lead
編輯整理: Hoh Xil
內容來源:Pony.ai & DataFun AI Talk
出品社群:DataFun
注:歡迎轉載,轉載請註明出處。
本次分享聚焦於高精地圖在自動駕駛中的應用,主要分為以下兩部分:
1. 高精地圖 High Definition Map
-
拓撲地圖 Topological Map / Road Graph
-
3D柵格地圖 3D Grid Map
2. 定位 Localization
一. 高精地圖 High Definition Map
★ 拓撲地圖 Topological Map / Road Graph
1. 傳統地圖
我們先看下傳統地圖,這是從百度地圖裡截出來的圖,從這張圖我們可以看到很多資訊:
-
拓撲資訊:我們可以看到北清路的主幹道,可以看到北清路可以延伸到哪些道路上去,這些拓撲資訊從人的角度來看是能夠識別出來的;
-
各類 POI:我們同時還能看到許多 POI 資訊,包括中關村壹號-A1座,拉卡拉大廈等;
-
使用者是人
-
米級精度:精度是米級別的,這對人來說足夠了,因為人會自動判別周圍的環境,做出自己的變化。
但是這些資訊對於自動駕駛的車輛來說,到底是不是必要的、準確的或者足夠的,那我們繼續往下看。
2. 典型駕駛場景
這是一個典型的駕駛場景,假設我們正在駕駛的車輛是後面的白車,可以看到他的前面有輛自行車,那麼對於白車來說,他可以有倆個決策:跟車或者變道。那麼對於自動駕駛車輛來說, 我們作出決策的前提第一個是要知道全域性的路線規劃資訊,變道後是否還能夠到達終點,此外還需要知道很多具體的資訊:
-
在哪條車道上以及當前車道的具體位置
-
是否有隔壁車道,如果沒有車道你是變不過去的
-
是否允許變道:車道的型別,虛線實線,變道距離是否足夠長
自動駕駛車輛還不能夠像人一樣做出各種複雜的動作,這時需要有一些先驗的約束條件,這些資訊的話都應該從地圖中來。
3. HD Road Map
HD Road Graph 也就是高精地圖其中的一部分,又叫做拓撲地圖。HD Road Graph 以 釐米級 精度的描述道路細節,主要包含:車道型別、車道連通性、交通標註/交通燈、人行橫道、道路幾何特徵、其他更多語義資訊。大家可以看下左邊這張圖,對裡面的每一條路,也就是路級別,我們已經精細到每條車道,包括直行的車道,左轉的車道,也包括周邊的一些幾何資訊,總體上你會發現高精地圖上的資訊要比傳統地圖大很多。
高精地圖在自動駕駛裡有很多應用,我們先看一個應用場景:在自動駕駛裡有感知系統,那一個典型的應用是我們會在地圖裡面描述紅綠燈的位置,自動駕駛車輛到達路口後,可以根據當前的位置,去正確的識別當前的紅綠燈到底是紅色還是綠色,左邊我們可以看到是一個普通的場景,但是右邊這種特殊的場景有幾十個紅綠燈(現實情況基本不存在, 只是用來舉個例子),對人來講也很難去知道在哪個路口應該去看哪個紅綠燈,那如果我們在離線地圖上能夠把上面的資訊驗證準確的話,對自動駕駛的安全性、可靠性來說是起到很大幫助的。
我們再來看下決策規劃,剛才提到的一個典型場景,你需要知道一個全域性的路徑資訊,包括變道所需要的必要資訊,那對右邊來說,這裡主要是強調綠化帶,我們這裡提供的資訊,前面有提到過叫做語義資訊,我們為什麼要在地圖裡包括這些語義資訊呢?如果自動駕駛車輛可以提前知道旁邊是綠化帶,那麼他可以幫助自動駕駛車輛做一些先驗的決策,他可以知道在那個時間段不會有人或者車直接從對向車道穿過來。所以從準確性來講他可以得到很大的提升,對效能來說也會有很大的提升,因為你不需要過多關心對面車道的物體,很明顯你的計算就會少,你會發現整個先驗資訊對決策來說必不可少,並且是非常關鍵的。
我們再來看下我們當前整體用到的 Pipeline,分為以下幾個環節:
-
資料 收集, 地圖資訊的採集
-
資料清洗/聚合
-
自動化 識別, 把地圖裡所需要的必要資訊處理出來,包括車道線、紅綠燈、十字路口等等各種資訊
-
人工檢查/標註, 現有的演算法我們還做不到100%的自動抽取,所以還會加入人工檢查和標註的環節
-
後處理和驗證, 整個資料出來之後,我們需要有後處理和驗證,因為資料出來之後怎麼樣去保證你提供的資訊是準確的,這是我們需要解決的問題,因為不能單靠人或者高成本的方式來驗證道路資訊是否準確,假設一個紅綠燈位置標錯了,或者自動識別錯了,那可能會導致你在路測過程中會出現一些安全隱患,所以整個驗證環節佔有很重要的部分
-
Release, 整個驗證完之後,我們會進行 Data Release 資料的釋出,資料會納入統一的管理中,每一版 release 的地圖的質量已經得到比較好的驗證
這是一個常規的釋出流程。現實中整個路網結構是不斷往外擴張的,且周圍環境會有變化,所以我們也會有增量的更新。
前面簡單介紹了整個 HD Road Graph 的 Pipeline,我們來看下 HD Road Graph 裡面遇到的問題:
-
成本
-
釐米級別的精度:需要各類感測器(LiDAR、cameras、GNSS/IMU),右邊是蘋果的一個地圖車,大家可以看到上面裝了很多感測器,很明顯製造一輛高精地圖車輛的話成本非常昂貴
-
資料量:海量儲存資源和計算資源
-
覆蓋範圍:從區域性區域逐步擴張,從中關村壹號附近地區,擴張到海淀區,再到北京市,甚至是半個中國,這裡面的硬體成本和人力成本等,都會極劇增加
那麼如何去解決成本問題?這需要我們在工作中想一些好的方式。
-
挑戰-複雜性
第二個是複雜性帶來的挑戰,對於我們整個 Data Model 來說會包含三部分資訊:
-
語義資訊,從右邊的圖標誌牌來看,你會發現有很多的交通標記,如何提高準確性,並且儘可能提高覆蓋度
-
空間資訊,右圖中的立交橋是西直門立交橋,我們會發現通過導航軟體或者老司機的經驗都未必能夠在某一條車道上找到準確位置,對我們來說就是如何能夠把整個空間資訊描述好,然後整合到地圖中去
-
時間資訊,在北京有一些潮汐街道,早高峰和晚高峰走的方向是不一樣的;對一些公交車道在早高峰的時候只能公交車去跑,自動駕駛車輛是不能跑的,很明顯需要把這些資訊包含在地圖裡面
這樣的話,決策模組和感知模組才能去準確的使用。
-
挑戰-擴充套件性
-
自動駕駛車輛行駛 1KM 會產生GB級別的原始資料,處理這些資料在功能架構上會面臨很大的挑戰
-
更新,從天級別到小時級別再到分鐘級別的更新,整個功能架構是不一樣的,比如我需要對北京市地圖做小時級別的更新,到底能不能做到,這需要很多的優化功能在裡面
-
挑戰-實時性
交通管制、環境變化等怎麼反饋到 HD Road Graph 上,如果今天某條路修路了,對於人來講我就可以直接繞過這條路,而這種資訊怎麼去反饋到自動駕駛裡呢?是靠人去反饋,還是系統自動去識別,即使反饋之後,怎麼實時更新到地圖資料裡,我們需要打通 offline 到 online 的環節,及時更新到我們正在執行的自動駕駛車輛裡去。
★ 3D柵格地圖 3D Grid Map
1. 3D Grid Map
前面介紹了拓撲地圖的部分,下面介紹我們的 3D 柵格地圖(3D Grid Map)。
定義:我們認為一個真實的三維世界可以用一個概率模型來表示。比如像今天這個會場,我們會把他離散化成一個個立體方格,對每個方格里面我們會儲存一個概率,這個概率是說這個空間不為空的概率。
-
輸入:收集的鐳射點雲資料
-
輸出:3D 網格的佔據概率
用途:
-
定位,這個稍後會講
-
靜態環境感知,減少工作量,專心識別動態環境
這是我們做的一個 3D 柵格地圖,他並不是一個連續的描述,從數學的角度講,已經把他離散化,我們會保留他的一些概率值和一些屬性。展現出來的話,他是一個釐米級精度的柵格,從這個圖我們可以很清楚看到周圍的環境,包括一些樹、建築之類的。
2. SLAM
那麼我們一般會怎麼去做高精地圖呢?在傳統上有一個方式叫 SLAM,如果是做這個方向的同學會比較清楚,但是對於做工程的同學來講這個概念可能是第一次接觸。他是指運動物體根據感測器的資訊,一邊計算自身位置,一邊構建環境地圖的過程。目前,SLAM 的應用領域主要有機器人、虛擬現實和增強現實。其用途包括感測器自身的定位,以及後續的路徑規劃、場景理解。
我們來看下傳統和自動駕駛 SLAM 的區別:
傳統 SLAM:
-
2D
-
視覺感測器,單靠攝像頭,在某個空間轉來轉去,然後通過一些演算法來建模
-
沒有 GPS 資訊,很多場景在室內的話是收集不到 GPS 資訊的
-
生成地圖和定位同時進行
自動駕駛:
-
3D,他描繪的是一個三維環境
-
鐳射感測器,我們需要達到比較高的精度,所以我們一般採用鐳射感測器
-
GPS 資訊,室外的話我們有個優勢就是很多時候我們是有 GPS 資訊的
-
離線處理,最後我們的資料不需要線上處理,前面介紹過,線上的話我們有一些場景演算法是不能很好的處理,所以我們需要抽取一些資訊來做離線的驗證
相比於傳統 Slam,我們來看下有哪些問題是需要解決的:
-
全域性 GPS 資訊並不總是好的,左下角的圖,大家可以清楚的看到,這個是我們建出的底圖,裡面有當時車輛的一個行駛軌跡,你會發現如果根據 GPS 的行駛軌跡的話,車已經開到馬路牙子(路肩)上了,跟實際的情況是不一樣的,當你拿到這樣一份資料,你在演算法層需要做哪些優化,把細節做好,這是需要我們考慮的一個問題
-
不同時間段的資料如何 align(校準),因為整個地圖的採集不可能是一次就完成的,你可能需要今天採集一次,明天再去採集一次,這就需要我們在演算法層面上考慮如何把不同時間段的資料 align 到一起
-
去除非靜態的物體,我們建的是一個概率的模型,對於很多非靜態的物體我們是不需要保留的,我們只需要保留一些靜態的物體給感知系統去使用,所以我們在處理完資料之後,需要把一些非靜態的物體去掉
3. Pose Graph
整體上我們可以認為這是一個優化問題。如果我們把每一次採集的路線,按照時間去劃分,比如每隔4分鐘採一個點,我們可以得到不同的位置,舉個例子:我們在大廳裡走來走去,我現在站在這裡,一分鐘後我可能在那裡,再繞一圈的話可能站在門口,我們把整個 GPS 得到的位置資訊離散化之後,就可以得到一個個點,很明顯我們把當時的點所看到的周圍的環境直接拼起來,就可能得到一個三維的地圖,因為每個點看到的角度都是不一樣的,那我們把不同位置的點都拼起來就可以了。但是直接拼起來會有很多問題,因為原始位置可能跟真實位置有偏差, 所以我們把這些點離散化之後,希望能夠把所有點都調整到準確的位置,那我們怎麼去把最終的結果求正確?因為對整個圖來說, 除了頂點之外,還有邊,我們希望通過邊的約束把點調好,邊的約束你可以認為是個相對約束,假設我知道下個點的準確位置,那麼我就可以倒推我這個點的準確位置。就是在有準確的相對位置的基礎上,加上一些比較少的絕對位置,我們直接可以得到一個全域性的準確位置。
優化目標: 我們把整個圖離散化到一個點之後,我們會嘗試建立一些邊的約束,最終我們是希望通過優化一些點的位置來滿足邊的約束,最終會轉化為一個優化問題。
整體的數學模型看起來是比較簡單的,但是在整個細節裡面是存在很多問題需要去做優化的:
-
如何選擇頂點,比如是不是毫秒的點都要加進去,GPS 訊號不好時的點要不要加進去
-
如何保證邊的準確性,一個頂點到另一個頂點的相對位置,我要通過什麼方式去建立
-
如何求解非線性優化,圖建好之後如何去做非線性的優化
-
如何評估優化效果,是否和真實的環境是一致的呢?如何評估我們的結果滿足要求
-
效率和資源,對於工程來講,資料量這麼大,怎麼去設計工程演算法,能夠保證我們的效率和資源,比如說,是不是需要在演算法基礎之上去做一些定製優化,用 GPU 或者分散式的計算方式,這都是做工程時需要考慮的問題
上圖右邊其實是一個例子,左邊是原始的圖,有一個物體來回在球面上運動旋轉,邊與邊之間我們已經建立相對約束,最終優化完之後,你會發現整個環境的重建就變成了一個比較理想、完整的球體,概括來說我們要做的事情就是需要把左邊的圖來變成右邊的圖。
4. ICP
我們前面提到我們要保證邊的約束,那我們怎麼知道求出這個約束,業界用的比較多的傳統的經典演算法叫做 ICP(Iterative Closest Point algorithm)迭代最近點演算法。
舉個例子:左邊是一個紅色的兔子,右邊是一個藍色的兔子,現實中這倆個兔子的位置是一樣的,但現在倆個兔子是不一樣的,說明位置存在偏差。他的輸入是倆組點雲 A 和 B,輸出是倆組點雲之間在空間上的旋轉和平移。
具體演算法的思路大致是:找點雲集合 A 中的每個點在 B 中的對應點,通過求解最佳的剛體變換,不斷的迭代優化,最終得到一個收斂解。
5. 去除非靜態障礙物體
-
概率模型
-
點雲處理,單純的概率模型是不夠的,比如有時候小區門口經常是有車的,但是在某時刻他是開走的,只是恰好在我們採集資料的時候這些車都在,所以我們需要依賴離線點雲處理
-
機器學習,同時也可以利用機器學習演算法去把非靜態的物體從地圖裡面摳出來
這是一個簡單的對比圖,沒有做處理的話,你會發現右邊是有一些車的輪廓,當從空間上去除之後,會變得比較清晰。
二. 定位 Localization
接下來簡單介紹下定位,定位大家都比較熟悉,對於定位系統和傳統定位來說,他的位置和姿態有如下特點:
-
釐米級別的精度,需要精確到車在車道線的具體位置離左右邊線幾公分
-
高頻低延遲,需要毫秒級別的時間延遲,告訴我的車在什麼地方,否則會出現安全事故
定位系統的幾種定位方式:
-
全球導航衛星系統 Global Navigation Satellite System
特徵:
-
米級別精度
-
低頻
-
干擾或者遮擋
解決方法:RTK(Real - time kinematic,實時動態)載波相位差分技術,可以達到釐米級別。
-
相對定位:慣性測量單元 IMU(Inertial Measurement Unit)
特點:
-
加速度以及角速度
-
三個方向的加速度計和三軸的陀螺儀
-
高頻(通常100HZ)
-
累積誤差
解決方法:慣性導航系統 Inertial Navigation System
-
點雲定位
特點:
-
魯棒性好,不依賴於 GPS 資訊
-
依賴於先驗地圖,那麼這個地圖的準確性和實時性會導致一個定位誤差
-
弱特徵環境?有些弱特徵環境是需要解決的,比如說在橋上,往前開10米和往後開10米看到的場景都是類似的,對於這類環境來說,我們如何去找到準確位置,這是需要考慮的一個問題
綜合來說,我們單靠單一感測器是不夠的,所以採取的是多感測器融合的方案,整體效果是會有更高的精度和更好的魯棒性,然後我們整體上是基於卡爾曼濾波模型。
簡單介紹下卡爾曼濾波(Kalman Filter)模型:
卡爾曼濾波是一種高效率的遞迴濾波器,它能夠從一系列的不完全及包含噪聲的測量中,估計動態系統的狀態。
我們把整個當時的位置認為是高斯分佈,對這個小車來說他大概在某個範圍之內,在中間的可能性是最大的,然後我們會有個預測(預測是根據自己的運動方程),比如我往前走了10米,他大概在這個位置,你會發現他的誤差值會變大,因為可能是 IMU 告訴你走了10米,但是感測器本身也是有誤差的,那同時假設我有個 GPS,告訴我可能是在藍色的部分,他也是包含一定誤差的,這樣我其實有了倆個位置,那麼我就可以把倆者合在一起得到一個比較準確的可信的結果,整體可以認為卡爾曼濾波是不斷的在更新迭代的,來最終得到一個比較準確的位置。
最終我們定位系統的目標是萬里無憂 , 對我們的挑戰是更低成本和更苛刻的外部環境。 比如右邊這個圖,大堵車,這時候可能 GPS 不行,堵車堵了幾個小時,走走停停,會導致累積誤差,實時訊號又不好,你可能搜不到,這樣的環境你會發現,他只能看到周圍的很多車,也沒辦法跟周圍的環境去做對比,知道自己在哪裡,這種情況下,我們到底怎麼去得到一個比較準確的定位效果,這需要我們把這些問題都解決好。
文中部分圖片來自網際網路,只用做交流學習,若涉及侵權,請聯絡DataFun刪除。
作者介紹:
樑基巨集,Pony.ai Tech lead,中山大學計算機碩士,曾任職 Google、Baidu,前百度商務搜尋架構部實時處理和線上分析處理技術負責人,目前在 Pony.ai 負責自動駕駛地圖和定位技術研發。
友情推薦:
小馬智行大波職位熱招中,關注“PonyAI小馬智行”,即刻投遞簡歷
——END——
文章推薦:
Recent Advances on Object Detection in MSRA
關於 DataFun:
DataFun 定位於最實用的資料智慧社群,主要形式為線下的深度沙龍、線上的內容整理。希望將工業界專家在各自場景下的實踐經驗,通過 DataFun 的平臺傳播和擴散,對即將或已經開始相關嘗試的同學有啟發和借鑑。
DataFun 的願景是:為大資料、人工智慧從業者和愛好者打造一個分享、交流、學習、成長的平臺,讓資料科學領域的知識和經驗更好的傳播和落地產生價值。
DataFun 成立至今,已經成功在全國範圍內舉辦數十場線下技術沙龍,有超過三百位的業內專家參與分享,聚集了數萬大資料、演算法相關領域從業者。