2018年剛剛開年,無人車領域就出了一個大新聞: Waymo(也就是Google旗下的無人車公司)預計在今年推出無人車的共享出行平台。這標誌著,無人車的商業化進入了關鍵時期。
無人車經歷了十幾年的發展歷程,從2004年DARPA(美國的國防科工委)舉辦第一屆無人車拉力賽,沒有一個高校能夠完成,到2015年左右,Google無人車30萬英裏道路測試沒有重大事故,再到2018年,無人車突破技術和政策法規的重重阻礙,現在終於要到正式上路的那一天了。(相關回答:智慧無人駕駛技術」現在發展到什麽程度了,真正實作大規模使用還要多久?)
今天我想就無人車的核心技術談一談我的看法和認識。
無人車是一個非常完備的系統,從技術上,可以分為以下幾個模組:
1、perception
Perception指的是無人車如何能夠辨識周邊的環境 ,例如街道範圍,訊號燈、路標等,知道應該停止還是前進。如果交通標誌非常清晰、易讀,那麽無人車相對比較好辨識。但 難點在於,如何辨識模糊的標誌呢?
比如,芝加哥一到冬天,風就特別大,還飄著雪花,能把整個stop sign全都遮蓋掉。駕駛員都難以分辨那是個stop sign還是別的標誌。那在這種極端情況下,無人車如何能夠正確安全的駕駛?
這裏主要用到的技術就是computer vision,machine learning等技術。 隨著深度學習的技術的普及和深入,Perception 這幾年有了很大的進展,整個路標、路況辨識的準確率有了質的提高。這為無人車安全行駛提供了非常堅實的基礎。
但Andrew Ng在一次矽谷的論壇上透露,目前無人車還無法精確辨識小範圍動作,例如手指頭指揮車輛前進還是後退。
2、sensor fusion & localization
不管是雷射、聲納還是雷達傳感器、傳回來的訊號都是帶有大量的noise和不確定性的。 如何過濾這些廢料,將客觀世界進行3D甚至4D還原,就是sensor fusion和localization的這一步。
那麽,如何在有大量noise的、不確定的情況下,去定位車的位置呢?比 較常用的方法有Particle Filter、Kalman Filter等等。
從硬體的角度講,前些年,無人車主要使用雷達或者聲納作為傳感器,但最近比較流行的是 LIDAR(light detection and ranging)系統 ,就是用雷射束在不同的時間和空間進行照射,獲取資訊。
雷射的好處非常多,比如穿透率高、速度快、準確率高。但雷射系統普遍成本較高。 如果無人車要量產的話,雷射系統昂貴的造價是一個阻礙。
那麽LIDAR系統具體怎麽運作呢?
雷射束打到物體上,形成反射的訊號,系統透過訊號的距離和深度,形成一個個的數據點。
透過這些步驟,對外界環境進行3D或者4D的還原。
3、motion planning and decision making
Motion planning和decision making就是無人車的大腦 ,也是我博士期間主要的一個研究方向。這一步就是在sensor fusion做完之後, 在不確定的、動態的環境下,如何讓無人車做出正確的判斷和計劃。 比如從A和B點,全程100公裏,如何確定遠端、中程和近程計劃?
Motion Planning & Decision Making的難點主要在兩點:
第一,運算量非常大,search space指數型增長。
舉一個簡單的例子,一個10個關節的機器臂,每個關節都有180度的活動空間,如果每一度都是一個自由度的,那這個復雜度呈指數級增長的,高達180的10次方。從無人車實踐的角度講,這個復雜度會比機器臂高很多, 尤其是在不確定未知環境下。
第二,不確定的因素很多,整個motion planning和搜尋出來的結果,要不斷隨著你的資訊的變化而變化。
比如,在戰場上,某個作戰車輛要透過某個橋,按照GPS訊號和地圖,這個橋是完好無失真的,但車輛開到該地點的時候,發現橋被炸掉了,這時就需要快速的更新計劃。
或者,在高速上,無人車沿著一個車道行駛,突然發現有一頭鹿橫穿馬路。這時候,如何在毫秒級別的時間裏,把之前規劃的路線和速度,進行最安全的調整。這是一個非常艱巨的也是非常關鍵的技術。
這裏用到的主要技術有Incremental Search-Based algorithm,sampling based planning algorithm等等。
Incremental search based algorithm。 在motion planning領域,主要指的就是如A*,D*,D* Lite,MT-D* Lite等演算法。我和我導師之前在研究的moving target D* Lite,也屬於這一部份。 這一演算法就是解決在未知、不確定、動態的環境下,如何從A點到達B點。 從實作上,就是透過新的資訊,更新search space,在更短的時間裏,維持那些不需要更改的資訊和計劃,只是局部的把那些危害到生命健康的計劃進行修改。
Sampling based planning algorithm(RRT sacrifice of optimality)。 簡單來講, 這種演算法就是透過抽樣,把比較復雜的search space進行簡化,加快搜尋和運算的速度。 但是這個演算法的問題是會犧牲最優性。
這兩種search都在不同的系統有套用。
這裏舉一個例子,講一講motion planning真正在現實中的套用。無人車過去10年的套用主要在軍方和航天上,比如說火星探測車。
對於火星探測車來說,motion planning的演算法面臨著兩個大問題:
第一個是power of computing,要節能。 在當時,節能這麽重要主要是因為火星探測車的太陽能板功能比較弱。當時只有在陽光垂直照射,偏差不超過十幾度的情況下,火星探測車有足夠的功率前進。所以,不可能把所有功率放在CPU上去運算路徑,這個演算法必須非常節能。
另一個是efficiency,運算要快。 火星地面不比城市路面,如果每次遇到什麽情況的時候,比如有個坑、大石頭之類的,火星車都要停下來,運算完了再走,那這個火星車執行效率就太低了。
為了解決這兩個問題,motion planning的演算法也有了長足的進步。(NASA的火星探測車用的就是我導師寫的D* Lite的最佳化變種,加拿大宇航局的系統裏也在使用過我和我導師研發的D* Lite, GAA* 的最佳化版本)
4、Control 和System Integration
如何在一個復雜的系統裏,把各個元器件整合起來,能夠和諧的工作,沿著規劃的路線、速度等進行安全的行駛。 這個部份的詳細內容,以後有時間再來更新。
如何進入無人車領域?
最後,我想談一下, 如何能夠真正的進入無人車領域。
無人車現在是一個高速發展的領域, 無人車方向的軟體工程師需求量是很大的,薪資也很高,但是相應的,對無人車工程師的要求也非常高。
這些公司,需要的是真正在面試和工作的過程中,有非常紮實的編程能力,尤其是C++編程,能把非常復雜的演算法實作在底層的系統裏,比如ROS系統,能和硬體接軌。
但目前,無人車人才培養還是有非常大的空缺。
因此, 我聯合我在CMU的導師和在華盛頓路易士分校(WUSTL)做教授的師弟一起創立了一個全新的來Offer無人車課程( http:// laioffer.com/zh/courses /self-driving-car/ )。
我們的無人車課程最大的優勢就是非常深入 ,透過4-6個月的時間,把motion planning and decision making這兩個模組講的非常清楚。讓學員能夠把現在最先進的,工業界正在用的演算法在最底層實作出來。
目的就是把演算法知識、編程能力和無人車的技術融合在一起,真正培養出能夠進入Uber、Waymo等一線無人車公司的優秀工程師。
學員會完成5個計畫,從淺入深。從A* search開始,介紹ROS(Robot Operating System)系統,理解無人車底層實作的原理是什麽。之後計畫一步步升級,從靜態環境下、動態環境下、未知環境下,到最後動態未知環境下(真實路況)如何做motion planning,讓你的無人車能真的在simulator裏面跑起來。
對課程感興趣的同學可以私信咨詢。