為自動(dòng)駕駛保駕護(hù)航—談?wù)勚髁髦虚g件設(shè)計(jì)
隨著國(guó)內(nèi)外新勢(shì)力車(chē)廠(chǎng)的快速崛起,汽車(chē)智能化水平不斷提升。整車(chē)中央計(jì)算平臺(tái),自動(dòng)駕駛域控制器持續(xù)走熱。
談起自動(dòng)駕駛,可能更多的人想到的是AI技術(shù)、如Mobileye視覺(jué)感知、地圖、各類(lèi)規(guī)劃算法、控制、大數(shù)據(jù)。目前越來(lái)越多的主機(jī)廠(chǎng)聚焦于數(shù)據(jù)如何更高效和準(zhǔn)確的通信,隨著自動(dòng)駕駛等級(jí)從L2向L2++甚至L3/L4過(guò)渡,對(duì)于數(shù)據(jù)傳輸要求越來(lái)越高。中間件開(kāi)發(fā)和應(yīng)用一下子被推到了風(fēng)口浪尖。 談到中間件,我們不得不先講一下操作系統(tǒng)OS。
操作系統(tǒng)有廣義和狹義之分。
狹義的操作系統(tǒng)大家都比較熟悉,手機(jī)設(shè)備上的ios、Android、車(chē)載系統(tǒng)中Linux、QNX都是狹義的操作系統(tǒng),通常包括內(nèi)核、文件系統(tǒng)、驅(qū)動(dòng)以及部分協(xié)議棧整合在內(nèi)核中。
廣義的操作系統(tǒng)一般包含操作系統(tǒng)內(nèi)核、硬件驅(qū)動(dòng)層和中間件。在各家新能源車(chē)廠(chǎng)高談軟件定義汽車(chē)時(shí)代已到來(lái)時(shí),真正能全面掌握芯片、操作系統(tǒng)、中間件、算法以及常用常新的應(yīng)用才能走在技術(shù)最前沿。其中廣義操作系統(tǒng)是核心中的核心,已成為國(guó)內(nèi)外主機(jī)廠(chǎng)自主研發(fā)比拼的方向。 
圖1廣義和狹義OS框圖
回頭再來(lái)談?wù)勚虚g件。中間件是什么,按字面意思翻譯過(guò)來(lái)就是中間一層組件。實(shí)際是介于操作系統(tǒng)/底層軟件和應(yīng)用軟件之間的橋梁。整個(gè)系統(tǒng)軟件可以通過(guò)中間件在不同的處理器架構(gòu)和芯片間共享數(shù)據(jù)。
一套成熟的中間件給開(kāi)發(fā)帶來(lái)的收益往往是指數(shù)級(jí)別的進(jìn)步,大大縮短開(kāi)發(fā)周期和系統(tǒng)穩(wěn)定度、屏蔽底層硬件差異性做到統(tǒng)一的API接口。

圖2自動(dòng)駕駛中間件應(yīng)用
那么自動(dòng)駕駛需要怎樣的中間件?低時(shí)延、高帶寬和多并發(fā)。
從整車(chē)功能域角度出發(fā),自動(dòng)駕駛是收集外部傳感器數(shù)據(jù)量最大的模塊,為了持續(xù)探測(cè)到車(chē)身四周各種復(fù)雜環(huán)境信息,需要毫米波、攝像頭和激光雷達(dá)配合以達(dá)到360度無(wú)死角感知。并且為了保證安全,所有數(shù)據(jù)都需要接近實(shí)時(shí)的速度處理,為了保證大量數(shù)據(jù)的實(shí)時(shí)處理,較低的數(shù)據(jù)延遲需要由高性能的計(jì)算單元和高帶寬的網(wǎng)絡(luò)通信,數(shù)據(jù)可輕易在不同內(nèi)核中共享。

圖3 自動(dòng)駕駛360度傳感器感知示意圖
傳感器類(lèi)型 | 典型帶寬需求 |
3D毫米波 | 2M/s |
4D毫米波 | 100M/s |
8M攝像頭 | 2G/s - 3G/s |
100線(xiàn)激光雷達(dá) | 1G/s |
表1 傳感器典型帶寬
從上表中可以知道隨著自駕功能不斷升級(jí),對(duì)于傳感器的傳輸數(shù)據(jù)帶寬和傳輸延遲要求也在不斷提升。為了滿(mǎn)足此需求,業(yè)界各家自駕公司也在開(kāi)發(fā)自己的自動(dòng)駕駛中間件以滿(mǎn)足要求。
ICEORYX:
博世在量產(chǎn)ADAS領(lǐng)域裝配率長(zhǎng)期占據(jù)市場(chǎng)前三的份額,他們對(duì)于如何將自動(dòng)駕駛數(shù)據(jù)高效流轉(zhuǎn)的需求更為迫切,為此在大神Michael P?hnl帶領(lǐng)下,專(zhuān)門(mén)為自動(dòng)駕駛開(kāi)發(fā)了一套中文名叫“冰羚”,英文名ICEORYX的中間件。
如上面所說(shuō),大量自動(dòng)駕駛相關(guān)的感知數(shù)據(jù)需要在整個(gè)系統(tǒng)內(nèi)完成快速的流轉(zhuǎn),這里就不得不提一下進(jìn)程間通信(Inter ProcessCommunication)這個(gè)概念。拿大家最常用的Linux系統(tǒng)舉例,不同進(jìn)程之間傳播或交換信息,由于不同進(jìn)程地址空間相互獨(dú)立,傳遞數(shù)據(jù)時(shí)不停的來(lái)回拷貝數(shù)據(jù),建立和釋放堆棧,這個(gè)不生成任何價(jià)值的拷貝的過(guò)程浪費(fèi)和占有了大量系統(tǒng)資源并產(chǎn)生了不期望的延遲。

