陸奇去年在上海車展期間發(fā)布Apollo計劃,向所有合作伙伴免費開放無人駕駛能力,當(dāng)時有文章評價這是百度扔下了原子彈,炸掉了無人駕駛企業(yè)數(shù)百億美元投入,今天讓我們深度剖析一下Apollo自動駕駛平臺,看看是不是有真的“原子彈”。
自百度宣布開放 Apollo 自動駕駛平臺以來,很多開發(fā)者非常期待可以深入了解 Apollo 平臺的開放內(nèi)容,以便更充分高效的利用這個自動駕駛平臺,研究并落地自己對于自動駕駛的諸多想法。
為此,7 月 22 日,由百度開發(fā)者中心主辦、極客邦科技承辦的 73 期百度技術(shù)沙龍設(shè)置 Apollo 主題,現(xiàn)場百度資深架構(gòu)師從 Apollo 的開放能力、Apollo 代碼開放框架以及基于深度學(xué)習(xí)的 End to End 自動駕駛方案三個技術(shù)維度做了深度分享,以期幫助開發(fā)者深度了解百度 Apollo 開放內(nèi)容和平臺架構(gòu),設(shè)計并實現(xiàn)一套完整的駕駛方案。
Apollo 的開放能力和開放數(shù)據(jù)
百度資深數(shù)據(jù)平臺專家楊凡做了開場演講,他表示:“Apollo 開放內(nèi)容實質(zhì)上分為兩大部分:能力開放和資源開放,能力開放提供開發(fā)者實現(xiàn)車上自動駕駛的平臺,資源開放提供開發(fā)者探索算法進(jìn)化的平臺,這二者相輔相成,缺一不可?!?/p>
Apollo 的開放能力
Apollo1.0 主要開放的是封閉場地循跡自動駕駛的框架,從上之下分別是服務(wù)層、軟件平臺層、參考硬件層以及參考汽車層,其中標(biāo)藍(lán)部分為具體開放模塊。各層級的具體功能如下:
參考汽車層:實現(xiàn)電子化的控制,也就是線控汽車,這是最底層的一步;
參考硬件層:實現(xiàn)計算能力,包括計算單元、GPS/IMU、HMI Device 等;
軟件平臺層:最核心的層,分為 3 個部分。1、實時 RTOS 系統(tǒng),要求保證實時反應(yīng);2、運行時框架;3、定位模塊和控制模塊以及 HMI 人機(jī)交互模塊。這三塊構(gòu)成了本期開放的封閉場地循跡自動駕駛軟件體系;
云服務(wù)層:在云服務(wù)層開放了數(shù)據(jù)開放平臺和喚醒萬物的 DuerOS。

以上四層構(gòu)成了百度 Apollo 自動駕駛平臺的整個技術(shù)棧。目前開放的 Apollo1.0 具有高效易拓展架構(gòu)、立即可用硬件、一鍵啟動更新和完備的開發(fā)工具四大特性。
Apollo 的開放資源
Apollo1.0 在資源上開放了三個關(guān)鍵數(shù)據(jù)集:2D 紅綠燈、3D 障礙物以及 Road Hackers。百度將這三部分?jǐn)?shù)據(jù)開放至云端,以便用戶高效研究運用。下圖為 Apollo 數(shù)據(jù)開放平臺的架構(gòu)邏輯介紹。

如圖,用戶通過云端 Docker Repository,下載基于本地的 VM + Docker 的開發(fā)環(huán)境,編寫訓(xùn)練和預(yù)測兩部分算法,配置依賴環(huán)境。通過云端用戶空間的可視化訓(xùn)練調(diào)試平臺,將用戶在本機(jī)創(chuàng)建的算法容器,在云端實現(xiàn)調(diào)度,展開訓(xùn)練評估調(diào)試。這樣用戶可以在整個云中的數(shù)據(jù)開放平臺中,基于海量數(shù)據(jù)利用集群的 CPU+GPU 資源訓(xùn)練調(diào)試 model,并在其中選取有效的 model 使用。
現(xiàn)場,楊凡親自展示了 Apollo 平臺的使用流程和使用方法,本文不再此贅述,想要動手實踐的讀者可以移步至 Apollo 官網(wǎng) apollo.auto,在“開發(fā)者”/“數(shù)據(jù)開放平臺”頁面有詳細(xì)的使用介紹。
Apollo 代碼開放框架
自動駕駛系統(tǒng)包括障礙物檢測、紅綠燈識別、駕駛行為決策、路徑規(guī)劃等系列復(fù)雜的功能模塊,如何將這些獨立而又相互依賴的模塊集成在一起,構(gòu)建成一個穩(wěn)定的運行系統(tǒng),是一個巨大的挑戰(zhàn)。百度資深架構(gòu)師何瑋從百度為何選用 ROS 系統(tǒng)、Apollo 中 ROS 的改進(jìn)實踐、Apollo 框架使用介紹三個角度分享了 ROS 在百度自動駕駛的探索和實踐。
百度為何選用 ROS 系統(tǒng)?
在百度為何選用 ROS 系統(tǒng)的問題上,何瑋給出解釋,ROS 是一個強大而靈活的機(jī)器人編程框架,同時也是學(xué)術(shù)界使用最廣泛的框架,它具有三大特性:完整的開發(fā)工具包、靈活的計算調(diào)度模型以及豐富的調(diào)試工具,能夠統(tǒng)一提供配置管理、部署運行、底層通信等功能,讓開發(fā)者將更多精力放在算法功能的研發(fā)上,快速構(gòu)建系統(tǒng)原型,驗證算法和功能。

Apollo 中 ROS 的改進(jìn)實踐
ROS 系統(tǒng)的優(yōu)勢顯而易見,但其在 Apollo 平臺的應(yīng)用中也并非一帆風(fēng)順。百度在做研發(fā)調(diào)試到產(chǎn)品化的過程中,遇到的不少狀況,針對這些問題,百度從通信功能優(yōu)化、去中心化網(wǎng)絡(luò)拓?fù)湟约皵?shù)據(jù)兼容性擴(kuò)展三個方面做了定制化的改進(jìn)。
1、通信性能優(yōu)化:共享內(nèi)存
問題:自動駕駛系統(tǒng)為了能夠感知復(fù)雜的道路場景并完成駕駛?cè)蝿?wù),需要多種傳感器協(xié)同工作,以覆蓋不同場景、不同路況的需求。而主流的多傳感器融合方案至少會包含一個激光雷達(dá)和多個相機(jī),如此大的數(shù)據(jù)量對通信的性能有很大的挑戰(zhàn)。
解決方案:百度采用的解決方案是共享內(nèi)存,減少傳輸中的數(shù)據(jù)拷貝, 提升傳輸效率。
1 對 1 的傳輸場景下,同一個機(jī)器上的 ROS 節(jié)點之間是 socket 進(jìn)行進(jìn)程間通信,中間存在多層協(xié)議棧以及多次用戶空間和內(nèi)核空間的數(shù)據(jù)拷貝,造成了很多不必要的資源占用和性能損耗。共享內(nèi)存的方式來替代 socket 作為進(jìn)程間通信的方式,通過減少不必要的內(nèi)存拷貝,來降低了系統(tǒng)的傳輸延時和資源占用。
單對多的傳輸場景下,ROS 在處理一對多的消息傳輸時,底層實現(xiàn)實際是多個點對點的連接,當(dāng)把一份數(shù)據(jù)要發(fā)給四個節(jié)點時,相同的數(shù)據(jù)會傳輸四次,這會造成很大的資源浪費。共享內(nèi)存的傳輸過程,能夠支持一次寫入,多次讀取的功能,對于一對多的傳輸場景,相同的數(shù)據(jù)包只需要寫入一次即可,成倍地提高了傳輸?shù)男省?/p>

