技術(shù)文章
隨著自動(dòng)駕駛技術(shù)的飛速發(fā)展,仿真測(cè)試已成為替代成本高昂且充滿風(fēng)險(xiǎn)的道路測(cè)試的關(guān)鍵環(huán)節(jié)。它能夠在虛擬環(huán)境中模擬各種復(fù)雜的交通場(chǎng)景和少數(shù)天氣,極大地加速了自動(dòng)駕駛系統(tǒng)的開發(fā)與驗(yàn)證進(jìn)程。然而,一個(gè)常被忽視的問題正悄然侵蝕著仿真測(cè)試的可信度——非確定性,即仿真測(cè)試過(guò)程中因核心引擎或其他因素導(dǎo)致的隨機(jī)性。
圖1 aiSim多傳感器融合示例
目前,許多市面上的仿真軟件,尤其是基于游戲引擎開發(fā)的平臺(tái),其核心設(shè)計(jì)目標(biāo)之一是高效地為玩家提供充滿驚喜和變化的娛樂體驗(yàn)。這種內(nèi)在的隨機(jī)性,在游戲世界里是優(yōu)點(diǎn),但在嚴(yán)謹(jǐn)?shù)钠嚋y(cè)試領(lǐng)域,卻是一個(gè)致命的缺陷。
想象一下在仿真測(cè)試過(guò)程中,工程師精心設(shè)置了所有參數(shù)——車輛速度、行人軌跡、天氣狀況、傳感器配置——期望能穩(wěn)定復(fù)現(xiàn)一個(gè)特定的危險(xiǎn)場(chǎng)景。然而,每次點(diǎn)擊“開始",結(jié)果卻不盡相同:第一次,車輛避讓;第二次,發(fā)生了輕微碰撞;第三次,又安然無(wú)恙。這或許并非是算法時(shí)好時(shí)壞,而是仿真環(huán)境本身在“搖擺不定"。
Greg等人研究指出,基于游戲引擎的仿真環(huán)境,其隨機(jī)性并非偶然,而是源于其底層架構(gòu)的諸多方面:
(1)資源負(fù)載與調(diào)度:系統(tǒng)CPU/GPU的負(fù)載波動(dòng),會(huì)直接影響物理引擎的計(jì)算時(shí)機(jī)和順序,導(dǎo)致即使輸入相同,輸出的軌跡也會(huì)產(chǎn)生高達(dá)數(shù)十厘米的偏差。
(2)物理引擎的“模糊"處理:為了實(shí)時(shí)渲染流暢的畫面,游戲引擎在處理物體碰撞等復(fù)雜物理交互時(shí),往往采用近似計(jì)算。這種不精確性在一次碰撞后會(huì)被急劇放大,甚至影響到場(chǎng)景中其他未參與碰撞的物體,造成全局性的結(jié)果污染。
(3)多線程與并行計(jì)算:為了效率,引擎會(huì)將任務(wù)分配給多個(gè)線程并行處理,但線程完成的順序并非每次都固定,這種執(zhí)行順序的微小變化,會(huì)像蝴蝶效應(yīng)一樣,最終導(dǎo)致仿真結(jié)果的巨大差異。
這種隨機(jī)性帶來(lái)的問題是災(zāi)難性的:
(1)問題無(wú)法追溯:當(dāng)測(cè)試中出現(xiàn)問題,工程師無(wú)法穩(wěn)定復(fù)現(xiàn)它,也就無(wú)從定位和修復(fù)缺陷,極大地增加了調(diào)試成本和時(shí)間。
(2)結(jié)果失去可信度:如果仿真結(jié)果不穩(wěn)定,如何相信它所提供的安全驗(yàn)證報(bào)告?這會(huì)給自動(dòng)駕駛系統(tǒng)的安全性帶來(lái)“偽證",造成虛假的安全感。
(3)測(cè)試覆蓋率失效:隨機(jī)性使得精確控制測(cè)試用例、確保覆蓋所有關(guān)鍵場(chǎng)景變得不可能。
歸根結(jié)底,對(duì)于自動(dòng)駕駛這種安全至上的系統(tǒng),測(cè)試必須是科學(xué)、嚴(yán)謹(jǐn)且可重復(fù)的。因此,一個(gè)具備高度確定性、一致性的仿真平臺(tái),是所有有效測(cè)試的絕對(duì)前提。
為了驗(yàn)證一個(gè)仿真平臺(tái)的確定性,最直接的方式便是確保各項(xiàng)參數(shù)不變的情況下進(jìn)行重復(fù)仿真,對(duì)輸出的仿真數(shù)據(jù)進(jìn)行最直接的比較,判斷是否存在差異。
例如,第一個(gè)獲得ISO 26262 ASIL-D認(rèn)證的AD/ADAS仿真測(cè)試軟件aiSim,它構(gòu)建了有特色的仿真內(nèi)核,摒棄了游戲引擎中那些為“體驗(yàn)"而犧牲“精確"的設(shè)計(jì)。為了驗(yàn)證aiSim的確定性,我們進(jìn)行了一系列重復(fù)性實(shí)驗(yàn)。
圖2 aiSim傳感器配置GUI
通過(guò)在GUI中拖放仿真?zhèn)鞲衅?/strong>,我們?cè)诜抡孳囕v中添加了1個(gè)帶有目標(biāo)檢測(cè)功能的1920×1080的前置針孔Camera、1個(gè)帶有目標(biāo)檢測(cè)功能的前置Radar、1個(gè)帶有目標(biāo)檢測(cè)功能的128線頂置LiDAR、1個(gè)內(nèi)置IMU、1個(gè)內(nèi)置GPS以及1個(gè)可以反饋?zhàn)攒嚑顟B(tài)的Vehicle sensor。
圖3 仿真?zhèn)鞲衅鲾?shù)據(jù)示例
圖4 仿真場(chǎng)景示例
aiSim本身包含了數(shù)十種城市、郊區(qū)的室內(nèi)、室外場(chǎng)景。本文以真實(shí)世界常見的“行泊一體"為例,在一個(gè)包含14輛他車的室外停車場(chǎng)環(huán)境(Parking_US-CA_SanJoseAlamitos)中,對(duì)主車執(zhí)行了“跟車 -> 切入變道 -> 尋找車位 -> 泊車"的全套連貫動(dòng)作。
我們?cè)?strong style="font-weight: bold !important;">固定的軟硬件環(huán)境下,針對(duì)三種典型天氣進(jìn)行了5輪獨(dú)立的重復(fù)測(cè)試,每一輪測(cè)試都記錄了長(zhǎng)達(dá)1000幀的數(shù)據(jù),以確保完整與統(tǒng)一。我們將每一輪測(cè)試的數(shù)據(jù)與第一次測(cè)試的基準(zhǔn)數(shù)據(jù)進(jìn)行精確比對(duì):
晴天 (Sunny):在Sunny.json配置下,模擬了日光充足的理想泊車環(huán)境。
雨天 (Rainy):切換至Rainy.json配置,引入了雨水對(duì)傳感器性能的干擾。
復(fù)雜雪天 (Snowy & Broken Road):在Snowy.json的預(yù)設(shè)配置基礎(chǔ)之上,加入了道路老化、標(biāo)線磨損、路面破損、坑洼等退化元素,將測(cè)試環(huán)境推向了極限。
測(cè)試過(guò)程中,我們記錄了全部傳感器和車輛狀態(tài)數(shù)據(jù),包括:
視覺數(shù)據(jù) (Camera):RGBA原始圖像、語(yǔ)義分割圖、目標(biāo)檢測(cè)圖及JSON格式的2D/3D標(biāo)注框。
雷達(dá)數(shù)據(jù) (Radar & LiDAR):毫米波雷達(dá)和激光雷達(dá)的點(diǎn)云(LAS v1.4)、目標(biāo)列表及3D標(biāo)注框。
車輛自身狀態(tài) (GPS, IMU, Vehicle):高精度的定位、姿態(tài)、加速度及車輛動(dòng)力學(xué)信息。
圖5 仿真相機(jī)輸出圖像類型
我們采用均方根誤差(RMSE)來(lái)量化圖像、點(diǎn)云等原始數(shù)據(jù)的細(xì)微差異,并對(duì)JSON格式的結(jié)構(gòu)化數(shù)據(jù)采用根據(jù)樣本數(shù)值差異個(gè)數(shù)進(jìn)行判定的統(tǒng)計(jì)確定性檢驗(yàn)。
Camera Sensor的RGBA原始圖像、分割圖像、目標(biāo)檢測(cè)圖像均以tga格式輸出,2D Bounding Box、3D Bounding Box均已json格式輸出。通過(guò)比較同一環(huán)境、場(chǎng)景下相同幀之間的誤差或差異項(xiàng),驗(yàn)證Camera的確定性。
對(duì)于tga格式文件,計(jì)算所有1000幀圖像所有通道的像素均方根誤差(MSE,Mean Squared Error)。在3類天氣5次測(cè)試過(guò)程中,RGBA原始圖像、分割圖像、目標(biāo)檢測(cè)圖像的所有通道的像素均方根誤差均為0;
圖6 基于python腳本可視化的彩色圖像、分割圖像、目標(biāo)檢測(cè)圖像均方根誤差結(jié)果
對(duì)于json格式文件,比較2D與3D Bounding Box的所有Group的key與value,記錄差異項(xiàng)個(gè)數(shù)(Number of Differences)。在3類天氣5次測(cè)試過(guò)程中,Bounding Box信息(包括位置、姿態(tài)、個(gè)數(shù)、類型、id、相對(duì)速度、持續(xù)時(shí)間、像素遮擋率等)不存在差異項(xiàng)。
圖7 基于python腳本可視化的2D&3D BoundingBox差異項(xiàng)個(gè)數(shù)結(jié)果
Radar Sensor輸出json格式的檢測(cè)目標(biāo)相關(guān)信息,包括距離、旋轉(zhuǎn)、相對(duì)速度、id、類型等,因此與相機(jī)的Bounding Box一樣,記錄差異項(xiàng)個(gè)數(shù)(Number of Differences),結(jié)果也是一樣,不存在差異項(xiàng)。
圖8 基于python腳本可視化的Radar檢測(cè)差異項(xiàng)個(gè)數(shù)結(jié)果
LiDAR Sensor生成的輸出包括兩種格式的數(shù)據(jù):LAS格式的3D激光點(diǎn)云和JSON格式的目標(biāo)檢測(cè)數(shù)據(jù)。激光點(diǎn)云數(shù)據(jù)包含每個(gè)點(diǎn)的坐標(biāo)、強(qiáng)度、返回次數(shù)、標(biāo)識(shí)符(ID)等,我們比較內(nèi)部的所有屬性,記錄差異項(xiàng)個(gè)數(shù)(Number of Differences);
對(duì)于以JSON格式輸出的目標(biāo)檢測(cè)數(shù)據(jù),與Camera類似,我們將比較所有Group的鍵(key)與值(value),并記錄差異項(xiàng)個(gè)數(shù)(Number of Differences)。最終結(jié)果與前面相同,在3類天氣5次測(cè)試之間均不存在差異項(xiàng)。
需要指出的是,由于las文件和檢測(cè)到的目標(biāo)內(nèi)部包含的GPS時(shí)間屬性在aiSim中取自系統(tǒng)時(shí)間(UTC時(shí)間),該項(xiàng)不納入差異比較范圍。
圖9 基于python腳本可視化的LiDAR檢測(cè)差異項(xiàng)個(gè)數(shù)結(jié)果
GPS Sensor、IMU Sensor以及用于觀測(cè)仿真自車狀態(tài)的Vehicle Sensor輸出的均為JSON格式的信息,同樣比較所有Group的鍵(key)與值(value),并記錄差異項(xiàng)個(gè)數(shù)(Number of Differences)。對(duì)于3類天氣5次測(cè)試的GPS、IMU、Vehicle數(shù)據(jù)信息,3類天氣5次測(cè)試之間均不存在差異項(xiàng)。
圖10 基于python腳本可視化的GPS、IMU、Vehicle Sensor結(jié)果
在本文設(shè)計(jì)的傳感器配置與場(chǎng)景中,aiSim的各項(xiàng)傳感器數(shù)據(jù)在固定的參數(shù)配置下,仿真過(guò)程與仿真結(jié)果不存在任何差異(除UTC時(shí)間)。除了本文提到的傳感器與場(chǎng)景,在其他不同環(huán)境、傳感器配置下的驗(yàn)證中,aiSim也均表現(xiàn)出了很好的確定性。
在aiSim的仿真世界里,沒有偶然和隨機(jī),只有精確和必然。每一次的測(cè)試結(jié)果都真實(shí)反映了被測(cè)算法的真實(shí)能力,每一次的問題暴露都能被穩(wěn)定復(fù)現(xiàn)和修正。
參考文獻(xiàn)
1. On Determinism of Game Engines Used for Simulation-Based Autonomous Vehicle Verification