手把手教你做無人駕駛汽車

雷鋒網按:作者夾子,汽車行業資深從業者,微信公眾號 Roboticists。本文主要從五個子模塊:傳感器、感知、定位、規劃、控制,來分解無人駕駛系統。

無人駕駛已走過一甲子

看到這個標題讀者可能會感到疑惑,自動駕駛不是時下最新潮的技術嗎?為什麼會説自動駕駛已有60年曆史呢?其實早在1950年代,通過在道路正下方埋設磁鐵,車輛就可以沿着磁軌跡在高速公路上進行自動駕駛。這項技術如今在飛思卡爾杯智能車比賽中成為了一個組別,感興趣的讀者可以查閲相關視頻資料。現實道路中,這項技術也仍舊在使用:一些自動駕駛測試場通過在地面上鋪設磁釘實現對車輛進行釐米級的定位。


圖片來源:A Boy’s Life Magazine 1956

而今天的無人駕駛系統(從2003年DARPA挑戰賽之後開始的無人駕駛系統),與當時的無人駕駛系統最大的區別在於,今天的無人駕駛系統脱離了對輔助設施的必須依賴。可以説,當前的無人駕駛研究的重點更傾向於如何讓車輛獨立地理解這個世界,並以此為依據來對車輛進行控制。進一步説,無人駕駛汽車對世界理解的程度,決定了該無人駕駛系統先進的程度。

當前在售的自動駕駛系統

如今很多的車輛開始配備帶有輔助駕駛功能的汽車,頂配車輛不帶輔助系統似乎就與其他品牌差了一截,含高級輔助駕駛功能的在售車型長長的名單裏都是我們熟知的大廠。今天在售的系統在傳感器方面的主流配置為:單目或雙目的圖像傳感器+前向長距離毫米波雷達。達到的功能為單車道的自適應輔助駕駛,包括縱向——自動控制與前車的距離,橫向——車道保持。但究竟這些系統是如何構建的?我們一般都只能從一些隻字片語中得到一些信息,比如這一代寶馬新7系的系統構架圖如下:


BMW G12 Active Driving Assistant Plus wiring diagram
這張複雜的系統連接圖中,可以看到BMW使用了包括CAN,FlexRay,LIN,以太網在內的多種總線技術,系統包含了十餘個邏輯控制器,複雜程度令人驚歎。而具體在如KAFAS中的控制邏輯是什麼樣的,我們是不知道的。不過筆者也實際測試過寶馬新7系的輔助駕駛功能,綜合而言,距離特斯拉的Autopilot還有一定距離。在這一行業,所有汽車公司都把這一塊當作核心的商業祕密,正在分頭進行緊鑼密鼓地研發。但在筆者眼中,這些系統必定具有幾大核心的模塊,只要通過對這些模塊的分別研發和系統集成,最後可以產生一個統一的自動駕駛系統。

無人駕駛系統的分解

現代無人駕駛系統看似複雜,但終究是可以分割為多個離散系統的。筆者認為可以分為如下五個子模塊:傳感器、感知、定位、規劃、控制。

1.傳感器:整個系統的輸入,包括了為自動駕駛設計的傳感器,例如攝像頭與毫米波雷達;以及車身上已有的傳感器,例如超聲波傳感器以及GPS。傳感器的本質是將物理世界的信息轉換為電信號。


特斯拉Autopilot 2.0傳感器配置

2.感知:負責計算車輛周圍物體的語義信息。感知模塊的加入,是這一代自動駕駛系統與以往最大的區別。該模塊負責許多信息的獲取,包括,前車的距離,前方紅綠燈的指示,限速標誌上的數字,車道線的曲率,等等。車輛對周邊環境的感知水平,決定了自動駕駛系統先進的程度。


基於圖像的語義分割結果示例:如圖中紫色代表道路,綠色代表行人

3.定位:定位主要有兩個作用,一個是為了彌補GPS精度不足導致的輸入誤差過大,通過定位模塊計算得到釐米級別的定位。第二個,是為了使車輛獲取超過當前傳感器感知範圍的信息,包括長距離地圖路網信息,超視距前方車流信息等。將第二點歸於此,是因為定位模塊與地圖息息相關。