圖4 進(jìn)程間通信
ICEORYX為了解決上面的問(wèn)題,設(shè)計(jì)了一種“零拷貝”的內(nèi)存共享技術(shù)來(lái)優(yōu)化之前ADAS量產(chǎn)項(xiàng)目中遇到的困擾。
這種“零拷貝”通過(guò)事前定義好的通用接口,將需要消費(fèi)的數(shù)據(jù)(圖片原始RGB或者激光點(diǎn)云數(shù)據(jù))放入由ICEORYX申請(qǐng)好的內(nèi)存空間,然后引入“記數(shù)器”這個(gè)概念,來(lái)記錄內(nèi)存空間中各塊數(shù)據(jù)是否被調(diào)用還是釋放,當(dāng)計(jì)數(shù)器為0時(shí),就表示該塊數(shù)據(jù)可以被釋放。這樣所有的數(shù)據(jù)調(diào)用都發(fā)生在共用的內(nèi)存區(qū)域中,免去了各進(jìn)程將數(shù)據(jù)拷貝到自己私有存儲(chǔ)內(nèi),大大提高了數(shù)據(jù)通信的效率。
下面套用一張博世官方介紹材料中的圖,基于共享內(nèi)存的拷貝其實(shí)并不是一種創(chuàng)新的通信機(jī)制,但I(xiàn)CEORYX采用了發(fā)布/訂閱架構(gòu)、服務(wù)發(fā)現(xiàn)、和計(jì)數(shù)器相結(jié)合的機(jī)制。通過(guò)添加避免復(fù)制的應(yīng)用程序編程接口,實(shí)現(xiàn)了所說(shuō)的真正的零拷貝——一種從發(fā)布者到訂閱者的端到端的方法,而無(wú)需創(chuàng)建一個(gè)拷貝。

圖5 零拷貝通信(引用1)
發(fā)布者將數(shù)據(jù)寫(xiě)入事前申請(qǐng)好的內(nèi)存塊中,訂閱者可以收到這些內(nèi)存塊的實(shí)時(shí)狀態(tài),并且知道哪些內(nèi)存塊正在處理中,哪些內(nèi)存塊將被釋放。發(fā)布者可以在訂閱者讀取數(shù)據(jù)塊的時(shí)候同時(shí)再次寫(xiě)入而不收到任何時(shí)間干擾和延遲,因?yàn)榧词怪暗膬?nèi)存塊在被讀取中,發(fā)布者也可以選擇之前已經(jīng)分配好的新的內(nèi)存塊中操作。
ICEORYX是開(kāi)源的,遵從Apache-2.0許可證。任何個(gè)人或者團(tuán)隊(duì)都可以免費(fèi)使用源代碼,但如果需要過(guò)ASIL-B或ASIL-D等級(jí)功能安全認(rèn)證,那還需要從博世購(gòu)買(mǎi)相關(guān)的安全服務(wù)。
目前對(duì)于ICEORYX這套中間件來(lái)說(shuō)最大的挑戰(zhàn)還是需要有主機(jī)廠(chǎng)快速搭載量產(chǎn)車(chē)上市,來(lái)真正檢驗(yàn)其價(jià)值。另外由于自動(dòng)駕駛感知信息種類(lèi)越來(lái)越多,激光點(diǎn)云數(shù)據(jù)、攝像頭RGGB幀、3D毫米波雷達(dá)目標(biāo)信息以及4D毫米波雷達(dá)點(diǎn)云信息,整車(chē)信號(hào)數(shù)據(jù)等,如何高效申請(qǐng)和分配內(nèi)存塊也是實(shí)現(xiàn)真正“零拷貝”的前提,這少不了在實(shí)際項(xiàng)目中不斷打磨優(yōu)化。
ROS2:
接下來(lái)我們?cè)賮?lái)看一下大名鼎鼎的ROS2。
說(shuō)到ROS2不得不先聊一下ROS(Robot Operating System), ROS2正是從ROS發(fā)展升級(jí)過(guò)來(lái)的。ROS最早開(kāi)發(fā)出來(lái)是去適配機(jī)器人的一套開(kāi)源軟件系統(tǒng),里面包含3000多個(gè)基礎(chǔ)庫(kù)、靈活的進(jìn)程間通信機(jī)制、底層驅(qū)動(dòng)、硬件抽象等。
如前文所述,自動(dòng)駕駛是非常復(fù)雜并對(duì)安全性要求很高,它包含了車(chē)道線(xiàn)檢測(cè)、目標(biāo)物檢測(cè)、障礙物檢測(cè)、決策、控制模塊等;需要將這些功能各異的模塊集成到一起,形成一個(gè)端到端系統(tǒng)。所以要找到一個(gè)適合的中間件框架很不容易,ROS在學(xué)術(shù)界和機(jī)器人屆廣泛使用、消息機(jī)制靈活開(kāi)發(fā)以及豐富調(diào)試工具恰恰符合自動(dòng)駕駛開(kāi)發(fā)的需求。我們看到國(guó)內(nèi)自動(dòng)駕駛黃埔軍校百度在早期A(yíng)pollo1.0/2.0版本中正是選用了ROS框架。
但是在實(shí)際開(kāi)發(fā)應(yīng)用中,開(kāi)發(fā)人員發(fā)現(xiàn)了ROS適配自動(dòng)駕駛的不足之處。比如ROS通信延遲太大,數(shù)據(jù)從發(fā)布節(jié)點(diǎn)到訂閱節(jié)點(diǎn)之間需要進(jìn)行拷貝,在機(jī)器人設(shè)計(jì)中可能還不是一個(gè)Block點(diǎn),但在自動(dòng)駕駛系統(tǒng)中很顯然會(huì)大大影響數(shù)據(jù)的傳輸效率。另外ROS的單Master節(jié)點(diǎn)機(jī)制也是一個(gè)瓶頸,所有的子節(jié)點(diǎn)通信都需要借助單一的通信主節(jié)點(diǎn)。萬(wàn)一主節(jié)點(diǎn)出現(xiàn)故障,整個(gè)系統(tǒng)也會(huì)受到影響。為了解決ROS的明顯缺陷,百度Apollo在3.5版本后發(fā)布了自研的Cyber RT框架來(lái)取代ROS。

