戴嘉潤 李忠睿 張琬琪 張 源 楊 珉
(復(fù)旦大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院 上海 200438)
無人駕駛系統(tǒng)(autonomous driving system, ADS)可通過各類的車載傳感器(如相機(jī)、激光雷達(dá)、超聲波雷達(dá)等)進(jìn)行實時的駕駛環(huán)境感知,并進(jìn)一步根據(jù)目標(biāo)駕駛?cè)蝿?wù)進(jìn)行駕駛行為的規(guī)劃與決策,以此控制車輛的自動化行進(jìn).作為交通領(lǐng)域中的顛覆性智能技術(shù),無人駕駛已展示出廣泛的應(yīng)用場景,如物流配送、軍事探勘、公共交通等.鑒于此,眾多科技公司、整車廠商與政府部門正積極推動無人駕駛的技術(shù)落地,期望實現(xiàn)公開道路的無人駕駛車輛部署.
然而現(xiàn)如今,安全性作為無人駕駛系統(tǒng)重要的預(yù)期屬性,已然成為了其大規(guī)模落地的瓶頸.在無人駕駛車輛的試運(yùn)行過程中,因無人駕駛系統(tǒng)缺陷導(dǎo)致的交通事故不斷發(fā)生,造成了嚴(yán)重程度不一的財產(chǎn)損失與人身傷害.例如,截止2023 年1 月6 日,美國加州交管局[1](Department of Motor Vehicles, DMV)已接收并公布了546 件無人駕駛車輛相關(guān)的交通事故[2].同時,建立無人駕駛功能安全相關(guān)的測評標(biāo)準(zhǔn)已成為國內(nèi)外標(biāo)準(zhǔn)化組織的重點工作.例如,國際標(biāo)準(zhǔn)化組織發(fā)布了ISO 21448[3]以規(guī)范無人駕駛的安全測試流程,作為跟進(jìn),我國的國家標(biāo)準(zhǔn)計劃《道路車輛預(yù)期功能安全》[4]也在積極籌備之中.
為有效提高無人駕駛的安全性并滿足合規(guī)檢測需求,各大廠商與監(jiān)管機(jī)構(gòu)正積極采用2 類測試方案,即道路測試[5-6]和仿真測試[7–10],來挖掘并整治無人駕駛系統(tǒng)中可能導(dǎo)致交通事故的系統(tǒng)缺陷.道路測試指在封閉的真實道路上長久地運(yùn)行無人駕駛車輛,并監(jiān)控其駕駛行為.然而,道路測試存在著較大的限制:一方面,布置各種封閉道路場景的成本較高,且測試周期較長;另一方面,道路測試難以驗證無人駕駛系統(tǒng)在極端駕駛場景(如極端天氣與路況)中的可靠性.與道路測試不同的是,仿真測試指在仿真器中配置虛擬的駕駛場景來驗證無人駕駛系統(tǒng)的安全性.相較于傳統(tǒng)的道路測試,因仿真測試可任意指定虛擬場景的配置(如天氣環(huán)境、地圖道路和交通車流等),能以更低的成本靈活地驗證在真實道路上難以挖掘到的危險駕駛場景.鑒于該優(yōu)勢,仿真測試已被學(xué)術(shù)界和產(chǎn)業(yè)界廣泛使用來評估無人駕駛系統(tǒng)的安全性.
顯然,仿真測試的有效性直接由虛擬場景配置的質(zhì)量決定,即安全測試人員能否設(shè)計出易導(dǎo)致無人駕駛安全事故的虛擬場景.然而,設(shè)計事故場景絕非易事.其原因在于,虛擬場景中包含著種類豐富的待配置要素,包括天氣環(huán)境、道路地圖和交通車流等,這些要素的排列組合將構(gòu)成難以估量的場景搜索空間.直觀地說,從這樣龐大的搜索空間中有效挖掘事故場景配置無異于大海撈針.截止當(dāng)前,這仍然是困擾學(xué)術(shù)界[11–13]和工業(yè)界[14]的棘手難題.
為有效應(yīng)對該難題,前沿的研究工作[15–20]嘗試將模糊測試技術(shù)[21-22]與仿真測試相結(jié)合,構(gòu)建出面向無人駕駛系統(tǒng)的仿真模糊測試技術(shù)(simulation-based fuzzing).該技術(shù)的基本原理是:給定數(shù)量有限的初始場景配置(稱之為種子場景),通過類模糊測試的變異操作來自動調(diào)整種子場景中的可配置要素(如將天氣參數(shù)由晴天變更為雨天),以此源源不斷地生成新的更易導(dǎo)致事故的場景配置.基于此原理,仿真模糊測試技術(shù)即可自動化地探索龐大的場景搜索空間,并從中挖掘出易導(dǎo)致無人車事故的駕駛場景.例如,AV-FUZZER[16]提出了與遺傳算法相結(jié)合的模糊測試方案,通過改變無人車周圍車輛的變道行為和駕駛速度,尋找直道上因車距過近而導(dǎo)致的無人車事故場景;AutoFuzz[18]利用神經(jīng)網(wǎng)絡(luò)來指導(dǎo)仿真模糊測試,其首先將場景配置向量化,并通過梯度下降算法變異各類場景要素,以此生成導(dǎo)致無人車碰撞的駕駛場景.
盡管已有的仿真模糊測試工作已經(jīng)在高級別無人駕駛系統(tǒng)(high-level autonomous driving system)的安全測評中展示出了良好的應(yīng)用成效,即發(fā)現(xiàn)了數(shù)十乃至數(shù)百例主流開源無人駕駛系統(tǒng)Apollo 和Autoware的事故場景,它們?nèi)匀淮嬖跀?shù)個缺陷與不足,直接制約了它們提升無人駕駛系統(tǒng)安全性的能力.例如,現(xiàn)有的仿真模糊測試工作在準(zhǔn)備種子場景時,普遍采用手工的方式構(gòu)建極其簡易的駕駛場景,該類質(zhì)量低下的種子極大地限制了現(xiàn)有工具的事故挖掘能力.又如,現(xiàn)有的仿真模式測試工作的事故分類機(jī)制缺乏完善的設(shè)計,大量冗余重復(fù)的事故為進(jìn)一步的系統(tǒng)缺陷歸因溯源造成巨大阻礙.
鑒于此,本文旨在系統(tǒng)性地總結(jié)現(xiàn)有工作的不足,指明完善這些不足之處的技術(shù)方向,并最終給出可行的解決方案,以此為該領(lǐng)域的后續(xù)工作提供可靠的指導(dǎo)建議.
本文的主要貢獻(xiàn)包括3 個方面:
1)調(diào)研了面向無人駕駛系統(tǒng)的仿真模糊測試技術(shù),并總結(jié)了該類技術(shù)的一般架構(gòu),該架構(gòu)分為種子場景生成、事故挖掘、事故分類與事故根源分析四大關(guān)鍵模塊.
2)面向這4 個關(guān)鍵模塊,剖析了現(xiàn)有工作的不足,以及解決這些不足所面臨的技術(shù)挑戰(zhàn).
3)針對現(xiàn)有工作的不足提出了可行的優(yōu)化方案,并在主流無人駕駛系統(tǒng)上進(jìn)行了可行性的實驗論證,以此指明該領(lǐng)域的未來發(fā)展方向.
為了區(qū)分不同自動駕駛系統(tǒng)的能力,國際汽車工程學(xué)會(Society of Automotive Engineers, SAE)將無人駕駛系統(tǒng)分為6 個等級[23],從L0(無自動駕駛)到L5(完全自動駕駛).其中,L4 與L5 的無人駕駛系統(tǒng)又稱高級別無人駕駛系統(tǒng).因高級別無人駕駛系統(tǒng)在多樣的駕駛場景中都具備自主運(yùn)行能力,許多制造商正致力于該類系統(tǒng)的開發(fā)部署與安全測試.具體地說,高級別無人駕駛系統(tǒng)通常是由多個功能模塊組成,這些模塊協(xié)同工作,以實現(xiàn)實時的自動駕駛.如圖1 所示,高級別無人駕駛系統(tǒng)主要包含4 個關(guān)鍵模塊:
Fig.1 Architecture of simulation testing for autonomous driving systems圖1 無人駕駛系統(tǒng)仿真測試架構(gòu)
1)感知(Perception)模塊.通過接收來自攝像頭、激光雷達(dá)和超聲波雷達(dá)等車載傳感器的數(shù)據(jù),基于機(jī)器學(xué)習(xí)算法探知車身周圍障礙物的位置和類型.
2)預(yù)測(Prediction)模塊.基于上述障礙物探知信息,運(yùn)用機(jī)器學(xué)習(xí)算法進(jìn)一步預(yù)測周邊障礙物的未來運(yùn)動軌跡.
3)規(guī)劃(Planning)模塊.結(jié)合目標(biāo)駕駛?cè)蝿?wù)與駕駛環(huán)境的感知預(yù)測結(jié)果,為無人駕駛車輛規(guī)劃出可達(dá)目的地的安全行駛軌跡.
4)控制(Control)模塊.基于規(guī)劃的軌跡和車輛的當(dāng)前狀態(tài),使用不同的控制算法生成一系列車身控制命令,如加速、剎車和轉(zhuǎn)向等.
這4 類功能模塊通常以異步的形式高頻運(yùn)作,并在運(yùn)行時依賴高性能中間件框架(如Cyber-RT[24]和ROS[25])進(jìn)行模塊間的通信.此外,該框架還負(fù)責(zé)無人駕駛系統(tǒng)和車載硬件之間的信息交互.
為了提高無人駕駛系統(tǒng)的安全性,許多研究工作著眼于測試單個系統(tǒng)模塊(如感知模塊[26–31])的魯棒性,即假設(shè)攻擊者或罕見的駕駛情況可能導(dǎo)致單個系統(tǒng)模塊的故障.例如,攻擊者偽造的傳感器數(shù)據(jù)可能會導(dǎo)致錯誤的障礙物感知結(jié)果.然而,因無法從宏觀的層面對無人駕駛系統(tǒng)整體進(jìn)行測試[32],該類工作往往無法發(fā)現(xiàn)由多個模塊共同導(dǎo)致的系統(tǒng)故障.
與上述工作不同的是,無人駕駛系統(tǒng)仿真測試是面向無人駕駛系統(tǒng)整體而非單點模塊的測試方法.在虛擬的仿真環(huán)境下,安全分析人員可靈活指定場景的各類要素,并通過待測無人駕駛系統(tǒng)的實時計算來控制仿真無人車在該場景下的運(yùn)動.圖1 描述了無人駕駛系統(tǒng)仿真平臺的整體框架.其中,駕駛模擬器通常建立在圖形渲染引擎(如Unity[33]和Unreal[34])上,包含3 個用于仿真測試的重要組件:
1)無人車模擬組件.該組件主要負(fù)責(zé)模擬目標(biāo)無人車在虛擬場景中的駕駛行為.仿真環(huán)境中的無人車配置了各種虛擬傳感器,這些虛擬傳感器可以產(chǎn)生與仿真環(huán)境對應(yīng)的傳感器數(shù)據(jù)(如攝像頭數(shù)據(jù)、激光雷達(dá)數(shù)據(jù)和GPS 數(shù)據(jù)).隨后,駕駛模擬器會通過通信網(wǎng)橋?qū)⑦@些數(shù)據(jù)作為輸入連續(xù)地傳輸給無人駕駛系統(tǒng).同樣,經(jīng)過無人駕駛系統(tǒng)計算后生成的車輛控制指令(如油門和轉(zhuǎn)向)也會通過通信網(wǎng)橋?qū)崟r地發(fā)送給駕駛模擬器,進(jìn)而控制無人車在仿真環(huán)境中的運(yùn)動.
2)環(huán)境模擬組件.該組件允許配置多樣的駕駛環(huán)境,主要包括環(huán)境的物理屬性和靜態(tài)的地圖元素.這些配置決定了仿真環(huán)境的渲染,同時也是虛擬無人車傳感器生成實時傳感器數(shù)據(jù)的重要根據(jù).
3)交通模擬組件.該組件旨在模擬無人車周圍具有特定動態(tài)行為的交通參與者.根據(jù)交通行為者的類型,交通模擬可以分為車輛交通模擬(如汽車和公共汽車)和非車輛交通模擬(如自行車和行人).
駕駛模擬器具有3 個重要組件,即無人車模擬組件、環(huán)境模擬組件和交通模擬組件.在實際的仿真測試過程中,測試人員須正確配置這3 個組件的必要參數(shù)以保證仿真測試的正常開展:
1)環(huán)境模擬參數(shù).該參數(shù)主要用于定制化場景的自然物理屬性和地圖元素.最常見的自然物理屬性包括天氣情況與光照情況.地圖元素通常指的是具有特定結(jié)構(gòu)和地理坐標(biāo)的道路網(wǎng)絡(luò),其中包含必要的道路基礎(chǔ)設(shè)施如交通標(biāo)志牌與交通信號燈等.
2)無人車模擬參數(shù).該參數(shù)主要指定待測無人車的物理學(xué)模型與動力學(xué)模型.此外,該參數(shù)還須指定無人車駕駛的起點、目的地以及初始速度.
3)交通模擬參數(shù).該參數(shù)需指定各交通參與方的動態(tài)行為.常見的方式是令車輛與行人等沿著給定的軌跡坐標(biāo)點運(yùn)動.
為保證這3 個參數(shù)配置的可移植性,現(xiàn)有工作普遍采用不同的領(lǐng)域特定語言(domain-specific language,DSL)實例化參數(shù)配置.例如,GeoScenario[35]和Open-SCENARIO[36]利用面向?qū)ο蟮恼Z言來描述仿真場景的各項參數(shù).此外,這些DSL 通常會結(jié)合其他標(biāo)準(zhǔn)(如OpenDRIVE[37],OSM[38]和Lanelets[39])來描述道路地圖.最終,這些格式良好的場景參數(shù)配置會被保存為與系統(tǒng)無關(guān)的文件格式(如XML 文件或JSON 文件),本文將此類文件統(tǒng)稱為場景配置文件.
現(xiàn)有工作[15–20]在實現(xiàn)面向無人駕駛系統(tǒng)的仿真模糊測試時,主要利用了模糊測試的隨機(jī)性和仿真測試的靈活性,在僅有少數(shù)初始場景配置的情況下,自動化地生成并驗證海量未知的仿真駕駛場景.通過對現(xiàn)有工作的系統(tǒng)性總結(jié),本文將仿真模糊測試的一般架構(gòu)解構(gòu)為4 個關(guān)鍵模塊,分別為種子場景生成模塊、事故挖掘模塊、事故分類模塊和事故歸因分析模塊,如圖2 所示.
Fig.2 Architecture of simulation-based fuzzing圖2 仿真模糊測試框架
1)種子場景生成模塊.進(jìn)行模糊測試的首要條件是準(zhǔn)備一定量的初始輸入作為種子,從而可以通過種子的變異或調(diào)整源源不斷地生成新的測試輸入.在無人駕駛系統(tǒng)仿真測試的語境下,種子指代的是初始的仿真場景配置文件,其指明了駕駛仿真器在實現(xiàn)無人車模擬、環(huán)境模擬以及交通模擬時所依賴的必要參數(shù).
2)事故挖掘模塊.在給定種子場景的情況下,事故挖掘模塊的預(yù)期功能是通過變異種子場景的各項配置來生成新的待測場景,并通過監(jiān)控各待測場景的仿真執(zhí)行結(jié)果,驗證變異后的場景是否會造成無人駕駛車輛的不當(dāng)行為,如車輛碰撞或交通違規(guī)等.在傳統(tǒng)的軟件模糊測試領(lǐng)域,現(xiàn)有工作[40–45]通常制定“變異-反饋”機(jī)制來避免盲目的種子生成與驗證,即在變異過程中篩選出高質(zhì)量的種子,引導(dǎo)種子向更優(yōu)異的方向持續(xù)演進(jìn).同樣地,這類反饋機(jī)制也存在于面向無人駕駛系統(tǒng)的仿真模糊測試中,其旨在遴選出更接近事故發(fā)生的仿真駕駛場景.
3)事故分類模塊.在傳統(tǒng)的軟件模糊測試領(lǐng)域,崩潰去重[46-47]是必不可少的重要步驟.在收集完所有能夠觸發(fā)程序崩潰的種子后,該步驟旨在篩除有相似崩潰行為的冗余種子,以此減少安全人員的分析開銷.類似地,仿真模糊測試的事故分類模塊旨在去除同類的無人車事故場景,以此輔助安全分析人員更快定位和治理無人駕駛系統(tǒng)中的不同缺陷.
4)事故歸因分析模塊.傳統(tǒng)模糊測試通常可依賴內(nèi)存錯誤檢測工具(如AddressSanitizer[48])來定位導(dǎo)致程序崩潰的代碼位置.然而,因無人駕駛系統(tǒng)的碰撞事故通常由邏輯缺陷(如算法設(shè)計缺陷或模型運(yùn)算錯誤)導(dǎo)致,其不會出現(xiàn)顯式的內(nèi)存崩潰.因此,仿真模糊測試通常需要額外的事故歸因步驟來確認(rèn)導(dǎo)致事故的系統(tǒng)模塊、模型或代碼片段等.
近年來,不少前沿的學(xué)術(shù)工作[15–20]嘗試設(shè)計面向無人駕駛系統(tǒng)的仿真模糊測試技術(shù),以挖掘和整治無人駕駛系統(tǒng)的功能安全威脅.如表1 所示,根據(jù)2.1 節(jié)所述的四大模塊,本文嘗試對現(xiàn)有工作的技術(shù)方案進(jìn)行模塊化拆解,分別介紹這些工作實現(xiàn)的各關(guān)鍵模塊的具體方案.
Table 1 Existing Work in Simulation-based Fuzzing for Autonomous Driving Systems表1 現(xiàn)有的面向無人駕駛系統(tǒng)的仿真模糊測試工作
1)針對種子場景生成模塊,已有工作主要采用2 類方案,一類是根據(jù)人工經(jīng)驗配置簡單的駕駛場景,另一類是設(shè)計隨機(jī)算法以生成初始的場景配置.MFT[15]和AV-FUZZER[16]人工構(gòu)建了1~2 個簡單的直道駕駛場景作為初始種子,場景中僅包含少量的動態(tài)運(yùn)行車輛與靜態(tài)障礙物.其余工作則依據(jù)先驗知識,通過隨機(jī)采樣的方式生成一定數(shù)量的仿真場景作為初始種子.更具體地說,ASF[17]嘗試完全隨機(jī)生成符合場景配置格式的初始場景;AutoFuzz[18]從駕駛模擬器的API 規(guī)范中提取出場景配置參數(shù)的相關(guān)約束,并通過隨機(jī)采樣生成有效的場景配置;DriveFuzz[19]設(shè)計了一套可達(dá)性分析算法,為無人車在地圖上隨機(jī)選取有效的起點和目的地;MOSAT[20]在指定NPC 的數(shù)量和距離范圍后隨機(jī)生成初始場景.
2)針對事故挖掘模塊,已有工作基于無人駕駛測試的領(lǐng)域知識,設(shè)計了多樣且有效的“變異-反饋”機(jī)制,以便將初始的種子場景更快地變異為誘發(fā)無人駕駛事故的場景.同時,在挖掘事故場景時,已有工作普遍關(guān)注車輛碰撞這一嚴(yán)重的安全事故類型.MFT嘗試在無人車的行進(jìn)道路上隨機(jī)放置新的靜態(tài)障礙物,通過增加無人車與周邊場景元素的交互來提高事故發(fā)生的概率.AV-FUZZER 嘗試改變無人車周圍虛擬車輛 (NPC) 車輛的變道策略和速度,計算NPC車輛和無人車的安全距離作為遺傳算法的適應(yīng)度函數(shù),用于發(fā)現(xiàn)更苛刻的行駛場景.MOSAT 則根據(jù)NPC 車輛與無人車的位置關(guān)系,定義了4 種場景變異模式來增加無人車路徑規(guī)劃的難度,此外還提出了多目標(biāo)的適應(yīng)度函數(shù),通過考慮事故的多樣性和無人車駕駛行為的不穩(wěn)定性等來引導(dǎo)變異的流程.ASF 在一定范圍內(nèi)新增NPC 車輛并修改原有NPC車輛的起始位置,以無人車駕駛的軌跡覆蓋率為導(dǎo)向,嘗試觸發(fā)更多樣的無人車駕駛行為以挖掘不同的事故場景.AutoFuzz 將場景配置參數(shù)向量化的同時,創(chuàng)新性地利用梯度下降算法變異參數(shù)向量,并使用神經(jīng)網(wǎng)絡(luò)分類器來遴選更危險的駕駛場景.DriveFuzz 在場景變異過程中,設(shè)計了更多樣的NPC車輛駕駛行為(如變道插隊),通過觀測無人車的危險駕駛操作(如急剎車和急轉(zhuǎn)彎)來量化各場景的危險程度.
3)針對事故分類模塊,AV-FUZZER 和MOSAT通過觀察所有事故場景的仿真運(yùn)行流程,根據(jù)無人車的駕駛行為特征,以人工的方式主觀地將碰撞事故歸為不同的類別.更進(jìn)一步地,AutoFuzz 首次嘗試實現(xiàn)自動化的事故場景去重.給定任意2 個事故場景,AutoFuzz 通過判斷仿真場景配置文件的差異程度來決定兩者是否等價,即當(dāng)差異程度超過預(yù)設(shè)的閾值時,則認(rèn)為2 個事故場景屬于不同的類別.
4)針對事故歸因分析模塊,目前所有的工作都缺乏自動化分析事故場景根源缺陷的能力.ASF 針對一例事故展開了詳細(xì)的人工歸因分析,并最終定位到導(dǎo)致事故的缺陷代碼位置.DriveFuzz 以人工分析的方式,將事故的根源歸納為不同的種類,包括仿真器缺陷、系統(tǒng)邏輯缺陷和系統(tǒng)功能不足等.此外,ASF 和DriveFuzz 僅描述了事故歸因分析的結(jié)果,但并未詳細(xì)闡釋歸因分析的方法論與具體步驟.
根據(jù)2.2 節(jié)的闡述不難發(fā)現(xiàn),現(xiàn)有的仿真模糊測試技術(shù)主要關(guān)注事故挖掘模塊的設(shè)計,即嘗試借鑒傳統(tǒng)軟件模糊測試的“變異-反饋”機(jī)制,融合遺傳算法或神經(jīng)網(wǎng)絡(luò)等前沿方法,以便更快地挖掘到無人車事故場景.然而,相比之下,種子場景生成模塊、事故分類模塊與事故歸因分析模塊的設(shè)計則普遍依賴啟發(fā)式的規(guī)則或人工分析來實現(xiàn).值得注意的是,這4 個關(guān)鍵模塊協(xié)同工作才能構(gòu)成仿真模糊測試的閉環(huán),換言之,單個模塊的設(shè)計缺陷將直接影響到仿真模糊測試的有效性和可靠性.下面本文將詳細(xì)剖析不同模塊的設(shè)計缺陷.
1)種子場景的質(zhì)量低下且依賴個人經(jīng)驗手工構(gòu)造.長期以來,初始種子的質(zhì)量已被廣泛證明對模糊測試的結(jié)果存在顯著影響[49-50].然而,在開展面向無人駕駛系統(tǒng)的仿真模糊測試時,現(xiàn)有工作普遍根據(jù)專家經(jīng)驗或個人經(jīng)驗,主觀地選擇數(shù)量有限的簡單場景作為種子,沒有重視或評估種子場景對于測試結(jié)果可能存在的影響.其次,現(xiàn)有工作普遍采用手工構(gòu)造的方式來創(chuàng)建初始場景.正如1.3 節(jié)所述,場景的配置涉及種類繁多的參數(shù),且不同參數(shù)的格式與內(nèi)涵相差甚遠(yuǎn),即需要耗費(fèi)可觀的人力與時間才能完成參數(shù)的逐一配置.雖然部分工作嘗試使用隨機(jī)生成的方式來減少人工開銷,但這些工作仍然需要人工總結(jié)出場景模板或場景約束來指導(dǎo)場景的生成.
2)缺乏可靠的自動化事故分類.現(xiàn)有的仿真模糊測試工作在各自的實驗評估中均成功發(fā)現(xiàn)了主流開源無人駕駛系統(tǒng)的多例事故場景.然而,這些工作普遍缺乏自動化的事故分類方法,導(dǎo)致分析人員難以從眾多的事故案例中遴選出典型的案例作為進(jìn)一步分析和診斷的目標(biāo).AutoFuzz 雖然嘗試提出自動化的聚類方法,但該方法僅通過仿真場景配置的相似度來判斷事故是否類似.因缺乏事故相關(guān)的分析(如事故主體和事故特性),AutoFuzz 在事故分類中極易產(chǎn)生錯誤.
3)缺乏可靠的自動化事故歸因分析.現(xiàn)有的仿真模糊測試在匯報了事故場景后,無法通過可靠的自動化歸因分析來定位系統(tǒng)缺陷點(即代碼位置).這使得事故的確認(rèn)與修復(fù)受到了極大的阻礙.ASF和DriveFuzz 嘗試通過人工的方式進(jìn)行系統(tǒng)缺陷點的定位.顯然,該類方式需要極強(qiáng)的無人駕駛領(lǐng)域知識,以及對目標(biāo)無人駕駛系統(tǒng)代碼實現(xiàn)的深入理解.此外,因ASF 與DriveFuzz 并未闡明人工歸因分析的具體流程與方法論,這使得歸因分析結(jié)果的準(zhǔn)確性難以得到保證.
為切實提高仿真模糊測試的可用性和可靠性,本文面向上述3 大缺陷提出針對性的解決思路.具體而言,在第3~5 節(jié)中,本文分別剖析了優(yōu)化種子場景生成模塊、事故分類模塊與事故歸因模塊所面臨的挑戰(zhàn),并提供了可行的解決思路.為論證這些思路的可行性與先進(jìn)性,本文嘗試在主流開源無人駕駛系統(tǒng)Apollo 和Autoware 開展實驗并與現(xiàn)有工作的方案進(jìn)行對比.此外,本文將根據(jù)實驗論證的結(jié)果進(jìn)一步展望仿真模糊測試領(lǐng)域的發(fā)展方向.
如2.1 節(jié)所述,仿真模糊測試依賴種子場景作為初始輸入.然而,現(xiàn)有的無人駕駛相關(guān)的公開數(shù)據(jù)集[51–59]主要提供原始傳感器數(shù)據(jù)(如相機(jī)、激光雷達(dá)等),這些數(shù)據(jù)可以用于訓(xùn)練和測試無人駕駛系統(tǒng)內(nèi)的機(jī)器學(xué)習(xí)算法(如對象檢測和追蹤),但不能直接用于仿真測試.因此,現(xiàn)有的仿真模糊測試工作中所使用的種子場景普遍是研究者根據(jù)自身經(jīng)驗手動或隨機(jī)構(gòu)建的簡單場景,極大地限制了仿真模糊測試的事故場景挖掘能力.然而,為仿真模糊測試自動化準(zhǔn)備高質(zhì)量的種子場景絕非易事,所構(gòu)建的種子場景應(yīng)該滿足2 個基本特性:
挑戰(zhàn)1.滿足高保真性.仿真場景是現(xiàn)實世界駕駛場景的數(shù)字化版本,其應(yīng)當(dāng)符合真實世界中可能存在的駕駛情況.為了滿足該需求,安全測試人員通常需要參考已有的交通事故報告或路測報告,以繁重的人工成本在仿真環(huán)境中進(jìn)行等價的還原.
挑戰(zhàn)2.滿足語法正確性.對于仿真測試而言,虛擬場景的參數(shù)配置應(yīng)該被編碼成規(guī)范的格式(如OpenSCENARIO[36]),否則仿真器不能接受其作為輸入.這些格式規(guī)范往往有著復(fù)雜的語法約束,例如,一個簡單的變道超車場景需要200 多行格式良好的代碼來進(jìn)行參數(shù)配置.
針對3.1 節(jié)所述的2 個挑戰(zhàn),本文提出了一種自動化的種子場景構(gòu)建方法.該方法的核心思路是,從真實世界的交通軌跡數(shù)據(jù)集[60-61]中收集指定路段上可能出現(xiàn)的交通參與方(車輛或行人)的運(yùn)動行為,以此作為仿真場景參數(shù)配置的數(shù)據(jù)參考.這類軌跡數(shù)據(jù)通常由車端或路端記錄儀在真實道路上實時捕捉所得,因此可以準(zhǔn)確地反映真實世界中可能存在的復(fù)雜交通流模式.參考這類數(shù)據(jù)來配置仿真場景的交通模擬參數(shù)可以極大地確保場景的保真性.
交通軌跡數(shù)據(jù)集主要以帶時間戳的GPS 坐標(biāo)序列來描述各交通參與方的行為:
其中,Entity表示交通參與方,gps表示經(jīng)緯地理坐標(biāo),t表示時間戳.
在構(gòu)建種子場景時,本文嘗試基于現(xiàn)有的地圖轉(zhuǎn)換工具[62],將交通軌跡相關(guān)的路段地圖(如Lanelets格式[39])轉(zhuǎn)換為等價的仿真地圖格式(如OpenDrive格式[37]),并在該仿真地圖上靈活地布置這些具有特定運(yùn)動行為的交通參與方,以此完成交通模擬參數(shù)的配置.然而,這些軌跡數(shù)據(jù)通常被存儲于自定義格式的CSV 文件中,并不兼容仿真場景參數(shù)配置的格式規(guī)范(見1.3 節(jié)).此外,這些軌跡數(shù)據(jù)的坐標(biāo)系通常與仿真場景所需的坐標(biāo)系不同.因此,為進(jìn)一步保證仿真場景配置的語法正確性,交通參與方的GPS坐標(biāo)序列須進(jìn)行正確的坐標(biāo)轉(zhuǎn)換(如從UTM 坐標(biāo)系轉(zhuǎn)換為局部坐標(biāo)系),并按照仿真場景的語法格式規(guī)范進(jìn)行參數(shù)配置.
圖3 展示了自動化種子場景構(gòu)建的一般流程.值得注意的是,除交通模擬參數(shù)和地圖參數(shù)外,本文將隨機(jī)生成仿真場景的自然環(huán)境參數(shù)(如天氣),使用仿真器和無人駕駛系統(tǒng)提供的無人車物理學(xué)和動力學(xué)模型,并隨機(jī)生成其余無人車模擬參數(shù)(如駕駛的起始位置).最終,基于仿真場景描述性語言(如OpenSCENARIO[36])的語法模板(如XSD 文件),本文將上述參數(shù)實例化為種子場景配置文件(如XML 文件),以作為模糊測試的輸入.
Fig.3 Overview of automated seed scenario construction圖3 自動化種子場景構(gòu)建概覽
本文嘗試證明3.2 節(jié)所述的方法所得的種子場景能夠提升仿真模糊測試技術(shù)的事故場景挖掘能力.為實現(xiàn)該目標(biāo),本文嘗試將所得種子場景與現(xiàn)有工作使用的種子場景分別作為同一款仿真模糊測試工具的輸入,并面向相同的無人駕駛系統(tǒng)進(jìn)行事故場景挖掘.
在仿真模糊測試工具方面:本文基于LGSVL 模擬器實現(xiàn),通過4 000 行左右的Python 代碼實現(xiàn)了基本的仿真模糊測試工具.在實現(xiàn)該工具時,本文參考了領(lǐng)域內(nèi)的前沿工作DriveFuzz[19],并進(jìn)一步豐富了其場景變異的模式(如變更光照強(qiáng)度等).值得注意的是,該實驗的目標(biāo)是衡量種子質(zhì)量對于模糊測試結(jié)果的影響.因此,參考傳統(tǒng)模糊測試領(lǐng)域的實踐方式[47],本文禁用了DriveFuzz 的種子調(diào)度機(jī)制,以免對實驗結(jié)果造成干擾.
在待測無人駕駛系統(tǒng)方面:本文挑選了2 款主流的高級別無人駕駛系統(tǒng)作為測試對象,Apollo 6.0 和Autoware 1.15.
在待測種子場景方面:實驗生成了50 個適用于模擬器LGSVL 的仿真場景作為待測種子.這些種子場景基于數(shù)十種地圖進(jìn)行構(gòu)建,擁有不同的道路結(jié)構(gòu)(如單車道、合并車道、交通路口等)、車流模式(如跟車、轉(zhuǎn)彎、變道超車、緊急停車等)、車輛類型(如汽車、卡車、自行車等)和天氣狀況(如晴天、雨天、霧天)等.
另外,本文嘗試從現(xiàn)有工作中獲取可用的種子場景用于實驗對比.此處,只有AV-FUZZER 和AutoFuzz開源了可用的場景配置文件.因此,本文最終獲取了AV-FUZZER 的2 個種子場景和AutoFuzz 的4 個種子場景,并以這6 個種子場景作為實驗的參照組.
為便于理解,圖4 直觀地展示了來自AV-FUZZER、AutoFuzz 及本文構(gòu)建的部分場景種子的俯視圖(藍(lán)色車輛為無人車,藍(lán)色箭頭代表預(yù)期駕駛?cè)蝿?wù)).
Fig.4 Comparison of seed scenarios from existing works and our work圖4 現(xiàn)有工作和本文工作的種子場景對比
在實驗設(shè)置與環(huán)境方面:以各種子場景作為仿真模糊測試工具的輸入,本文獨立進(jìn)行時長為3 h 的仿真模糊測試,并收集產(chǎn)生的事故場景數(shù)量.所有的實驗評估都在Ubuntu 18.04 服務(wù)器上進(jìn)行,該服務(wù)器有314 GB 內(nèi)存、4 個GPU 核心(NVIDIA GeForce RTX 2080 Ti)和40 個 CPU 核心(Intel Xeon Gold 5215,2.50 GHz).
如表2 所示,參照本文思路構(gòu)建的各種子場景在3 h 內(nèi)平均可發(fā)現(xiàn)Apollo 的80.3 例事故場景和Autoware 的84.9 例事故場景,遠(yuǎn)高于AV-FUZZER 和AutoFuzz 的種子場景在相同實驗配置下產(chǎn)生的事故數(shù)量.例如,本文種子場景在Apollo 系統(tǒng)上的碰撞數(shù)量相較現(xiàn)有工作的種子場景分別提升了203%和351%.該數(shù)據(jù)直觀地表明本文構(gòu)建的種子場景更利于事故場景的挖掘.
Table 2 Assessment Results on Seed Scenarios Quality表2 種子場景質(zhì)量的評估結(jié)果
經(jīng)分析,本文發(fā)現(xiàn)導(dǎo)致該差異的主要原因是,現(xiàn)有工作使用的初始場景往往交通狀況簡單且場景元素匱乏,故需要進(jìn)行繁多的變異操作后才能增加無人車與周圍環(huán)境或交通參與方的交互頻率,以此提高事故發(fā)生的概率.然而相比之下,依照本文思路構(gòu)建的種子場景反映了真實世界的交通路況,其場景元素復(fù)雜且交通參與方行為多樣,即初始的場景配置就對無人駕駛系統(tǒng)的感知、規(guī)劃與控制造成了不小的挑戰(zhàn).因此,該類場景僅需少量的變異操作,就極有可能觸發(fā)無人駕駛系統(tǒng)的缺陷,繼而導(dǎo)致事故的發(fā)生.
如表2 所示,本文構(gòu)建的種子場景的平均事故挖掘能力遠(yuǎn)高于現(xiàn)有工作的種子場景.然而,本文發(fā)現(xiàn),不同種子的事故挖掘能力存在巨大差異.例如,在本文構(gòu)建的50 個種子場景中,某種子場景在3h 內(nèi)無法挖掘到任何事故,而某種子場景可成功挖掘到200 余例事故場景.鑒于此,若能在仿真模式測試前對種子場景的事故挖掘能力進(jìn)行預(yù)測,則能夠極大地提升測試的有效性.在二進(jìn)制模糊測試的領(lǐng)域,現(xiàn)有工作[49,63]往往在測試前基于代碼覆蓋率對種子質(zhì)量進(jìn)行預(yù)測評估.與此不同的是,無人駕駛仿真測試具有更多可參考的信息要素(如場景語義和系統(tǒng)代碼),如何妥當(dāng)?shù)乩眠@些要素實現(xiàn)種子場景的遴選是該領(lǐng)域內(nèi)有待探索的方向之一.
在傳統(tǒng)的模糊測試領(lǐng)域,長時間的測試極有可能產(chǎn)生大量的程序崩潰,且其中不乏相似的崩潰.為避免不必要的分析開銷,相關(guān)工作普遍依賴崩潰去重技術(shù)[46-47]實現(xiàn)相似崩潰的聚類.類似地,如3.4 節(jié)的實驗結(jié)果所示,面向無人駕駛系統(tǒng)的仿真模糊測試也極有可能挖掘到大量的事故場景,亟需事故分類技術(shù)實現(xiàn)相似事故的聚類.
挑戰(zhàn):事故場景元素眾多,難以自動確認(rèn)事故相關(guān)要素.在交通領(lǐng)域[64],相關(guān)人員通常需要確認(rèn)事故主體(對事故發(fā)生產(chǎn)生直接或間接影響的交通參與方)和事故特性(地點與危害程度)來完成交通事故的分類.然而,在仿真事故場景中,場景元素通常復(fù)雜繁多,難以實現(xiàn)對該類信息的提取與甄別,進(jìn)而導(dǎo)致仿真事故場景的分類困難.
針對4.1 節(jié)所述的難點,本文提出了一種自動化的事故要素分析(即事故主體與事故特性)與事故場景分類方案,該方案主要適用于碰撞類事故.首先,當(dāng)在仿真環(huán)境中觀測到無人車碰撞事故時,本文會立即通過仿真器所提供的應(yīng)用程序接口 (API) 記錄必要的事故特性.這些特性主要包括:碰撞發(fā)生的具體地點(如車輛所在的道路編號)、碰撞的角度(如兩車車頭的夾角)和碰撞速度.隨后,本文嘗試分析各交通參與方與事故發(fā)生之間的關(guān)聯(lián)性,從而確認(rèn)事故主體.具體而言,該方法將逐個變更交通參與方的運(yùn)動行為(隨機(jī)改變速度和軌跡點),若行為變更后碰撞事故不再發(fā)生或事故特性改變,則認(rèn)為該交通參與方為事故主體之一.通過上述這種“調(diào)整-重放”式的分析策略,本文能夠可信地確認(rèn)交通參與方的運(yùn)動行為與事故發(fā)生之間的相關(guān)性.
最終,本文根據(jù)事故特性和事故主體的一致性,實現(xiàn)碰撞事故的自動化聚類.具體地說,本文提取發(fā)生碰撞所在道路序號來標(biāo)識碰撞地點,以追尾(0°~60°)、側(cè)撞(60°~120°)與對撞(120°~180°)這3 類情況來描述碰撞角度,以低速碰撞(0~30 km/h)、中速碰撞(30~60 km/h)和高速碰撞(60 km/h 以上)這3 類情況來描述碰撞速度.當(dāng)且僅當(dāng)碰撞所在的道路序號、碰撞角度情況和碰撞速度情況都相同時,2 例無人車碰撞事故才被認(rèn)為具有相同的事故特性.對于事故主體的一致性分析,本文主要判斷主體類型和主體數(shù)量是否一致.
本文嘗試證明4.2 節(jié)所述的方案能夠幫助實現(xiàn)準(zhǔn)確的事故分類.因現(xiàn)有的仿真模糊測試工作中僅AutoFuzz 嘗試實現(xiàn)自動化的事故分類,本文嘗試將本文所提方案與AutoFuzz 進(jìn)行對比,以體現(xiàn)其優(yōu)勢.
在AutoFuzz 事故分類方案方面:AutoFuzz 提出,如果2 個事故場景配置的參數(shù)中至少有x%是不同的(x%是人工設(shè)置的閾值),則認(rèn)為這2 個事故場景不是同一類型.參照AutoFuzz 的原文[18]實現(xiàn),本文將該閾值設(shè)置為10%.與本文所提方案的區(qū)別在于,AutoFuzz 并不會區(qū)分事故主體,也不會甄別事故特性,其考慮仿真場景中所有的元素作為事故相似性的判斷依據(jù).
在待分類事故場景方面:本文從第3 節(jié)的仿真模糊測試結(jié)果中人工標(biāo)注并篩選出了50 種不同類型的碰撞事故,每個事故種類包含了10 例事故場景.基于這500 例事故場景,本文嘗試開展AutoFuzz 事故分類方案和本文所提方案的對比實驗.
在分類評估指標(biāo)方面:為了評估事故分類的效果,本文主要使用了聚類分析領(lǐng)域的常用指標(biāo)[65],即平均準(zhǔn)確率(又稱純凈度)和平均召回率(又稱倒純凈度).具體地說,平均準(zhǔn)確率可以有效衡量不同類型的事故是否會被錯誤地分到同一類中,平均召回率可以有效衡量同一類型的事故是否會被錯誤地分到不同類中.因這2 個指標(biāo)涵蓋了事故分類中所有可能出現(xiàn)的分類錯誤情況,本文可以客觀地衡量不同分類方案的可靠性.基于上述定義,平均準(zhǔn)確率和平均召回率的計算方式為:
其中,Cj是第j個實驗聚類,Li是第i個基準(zhǔn)分類,N是聚類中的元素總數(shù).
在實驗設(shè)置與環(huán)境方面:本文使用3.3 節(jié)中介紹的服務(wù)器開展該實驗.
本實驗的評估結(jié)果如表3 所示.由該表可知,本文方案的平均準(zhǔn)確率和平均召回率遠(yuǎn)高于AutoFuzz.為了便于理解,下面將通過2 個反例分析AutoFuzz分類效果不佳的根本原因.
Table 3 Assessment Results on Accident Triage表3 事故分類的評估結(jié)果
1)AutoFuzz 平均準(zhǔn)確率較低.如圖5 所示,對于參數(shù)配置高度相似但實則代表不同事故的場景,AutoFuzz 會錯誤地將其歸類為同一類型的事故.其根本原因在于,AutoFuzz 無法鑒別事故主體與事故特性.
Fig.5 Inequivalent accidents misclassified into the same category圖5 不同事故誤分為同一類
2)AutoFuzz 平均召回率較低.類似地,如圖6 所示,當(dāng)場景中存在較多事故無關(guān)的主體時,AutoFuzz 極有可能認(rèn)為2 個事故場景代表著不同類型的交通事故.
Fig.6 Equivalent accidents misclassified into different categories圖6 同種事故誤分為不同類
此外,本文方案也存在將同一類型事故錯誤分到不同類別的情況,即平均召回率并非100%.經(jīng)過細(xì)致的案例分析,本文發(fā)現(xiàn)其主要的原因在于,部分無人車相關(guān)的碰撞事故是概率性的.如4.2 節(jié)所述,本文主要通過多次的事故重放來推斷各交通參與方是否為事故主體.因概率性事故的重放結(jié)果并不穩(wěn)定,這極易導(dǎo)致事故主體的判斷錯誤,進(jìn)而誤導(dǎo)事故分類.
值得注意的是,本文在進(jìn)行事故分類時,僅參考仿真場景的語義信息(事故主體和事故特性),而忽略了無人駕駛系統(tǒng)的內(nèi)部執(zhí)行狀態(tài).這意味著,不同系統(tǒng)缺陷導(dǎo)致的交通事故有可能被歸為同一類,進(jìn)而在后續(xù)的缺陷確認(rèn)環(huán)節(jié)中被忽略.因此,如何結(jié)合場景的語義信息與系統(tǒng)內(nèi)部的執(zhí)行信息來完成魯棒的事故分類也是亟待探索的課題之一.
傳統(tǒng)的模糊測試工具通常依賴內(nèi)存錯誤檢測工具(如AddressSanitizer[48])來確認(rèn)崩潰發(fā)生的代碼位置,以此輔助程序缺陷的確認(rèn)與修復(fù).同樣地,對于仿真模糊測試而言,定位導(dǎo)致交通事故的系統(tǒng)缺陷位置對無人駕駛安全性的提升至關(guān)重要.然而,據(jù)現(xiàn)有研究[66]顯示,無人駕駛系統(tǒng)中易致使交通事故的缺陷通常為邏輯缺陷,其不會引發(fā)顯式的內(nèi)存錯誤或系統(tǒng)崩潰,因此無法用常規(guī)的內(nèi)存錯誤檢測工具來進(jìn)行缺陷代碼位置的定位.鑒于此,仿真模糊測試亟需定制化的事故歸因分析能力來提升其安全應(yīng)用價值.
挑戰(zhàn):無人駕駛系統(tǒng)的復(fù)雜性.無人駕駛系統(tǒng)是代碼和模型深度耦合的復(fù)雜智能系統(tǒng),其往往具有龐大的代碼量,使得藏匿其中的系統(tǒng)缺陷難以被發(fā)現(xiàn).例如,Apollo 開源無人駕駛系統(tǒng)擁有數(shù)十萬行的代碼.現(xiàn)有的仿真模糊測試工作(如ASF 和DriveFuzz)依賴專家經(jīng)驗進(jìn)行人工的缺陷定位,這不僅需要對無人駕駛系統(tǒng)的模塊架構(gòu)具有深入的了解,還需要對海量的被執(zhí)行代碼進(jìn)行準(zhǔn)確邏輯語義分析.同時,因這些工作并未提供人工分析的方法論和細(xì)節(jié)步驟,其可借鑒性十分有限.
盡管不同的高級別無人駕駛系統(tǒng)在代碼實現(xiàn)上截然不同,但如1.1 節(jié)所述,它們的系統(tǒng)模塊結(jié)構(gòu)和各模塊的預(yù)期功能普遍高度相似.其中,感知模塊主要負(fù)責(zé)確認(rèn)車身周圍障礙物位置;預(yù)測模塊主要推斷障礙物未來的運(yùn)行軌跡;規(guī)劃模塊主要確定無人車的安全行駛路線;控制模塊主要根據(jù)規(guī)劃路線生成對應(yīng)的車輛控制指令.鑒于此,本文實現(xiàn)了模塊級別的自動化缺陷定位,以此提高該方案在不同無人駕駛系統(tǒng)間的可移植性.該類模塊級別的缺陷定位可極大地輔助缺陷的診斷與修復(fù).
該方案的核心思路為:實時地監(jiān)控并比對仿真場景中各元素的真實狀態(tài)(僅考慮事故主體,見4.2 節(jié))以及無人駕駛系統(tǒng)的模塊執(zhí)行信息,以此判斷無人駕駛系統(tǒng)各功能模塊實際運(yùn)行效果與預(yù)期功能的差距(簡稱為模塊功能差距),最終將功能差距最大的模塊視為事故主責(zé)模塊(即缺陷模塊).為準(zhǔn)確地定義模塊功能差距,本文歸納了不同系統(tǒng)模塊的預(yù)期功能,并借助仿真模糊測試可實時觀測、可重放的特性實現(xiàn)了模塊功能差距的計算,具體為:
1)感知模塊功能差距.正常運(yùn)作的感知模塊旨在準(zhǔn)確定位無人車周圍所有障礙物的具體位置.為計算該模塊的功能差距,本文在仿真器中實時觀測各障礙物的真實位置信息作為預(yù)期數(shù)據(jù),同時在無人駕駛系統(tǒng)中截取感知模塊計算所得的障礙物位置信息作為實際運(yùn)行數(shù)據(jù),最終計算這2 類信息中各障礙物的位置坐標(biāo)的平均距離作為感知模塊功能差距.
2)預(yù)測模塊功能差距.正常運(yùn)作的預(yù)測模塊旨在準(zhǔn)確預(yù)測無人車周圍物體的未來運(yùn)動軌跡.為計算該模塊的功能差距,本文嘗試重放事故場景,記錄仿真器中每一時刻各物體的真實未來運(yùn)動軌跡作為預(yù)期數(shù)據(jù),同時截取預(yù)測模塊計算所得的未來軌跡作為實際運(yùn)行數(shù)據(jù),最終計算這2 類信息中平均的軌跡差異作為預(yù)測模塊功能差距.在衡量軌跡之間的差異時,本文主要計算兩軌跡上具有相同時間戳的坐標(biāo)點之間的平均距離.
3)控制模塊功能差距.正常運(yùn)作的控制模塊旨在準(zhǔn)確按照無人駕駛系統(tǒng)規(guī)劃的行駛路徑來控制無人車的行進(jìn).為計算該模塊的功能差距,本文截取規(guī)劃模塊計算所得的行駛路徑作為預(yù)期數(shù)據(jù),同時在仿真器中記錄無人車的真實運(yùn)行軌跡作為實際運(yùn)行數(shù)據(jù),最終計算這2 類信息中無人車的軌跡差異作為控制模塊功能差距.類似地,此處仍然計算2 軌跡上具有相同時間戳的坐標(biāo)點之間的平均距離作為軌跡差異.
4)規(guī)劃模塊缺陷判斷.值得注意的是,正常運(yùn)作的規(guī)劃模塊旨在計算出可達(dá)目的地的安全駕駛路徑.在沒有任何人工分析的輔助下,該模塊的預(yù)期表現(xiàn)是難以定性的.因此,本文在進(jìn)行歸因分析時,首先依次計算上述3 種模塊的功能差距.若這3 種模塊的功能差距都小于一定閾值(閾值的設(shè)置見5.3 節(jié)),即認(rèn)為缺陷不存在于這3 種模塊中,并參考現(xiàn)有工作[67-68]計算各時間節(jié)點無人車的可行駛空間,以此判斷是否為規(guī)劃模塊缺陷.具體地說,若不存在任何可行駛空間但仍然發(fā)生了碰撞(例如堵車時被后車追尾),則認(rèn)為這不是無人車負(fù)主責(zé)的事故,即該事故不是由規(guī)劃模塊缺陷導(dǎo)致;反之,本文則認(rèn)為規(guī)劃模塊是該碰撞事故的主責(zé)模塊.
現(xiàn)有的仿真模糊測試在匯報了事故場景后,通常僅依靠純?nèi)斯さ姆绞竭M(jìn)行歸因分析.因此,在本實驗中,本文嘗試將所提歸因分析方案與人工分析做對比,以體現(xiàn)本文方案優(yōu)勢.
在人工事故歸因分析方面:給定仿真環(huán)境下的無人車碰撞事故,本文總計邀請了4 位無人駕駛系統(tǒng)領(lǐng)域的專家來分析事故對應(yīng)的缺陷模塊.他們都曾為主流開源無人駕駛系統(tǒng)Apollo 或Autoware 提交過漏洞修復(fù)的commit,對這2 款無人駕駛系統(tǒng)的模塊結(jié)構(gòu)與代碼實現(xiàn)有著較深的了解.具體地說,為避免人工分析的錯誤,各事故場景的歸因分析結(jié)果將由2 位專家進(jìn)行交叉驗證.該人工驗證所得的事故主責(zé)模塊也將作為衡量本文所提方案的基準(zhǔn)數(shù)據(jù).
在待歸因事故場景方面:本文從4.3 節(jié)所述的50 類交通事故中,各隨機(jī)挑選了1 例事故場景作為待歸因分析的對象.同類事故中,雖然不同事故場景的場景參數(shù)不同,但它們的事故特性和事故主體一致,極大概率是由相同的無人車系統(tǒng)缺陷導(dǎo)致的碰撞.因此,本文僅從每類事故中選取1 例作為歸因分析的對象.此外,這50 例碰撞事故涵蓋了不同的交通路況、無人車駕駛?cè)蝿?wù)以及環(huán)境狀態(tài),能夠全面且可信地評估事故歸因分析方案的可靠性.
在閾值設(shè)置方面:在該實驗中,本文統(tǒng)一將感知模塊、預(yù)測模塊以及控制模塊的功能差距閾值設(shè)置為1 m.特別地,若感知模塊或預(yù)測模塊出現(xiàn)了嚴(yán)重的運(yùn)行時錯誤(如完全無法探知某物體的存在與運(yùn)動軌跡或認(rèn)為空曠處存在某物體),本文直接將相應(yīng)的模塊視作事故主責(zé)模塊.
在實驗環(huán)境方面:本文使用3.3 節(jié)和3.4 節(jié)中介紹的服務(wù)器開展該實驗.
表4 展示了本實驗的評估結(jié)果.本文能夠正確分析出44 例事故的主責(zé)模塊.雖然該準(zhǔn)確率(44/50)略低于專家分析,但本文所提的自動化工具不要求測試人員具有豐富的無人駕駛安全領(lǐng)域知識,具有高度的靈活性與可用性.本文分析了6 例歸因錯誤的事故場景,發(fā)現(xiàn)錯誤原因主要有2 類:1)其中4 例由可行駛空間計算的錯誤導(dǎo)致.具體地說,在計算可行駛空間時,本文并未考慮無人車所在道路是否可以變道或逆行,結(jié)果導(dǎo)致無法規(guī)避的碰撞事故被錯誤地認(rèn)為是由規(guī)劃模塊缺陷導(dǎo)致的事故.2)剩余2 例事故場景中,本文發(fā)現(xiàn)功能差距最大的模塊并非事故主責(zé)模塊.這2 例事故均為高速駕駛場景,在碰撞前空曠路段的直線高速行駛過程中,因不可避免的系統(tǒng)延時導(dǎo)致控制模塊的功能差距高達(dá)2.3 m 以上.然而,碰撞發(fā)生的關(guān)鍵原因是,無人駕駛系統(tǒng)沒有準(zhǔn)確預(yù)測前車的減速行為.雖然該預(yù)測誤差僅為0.9 m 左右,但直接導(dǎo)致了無人車沒有及時剎車,造成追尾碰撞.
Table 4 Assessment Results on Accident Root Cause Analysis表4 事故歸因分析的評估結(jié)果
此外,由表4 可知,本文所提的自動化方案平均僅需0.05 h 就可完成1 例事故場景的歸因分析.相比之下,具有豐富領(lǐng)域知識的安全專家需要約4.4 h 才可完成這一分析任務(wù).這直接表明,本文工作能夠大幅度地提高事故歸因分析的效率,降低事故分析的人工成本.
圖7 展示了本文工作從Apollo 6.0 中找到的1 處代碼缺陷,場景如圖7(b)所示.在無人車經(jīng)過一處交叉路口時,右側(cè)同時橫向駛來一輛速度極慢的灰色車輛,無人車?yán)響?yīng)觀察并預(yù)測到該車輛將出現(xiàn)在前方規(guī)劃的道路上,并做出減速決策.然而,Apollo 系統(tǒng)并沒有對該車輛進(jìn)行任何的軌跡預(yù)測,導(dǎo)致無人車徑直駛過十字路口,并最終與灰色車輛產(chǎn)生碰撞.
Fig.7 An example design flaw in Apollo 6.0圖7 Apollo 6.0 中的設(shè)計缺陷示例
本文通過采用所提的事故歸因分析方法,將導(dǎo)致該場景的缺陷定位于預(yù)測模塊.隨后,經(jīng)過人工的模塊內(nèi)代碼分析,定位于缺陷代碼的位置.如圖7(a)所示,在對周圍駕駛車輛進(jìn)行預(yù)測時,Apollo 定義了靜止障礙物速度閾值來對抗擾動,將低于該速度的車輛統(tǒng)一認(rèn)定為靜止的障礙物.然而,Apollo 關(guān)于該閾值的默認(rèn)值(3.6 km/h)較高.該不合理的設(shè)置將導(dǎo)致系統(tǒng)無法對一些低速車輛進(jìn)行軌跡預(yù)測,從而有可能導(dǎo)致交通事故的發(fā)生.
本文所提的歸因分析方案僅能定位到事故的缺陷模塊,而非具體的代碼片段.雖然該模塊定位信息能夠輔助缺陷的確認(rèn)與修復(fù),但仍然需要較多的人力進(jìn)行模塊內(nèi)代碼的溯源分析.鑒于此,本文認(rèn)為未來工作可以著眼于模塊內(nèi)的缺陷根源分析,通過充分理解事故場景的語義信息,結(jié)合模塊內(nèi)代碼執(zhí)行的控制流與數(shù)據(jù)流信息,實現(xiàn)更細(xì)粒度的缺陷定位.
面向無人駕駛系統(tǒng)的仿真模糊測試技術(shù)旨在將傳統(tǒng)的模糊測試技術(shù)與仿真測試技術(shù)結(jié)合,自動地挖掘與分析易導(dǎo)致交通事故的無人駕駛系統(tǒng)缺陷.然而,該研究領(lǐng)域仍處于起步階段,現(xiàn)有工作仍然存在較大缺陷,制約了其安全應(yīng)用.鑒于此,本文首先嘗試構(gòu)建仿真模糊測試的框架,其包含種子場景生成、事故挖掘、事故分類和事故歸因分析四大關(guān)鍵模塊.隨后,本文系統(tǒng)性地分析了現(xiàn)有工作在實現(xiàn)四大模塊時的不足之處.最終,本文嘗試提出可行的解決思路,并將這些思路直接用于主流開源無人駕駛系統(tǒng)的安全測評,以體現(xiàn)其可行性和優(yōu)越性.結(jié)合實際的安全測評結(jié)果,本文進(jìn)一步指出該領(lǐng)域未來可能的發(fā)展方向,為后續(xù)的研究工作提供可靠的指導(dǎo)意見.
作者貢獻(xiàn)聲明:戴嘉潤負(fù)責(zé)論文的框架設(shè)計、實驗設(shè)計以及論文撰寫;李忠睿負(fù)責(zé)論文初稿撰寫、圖表繪制和實驗數(shù)據(jù)統(tǒng)計;張琬琪參與了論文的修改潤色;張源與楊珉關(guān)于論文選題和寫作提供了指導(dǎo)性建議.