2022 CIAC系列講座第2期——以特斯拉為案例的自動(dòng)駕駛仿真產(chǎn)品架構(gòu)分析(文字版)
嘉賓簡(jiǎn)介:
James Zhang,復(fù)睿微電子自動(dòng)駕駛仿真算法專家,畢業(yè)于卡耐基梅隆大學(xué),長(zhǎng)期專注于機(jī)器人與自動(dòng)駕駛領(lǐng)域仿真研發(fā)工作,積累了豐富的仿真平臺(tái)開發(fā)與集成項(xiàng)目經(jīng)驗(yàn)。
關(guān)鍵詞:自動(dòng)駕駛仿真,特斯拉,仿真軟件,車輛動(dòng)力學(xué),仿真測(cè)試工程師,激光雷達(dá)
講座正文:
大家好,我是James Zhang,來自復(fù)睿微電子。我曾在國(guó)家智能網(wǎng)聯(lián)汽車創(chuàng)新中心工作,期間和PanoSim有過相應(yīng)的合作?,F(xiàn)在我在復(fù)睿微電子,從事的是自動(dòng)駕駛仿真相關(guān)的工作。
今天,我以特斯拉為案例給大家做一個(gè)自動(dòng)駕駛仿真產(chǎn)品的架構(gòu)分析。前段時(shí)間,特斯拉在AI DAY的分享案例中,介紹了自己強(qiáng)大的數(shù)據(jù)驅(qū)動(dòng)算法的研發(fā)流程,其中很大一部分是仿真的相關(guān)工作。我希望以特斯拉的這個(gè)案例為例,來說一下在特斯拉案例展示的內(nèi)容之外,仿真產(chǎn)品還會(huì)包括什么內(nèi)容以及仿真工作的現(xiàn)狀和展望。
首先,我們來看一下自動(dòng)駕駛研發(fā)面臨的問題:數(shù)據(jù)的缺乏。我給大家列了一些數(shù)據(jù)難以采集的原因:(一)成本較高,包括時(shí)間成本和金錢成本。如果我們派車隊(duì)來做這個(gè)數(shù)據(jù)采集的話,非常的耗時(shí)間和人力、物力。(二)極端場(chǎng)景較難尋找。極端場(chǎng)景(危險(xiǎn)工況)對(duì)于算法研發(fā)來講是最為重要的,這個(gè)也是非常難以獲取的。我們可能花了很長(zhǎng)的路測(cè)時(shí)間,但是獲取的數(shù)據(jù)都是一些比較平常的數(shù)據(jù),危險(xiǎn)場(chǎng)景corner case較難覆蓋。(三)法律政策問題。采集車輛可能還好一點(diǎn),因?yàn)橛腥祟愸{駛員。測(cè)試車輛的話,可能就會(huì)涉及一些很棘手的法律的問題?,F(xiàn)在各個(gè)國(guó)家,包括咱們國(guó)家的各個(gè)地區(qū)都有示范區(qū),但是在示范區(qū)之外,進(jìn)行路測(cè)可能還不是特別簡(jiǎn)單。(四)交通是一個(gè)很復(fù)雜的系統(tǒng),各國(guó)各地區(qū)也都不太一樣。就我國(guó)來說,路況也會(huì)比較復(fù)雜,人車混行,包括外賣、快遞等等。交通參與者行為都比較難以預(yù)測(cè),比較復(fù)雜。
因此,我們希望仿真能夠解決這些困難。也就是說,低成本、快速地生成測(cè)試數(shù)據(jù)。接下來,我們正式進(jìn)入特斯拉2022 AI DAY所講述的內(nèi)容。
一、特斯拉案例分析
特斯拉案例,主要說的是WorldSim,也就是說所有的仿真數(shù)據(jù)都是純虛擬的。另外,特斯拉介紹的內(nèi)容比較聚焦,主要介紹了Simulation World Creator(仿真場(chǎng)景的生成器),包括仿真場(chǎng)景是怎么來的、豐富的隨機(jī)性等等。雖說純仿真數(shù)據(jù)是憑空生造出來的,但其實(shí)特斯拉是依靠自己強(qiáng)大的數(shù)據(jù)鏈條,從真實(shí)的數(shù)據(jù)中還原出的仿真場(chǎng)景。所以,WorldSim和LogSim的界限會(huì)變得日趨模糊。
什么是WorldSim和LogSim?WorldSim是完全虛擬的,數(shù)據(jù)是生成的。LogSim一般來講都是根據(jù)真實(shí)的數(shù)據(jù)做的測(cè)試。比如說,純LogSim就是直接把傳感器在路上采集的數(shù)據(jù)回放給算法(主要指感知算法)。感知算法對(duì)數(shù)據(jù)的真實(shí)性要求較高,如相機(jī)數(shù)據(jù)的真實(shí)性、激光雷達(dá)數(shù)據(jù)的真實(shí)性,這些恰恰都是在WorldSim中難以百分之百真實(shí)還原的數(shù)據(jù)。所以,LogSim其實(shí)就是管理路采數(shù)據(jù),把有價(jià)值的進(jìn)行挑選、歸類,然后再合成起來給到算法。
特斯拉在2021年的AI DAY中也提到,他們不僅采集了真實(shí)的數(shù)據(jù),而且還在自己的標(biāo)簽系統(tǒng)中進(jìn)行了三維的重建,然后再根據(jù)這些三維重建的結(jié)果,把虛擬的世界建立起來。也就是說,WorldSim和LogSim,特斯拉都有涉及。在WorldSim領(lǐng)域中,他們會(huì)建立大量的數(shù)字資產(chǎn),幾千種的建筑物、汽車、行人等交通參與者等等三維模型。因此,他們可以快速地造出大量里程測(cè)試的測(cè)試場(chǎng)景出來。
另外,他們會(huì)使用真實(shí)數(shù)據(jù)回放給算法這樣一個(gè)LogSim的方法。
但是,LogSim測(cè)試方法有兩個(gè)原則上需要解決的問題。其一,交互性。LogSim是一個(gè)記錄好的數(shù)據(jù),只能對(duì)算法進(jìn)行某種程度上的開環(huán)測(cè)試。也就是說,它給算法提供一個(gè)輸入,我們可以看到算法的輸出是怎么樣的,但算法的輸出沒有辦法再回饋給本車。而WorldSim可以對(duì)算法進(jìn)行閉環(huán)測(cè)試,你可以和這個(gè)虛擬世界做一個(gè)交互。其二,LogSim片段時(shí)間是有限的。那么,如何讓被測(cè)算法達(dá)到LogSim開始采集的這個(gè)時(shí)刻的這個(gè)狀態(tài)呢?這個(gè)是很不容易的。比如說,這是一個(gè)危險(xiǎn)片段,它開始采集的這一刻往往已經(jīng)在這個(gè)危險(xiǎn)的時(shí)間段了,之前的數(shù)據(jù)你可能很難獲得。這個(gè)怎么解決呢?有的廠商會(huì)在自己的算法中設(shè)置所謂的影子模式,也就是說,感受到危險(xiǎn)之后,它會(huì)把前后多少時(shí)間內(nèi)的數(shù)據(jù)都記錄下來,然后再播放給算法看,讓算法能夠有一個(gè)充足的反應(yīng)時(shí)間,能夠快速地達(dá)到LogSim開始時(shí)算法所達(dá)到的狀態(tài)。
當(dāng)然,我們今天所說的主題都是圍繞著WorldSim,即我們?nèi)绾紊爝@個(gè)數(shù)據(jù),就不會(huì)面臨剛才所說的這兩個(gè)問題。2022年的AI DAY,特斯拉分享了Simulation World Creator,也就是說它的生造數(shù)據(jù)分了大概三個(gè)步驟。Simulation部分承接著Auto Label環(huán)節(jié)。舉例來講,采集車在舊金山運(yùn)行,記錄各種各樣的街景、車道信息,采集回來之后,Auto Label能夠某種程度上自動(dòng)地生成周圍街景的標(biāo)簽、語義的信息等等, Simulation基于這個(gè)結(jié)果給仿真世界提供信息。
首先,生成路網(wǎng)。根據(jù)Auto Label的信息,我們知道了道路的邊界、環(huán)島、隔離帶、路面起伏的信息等等。根據(jù)這個(gè)邊界和起伏信息,可以在邊界內(nèi)生成mesh,然后渲染它的表面材質(zhì)、車道線信息,這些都是在Houdini(影視特效界和游戲界非常常用的一個(gè)視覺效果生產(chǎn)工具)軟件中實(shí)現(xiàn)的。
其次,從豐富的三維素材庫中隨機(jī)挑選中間隔離帶的植被、道路旁的建筑物,以及其他的靜態(tài)物體,如消防栓、車站、馬路牙子上的落葉生成環(huán)境。最后,參考一定的地圖信息,同時(shí)也參考Auto Label的信息生成交通流。有了這些路后,我們知道這些路的信息(直行、轉(zhuǎn)彎)、路與路的連接關(guān)系等等。通過地圖的信息,把交通燈、交通標(biāo)志放在地圖的相應(yīng)位置。然后,我們就可以按照規(guī)則來生成自動(dòng)的交通流,將交通參與者放到這個(gè)場(chǎng)景中,就運(yùn)行起來了。
在這三個(gè)步驟中,什么東西是真實(shí)的呢?通過Auto Label工具鏈到最后形成的仿真環(huán)境,真實(shí)的是這個(gè)路網(wǎng)的結(jié)構(gòu)。比如說一個(gè)舊金山的路網(wǎng)。而這些植被、建筑物等等都是隨機(jī)生成的(當(dāng)然這些隨機(jī)包括一定的規(guī)則,讓你看上去不會(huì)穿幫),但這些東西不是真實(shí)的。也就是說,你只能找到舊金山的某一個(gè)路口,但是你沒有辦法找到舊金山某一個(gè)具體的建筑物。這個(gè)就是和真實(shí)的數(shù)據(jù)有關(guān)系和沒關(guān)系的地方。
仿真的優(yōu)勢(shì)在于可以產(chǎn)生隨機(jī)性,豐富測(cè)試場(chǎng)景和數(shù)據(jù)。像左邊隨機(jī)的六個(gè)圖,仔細(xì)觀察的話其實(shí)是同一個(gè)路口。但對(duì)于感知算法來講,會(huì)有更豐富的視覺信息。交通流也是隨機(jī),它可以改變某些街道的連接關(guān)系,比如說右邊這四幅圖中的同一個(gè)路口,我們看到它從轉(zhuǎn)彎可以變成直行,變成直行和直行加轉(zhuǎn)彎等等。通過修改這些道路的朝向、交通流的方向,就可以產(chǎn)生更多的隨機(jī)結(jié)果。
特斯拉在最后還介紹了一些工程化的東西??偨Y(jié)來說,主要是Auto Label的一些信息,包括Lane Graph、Map Data。用Tile Creator建立三維信息,然后抽象化變成幾何、3D的素材存儲(chǔ)起來,最終,將這些素材組合起來給到Tile Loader,Tile Loader再給到Unreal Engine(游戲開發(fā)引擎)。
二、自動(dòng)駕駛仿真產(chǎn)品架構(gòu)分析
接下來我會(huì)借助游戲引擎分層的概念來分析自動(dòng)駕駛仿真產(chǎn)品的架構(gòu)。第一層是工具層。所謂工具層,即自動(dòng)駕駛仿真產(chǎn)品是什么?我們把一個(gè)自動(dòng)駕駛仿真產(chǎn)品提供給對(duì)方,對(duì)方可以拿來做仿真的測(cè)試,而測(cè)試又可以分為開環(huán)測(cè)試、閉環(huán)測(cè)試。比如,提供感知的數(shù)據(jù)集輸入;或者進(jìn)行算法閉環(huán)測(cè)試,把感知輸入給到算法,然后把算法的控制命令輸出再給到仿真環(huán)境中的本車;或者進(jìn)行多智能體聯(lián)合仿真。如果說你有本車,那本車長(zhǎng)什么樣?有什么傳感器配置?行駛在什么地方?周圍車的信息是怎樣的?車道的信息怎樣……這些都需要進(jìn)行可配置、可操作。因此,一個(gè)仿真產(chǎn)品最外層就是工具層,包括編輯器,比如這里重點(diǎn)列的地圖編輯器。如果要做一個(gè)具體建筑物、小汽車、行人動(dòng)畫的編輯,可能需要借助第三方軟件。所以,一個(gè)好的仿真產(chǎn)品不僅要提供自己的編輯器,還要兼容第三方的編輯器。
第二層是功能層。對(duì)于自動(dòng)駕駛仿真產(chǎn)品來說,功能層是最重要的一部分。也就是說我們要借助各種各樣的功能來實(shí)現(xiàn)我們的目的,包括渲染、車輛的物理屬性、動(dòng)態(tài)場(chǎng)景輸入輸出接口、展示等。比如,我們要進(jìn)行軟件在環(huán)測(cè)試、硬件在環(huán)測(cè)試,甚至車輛在環(huán)測(cè)試等等,就會(huì)涉及輸入輸出接口、實(shí)時(shí)性的仿真、云平臺(tái)等等。渲染方面,特斯拉在2021年AI DAY中就強(qiáng)調(diào)了自己渲染的強(qiáng)大功能,其利用實(shí)時(shí)光線追蹤技術(shù)和Neural Network做出來的。最新一版Unreal引擎(UE5)推出了兩大非常強(qiáng)大的功能,一個(gè)是做全局光照,另一個(gè)做無限細(xì)分的細(xì)節(jié),和特斯拉展現(xiàn)的能力是一樣的。就輸入輸出接口而言,算法可能會(huì)基于各種各樣的中間件框架,那是不是對(duì)所有中間件的框架都要做支持呢?功能層要不要做這些支持?你可以把產(chǎn)品中的這些信息接口暴露出來,讓用戶做二次開發(fā)適配不同的接口,做不做看你的選擇,看需求量的大小。
第三層是資源層。資源包括靜態(tài)資源、動(dòng)態(tài)資源。在資源層中,我們不僅要管理靜態(tài)資源和動(dòng)態(tài)資源,還需要負(fù)責(zé)把這些資源加載進(jìn)去實(shí)時(shí)的用起來,在仿真結(jié)束的時(shí)候,還需要做資源回收。
第四層是核心層。核心層是從功能層或其他層中抽象出來的一些公用的功能(組件、代碼),目的是為了快。比如,各種數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)容器要支持并行計(jì)算,怎么處理各種線程、數(shù)學(xué)計(jì)算、物理計(jì)算等等。對(duì)于仿真產(chǎn)品來說,如果做軟件在環(huán),甚至只是為了生成數(shù)據(jù)集,實(shí)時(shí)性可能要求不高。但如果做硬件在環(huán)仿真,就需要跟上速率、且非常穩(wěn)定,對(duì)實(shí)時(shí)性會(huì)有很高的要求。
最后一層是平臺(tái)層。仿真軟件可能不僅要運(yùn)行在Windows、Linux系統(tǒng)中,還可能需要在云端、實(shí)時(shí)機(jī)上運(yùn)行。比如,算法對(duì)Simulink依賴較大,可能需要運(yùn)行在Windows中;算法使用C++、ROS,則對(duì)Linux依賴較高;需要多節(jié)點(diǎn)并發(fā)的需要云平臺(tái);做硬件在環(huán)、實(shí)車在環(huán)就需要實(shí)時(shí)機(jī)。因此,不是所有的仿真軟件都可以同時(shí)兼容很多個(gè)集成平臺(tái)的,這不是很容易達(dá)到的一件事情。
我列了幾類比較常用的仿真軟件,VTD和PreScan是國(guó)外商用仿真軟件。AirSim和Carla是開源仿真軟件。51Sim和PanoSim是國(guó)產(chǎn)的商用仿真軟件。商用軟件和開源軟件最大的區(qū)別,首先是穩(wěn)定性,另外就是功能的完善程度,最直觀的可以在工具層體現(xiàn)出來。商用軟件有很好的手冊(cè)和工具層界面,能夠告訴你可以做什么,不可以做什么,什么東西可以配置,你可以在哪些第三方界面導(dǎo)入其他資源。開源軟件的文檔往往不是那么充足,如果打開AirSim和Carla(都是基于Unreal),你會(huì)看到Unreal的界面,這個(gè)編輯起來就會(huì)非常麻煩,因?yàn)閁nreal是開源的,它太通用了。比如我要建立路網(wǎng),在路網(wǎng)兩邊生成隨機(jī)的建筑物,你可能需要擺放每一條車道線、每一個(gè)建筑物。如果單從渲染的效果來講,Carla的效果和特斯拉的差不多,但其實(shí)是有著天差地別的。因?yàn)樘厮估姆抡鎴?chǎng)景有自己的真實(shí)數(shù)據(jù)鏈來支撐,仿真場(chǎng)景的置信度比Carla要高很多。
三、現(xiàn)狀和展望
在自動(dòng)駕駛感知算法中,前些年做的都是2D的算法,仿真對(duì)于這些支持其實(shí)也是很好的。仿真天然可以知道各種各樣的真值,對(duì)于算法來講,你可以把真值提供給仿真,也可以用自己的真值來驗(yàn)證仿真的效果等等。近年來,隨著深度學(xué)習(xí)Transformer的引入,大家逐漸從2D發(fā)展到3D、鳥瞰的BEV視角等等。在這些空間中提取特征,相應(yīng)的對(duì)于仿真的要求也會(huì)更多。比如,要有3D的包圍框、BEV的特征提取、三維占位的提取等等。因此,算法不斷的演進(jìn),仿真的系統(tǒng)也需要不斷的演進(jìn)。另外,仿真也會(huì)提供多個(gè)視角、各個(gè)傳感器,各個(gè)方向的傳感器的信息。
今天參加2022CIAC大賽的同學(xué)比較多,所以想和大家談一下個(gè)人對(duì)于自動(dòng)駕駛仿真工程師崗位的理解。首先需要區(qū)分仿真開發(fā)工程師和仿真測(cè)試工程師。仿真開發(fā)工程師呢,就是說產(chǎn)品是怎么研制出來的。有的公司可能不用商業(yè)軟件或已經(jīng)成型的東西,就需要自己做工具鏈,那么可能上面提到的五層你都要了解。仿真測(cè)試工程師呢,就是利用工具達(dá)成一個(gè)測(cè)試的目標(biāo),你要會(huì)用這個(gè)仿真軟件的工具界面,可能前三層掌握就夠了。另外,你可能需要根據(jù)給你提供的各種不同的功能做二次開發(fā),做不同的組合達(dá)到自己的測(cè)試的目的??赡苣阋?fù)責(zé)一些資源,比如做地圖、小汽車、行人,讓它們看上去更逼真等等。
但這兩個(gè)崗位的能力需求也有共通的地方。比如說,代碼語言,C++、Python、Java、ROS,你都需要知道一點(diǎn)。車輛動(dòng)力學(xué)你可能也需要知道,知道車是怎么樣行駛的,車輛動(dòng)力學(xué)的精細(xì)程度對(duì)測(cè)試目標(biāo)有什么樣的影響。對(duì)感知算法數(shù)據(jù)集的采集來講,沒那么重要,但如果是控制算法的話,就需要車輛動(dòng)力學(xué)盡量的精準(zhǔn)。若要引入第三方的車輛動(dòng)力學(xué)庫或車輛動(dòng)力學(xué)軟件做聯(lián)合仿真,你就不僅需要知道車輛動(dòng)力學(xué)的知識(shí),還要知道各種中間件之間的通訊怎么連接的,若不兼容的話,還需要從它們各自的API中找到解決方案,把它連接起來,讓它實(shí)時(shí)的跑起來。
然后,你可能還需要知道傳感器的原理。各種傳感器的參數(shù)配置,相機(jī)、激光雷達(dá)、毫米波的信息等等。包括內(nèi)參,即傳感器本身的參數(shù);外參,它們之間的相互位置關(guān)系等等。最后,還需要知道一些地圖的知識(shí)。你要知道自己的車道,要會(huì)從自己的位置出發(fā)查詢一些地圖的信息等等,地圖有Open Drive格式的靜態(tài)地圖,Open Scenario格式的動(dòng)態(tài)地圖,你要會(huì)修改、編輯。
總之,對(duì)于自動(dòng)駕駛仿真工程師來講,對(duì)于算法的了解可能不需要那么精通,但可能從算法、車輛、傳感器到地圖都需要知道一點(diǎn),這樣我們才能很好的了解需求,實(shí)現(xiàn)各種功能。
最后再介紹一下我的公司——復(fù)睿微電子。復(fù)睿微電子是復(fù)星主要出資成立的一個(gè)自動(dòng)駕駛芯片公司,產(chǎn)品主要包括兩大方面,一個(gè)是高性能的座艙處理器,還有就是通用的ADAS和ADAS處理器。我們今年已經(jīng)組建了兩三百人的團(tuán)隊(duì),規(guī)模還在逐步擴(kuò)大。有興趣的同學(xué)可以來聯(lián)系我,求職或其他探討都?xì)g迎。