基於LiDAR的激光點雲配準結果

4.規劃:規劃問題一般分為多層次的規劃來討論。我們平時使用的導航軟件,稱為一次規劃,得到從A點到B點的路網行駛規劃路徑。其後還有二次、三次規劃(甚至更深層次的規劃)。


Mobileye Holistic Path Planning(HPP)輸出結果,即為局部規劃結果

5.控制:最後,系統將得到的信息歸於控制輸出,其主要作用是與汽車的底盤系統打交道,將控制指令通過X-by-wire,即線控接口輸出。

其他的,還有數據記錄模塊,安全相關模塊以及電源管理模塊等輔助子系統。

無人駕駛的開源實現

前面説的都是紙上談本,而《手把手》系列當然不會浮於表面。自《手把手(二)》寫完已經過了若干個月,而今終於有了可以詳細剖析的開源項目:就在前日,George Hotz決定開源自己的自動駕駛系統(當然不是全部,後文會講到)。本篇中,筆者將對該系統進行粗略的分析,從系統構架的角度對其進行介紹。


計劃賣999美元的comma one自動駕駛套件

首先,必須介紹一下該開源項目的背景。出於對George Hotz的產品的安全性的懷疑,NHTSA(國家高速公路交通安全管理局)希望George Hotz配合他們的安全性評估,但被小哥拒絕了。而後George Hotz一個衝動就把他的Openpilot開源了(當然最核心的並沒有)。其本人在Openpilot/README.md中稱,這套系統應與特斯拉的Autopilot性能相當,並超越所有其他的競爭對手,注意是所有的。筆者雖然沒有乘坐過那輛Acura ILX,但就代碼而言,大部分前文所敍述的子系統,在該系統中都有相應的模塊與之對應,系統構架如下:


Comma One 系統構架
傳感器:sensord模塊 radard模塊

使用了原車的GPS,前向毫米波雷達,而並未使用超聲波傳感器。攝像頭使用手機自帶的攝像頭(效果不做評論)。

感知:visiond模塊(binary)

使用了從輸入圖像直接輸出控制路徑點鏈的深度學習方法,其數據通過之前的駕駛行為中得到。應該稱其為一種類端到端的感知方法,即不去理解周圍其他物體的語義信息,而直接通過學習的方法,從圖像得到行駛的規劃軌跡。不過從George Hotz的博客上也看到,其正在做一些語義分割的實驗,也許將來這塊會有所變化。但由於這個模塊為二進制程序,筆者只能進行一些猜測。

定位:

規劃:與visiond結合在一起


comma one軌跡規劃輸出結果(紫色)

控制:controlsd模塊

其他:loggerd模塊 calibrationd模塊

整套系統使用socket接口作為進程間通信,採用C與python混寫的形式。看了代碼雖然註釋不多,但變量名函數名還算比較清晰。整套系統沒有定位模塊,通過感知得到的車道(或者説規劃軌跡)信息,直接對車輛進行控制。也就是説整個系統是一個以visiond模塊為核心的控制系統,這與上文筆者的結論相似。在如今的自動駕駛系統中,感知模塊成為了系統的核心。這也就是Mobileye那麼強勢的原因,也是George Hotz自信的來源。

總結

從沿着磁軌跡行駛的小車到現代的無人駕駛系統,我們認為新的系統並不是一種進化而來的系統。就像自行車與摩托車的關係一樣,現代的無人駕駛系統擁有以往系統中沒有的重要子模塊,即感知模塊。我們有理由相信,本次自動駕駛技術的爆發,也是由深度學習技術的突飛猛進而形成的。該技術使得計算機更好得理解了世界。從Google到特斯拉,以及George Hotz的Openpilot,無不是以感知模塊作為核心技術壁壘所建立起的自動駕駛系統。

注:本文是作者《手把手教你做無人駕駛汽車》系列的第三篇,雷鋒網(公眾號:雷鋒網)將會持續更新出前兩篇,請持續關注。

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知



資料來源:雷鋒網
作者/編輯:Roboticists

如果喜歡我們的文章,請即分享到︰