2、去中心化的網(wǎng)絡(luò)拓?fù)洌菏褂?RTPS 服務(wù)發(fā)現(xiàn)協(xié)議
問題:ROS 并非完全的分布式框架,每個 ROS 網(wǎng)絡(luò)中需要有一個中心節(jié)點 ROS Master, 各個節(jié)點在初始化時會像 Master 注冊拓?fù)湫畔⒉@取其他節(jié)點的信息。這種方式有兩個缺點:1、Master 作為系統(tǒng)的單點,一旦崩潰整個網(wǎng)絡(luò)將不可用;2、Master 缺乏異常恢復(fù)機(jī)制,崩潰后無法通過監(jiān)控重啟等方式自動恢復(fù)。
解決方案:為了解決這個問題,百度在 ROS 在框架加入了基于 RTPS 協(xié)議的服務(wù)發(fā)現(xiàn)功能。
整個網(wǎng)絡(luò)拓?fù)洳辉僖?master 為中心構(gòu)建,而是通過域的概念進(jìn)行劃分。當(dāng)一個新的節(jié)點加入網(wǎng)絡(luò)時,會通過 RTPS 協(xié)議向域內(nèi)的所有其他節(jié)點發(fā)送廣播信息,各個節(jié)點也會將自己的服務(wù)信息發(fā)送給新的節(jié)點,以代替 Master 的信息交換功能。

通過這種方式,能夠使 ROS 網(wǎng)絡(luò)的拓?fù)浒l(fā)現(xiàn)不再依賴 Master 單點,提高了系統(tǒng)的魯棒性。同時該修改完全基于 ROS 底層的修改,對上層應(yīng)用程序完全透明,開發(fā)者也不需要對此功能有任何的代碼適配工作。
3、數(shù)據(jù)兼容性擴(kuò)展:用 Protobuf 替換 Message
問題:ROS 系統(tǒng)為了保證收發(fā)雙方的消息格式一致,會對 message 定義做 MD5 校驗,任何字段的增減或順序調(diào)整都會使 MD5 變化,以保證系統(tǒng)的健壯性。然而這種嚴(yán)格的限制也引起了兼容性的問題,當(dāng)接口升級后,不同的模塊之間不再能夠通信,大大增加了模塊版本之間的耦合。

解決方案:使用 protobuf 來替換 ROS 中的 Message 來作為消息定義的格式。protobuf 本身有良好的兼容性支持,只需要在使用中定義好 required 字段,后續(xù)新增 optional 字段并不會對消息的解析造成影響。
Apollo 框架使用介紹
隨后,何瑋簡單介紹了 Apollo 框架的使用方法:
第一步:安裝 docher 系統(tǒng)。用 install-dacker 腳本安裝和部署 docker 環(huán)境,包含下載、代碼等一系列工作,安裝完之后需要注銷,并且用戶重新登陸,這其中需要注意的是因為涉及用戶權(quán)限的變更,需要當(dāng)前用戶注銷之后才能完全生效;

第二步:編譯 Apollo。編譯代碼:bash Apollo.sh build;
第三步,啟動 Apollo。此步驟下需要對 Apollo 系統(tǒng)進(jìn)行編譯,編譯完成之后啟動 Apollo。百度提供了一鍵啟動版本,可以將后臺的應(yīng)用和前端顯示完整啟動。第一步:安裝 docher 系統(tǒng)。用 install-dacker 腳本安裝和部署 docker 環(huán)境,包含下載、代碼等一系列工作,安裝完之后需要注銷,并且用戶重新登陸,這其中需要注意的是因為涉及用戶權(quán)限的變更,需要當(dāng)前用戶注銷之后才能完全生效;

目前 Apollo 開源代碼已上傳至 Github 網(wǎng)站,具體鏈接為:github.com/apolloauto,感興趣的碼農(nóng)們可前往查閱相關(guān)的工具和文檔。
基于深度學(xué)習(xí)的 End to End 自動駕駛方案
開發(fā)者想要基于 Apollo 平臺設(shè)計一套完整的自動駕駛系統(tǒng),前提需要了解百度的自動駕駛系統(tǒng)選擇和方案詳情,百度自動駕駛事業(yè)部資深架構(gòu)師郁浩為大家分享了基于傳統(tǒng) Rule Based 與 End to End 自動駕駛方案的異同與優(yōu)劣,以及 Apollo 平臺在數(shù)據(jù)和模型上的實踐。
基于深度學(xué)習(xí)的方案選擇
郁浩表示,目前,業(yè)界和學(xué)術(shù)界主流還是 Rule based 系統(tǒng)。Rule based 從車輛、到傳感器感知、World model、然后進(jìn)行決策、控制、最后到車輛,形成了比較完整的閉環(huán)系統(tǒng)。不過,其在實際的應(yīng)用上還是有比較明顯的瓶頸:系統(tǒng)復(fù)雜(人工設(shè)計)、高精地圖成本高(需要廣鋪以及實時更新),計算性能(資源浪費)。而 End-to-End 方式能夠很好的解決這些問題。下圖為 Rule based 與 End-to-End 優(yōu)劣對比。

