全面剖析無人車三大基本技術:計算、動力和電傳線控
陳樺 編譯自 Voyage官方博客
量子位 報道 | 公眾號 QbitAI
打造一輛無人車,究竟需要哪些軟體和硬體?
無人車創業公司Voyage今天在官方博客上發文,展示了自家無人駕駛計程車Homer的技術方案,從感測器、計算硬體到演算法都有涉及,這是量子位近期見過最詳細、最全面的無人車技術解讀。
Voyage是從Udacity拆分出來的,而Udacity的創始人Sebastian Thrun曾任教於卡耐基梅隆大學和斯坦福大學,還領導過Google無人車的開發。
以下內容,編譯自Voyage官方博客:
感知、規劃、行動
自動駕駛汽車遵循的傳統範式包括感知、規劃和行動。
汽車通過激光雷達、雷達和攝像頭來感知周圍環境,基於感測器輸入和其他環境信息來規劃從A點到B點的路線。
隨後,汽車將採取行動,通過操控方向盤和油門剎車來執行規劃。
為了讓汽車具備感知、規劃和行動(SPA)能力,我們需要複雜的硬體和軟體系統,讓軟硬體協調工作。
你或許非常熟悉某些表層元件,例如攝像頭和激光雷達,但同樣重要的是,所有元件需要形成一個整體。這將是本文的核心。
Voyage的架構
下圖展示了Voyage無人駕駛計程車的結構,即一種標準化的多感測器無人駕駛汽車架構。其中,每個元件都扮演重要的角色。
今天,我們將介紹計算、動力和電傳線控技術。
計算
計算技術服務於SPA範式的「規劃」階段。
Voyage的首輛無人駕駛計程車Homer「大腦」是千兆AORUS主板,搭載了英特爾酷睿i7-7700k「Kaby Lake」四核2.4GHz處理器,以及英偉達Titan X GPU。
為了確保感測器獲得足夠大的數據通道,這台機器集成了64GB RAM,以及3TB大容量存儲。這一存儲系統分布在3塊固態硬碟上,以提供冗餘備份。
這一強大的計算機設備運行Ubuntu Linux,利用Docker容器來管理系統環境,而機器人操作系統(ROS)則可以將所需的感知、運動規劃,以及節點控制功能快速原型化。
ROS是一種強大的機器人中間件,將消息傳遞、計時、數據結構(例如點雲、相機幀和障礙物)、線程和數據記錄等複雜工作抽象化。
儘管Ubuntu和ROS並不是無人駕駛汽車所需的實時操作系統(RTOS),但這仍提供了非常強大的工具,可以用於演算法的原型化,快速實現在現實世界中的測試。將紙面上的概念以最短時間變成上路的汽車,這一點對Voyage非常重要。而這些工具帶來了幫助。
ROS節點本質上是小型程序,可以獨立運行,但相互之間也有很多連接。
其中一個節點可能負責從乙太網介面讀取來自Velodyne激光雷達的原始數據,並將其轉換為PointCloud2消息。這條消息由三維點陣及其元數據構成,隨後將在ROS網路上發布,而其他節點都可以使用這些數據。
作為使用者的一個節點負責將實時輸入的點雲匹配至現有的本地化地圖,而另一個節點可能會運行集群演算法,探測並追蹤對象。
隨後,這些節點會將自身的輸出發布至網路,供運動規劃演算法使用。
從較高的層面來看,這正是Voyage汽車的運行方式。
數據來自原始感測器(激光雷達、雷達、RTK GPS、攝像頭,以及CAN匯流排消息),由大量的小節點進行處理,這些小節點相互通信,最終通過電傳線控將實際控制信號輸出至油門、剎車和方向盤。
△ Voyage的車在採集數據
在開發過程中,使用ROS最有價值的一個方面是數據的記錄和回放。
當節點通信時,利用特定通道,一些「主題」可以被自動記錄至磁碟,供進一步分析。實際上,只要Voyage的汽車上路行駛,我們就可以記錄每秒的數據。
這些主題有自己的名稱空間,從而避免數據衝突的可能性。
這也可以提供詳細的運行日誌,幫助我們了解汽車的每個部分在任何給定時刻是如何思考的。
我們可以在辦公室電腦上重現任何狀況,而不必開車上路,期待同樣的情況再次發生。於是,我們可以在辦公室里測試新演算法,而不用坐在車裡。這節約了工程師的大量時間。
一般而言,Homer和Voyage其他產品中的計算任務都是在CPU中完成的。
這是因為,大部分任務都是線性的,在解決下一問題之前需要找到當前問題的解決方案。例如,激光雷達數據中出現的這些新點屬於什麼障礙物?在下次右轉之前,我是否應該左轉?
多線程技術也是一種選擇,並被廣泛用於大數據處理。對於某些問題,模擬人類智力的方法或許可以帶來更好的解決方案,而這需要大規模並行計算。這裡我們就用到了Titan Xp GPU。
Voyage喜歡使用機器學習技術。如果問題可以由神經網路來解決,那麼就很可能會用神經網路。
我們已經使用深度學習技術來探測交通燈狀態,並獲得了很好的準確性。我們可以在激光雷達的大量數據點中識別出障礙物。利用場景分類技術,我們可以將建築物與道路區分開。我們可以使用來自端到端網路的圖像,直接生成方向盤角度。
儘管GPU並不是所有問題的合適解決方案,但確實是一款強大的工具,可以調動我們工程師的力量和創造性。
動力
整個系統由福特Fusion的12V汽車電池來驅動。
該電池將動力提供給「動力分配單元」(PDU),PDU是一款非常智能的繼電開關,集成了9個不同的12V接頭。它有自己的腳本語言,可以通過編程去打開或關閉單個開關。
作為「大腦」的Linux Box通過110V逆變器連接至PDU的一個開關,從而獲得電力。
只有當汽車行駛時,PDU才會打開。在福特Fusion混動車中,如果汽車檢測到司機不在座位,那麼車身控制模塊將會在30分鐘非行駛狀態後將車輛自動熄火。進而,PDU和Linux Box也將被關閉。
這樣的機制給工程師帶來了不便。
為了解決自動關閉的問題,我們簡單地改變了車輛的出廠配置。我們調整了其中一個模塊,讓福特Fusion混動車可以無限制行駛。
通過開源工具FORScan和基於FTDI晶元的OBD-II工具,我們將特定的CAN消息發送給車身控制模塊,並改變了原始出廠設置,使車輛不會自動熄火。
藉助這些工具,我們也禁掉了煩人的「鳴笛」報警。以往,如果車主將鑰匙丟在車中就去關車門,那麼車輛就會發出這種報警,現在不會了。
電傳線控
在獲得計算和動力之後,我們要如何通過程序去操控車輛?
在我們的SPA範式中,「行動」是如何實現的?
答案就是電傳線控模塊。
以最簡單的方式來看,電傳線控模塊就是感測器/計算機與執行器之間的界面。
在獲得感測器的輸入數據之後,這個模塊可以讓計算機發出指令(最終是以CAN匯流排消息的形式),並讓這些指令(包括轉向和剎車等)在汽車上得到執行。
執行器包括油門踏板、剎車踏板和方向盤,所有這些都通過Dataspeed電傳線控套裝來連接。
在當代汽車中,大部分執行器已完全脫離了司機的輸入。
例如,當你踩下油門踏板時,你只是移動了兩個電位計,將原始的0到5V電壓信號傳送給引擎控制模塊(ECM)。在ECM內部,踏板位置信息被轉換為對應的引擎扭矩,而這個扭矩可以決定火花定時器的推進,或是通過開啟油門來增加氣流。
用於驅動加速踏板的電傳線控模塊連接了踏板總成和ECM。當系統被關閉時,踏板的原始電位計會將0到5V信號發送給ECM。
然而,當電傳線控模塊啟用時,新信號將基於Ubuntu/ROS計算機產生的指令。
無人駕駛汽車是一系列複雜而互聯的系統。希望本文能揭示更多關於無人駕駛汽車如何運轉的信息。
相關鏈接
原文:
https://news.voyage.auto/under-the-hood-of-a-self-driving-car-78e8bbce62a6
ROS:
http://www.ros.org/
FORScan:
http://www.forscan.org/
Dataspeed線控套裝:
http://dataspeedinc.com/
【完】
歡迎大家關注我們的專欄:量子位 - 知乎專欄
一則通知
量子位讀者5群開放申請,對人工智慧感興趣的朋友,可以添加量子位小助手的微信qbitbot2,申請入群,一起研討人工智慧。
另外,量子位大咖雲集的自動駕駛技術群,僅接納研究自動駕駛相關領域的在校學生或一線工程師。申請方式:添加qbitbot2為好友,備註「自動駕駛」申請加入~
招聘
量子位正在招募編輯記者、運營、產品等崗位,工作地點在北京中關村。相關細節,請在公眾號對話界面,回復:「招聘」。
推薦閱讀:
※人工智慧一周動態|20171001-20171007
※威脅預警!不用再黑進系統,只要在指示牌上貼紙就可以擾亂自駕車!
※獨家 | 李開復:談無人車安卓為時尚早,投自動駕駛有三個標準
※福特將一個男人偽裝成汽車座椅,以此來研究自動駕駛
※無人車感知系統(雙目視覺+雷達)如何搭建平台(ROS還是自己在Linux搭)?