上周來自百度Apollo的資深架構(gòu)師——毛繼明,為我們帶來《適用于無人駕駛的分布式仿真平臺(tái)》的社群分享,錯(cuò)過社群直播的開發(fā)者可以通過此篇內(nèi)容了解干貨!
本次分享主要為以下五個(gè)方面的內(nèi)容:
一、仿真產(chǎn)品的業(yè)務(wù)價(jià)值
二、如何達(dá)到真實(shí)性
三、如何完成更全面異常檢測
四、智能輔助駕駛和全自動(dòng)無人駕駛的區(qū)別
五、全面的無人車能力判定
{ 一 }
仿真產(chǎn)品的業(yè)務(wù)價(jià)值
仿真器,顧名思義,就是用軟件模擬真實(shí)。但在 Apollo 中,對仿真平臺(tái)的定位是不僅僅是真實(shí),而是要能夠進(jìn)一步:能夠發(fā)現(xiàn)無人車算法中的問題。因?yàn)樵谡麄€(gè)算法迭代閉環(huán)中,光有擬真是不夠的,還需要能夠發(fā)掘問題,發(fā)現(xiàn)了問題后才能去 fix 問題,也就是回到了開發(fā)過程。
如此這樣,從開發(fā)到仿真再回到開發(fā),仿真平臺(tái)同我們的開發(fā)過程串聯(lián)成一個(gè)閉環(huán)。只有閉環(huán)的東西才能構(gòu)成持續(xù)迭代和持續(xù)優(yōu)化狀態(tài)。所以仿真平臺(tái)在整個(gè)無人車算法迭代中的地位非常重要。
如上所述,仿真平臺(tái)的功能。
發(fā)現(xiàn)問題,進(jìn)行功能拆解的話,可以拆成有因果關(guān)系的兩部分:
先要能夠真實(shí),接下來要能夠進(jìn)行全面的異常檢測。真實(shí)性,就是說要能夠?qū)κ澜邕M(jìn)行數(shù)學(xué)建模;全面的異常檢測,其中最難的是“全面”二字,這要看我們對“全面的異?!钡亩x。
{ 二 }
真實(shí)→客觀世界的數(shù)學(xué)建模
客觀世界的真實(shí)性表達(dá)依賴于三部分:靜態(tài)環(huán)境的真實(shí)性、動(dòng)態(tài)環(huán)境的真實(shí)性、車輛行為(也就是主車)真實(shí)性。
準(zhǔn)確來說,對于靜態(tài)環(huán)境的真實(shí)建模本身并不難,比如游戲畫面中,我們能經(jīng)常看到“照片畫質(zhì)”的渲染,看著都很真。最難的是“成本”兩個(gè)字,這個(gè)成本指的是:單位公里上全部環(huán)境建模的時(shí)間成本。無人車的場景重建跟游戲中不一樣。游戲中是藝術(shù)家造出的場景,它不考慮真實(shí)。而真實(shí)仿真器中的場景是要跟真實(shí)世界做 diff 的,需要做到毫厘不差。
1靜態(tài)環(huán)境的真實(shí)性
靜態(tài)環(huán)境是相對于動(dòng)態(tài)障礙物而言的,比如道路(包括各種地面元素)、柵欄、紅綠燈、路旁的路燈和綠植兩側(cè)的高樓。對于自動(dòng)駕駛來說,它們屬于背景元素。當(dāng)然大家能夠理解這跟行人、車輛等動(dòng)態(tài)障礙物的不同。
大家都有過這樣的經(jīng)驗(yàn),我們自己得到一個(gè)結(jié)果,這很簡單,但若要讓自己得到一個(gè)跟別人一模一樣的結(jié)果,這個(gè)成本就大太多了。百度內(nèi)部有成熟的百度高精地圖制作流水線,在厘米級精度的世界刻畫能力的基礎(chǔ)上,成本做到非常低。
那么大家會(huì)問,講了這么多地圖生成的事,這跟仿真有什么關(guān)系?其實(shí),Apollo 仿真器的靜態(tài)世界的表達(dá),正是直接使用了 Apollo 高精地圖數(shù)據(jù)。所以它是真實(shí)的,且是具有足夠低成本的。
2標(biāo)題內(nèi)容
然后是動(dòng)態(tài)環(huán)境,也就是各種障礙物的行為真實(shí)性了。動(dòng)態(tài)障礙物引入了人的因素,相對靜態(tài)場景重建更難,因?yàn)槿说男袨椤半y以捉摸”。對于 Apollo 而言,最快和直接的做法,不是擬真,而是直接“真”。
用實(shí)際路上采集回的海量真實(shí)數(shù)據(jù),經(jīng)過 Apollo 感知算法,做動(dòng)態(tài)場景重建。一方面,我們通過 Apollo 數(shù)據(jù)生態(tài),會(huì)得到更多的數(shù)據(jù)用來補(bǔ)充場景,另一方面我們利用自身持續(xù)迭代的感知算法可以更精準(zhǔn)的還原世界。從量和質(zhì)上都得到持續(xù)的提升。
3車輛行為的真實(shí)性
主要分傳感器模擬和車輛動(dòng)力學(xué)模擬。由于傳統(tǒng)的商業(yè)仿真軟件在這兩個(gè)領(lǐng)域已經(jīng)進(jìn)行了數(shù)十年的研發(fā),成果已經(jīng)被各大車廠所認(rèn)可。Apollo 倡導(dǎo)開放能力、合作共贏,所以這兩塊功能 Apollo 仿真平臺(tái)是以直接 involve 商業(yè)仿真軟件的方式實(shí)現(xiàn)這兩塊 feature。后面在講開放性的時(shí)候會(huì)提到。
{ 三 }
全面的異常檢測
在滿足了真實(shí)性后,我們來看看如何完成下一個(gè)需求:更全面異常檢測。
其實(shí)大家都知道,尤其是搞 IT 的同學(xué)可能會(huì)更清楚。所謂異常檢測,就是先給一個(gè)條件,再給一個(gè)預(yù)期輸出。就是大家寫的 UnitTest 的常用版型。方法論上都是一樣的。那么對于無人車的異常檢測,什么是條件呢?就是車輛運(yùn)行的場景。什么是預(yù)期輸出?就是要有一整套判定準(zhǔn)則或者說判定算法。
顯然,要做到全面的異常檢測,這里重點(diǎn)或者說難點(diǎn),肯定不在后四個(gè)字,而在于前面兩個(gè)字“全面”。場景,要是全面的場景;判定,要是全面的判定。
全面的場景。全面這兩個(gè)字很虛,而且“100% 全面”在理論上也無法達(dá)到。所以,唯一可行的做法是:在受限場景下逼近 100%。這個(gè)“受限場景”,換種說法,就是我們無人車算法的問題域定義,也就是說這個(gè)算法要解決哪一種受限場景。不同的應(yīng)用場景,仿真器的設(shè)計(jì)可能會(huì)大有不同。目前以我的理解,能夠?qū)Ψ抡嫫髟O(shè)計(jì)產(chǎn)生革命性變化的,只有一種問題域的劃分方式,就是智能駕駛 vs 無人駕駛。具體怎么個(gè)革命性變化,后面會(huì)講。
全面的判定。這個(gè)取決于算法能力域的設(shè)計(jì)。什么叫算法能力域?就是指算法能達(dá)到的上限,也就是說,是 just work,還是 work well。對于判定算法而言,如果僅僅是做“just work”級別的判斷其實(shí)并不難,難在對“work well”做判斷。所以這里,也有一個(gè)對仿真器算法產(chǎn)生重大影響的能力域的劃分方式,就是: “機(jī)器人型駕駛”(just work)的判定,以及“擬人型駕駛”(work well)的判定。
{ 四 }
智能駕駛 vs. 無人駕駛
準(zhǔn)確來講,無人駕駛屬于智能駕駛的一個(gè)分支,這么寫可能不太確切。但是,我想強(qiáng)調(diào)的是,這其中有一個(gè)非常大的差異,無人駕駛和自動(dòng)駕駛之間的,就是:是否有人。
“是否有人”這個(gè)事情,對整個(gè)智能駕駛無論是算法、還是硬件設(shè)計(jì)、還是仿真器的設(shè)計(jì),都產(chǎn)生了極大的影響?!皼]有人來保底”決定了算法需要應(yīng)對的占比從 80% 到 99.9999%。大家都了解二八法則。從 80% 到 99.9999%,無論是算法、還是硬件、還是仿真,需要解決的問題或者說面臨的困難要提高幾個(gè)數(shù)量級。
{ 五 }
復(fù)雜城市道路 +99.9999%
99.9999% 是無人駕駛特有的要求。而 99.9999% 需要的是算法“見多識(shí)廣”。要解決長尾問題,也就是要應(yīng)對全自動(dòng)無人駕駛的 99.9999% 的場景 handle 能力,必須要累計(jì)起【海量場景】。
也許大家對海量場景這個(gè)事情并沒有太多感覺。在實(shí)際的生產(chǎn)領(lǐng)域,擁有海量場景其實(shí)不是難事,難就難在海量場景的使用效率。前面講到了,算法需要高速迭代,我們的用戶需求是:30 分鐘,仿真平臺(tái)能告訴我們什么。30 分鐘,可以算算,平均時(shí)速 30km/h,只能跑 15 公里,如果是這種能力的話,其實(shí)不用談海量場景。
所以從百度內(nèi)部最開始進(jìn)行無人車項(xiàng)目時(shí),就已著手考慮仿真平臺(tái)的運(yùn)行效率。Apollo 仿真平臺(tái)通過 2 個(gè)不同層次的實(shí)現(xiàn)方式來進(jìn)行大幅度優(yōu)化。從宏觀角度出發(fā),通過大規(guī)模分布式化來進(jìn)行;所以Apollo 仿真從最開始,就是以分布式仿真作為方向的。從微觀角度出發(fā),通過動(dòng)態(tài)變速仿真來進(jìn)行。
{ 六 }
大規(guī)模分布式的架構(gòu)設(shè)計(jì)思考
這個(gè)是分布式仿真框架的簡圖。了解分布式計(jì)算框架的同學(xué)應(yīng)該比較熟悉。整體上看,分布式仿真架構(gòu)按層次和功能,可以按照如下幾部分進(jìn)行說明:
由于分布式仿真平臺(tái)的計(jì)算模型很像傳統(tǒng)的 MapReduce。所以整個(gè)分布式調(diào)度 follow 傳統(tǒng)的 MR 架構(gòu)。
下層是 Hardware Resource Scheduler。由于仿真節(jié)點(diǎn)的運(yùn)行會(huì)用到 GPU+CPU/only CPU/CPU+FPGA 多種硬件組合,又由于仿真的運(yùn)行是一種彈性的資源使用。所以我們單獨(dú)的剝離出來一層 Hardware Resource Scheduler。這層 Scheduler 是支持更換的。比如在百度內(nèi)部,我們使用了百度內(nèi)部已有的資源調(diào)度器 Matrix,如果是在開源系統(tǒng)里,我們支持使用 K8S,再比如我們跟 Microsoft azure 合作的 Apollo Simulation Global 中,我們使用了 MS 的 cosmos。未來如果做大客戶定制化,我們也可以支持大客戶內(nèi)部專門的 Resource Scheduler。
上層是 Batch-job Scheduler。因?yàn)榉植际椒抡孢\(yùn)行模式為 Batch-job,所以我們單獨(dú)剝離了一層 Batch-job Scheduler。它負(fù)責(zé) job 的整個(gè)生命周期的運(yùn)行狀態(tài)的推進(jìn),比如各種部署、啟動(dòng)、運(yùn)行狀態(tài)檢查、重試、優(yōu)先級、彈性伸縮……等邏輯。這塊同樣的,我們單獨(dú)剝離出一層的原因在于,我們解耦了這層標(biāo)準(zhǔn)化的分布式計(jì)算模型,也允許根據(jù)用戶特別的需要進(jìn)行替換。在內(nèi)部我們使用了百度的 Normandy 調(diào)度框架,在外部我們支持更換成業(yè)界主流的 K8S 等。
中間這層是仿真核心。它運(yùn)行在 Docker Container 中。仿真核心中運(yùn)行的是客戶的算法 + 仿真邏輯:包括場景重建 + 動(dòng)力學(xué)模型 + 精細(xì)化度量。由于運(yùn)行模型復(fù)雜,所以我們在 Container 內(nèi)抽象了上下兩層:上層,我們內(nèi)部叫做 Task Engine,專門負(fù)責(zé)復(fù)雜的仿真執(zhí)行流程調(diào)度。下層是 Sim-Core,用來放置用戶的自己的算法。
在外層有兩個(gè) Storage Component:Scene Store,Result Store。圍繞著計(jì)算,統(tǒng)一管理了數(shù)據(jù)。Simulation-platform 主要提供了提交接口、數(shù)據(jù)分析、Dashboard 接口,串通起完整的仿真流程,供用戶使用。
{ 七 }
動(dòng)態(tài)變速仿真技術(shù)
這里做一下對比,真實(shí)道路情況下,車載算法是在車載電腦上運(yùn)行,實(shí)時(shí)性要求很高,所以往往需要保留較多的系統(tǒng)資源冗余(以應(yīng)對隨時(shí)到來的系統(tǒng)處理顛簸的情況),萬一出現(xiàn)顛簸狀態(tài),實(shí)時(shí)系統(tǒng)會(huì)采用丟幀的方式以保證運(yùn)行時(shí)消息處理的低延遲。
在仿真系統(tǒng)里,這是在離線運(yùn)行。如果不做任何處理,我們需要用更強(qiáng)力的服務(wù)器,保留更多的系統(tǒng)資源,或者降低運(yùn)行速率,以保證不丟幀。很顯然,這種做法一方面帶來大量的運(yùn)行資源的閑置,另一方面降低了我們的運(yùn)行速度。所以我們引入了動(dòng)態(tài)變速仿真技術(shù)。
動(dòng)態(tài)變速仿真技術(shù),本質(zhì)上是對無人車復(fù)雜數(shù)據(jù)流進(jìn)行流控的過程。分解來講:
1)對于處理時(shí)間較短的幀,壓縮了數(shù)據(jù)處理的間隔;
2)對于處理時(shí)間較長的幀,等待處理完成再繼續(xù)處理后續(xù)的幀。
而整個(gè)調(diào)度系統(tǒng)是一種根據(jù)當(dāng)前處理幀的耗時(shí)做彈性變化。
通過這兩項(xiàng)改造,可以達(dá)到:不等待 & 不丟幀,這樣就可以充分的利用硬件資源,以最快速度運(yùn)行。據(jù)實(shí)際測試,采用了動(dòng)態(tài)變速仿真技術(shù),在不影響仿真結(jié)果的前提下,單機(jī)仿真效率可以提升數(shù)倍以上。
{ 八 }
全面的無人車能力判定
從自動(dòng)駕駛的能力上看,能力分成兩個(gè)層面:低端能力(能 work)以及高端能力(像人一樣 work well),所以從能力判定的算法上,會(huì)有較大的不同。后一種(高端能力級別的判定)很顯然是非常有挑戰(zhàn)的。
我們先看一下低端的能力判定方法,它包括了兩層判定:
Level1:模塊的運(yùn)行可靠性判定。類似模塊的 coredump、非法 exit、幀率異常等。
Level2:無人車基礎(chǔ)能力的判定。包括:到達(dá)目的地、碰撞、違章等。
很顯然,這樣的兩層判定可以通過“通用的規(guī)則”來實(shí)現(xiàn)。但是此時(shí)的通用僅僅代表了無人車能力的下限已經(jīng)達(dá)到。此時(shí)無人車僅僅是能夠像是機(jī)器人一樣進(jìn)行駕駛。
既然有低端能力,就對應(yīng)有高端能力。何為高端能力?——像自然人一樣開車,可以通過圖靈測試。它仍然包括了兩層判定:
Level3:體感判定。體感判定包括了橫擺角,頓挫感等評估體系。
Level4:心理感受。心理感受包括了心理安全感以及遲鈍感等。
高端能力的判定??梢允且环N圖靈測試的驗(yàn)證,是場景特化的。它代表了無人車的能力的上限。
實(shí)際上,度量算法的本質(zhì)可以認(rèn)為是:f(場景描述,車輛軌跡),即某種場景和軌跡的二元函數(shù)。當(dāng)我們擁有大量的正例以及負(fù)例,我們通過機(jī)器學(xué)習(xí)方法,基于大量數(shù)據(jù),是可以得到一種具有足夠泛化能力的,并且能夠達(dá)到圖靈測試判定能力的度量能力。
事實(shí)上,百度長期的無人車路測,使仿真擁有了大量的實(shí)際的運(yùn)營 / 路跑數(shù)據(jù),我們針對性的大量采集、標(biāo)注了細(xì)粒度的體感異常的 badcase 樣本,進(jìn)而可以達(dá)到相當(dāng)精準(zhǔn)的異常判斷能力。我們會(huì)在 Apollo 中將這樣的能力釋放給大家。
-
仿真器
+關(guān)注
關(guān)注
14文章
1039瀏覽量
85442 -
無人駕駛
+關(guān)注
關(guān)注
99文章
4177瀏覽量
123633 -
Apollo
+關(guān)注
關(guān)注
5文章
348瀏覽量
18870
原文標(biāo)題:社群分享 | Apollo仿真平臺(tái)如何Hold住99.9999%的復(fù)雜場景?
文章出處:【微信號(hào):Apollo_Developers,微信公眾號(hào):Apollo開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論