圖6 以Master為中心的ROS交互機(jī)制
ROS社區(qū)和組織也意識(shí)到了不足之處,并于2016年底正式發(fā)布了ROS2 beta版,新一代的ROS之中,帶來(lái)了整體架構(gòu)的革新以解決前一代的不足。
ROS底層基于DDS(Data Distribution Service)通信機(jī)制,取消了ROS上Master模式。DDS遵從發(fā)布和訂閱模式,創(chuàng)建全局的數(shù)據(jù)塊。然后每一個(gè)數(shù)據(jù)的發(fā)布或者訂閱者都是數(shù)據(jù)的參與者,可以讀寫(xiě)全局的數(shù)據(jù)。同時(shí)也保留了ROS中Topic數(shù)據(jù)結(jié)構(gòu)概念。

圖7 基于Topic話(huà)題的發(fā)布/訂閱流程
另外DDS一個(gè)重要特質(zhì)是支持QoS(Quality ofService),滿(mǎn)足在不同場(chǎng)景對(duì)于不同數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求。每個(gè)數(shù)據(jù)傳輸都可以通過(guò)QoS策略選擇不同的選項(xiàng)進(jìn)行配置,ROS2中支持傳輸期限、可靠性傳輸、歷史信息等策略。
圖8 支持QoS策略的DDS機(jī)制
當(dāng)然目前ROS2整體穩(wěn)定度和應(yīng)用案例還遠(yuǎn)不如ROS,但擁有了以上特性的ROS2系統(tǒng),我們拭目以待。
極氪軟件和電子中心,秉承平等、多元、共成長(zhǎng)的價(jià)值觀(guān),對(duì)產(chǎn)品持續(xù)極致追求,為用戶(hù)提供用心體驗(yàn)。從中央計(jì)算、智能區(qū)域控制器、整車(chē)OTA、智能車(chē)身控制、整車(chē)軟件等領(lǐng)域出發(fā),打造行業(yè)頂級(jí)的電子電氣架構(gòu),為智能電動(dòng)車(chē)保駕護(hù)航。
目前我們一直在開(kāi)發(fā)中央計(jì)算和區(qū)控制器內(nèi)高效IPC通信并應(yīng)用在量產(chǎn)項(xiàng)目中,除了會(huì)包含上面提到的共享內(nèi)存和DDS技術(shù)外,還會(huì)用到SOME/IP協(xié)議來(lái)加強(qiáng)不同服務(wù)數(shù)據(jù)之間的傳輸效率。

圖9 極氪中間件框圖
另外ZEEKR OS也正在熱火朝天的開(kāi)發(fā)測(cè)試中,作為中央計(jì)算SoC核心中間件,將管理整車(chē)服務(wù)(支持自動(dòng)駕駛、車(chē)身電子控制、底盤(pán)、三電和智能座艙等功能持續(xù)迭代)、提供基礎(chǔ)平臺(tái)、高度分層解耦、分布式管理。 搭載ZEEKR OS的下一代3.0中央計(jì)算平臺(tái)將采用全棧自研,專(zhuān)注打造一套高效穩(wěn)定的整車(chē)軟件中間件,為自動(dòng)駕駛、SOA和整車(chē)OTA服務(wù)提供核心競(jìng)爭(zhēng)力并持續(xù)賦能。






















