由蓋世汽車、AUTOSAR組織、上海車展三方聯(lián)合主辦的SDVF2021第二屆軟件定義汽車高峰論壇暨AUTOSAR2021中國日于4月19-21日在上海舉辦,本次活動也是2021上海車展的同期活動之一,同時(shí)也是AUTOSAR組織在中國區(qū)唯一官方活動。本次會議邀請到了北京未動科技有限公司研發(fā)VP 肖猛先生在本次論壇進(jìn)行了題為《高安全高性能的自動駕駛中間件》的主題演講,以下是他在本次演講的主要內(nèi)容:
未動科技于2014年成立,我們早期是以自動駕駛視覺感知算法賦能自動駕駛行業(yè)。當(dāng)前來講,我們的感知算法已經(jīng)在很多OEM有落地。我們最近一年開始切入到高算力平臺自動駕駛域控制器基礎(chǔ)軟件以及應(yīng)用軟件相關(guān)的開發(fā),我們也希望能夠?yàn)镺EM提供相關(guān)的產(chǎn)品和服務(wù)。
我們會在高算力域控制器上實(shí)現(xiàn)高速路的自動領(lǐng)航,駕駛員監(jiān)控,自動泊車,從系統(tǒng)基礎(chǔ)軟件到應(yīng)用解決方案的完整實(shí)現(xiàn)。這次演講主要講兩個(gè)方面,一是從場景出發(fā)提出了自動駕駛域控制器軟件架構(gòu)的鳥瞰圖。因?yàn)檫@樣一個(gè)架構(gòu)會對中間件有非常高的要求,那么我們在性能域會大量使用AP AUTOSAR。AP AUTOSAR大部分是用C++開發(fā),這樣又引出來另外一些問題,我們想對這些問題做一些探討。
這是L1和L2軟件架構(gòu)典型的拓?fù)湫问剑话銇碇vL2產(chǎn)品都是一個(gè)功能一個(gè)功能疊加起來的,每個(gè)控制器做各自的事情。比如說圖上下面這四個(gè)控制器有前向攝像頭,前向毫米波雷達(dá),左右側(cè)角雷達(dá)控制器,各有各的感知算法處理能力和計(jì)算能力。上面是泊車和駕駛員監(jiān)控,這兩個(gè)系統(tǒng)架構(gòu)比較接近一些,因?yàn)槎紩懈咚懔σ徊糠肿鲆曈XAI處理的單元。這個(gè)架構(gòu)對OEM來講是有好處的,可以分別定點(diǎn)給不同企業(yè),但是L3、L4這種疊加的方案會有問題。當(dāng)我們往L3以上走的時(shí)候不可能把這樣的控制器一個(gè)一個(gè)往上堆疊的,一方面是成本問題,另一方面各種算力并沒有充分利用起來。比如說當(dāng)速度降到低速的時(shí)候泊車啟動,但是前向攝像頭算力浪費(fèi)掉了,不同功能設(shè)計(jì)出不同的ECU進(jìn)行堆疊,無論在成本上還是軟硬架構(gòu)上都是不可行的。
這是我們畫的高算力平臺上軟件架構(gòu)的鳥瞰圖,我們從三個(gè)維度來看這個(gè)問題。我們看縱軸的“分工”這個(gè)維度,這個(gè)維度分為兩個(gè)域,一個(gè)是MCU實(shí)時(shí)域,它主要負(fù)責(zé)是實(shí)時(shí)處理。一個(gè)是性能域,這塊運(yùn)行大部分的AI算法和實(shí)時(shí)性要求不高的計(jì)算,一般會做到軟實(shí)時(shí)。
從“層級”維度上來講,L.HW提供軟件運(yùn)行的硬件平臺,包括各種芯片、總線、電源、時(shí)鐘、物理傳感器等等。L.OS是計(jì)算機(jī)科學(xué)與工程意義上的“操作系統(tǒng)”,管理硬件的計(jì)算、存儲、IO等各種資源并提供訪問硬件資源的驅(qū)動程序和API接口,調(diào)度各種工作任務(wù)(Process或 Task) 的執(zhí)行,處理IO中斷等等。這一層不做與“車”相關(guān)的工作,與“車”沒有直接關(guān)系,作為通用的計(jì)算機(jī)操作系統(tǒng),同樣可以用在其他不同的行業(yè)。
L.BSW(這里借用 CP AutoSar 的BSW 概念) 層是為了解決汽車控制器的通用問題,也就是我們一般說的中間件。汽車控制器非常復(fù)雜,為了讓控制器能夠裝入車內(nèi)使用,很大一部分軟件是用于讓控制器滿足汽車的電源管理標(biāo)準(zhǔn),網(wǎng)絡(luò)管理標(biāo)準(zhǔn),診斷標(biāo)準(zhǔn),刷寫規(guī)范。
車載控制器需要比一般工業(yè)嵌入式系統(tǒng)有更高的可靠要求,這樣就需要在計(jì)算機(jī)OS基礎(chǔ)上再附加對存儲、通訊各方面的安全保護(hù)機(jī)制。這些是所有車載控制器都需要實(shí)現(xiàn)的能力。同時(shí)為了讓控制器能夠正常運(yùn)行,還需要提供時(shí)鐘同步,日志跟蹤等服務(wù),另一方面,這一層還需要為上層提供通訊能力,包括但不限于總線數(shù)據(jù)的收發(fā),提供各軟件模塊之間的數(shù)據(jù)交換能力。這一層還會在計(jì)算機(jī)OS層提供的任務(wù)調(diào)度基礎(chǔ)上,提供更具體的任務(wù)包裝器以及更細(xì)粒度的任務(wù)執(zhí)行管理機(jī)制。這一層不做與“自動駕駛”相關(guān)的工作,一樣可以用于開發(fā)其它車載控制器。
基于L.BSW層我們來實(shí)現(xiàn)自動駕駛軟件框架L.FW。L.FW這一層需要理解自動駕駛相關(guān)的語義,了解自動駕駛各類算法的語義概念和執(zhí)行特點(diǎn)。能夠根據(jù)自動駕駛語義分隔出不同的軟件框架模型。
各種軟件框架能將各類算法模塊封裝成不同的軟件組件,各類框架作為各類組件的運(yùn)行載體承載,為各類組件提供數(shù)據(jù)連接機(jī)制和調(diào)度機(jī)制?;A(chǔ)組件是維持框架能夠運(yùn)轉(zhuǎn)的最小集合。自動駕駛軟件框架不做具體的“自動駕駛功能“的實(shí)現(xiàn),不做具體自動駕駛算法的實(shí)現(xiàn),它是“算法”的容器。
在 L.APK 這一層,我們分析具體的自動駕駛場景,分解為框架層定義的不同組件類型,組合或擴(kuò)展現(xiàn)有組件,實(shí)現(xiàn)新的組件裝入到框架中執(zhí)行,形成完整的自動駕駛功能或場景的支持能力。這樣各個(gè)功能組件運(yùn)行在框架層內(nèi),讓L2,L3,L4功能都可以基于統(tǒng)一架構(gòu)來實(shí)現(xiàn)。L.APK層包含了各種算法,有感知算法、控制算法,當(dāng)然感知算法也會進(jìn)行算法的加速。
對于另外一個(gè)維度我們喜歡用切面這個(gè)詞,它的含義是什么呢?在這層里面信息安全也好,功能安全也好,性能統(tǒng)計(jì)也好,其實(shí)D軸,L軸里面都有它。在硬件層面有硬件的安全需求和技術(shù)實(shí)現(xiàn),OS、中間件往上每一層都有自己功能安全處理的方式。
分解為幾個(gè)正交的的三個(gè)維度方便我們更清晰的理解自動駕駛的軟件架構(gòu)。
前面講的是一個(gè)整體視角,我們還可以換一個(gè)局部視角,單純從算法角度來看。我們知道自動駕駛核心是算法,各種各樣的算法,包括感知的算法、融合的算法、控制的算法。這些算法確確實(shí)實(shí)是自動駕駛的核心。但是這些算法是如何被組合起來的?僅僅把算法做得好,不能被正確調(diào)度也是不能夠?qū)崿F(xiàn)完整功能的。
這張圖里面我們從三個(gè)維度來分析算法所需要依賴的環(huán)境。時(shí)間的維度,一個(gè)算法有開始時(shí)間,有結(jié)束時(shí)間;數(shù)據(jù)流維度,任何一個(gè)算法需要有輸入,同時(shí)也提供輸出;還有資源維度,算法在怎么樣一個(gè)物理設(shè)備上運(yùn)行。
這里看到有三個(gè)平面各自對應(yīng)含義。FT平面代表的是算法在一定時(shí)間內(nèi)的數(shù)據(jù)流動。FR平面代表算法數(shù)據(jù)實(shí)際流動的物理或邏輯通道。RT平面代表算法在一定時(shí)間內(nèi)對資源的占用。怎么樣對它進(jìn)行調(diào)度這是我們軟件框架需要解決的問題。
在軟件框架里面,我們把它分成兩大部分。一部分是環(huán)境模型的框架,環(huán)境模型的概念并不新鮮,在L2里面各有各的環(huán)境模型的實(shí)現(xiàn)。當(dāng)然當(dāng)把L3、L4功能堆疊在一起的時(shí)候我們需要一個(gè)統(tǒng)一的環(huán)境模型表達(dá),而且它應(yīng)該是從低級到高級語義逐漸爬升的過程,越往下語義是越接近于傳感器的物理屬性,越往上的語義越跟規(guī)劃更接近,它給出來的實(shí)質(zhì)有交通行駛含義的語義信息,而這些語義信息是被L3以上各種功能按需取用的。
框架里面另外一個(gè)是泛化的規(guī)劃與執(zhí)行。我們經(jīng)常會說到全局規(guī)劃、路徑規(guī)劃、行為預(yù)測等各種各樣的名詞,抽象來講,任何一個(gè)層級的自動駕駛語義都可以抽象為幾個(gè)簡單的因素。
一個(gè)是對環(huán)境的需求(E),一個(gè)規(guī)劃或計(jì)劃(Plan),它是抽象的規(guī)劃概念,規(guī)劃的輸出被某個(gè)執(zhí)行機(jī)制執(zhí)行(X)。舉個(gè)例子來說,在上圖中間部分是抽象語義,它有環(huán)境的需求,規(guī)劃、執(zhí)行。問題空間A是“駕車從北京到廣州”,這個(gè)問題空間里,傳統(tǒng)意義上講的局部規(guī)劃,在這里沒有意義,因?yàn)閱栴}空間的層次不一樣。這個(gè)時(shí)候?qū)τ诃h(huán)境來講,我們感興趣的東西不是在GPS某一個(gè)點(diǎn),而是在北京哪一個(gè)區(qū)。在規(guī)劃來講,我們考慮的事情是先進(jìn)哪個(gè)高速,再走多少公里,從哪出去,在這個(gè)層級上進(jìn)行規(guī)劃。但對于底下問題空間B,駕車通過某一個(gè)路口的時(shí)候,這個(gè)時(shí)候?qū)Νh(huán)境的要求就更細(xì)了,要感知車道線信息、紅綠燈信息、周邊車輛信息,規(guī)劃也做得更細(xì)致,一直到減速,起步,怎么通過路口,這個(gè)執(zhí)行機(jī)制來講實(shí)時(shí)性要求更高。EPX的逐層分解實(shí)際上體現(xiàn)了數(shù)學(xué)上的分形機(jī)制,就是說每一層環(huán)境感知規(guī)劃交給這一層的執(zhí)行機(jī)制去執(zhí)行,這個(gè)執(zhí)行機(jī)制內(nèi)部又有更小一個(gè)粒度的EPX體系。
所有的L.FW層的開發(fā)都需要基于一個(gè)堅(jiān)實(shí)的中間件作為基礎(chǔ)。MCU開發(fā)中 CP AUTOSAR已經(jīng)非常成熟了,現(xiàn)在要實(shí)現(xiàn)更靈活的機(jī)制需要在性能域這塊用SOA相關(guān)模型來做,AP AUTOSAR是很好的解決方案。
但是AP AUTOSAR把C++用在駕駛領(lǐng)域我們是存在敬畏之心的。實(shí)際上C++14雖然在這方面做了很多工作,但是還是會發(fā)現(xiàn),你沒有辦法保證你的程序員,你的團(tuán)隊(duì)能夠?qū)懗稣嬲浅:玫腃++代碼。這是微軟和谷歌的兩個(gè)數(shù)據(jù),他們代碼庫中所有嚴(yán)重安全的漏洞70%是跟內(nèi)存管理有關(guān)。汽車軟件開發(fā)就會用很多工具分析這個(gè)代碼,包括AP AUTOSAR標(biāo)準(zhǔn)里面有專門一章C++編程指南,列出一大堆規(guī)則,要求你不要這樣,不要那樣,這些事情你檢查的越多,會讓深層次的錯(cuò)誤隱藏的更深。
還有一個(gè)非常現(xiàn)實(shí)的問題,這些程序員我從哪里來?熟練的C++14的程序員從哪里來?最近一年大家都在全國搶人,因?yàn)槿瞬啪瓦@些,新一批還沒有培養(yǎng)出來。當(dāng)我們用AP的時(shí)候會發(fā)現(xiàn)一個(gè)很有意思的問題,大部分汽車軟件的程序員從哪來呢?都是學(xué)機(jī)械的、控制的、電子的,很少有學(xué)計(jì)算機(jī)專業(yè)的。原因很簡單,因?yàn)閷W(xué)計(jì)算機(jī)專業(yè)的人都去互聯(lián)網(wǎng)了。十年前這些人不會去做汽車軟件的,因?yàn)槟莻€(gè)時(shí)候汽車都是MCU,用C就行了。但是當(dāng)你用AP AUTOSAR的時(shí)候需要大量C++程序員,這些C程序員往C++轉(zhuǎn)是可以,但是想很快很熟練,寫出沒有錯(cuò)誤的代碼太難了。
我的想法是什么樣的?我最近一年大力推廣在汽車軟件里面使用Rust語言。Rust最近一年知名度非常地高。我知道華為里面有一個(gè)非常強(qiáng)大的Rust團(tuán)隊(duì),做了很多事情,只是他們不吱聲。
這里有一張圖標(biāo)注Rust在兩個(gè)軸上的位置,下面是安全軸,這個(gè)安全不是指功能安全和信息安全,但是跟它們都有關(guān),更多是講語言本身的安全,程序本身的安全??v軸是性能軸,C++和C的是性能方面最高的,沒有任何額外的開銷,像Java是虛擬機(jī)語言,有虛擬機(jī)開銷。虛擬機(jī)語言沒辦法用在汽車上的,因?yàn)槎紩媾R垃圾回收的問題,也就是在某一個(gè)時(shí)間點(diǎn),整個(gè)程序世界凍結(jié)掉,凍結(jié)掉之后才能把內(nèi)存回收回來。各種語言始終面臨需要安全和性能之間達(dá)到平衡,那用C和C++能夠充分發(fā)揮硬件所有的性能,但是就要承擔(dān)內(nèi)存不安全,可能帶來這樣那樣的問題。
Rust所處的這個(gè)位置非常好,性能是最高的,安全性又是最好的。Rust提供了一整套的機(jī)制在編譯器層級防止你出現(xiàn)內(nèi)存安全錯(cuò)誤。我為這個(gè)寫過一篇文章《圖界Rust所有權(quán)與生命周期》,這里有一個(gè)非常詳盡的描述,這篇文章發(fā)布在Rust中文社區(qū)雜志里面,連續(xù)三個(gè)月都是閱讀量排名第一,里面有非常詳盡的圖描述各個(gè)方面的情況。
把這樣一門新語言引入到汽車?yán)锩?,其?shí)對于很多人來講是非常激進(jìn)的,但是我并不是沒有做過這樣的事情,而是已經(jīng)成功實(shí)施過這樣一些方式。這是一個(gè)全自動泊車項(xiàng)目里面使用Rust做的輕量級中間件。橙黃色部分是用Rust寫的,整個(gè)產(chǎn)品軟件出了很多bug不停地修改,唯獨(dú)這個(gè)模塊穩(wěn)如磐石,發(fā)布后從來沒有出現(xiàn)過嚴(yán)重的錯(cuò)誤。
下一步我更希望讓AP AUTOSAR和Rust有一個(gè)很好的結(jié)合,我們可以給AP AUTOSAR C++接口包一層Rust接口,上層用Rust開發(fā)提供相應(yīng)的工具。剛才說C++程序員從哪里來?這里也同樣遇到Rust程序員從哪里來?其實(shí)現(xiàn)在已經(jīng)有很多 C++ 程序員、java 程序員、Go 程序員往 Rust 轉(zhuǎn)移。Rust 的特性讓 Java 、Go程序員轉(zhuǎn)移比較容易。相反,他們轉(zhuǎn)向 C++ 卻很難。
汽車軟件領(lǐng)域未來十年需要大量汽車軟件人才,我們不能夠指望大家都在現(xiàn)有存量人才里面去搶。前天晚宴的時(shí)有一個(gè)人講,很多人在創(chuàng)新港附近,兩三年時(shí)間一年換一個(gè)工作,做得事情沒有變,工資翻了好幾倍,這是目前一個(gè)現(xiàn)實(shí)情況。我們需要有更好的工具,更好的語言,能讓更多的人投入到汽車軟件上面來。所以必須擴(kuò)大汽車軟件人才的來源。在這個(gè)方案體系上來講,希望這些層學(xué)員寫的程序,通過編譯器編譯的時(shí)候就讓程序具備了基礎(chǔ)的程序安全特性。
目前,未動科技正致力于包括中間件在內(nèi)的基礎(chǔ)系統(tǒng)軟件和自動駕駛應(yīng)用軟件的開發(fā),支持L3、L4自動駕駛的落地。
下面是未動科技在本次大會中的精彩瞬間: