search
美國創業公司 CEO 告訴你,自動駕駛車是如何工作的?

美國創業公司 CEO 告訴你,自動駕駛車是如何工作的?

(編譯自 voyage)

自動駕駛相信大家都已經聽過無數次了,但它到底是怎麼運作的呢?或者說到它底遵循著一個什麼樣的工作流程呢?最近,Voyage,一家出身優達學城(Udacity)、致力於把普通汽車改裝成自動駕駛計程車的美國創業公司,給大家做了個解答。它的 CEO Oliver Cameron 寫了一篇文章,詳細介紹了自家的自動駕駛計程車 Homer 的工作原理。雖然只是個例,但對我們更好地認識自動駕駛還是有幫助和借鑒意義的。友情提示:文章很燒腦~

GeekCar 原文編譯如下:

感知、規劃和行動

通常來說,一輛自動駕駛汽車遵循著感知、規劃和行動(SPA)這樣一個模式。首先,它通過激光雷達、雷達和攝像頭等感測器感知周圍環境。然後,它分析感測器數據和其他相關數據,規劃出從 A 點到 B 點的路線。最後,它控制方向盤和車速,按照之前規劃好的路線完成行駛任務。

一輛具有感知、規劃和行動能力的汽車,其背後是一套複雜的硬體和軟體系統,整個系統的協調運作才能實現汽車的自動駕駛功能。你可能對激光雷達、攝像頭等表面的零部件略知一二,但對於整套系統如何協調運作或許並不了解,而這正是自動駕駛的關鍵所在。

Voyage 的架構

下面是一張 Voyage 計程車的系統結構圖,也是一輛多感測器自動駕駛汽車的標準架構,其中每一個部分都扮演著重要的角色。接下來,我們將分計算、動力和線控設備三個部分來來簡單介紹一下。

計算

計算對規劃路線十分重要。Homer——Voyage 的首款自動駕駛計程車,其大腦就是一塊搭載了 Intel Core i7–7700K Kaby Lake 四核 2.4GHz 處理器以及英偉達 Titan X GPU 的技嘉 AORUS 主板。為了保證感測器擁有足夠的數據管道,它還配備了 64GB 的 RAM 以及由三個固態硬碟組成的 3TB 大容量存儲器來應對數據冗餘。

這個強大的計算機運行的是 Ubuntu 版的 Linux,它使用 Docker 容器來管理系統環境,並利用機器人操作系統(ROS)來建立快速感知原型,規劃運動路徑,控制節點。ROS 是一個適用範圍極其廣泛的多功能中件,它能夠對複雜的信息傳遞、數據結構、數據記錄等過程進行抽象處理。雖然 Ubuntu(包括 ROS)並不能滿足量產車對實時操作系統(RTOS)的要求,但是它對原型演算法來說卻是一個很有用的工具,能夠儘快在現實世界的環境中進行測試。減少從想法到實踐所需的時間至關重要,這些工具正好能夠幫助我們做到這一點。

ROS 節點本質上是一些獨立運行的小程序,但又相互關聯在一起。例如,某一個節點的任務可能是通過乙太網介面讀取激光雷達的原始數據,然後再把它轉換成點雲信息。點雲信息由大量的三維點及其元數據組成,它們被發布在 ROS 網路上,以供其他節點使用。使用這些信息的節點可以把點雲與地圖相結合進行定位,也可以運行聚類演算法,探測並跟蹤目標。它們同樣把結果發布在 ROS 網路上,以供運行運動規劃演算法的節點使用。總的來說,過程大概就是首先從原始感測器收集數據,然後互聯的 ROS 節點再處理這些數據,最後線控單元向油門、剎車、方向盤等發出控制信號。

在自動駕駛研發過程中,使用 ROS 可以帶來很多便利。例如,當節點相互交流時,它們會使用特定的通道或者說「主題」(topic),這些主題會被自動記錄下來,以供日後分析之用。事實上,一輛在路上行駛的 Voyage 汽車每時每刻都在記錄數據。主題作為命名空間(namespace)可以防止數據衝突,同時將汽車的每一部分在每一時刻的活動整理成一份詳細的日誌。這樣,我們就可以在自己的筆記本電腦上模擬具體的駕駛環境,而不用開著汽車在外面碰運氣。而且,我們可以直接在辦公室里測試新演算法,而不用坐到汽車裡面,這為工程師們節省了大量的時間。