通過對比,可以看到 End-to-End 方案雖然解決了 Rule based 在應(yīng)用上的部分缺點,但其在基本功能實現(xiàn)上需要進(jìn)一步的探索和實踐。郁浩認(rèn)為,這兩種方案,均有各自的優(yōu)劣勢,在現(xiàn)階段,無法完全依靠某一種深度學(xué)習(xí)方案實現(xiàn)自動駕駛功能,Rule based 和 End-to-End 在未來的趨勢上必將是吸收對方的優(yōu)點進(jìn)行融合而絕非對立。
Apollo 實踐:數(shù)據(jù)
數(shù)據(jù)產(chǎn)生分一般兩類,一類是真實數(shù)據(jù),一類是模擬器數(shù)據(jù)。目前,關(guān)于中國國情的真實數(shù)據(jù)非常稀少,模擬器數(shù)據(jù)雖然能在一定的能況下起借鑒作用,但大多通過游戲渲染出來的,其渲染的紋理與真實場景的紋理千差萬別,幾乎無法用到真實的道路上。
百度在這方面投入甚高,每年都會使用大量數(shù)據(jù)車實地采集幾百萬公里的數(shù)據(jù)進(jìn)行分析。郁浩表示,本次開放的數(shù)據(jù)主要摘取了前向數(shù)據(jù),包括 Image、RTK-GPS 以及 IMU 等,每一個開源的數(shù)據(jù)文件對應(yīng)一次采集任務(wù)。這里比較有意思的是,百度沒有直接開源出精準(zhǔn)坐標(biāo),而是根據(jù)坐標(biāo)參數(shù)繁衍出1/R(拐彎半徑的倒數(shù))和縱向指令。開發(fā)者可以里利用它與車廠合作,直接上路行駛。
Apollo 實踐:模型
百度在去年的時候使用的是簡單的橫向模型 CNN 以及縱向控制模型 Convolutional-LSTM,今年,百度將這二者融合到一起,采用的橫向 + 縱向的模式:LRCN,該模型需要關(guān)注點時序處理、橫縱向關(guān)聯(lián)關(guān)系、因果 VS 軌跡預(yù)測、Attention 機(jī)制、遷移等問題,即能夠精準(zhǔn)的預(yù)測出周圍的環(huán)境。

自動駕駛的模型構(gòu)建還在探索階段。百度希望與開發(fā)者和合作伙伴一起,通過資源和能力的開放,開發(fā)出一套真正智能、完整、安全的自動駕駛解決方案。
-
自動駕駛
+關(guān)注
關(guān)注
792文章
14796瀏覽量
178257 -
Apollo
+關(guān)注
關(guān)注
5文章
350瀏覽量
19678
原文標(biāo)題:深度剖析Apollo自動駕駛平臺
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
谷歌的自動駕駛汽車是醬紫實現(xiàn)的嗎?
自動駕駛真的會來嗎?
自動駕駛的到來
3天造出自動駕駛汽車的百度Apollo,背后竟有50多個后臺
AI/自動駕駛領(lǐng)域的巔峰會議—國際AI自動駕駛高峰論壇
自動駕駛集體爆發(fā)?看看2018CES那些大佬怎么說
自動駕駛平臺Apollo,是否帶動了行業(yè)變革?
Apollo開發(fā)套件加速自動駕駛研發(fā)
百度Apollo 5.5自動駕駛平臺發(fā)布,新增了什么功能呢
百度Apollo發(fā)布消息 自動駕駛開放平臺將迎來新的合作伙伴
研制光刻機(jī)難度,比研制原子彈難多了
百度通過Apollo平臺和Weltmeister EV展示了全自動駕駛
百度Apollo自動駕駛平臺及自動駕駛等級
深度剖析Apollo自動駕駛平臺,看看是不是有真的“原子彈”
評論