陳君毅 馮天悅 劉力豪 吳旭陽
(同濟大學(xué),上海 201804)
主題詞:仿真測試 決策規(guī)劃系統(tǒng) 場景生成 OpenSCENARIO
自動駕駛系統(tǒng)面臨的駕駛環(huán)境具有復(fù)雜性和不確定性,這對其決策規(guī)劃系統(tǒng)提出了巨大挑戰(zhàn)[1-2]。為尋找系統(tǒng)缺陷,提高安全性,有必要對自動駕駛決策規(guī)劃系統(tǒng)進行測試。
現(xiàn)有的自動駕駛測試技術(shù)中,基于場景的仿真測試不僅能提高測試的可重復(fù)性和安全性,而且可以通過自動測試和加速測試等方法降低時間和經(jīng)濟成本[3],大幅提高決策規(guī)劃系統(tǒng)的測試效率?;趫鼍暗姆抡鏈y試需預(yù)先設(shè)計生成測試場景。飛馬(PEGASUS)項目提出了場景表示的3 個抽象層次,即功能場景、邏輯場景和具體場景,為測試場景的結(jié)構(gòu)化生成奠定了基礎(chǔ)[4]?;谏鲜鰣鼍皩哟?,目前已有較多的自動駕駛仿真測試場景生成研究:針對功能場景和邏輯場景,Gelder 通過將真實場景參數(shù)化,得到邏輯場景的參數(shù)空間,為生成具體場景提供基礎(chǔ)[5];Li 基于本體論描述自動駕駛場景,并在此基礎(chǔ)上,采用組合測試方法生成具體場景所需的參數(shù)[6];Bagschik 基于層級模型構(gòu)建了結(jié)構(gòu)化的功能場景[4];Menzel基于關(guān)鍵字將功能場景轉(zhuǎn)換至邏輯場景,為具體場景生成提供基礎(chǔ),但其具體關(guān)鍵字的描述并不清晰[7]。在具體場景方面:GeoScenario 采用領(lǐng)域特定語言表示具體場景,但格式復(fù)雜[8];CARLA[9]和AirSim[10]等仿真軟件采用python腳本生成具體場景,使場景具有良好的可讀性,但難以實現(xiàn)具體場景的自動化生成。國際自動化及測量系統(tǒng)標準協(xié)會(Association for Standardisation of Automation and Measuring Systems,ASAM)制定并推廣的OpenX 標準中,OpenSCENARIO作為動態(tài)場景格式,描述了OpenDrive 靜態(tài)場景即道路上所發(fā)生的事件[11],并采用了可擴展標記語言,使其易于解析的同時保證了場景內(nèi)大部分元素的可重用性。
綜上所述,已有較多功能場景和邏輯場景生成的相關(guān)研究,為具體場景的生成提供了基礎(chǔ)。場景文件作為具體場景的載體,也有較多的可用格式。但在實際仿真測試中,基于特定場景格式編寫生成具體場景文件較為復(fù)雜,目前還缺少相應(yīng)的自動化生成方法。因此,本文基于OpenX標準中的場景格式,提出一種面向決策規(guī)劃系統(tǒng)功能測試的具體場景自動化生成方法,以提高決策規(guī)劃系統(tǒng)測試的具體場景生成效率,并將該方法應(yīng)用于交通擁堵自動駕駛(Traffic Jam Pilot,TJP)功能的仿真測試,驗證其有效性和高效性。
為保證功能場景的結(jié)構(gòu)化,本文基于層級模型定義了面向決策規(guī)劃系統(tǒng)的功能場景。層級模型的第1~6 層分別為基礎(chǔ)道路、交通基礎(chǔ)設(shè)施、臨時靜態(tài)障礙物、交通參與者、環(huán)境和電子通信設(shè)施[12]。針對決策規(guī)劃系統(tǒng)的測試需求,分析得到其必需的輸入為第1層道路拓撲結(jié)構(gòu)、第2層提供的交通環(huán)境信號和第4層中交通參與者的信息(包括自車在內(nèi)的靜態(tài)和動態(tài)交通參與者的位置與動作信息)?;诖?,本文將面向決策規(guī)劃系統(tǒng)測試的功能場景定義為一定道路拓撲結(jié)構(gòu)和交通信號條件下的自車與其他交通參與者的不同位置和動作的組合。
基于上述功能場景定義,本文提取道路拓撲結(jié)構(gòu)、交通信號、自車和其他交通參與者等功能場景關(guān)鍵字并映射為相應(yīng)參數(shù),以構(gòu)建參數(shù)空間,實現(xiàn)邏輯場景的生成。邏輯場景的參數(shù)空間包含參數(shù)類型和參數(shù)范圍,其中,由功能場景關(guān)鍵字映射得到的參數(shù)類型稱為關(guān)鍵參數(shù)類型,后續(xù)生成具體場景所需的其他缺省參數(shù)類型稱為非關(guān)鍵參數(shù)類型,各類型參數(shù)的范圍根據(jù)測試需求確定。不同功能下決策規(guī)劃系統(tǒng)所需輸入不同,故映射的關(guān)鍵參數(shù)類型需對應(yīng)功能具體分析,考慮到部分參數(shù)類型的通用性,本文分析得到如表1 所示的映射關(guān)系。
表1 關(guān)鍵字與關(guān)鍵參數(shù)類型的映射關(guān)系
針對表1中無法直接賦值的關(guān)鍵參數(shù)類型,本文將進一步細分以明確定義?;凇豆仿肪€設(shè)計規(guī)范》中對道路結(jié)構(gòu)幾何元素的劃分[13],結(jié)合決策規(guī)劃系統(tǒng)所需的道路信息,本文將拓撲類型劃分為典型的直道、彎道、上、下匝道、路口、坡道等。根據(jù)自車與其他交通參與者在道路拓撲結(jié)構(gòu)上的位置關(guān)系,考慮到僅在一定范圍內(nèi)的其他交通參與者會影響自車決策規(guī)劃,對相對位置進行有效類等價劃分[14],通過建立特定坐標系得到各位置編號,以便后續(xù)的數(shù)據(jù)轉(zhuǎn)換,圖1 所示為直道拓撲結(jié)構(gòu)下可能的位置編號示例。
圖1 直道拓撲結(jié)構(gòu)的位置編號示例
對于動作參數(shù),由于不同交通參與者動作特征不同,首先劃分自車和其他交通參與者的動作類別并給出對應(yīng)參數(shù)。目前,有關(guān)車輛動作類別的分析已有較多研究[15],其中自動駕駛車輛所有動作可視為在全局路徑規(guī)劃下基于環(huán)境感知和自車狀態(tài)所做的決策規(guī)劃結(jié)果,本文統(tǒng)一稱為自動駕駛動作,對應(yīng)參數(shù)為全局路徑規(guī)劃所需的目的地坐標?;赗igolli 對駕駛員動作的分解[16],將自然駕駛車輛動作分為加速、減速、勻速、左換道、右換道、左轉(zhuǎn)、右轉(zhuǎn)等原子動作。其中,變道和轉(zhuǎn)彎的相關(guān)動作模型多基于軌跡和時間[17],由于軌跡種類較多,可根據(jù)仿真軟件具體設(shè)定,故采用持續(xù)時間作為統(tǒng)一的動作參數(shù)。其中,勻速動作對應(yīng)速度參數(shù),加/減速動作離散為多段勻加/減速過程,對應(yīng)參數(shù)為加/減速度和持續(xù)時間。此外,由于非車輛的交通參與者(如行人或動物)的行為自由度較高,難以對其動作特征進行建模,故將其動作視為多段直線行駛,劃分為勻速和變速動作?;诖耍鹘煌▍⑴c者的動作類別和對應(yīng)參數(shù)如表2所示。
表2 各交通參與者的動作類別和對應(yīng)參數(shù)
此外,在實際仿真測試中,需明確各動作的開始時刻,故動作參數(shù)還必須包含觸發(fā)條件這一子參數(shù)。在場景生成時,基于時間的觸發(fā)條件易于設(shè)置,最為簡便,但考慮到?jīng)Q策規(guī)劃系統(tǒng)受其他交通參與者影響,由于其他交通參與者動作的先驗未知性,基于時間觸發(fā)的動作難以對自車決策規(guī)劃系統(tǒng)進行考驗。因此,為滿足測試需求,結(jié)合常規(guī)的仿真軟件設(shè)置條件,本文將動作觸發(fā)條件這一子參數(shù)分為基于時間、事件和空間觸發(fā)。其中,基于時間的觸發(fā)條件作為默認條件,基于事件或空間觸發(fā)的動作在功能場景描述時還需加以說明,并在參數(shù)空間內(nèi)進一步確定對應(yīng)的觸發(fā)條件參數(shù)。
OpenX格式具有可擴展性和可重用性等優(yōu)點,本文采用該格式生成具體場景文件。鑒于在測試中靜態(tài)場景相對單一固定,在OpenDrive靜態(tài)場景確定的基礎(chǔ)上,本節(jié)通過分析邏輯場景參數(shù)空間與OpenSCENARIO 格式的映射關(guān)系,基于功能場景關(guān)鍵字自動化生成Open?SCENARIO格式的具體場景文件。
首先分析OpenSCENARIO 格式,將其劃分為目錄、對象、故事板3 層結(jié)構(gòu),并依次細分為如圖2 所示的內(nèi)容,用于對應(yīng)邏輯場景參數(shù)空間。
圖2 OpenSCENARIO格式分析
基于上述格式分析,將非關(guān)鍵的OpenSCENARIO內(nèi)容,如車輛目錄、控制器等,映射為非關(guān)鍵參數(shù),在參數(shù)空間內(nèi)作為缺省值以簡化轉(zhuǎn)換過程,最終得到如表3所示的OpenSCENARIO 內(nèi)容與關(guān)鍵字及各參數(shù)類型的映射關(guān)系。其中,道路拓撲結(jié)構(gòu)和交通信號對應(yīng)的關(guān)鍵參數(shù)在路網(wǎng)文件即OpenDrive 中賦值。在此基礎(chǔ)上,根據(jù)測試需求,確定各參數(shù)類型的參數(shù)范圍,得到完整的參數(shù)空間。
表3 OpenSCENARIO、關(guān)鍵字及參數(shù)類型映射關(guān)系
為生成OpenSCENARIO 格式的場景文件,本文根據(jù)上述映射關(guān)系,采用模塊化的XML 文檔對象模型(XML Document Object Model,XML DOM)編寫自動化腳本。該自動化腳本基于功能場景關(guān)鍵字對構(gòu)建的參數(shù)空間進行采樣,并根據(jù)參數(shù)空間和OpenSCENARIO格式的映射關(guān)系,采用XML DOM生成相應(yīng)的OpenSCE?NARIO 內(nèi)容,得到完整的OpenSCENARIO 格式具體場景文件。
至此,本文實現(xiàn)了面向決策規(guī)劃系統(tǒng)功能測試的功能場景至具體場景的自動化生成,總體流程如圖3所示。
為驗證上述具體場景自動化生成方法,本文將其應(yīng)用于TJP功能的仿真測試。
TJP 功能是針對行車過程中常見的交通擁堵路況開發(fā)的高等級自動駕駛功能[18],要求的車輛最高車速在40~60 km/h范圍內(nèi),具體的功能細分如表4所示。
圖3 具體場景自動化生成流程
表4 TJP功能
通過功能分析,生成相應(yīng)的符合測試需求的功能場景。為滿足交通擁堵路況這一功能激活條件,首先選取常見的3車道直道作為道路拓撲類型,且設(shè)定交通參與者為1 輛自車、5 輛他車以實現(xiàn)擁堵路況,其次,由于擁堵路況中限速等交通信號為冗余信息,故不作設(shè)定,最后,結(jié)合表4 具體功能,通過設(shè)定各車輛的初始位置與動作,構(gòu)建功能場景。
基于擁堵路況這一功能激活條件,設(shè)定各車輛的初始位置如圖4 所示,根據(jù)具體功能的測試需求,設(shè)定各車輛動作:為測試功能X1、X2、X6、Y1 和Y2,設(shè)定各車輛保持勻速;為測試功能X4、Y4和Y5,設(shè)定C5換道;為測試功能X3 和S1,設(shè)定自車正前方車輛減速至停車。為在同一測試用例中覆蓋盡可能多的功能測試,本文將上述車輛動作合并為同一功能場景的動作序列。最后,基于已有的OpenDrive 靜態(tài)場景,結(jié)合前文有效類等價劃分的位置編號,生成功能場景,為提高后續(xù)參數(shù)空間的生成效率,以字符串表示各車輛動作,并且采用JSON格式統(tǒng)一組織得到如下功能場景示例:
圖4 各車輛初始位置
本節(jié)基于上述功能場景,映射關(guān)鍵字得到相應(yīng)的參數(shù)空間。針對道路拓撲結(jié)構(gòu)和交通信號,根據(jù)已有的OpenDrive 高速公路地圖,選取合適區(qū)域直接得到對應(yīng)參數(shù),故僅映射得到動態(tài)場景,即自車和他車的關(guān)鍵參數(shù)類型:自車代號E、他車的車輛代號C1~C5、初始橫、縱坐標Xm和Ym(m=0,1,2為特定坐標系下的位置編號)、初速度v1、動作編號Ax(x=1,2,3…)、勻速動作速度vc、換道動作持續(xù)時間tcl、減速動作減速度adec、減速動作減速時長tdec、自動駕駛動作目的地橫、縱坐標Xd和Yd、動作觸發(fā)時刻t、車輛速度v。
為生成參數(shù)空間,賦予各關(guān)鍵參數(shù)一定值或范圍,并添加相應(yīng)的約束條件如表5 所示。根據(jù)道路拓撲結(jié)構(gòu)和各車輛排列關(guān)系,將車輛初始位置劃為3列2行,對應(yīng)橫坐標為X0、X1、X2,縱坐標為Y0、Y1,添加約束條件1;由于他車首個動作為勻速行駛,故各車輛初速度v1Cn與首個動作參數(shù)即勻速的速度vcA1Cn相等,添加約束條件2;由于TJP功能要求最高車速為40~60 km/h,故設(shè)定各車輛速度vCn均小于40 km/h,添加約束條件3;為便于設(shè)置,各車輛首個動作默認觸發(fā)時刻tA1Cn為0 s,添加約束條件4。
基于上述約束條件,結(jié)合OpenDrive地圖,最終生成如表6所示的參數(shù)空間,各車輛初始位置坐標根據(jù)編號依次對應(yīng),其中Y0設(shè)為一定范圍的數(shù)值,XA1E、YA1E為自車首個動作即自動駕駛設(shè)定的目的地橫、縱坐標,tclA2C5為車輛C5 的第2 個動作換道的持續(xù)時間,tA2C5、tA3C5分別為車輛C5 第2 個、第3 個動作的觸發(fā)時刻,adecA3C5、tdecA3C5分別為車輛C5第3個動作減速的減速度和減速時長。
表5 參數(shù)空間約束條件
表6 參數(shù)空間
最后,采用自動化腳本,基于功能場景關(guān)鍵字對上述參數(shù)空間進行采樣,作為示例,參數(shù)Y0和tA3C5的離散步長分別設(shè)為1 m 和1 s,最終生成18 個OpenSCENARIO格式的具體場景文件。
此外,采用仿真軟件VTD(Virtual Test Drive)運行上述文件,驗證仿真文件的格式和參數(shù),以及仿真過程中車輛初始位置及執(zhí)行動作是否正確。測試過程如圖5 所示:第0~4 s,E 與前車保持一定車距和車速跟車;第4~8 s,C5變道至自車前方,E減速避讓;第8~12 s,C5減速至靜止,E減速且變道;第12 s后,E跟隨前車行駛。測試過程中他車皆按給定參數(shù)行駛,符合上述驗證要求。同時,該場景也實現(xiàn)了對前文所述的自車TJP功能中X1、X2、X4、X6、Y1、Y2、Y4和Y5功能的測試。
圖5 測試過程
綜上,本文所提出的方法在構(gòu)建功能場景和相應(yīng)的邏輯場景參數(shù)空間基礎(chǔ)上,通過自動化腳本即可批量生成OpenSCENARIO 場景文件。相比之下,若手動編寫生成上述18 個具體場景文件,則需在完整編寫第1 個OpenSCENARIO場景文件的基礎(chǔ)上,修改代碼中的相應(yīng)參數(shù)以逐個生成其余17 個文件。2 種方法代碼長度對比如表7所示,手動編寫方法的代碼長度約為自動化生成方法的22倍。此外,當功能場景更復(fù)雜、測試所需具體場景數(shù)量更多時,該自動化生成方法能更顯著地提高具體場景文件的生成效率。
表7 2種具體場景文件生成方法的代碼長度對比
針對決策規(guī)劃系統(tǒng)仿真測試中場景文件生成效率低的問題,本文提出了一種具體場景自動化生成方法?;趯蛹壞P停瑯?gòu)建了面向決策規(guī)劃系統(tǒng)的功能場景,并在此基礎(chǔ)上,提取功能場景關(guān)鍵字生成了邏輯場景參數(shù)空間;分析了OpenSCENARIO 格式與參數(shù)空間的映射關(guān)系,得到自動化腳本,從而對參數(shù)空間采樣,自動化批量生成了具體場景文件。本文通過分析TJP功能,構(gòu)建了相應(yīng)的功能場景,并應(yīng)用上述方法自動化批量生成了18個具體場景文件,在仿真軟件VTD中運行測試,驗證了該方法的有效性和高效性。該方法減少了場景文件的手動編寫工作,提高了決策規(guī)劃系統(tǒng)仿真測試場景的生成效率。
本文提出的方法在邏輯場景參數(shù)空間的真實性方面和具體場景合理性方面仍存在一定局限性:其一,目前的參數(shù)空間根據(jù)測試需求人為指定參數(shù)范圍,未考慮測試場景參數(shù)的真實分布特性,后續(xù)將研究基于自然駕駛數(shù)據(jù)的邏輯場景參數(shù)空間生成方法,提高具體場景的真實性;其二,由于邏輯場景存在他車數(shù)量多、動作的對應(yīng)參數(shù)范圍廣等問題,在對參數(shù)空間采樣生成具體場景時,難以通過人為計算排除所有他車之間相互碰撞的場景,后續(xù)將研究對應(yīng)的自動化場景篩選方法,提高具體場景的合理性。