一般情況下,我們大部分的計算任務都交給了計算機的 CPU。因為它們主要都是線性任務,在解決下一個問題之前必須為上一個問題找到答案。例如,激光雷達探測到的這個障礙物是什麼?右轉之前我是否需要左轉?多線程被廣泛地運用於處理大批量的數據,但是,有些問題用和人類智能相似的方法(平行思考)會解決得更好。

Voyage 熱衷於機器學習。如果一個問題可以通過神經網路得到解決,我們可能已經正在開展這方面的工作了。我們會用深度學習去準確探測交通信號燈的狀態,從一大堆雷達信號中識別出障礙物,通過場景分類把建築物和道路區分開來,直接從端到端網路的成像中生成方向盤的偏轉角度。把一個問題扔給 GPU 去解決並不總是對的,這時候如果能真正發揮工程師的創造力,或許會有意想不到的好結果。

動力

Voyage 自動駕駛計程車由福特 Fusion 原配的 12V 電瓶提供動力。電池首先將電力輸送給一個配電裝置(PDU)。這個配電裝置是一個智能繼電轉換器,有 9 個不同的 12V 連接器。它還有自己的腳本語言,可以通過編程單獨控制每個開關。車上負責計算的部分就是通過連接著一個 PDU 開關的一個 110V 逆變器獲取能量的。

要想 PDU 維持運轉,汽車必須保持行駛狀態。例如,當福特 Fusion 混動車檢測到司機不在車內時,車身控制模塊就會在停止駕駛 30 分鐘后關閉點火繼電器,這樣一來,PDU 和車上的計算機都會停止工作,這讓很多工程師都有點惱火。

為了解決這一問題,我們更改了汽車的出廠配置,準確說來是更改了車上的一個模塊,這樣福特 Fusion 混動車就可以無限運轉下去了。更改過程中,我們用到了一個叫作 FORScan 的開源工具,以及一個搭載 FTDI 晶元的 OBD-II 工具。我們用這些工具向車身控制模塊發送特定信息,並修改原始出廠設置,這樣汽車就不會自動關停了。

線控設備

現在我們有了計算能力和動力,那麼怎麼才能實際控制車輛呢?也就是說,在感知和規劃路線完成之後,我們要如何行動?答案就是線控設備。

簡單點,你可以把線控設備理解為感測器、計算機與傳動裝置之間的介面。有了它,計算機在處理完數據之後就可以向汽車發布指令,操縱汽車行駛。傳動裝置包括油門踏板、剎車踏板和轉向器,它們都和線控設備連接在一起。在現在的汽車裡,這些傳動裝置中很多都已經完全和司機的動作脫鉤了。例如,當你踩下油門時,你只是移動了兩個電位計,而它們則向發動機控制模塊(ECM)發送一個原始的 0V-5V 的信號。這個踏板位置信息然後被轉換為發動機扭矩,而發動機扭矩則決定點火正時,或通過打開節氣門增加氣流。

驅動油門踏板的線控設備連接在踏板總成和 ECM 之間。當這個系統關閉時,踏板的原始電位計向 ECM 發送一個 0V-5V 的信號。但是,當線控設備處於工作狀態時,Ubuntu/ROS 計算機生成的指令將產生一個新的數字信號。

自動駕駛涉及到一系列複雜且相互關聯的系統,希望這篇文章能幫助大家加深理解。

原創聲明: 本文為 GeekCar 原創作品,歡迎轉載。轉載時請在文章開頭註明作者和「來源自 GeekCar」,並附上原文鏈接,不得修改原文內容,謝謝合作!

熱門推薦

本文由 一點資訊 提供 原文連結

一點資訊
寫了5860316篇文章,獲得23295次喜歡
留言回覆
回覆
精彩推薦