自動駕駛場景模擬標準(二)- OpenSCENARIO
1. OpenSCENARIO概況
OpenSCENARIO定義了模擬場景中的動態內容,如車輛和行人的行為與行為產生的原因。同時,在模擬場景中的靜態內容,可以引用OpenDRIVE和OpenCRG對其進行補充。
OpenSCENARIO跟OpenDRIVE一樣都是基於UML資料模型,也可以匯出XML格式的拓展檔案。OpenSCENARIO透過使用XML定義分層元素的方式提供場景的描述方法,從這些分層的元素中構建場景、交通參與者的屬性和相互關係。
2. OpenSCENARIO主要元素
OpenSCENARIO透過描述動作主題Entities發生的車輛操作Manervers來展現場景。其使用的分層元素包括:
1。 通用道路網的靜態描述。
2。 實體Entities,如在道路上和道路外活動的車輛或行人。
3。 故事板Storyborad,其中包括故事Story,動作Act,車輛操作組ManeuverGroup和操作Maneuvers
4。 觸發器Trigger觸發的事件Event和其條件Condition
5。 利用重用機制(即目錄Catalog和引數宣告ParameterDeclaration)
其中對於OpenSCENARIO最關鍵的三個元素是靜態道路網,實體Entities(交通參與者)和場景中的故事板Storyboard。RoadNetWork相當於Where,Entities相當於Who,Storyboard相當於When和What。這幾種元素共同構成了一個場景。
所以對於一個完整的OpenSCENARIO檔案,其主要包含:
3. OpenSCENARIO檔案內的引用目錄
在上圖
4. 道路網引用
在
引用了。xodr格式得OpenDRIVE檔案和。osgb格式的OpenCRG檔案共同構成了該場景下靜態的道路網。
5. 實體(交通參與者)
交通參與者主要包括小汽車和各種車輛(包括貨車和客車)以及行人。
例如,在如下的實體定義的例子中,包含了三個:
第一個實體是名為Ego的Audi A4的Car。在其Controller下,定義其操控者:
意為此輛車的駕駛者是一個預設的駕駛者,其其他生理特徵也在此被定義。
6. 故事板StoryBoard
故事板是在有了道路網等靜態資訊和定了交通參與者後描述完整的情景。
故事板為場景中的“誰 ”在做 “什麼”和“何時 ”等問題提供了答案。
“什麼時候”:一個Action的startTriggers和stopTriggers,描述某一個動作從何時開始到何時結束。
“誰”:ManeuverGroup是動作的一部分,該將實體作為動作發生者Entities分配給各操作Maneuver。
“什麼”。Maneuvers定義了發生的事情,它們是事件Event的容器。事件控制著模擬中的世界或Entity的相應例項。
其相互關係如下圖所示:
(1)Start/Stop Trigger描述了行為變化什麼時候/在什麼情況下開始/結束(when)。首先設定一個條件,比如兩車距離為50米;然後設定條件觸發的方式(上升沿、下降沿等),比如兩車距離逐漸縮短為50米或逐漸增加為50米時條件觸發。
(2)Actors描述了哪個參與者的行為發生變化(who)。
(3)Maneuver描述了參與者的行為發生的怎樣的變化(what)。Maneuver由一系列Event構成,每個Event描述了一個相對完整的行為,如向左換道、加速等。
Event由具體的Action和該Action發生的條件StartTrigger構成。Action的型別包括PrivateAction、GlobalAction和UserDefinedAction。
其中PrivateAction為參與者可能的動作,包括縱向動作(如速度變化、距離變化)、橫向動作(如換道、橫向偏移)和沿路徑行駛等多種型別;GlobalAction包括環境變化(如天氣、時間和道路附著率)、增減交通參與者、交通流等型別。
7. 故事板的例子:
Overtake的例子(OpenSCENARIO官方例子)
在這個場景中,藍色的前車Ego car以130km/h的速度向前行駛,紫色的後車C2 car以150km/h的速度在同一車道向ego car駛來,在距離ego car30m處c2車進行向左變道然後在超過ego car 5m處向右變道回到了ego car所在的車道。
7。1 初始化
在Storyboard故事板中,首先要進行場景參與者的初始化:
在
7。2 故事及發生條件
初始化之後是定義故事板中的故事及發生條件。
首先定義故事的名字Mystory,這個故事的所有者是A1這輛車,隨後定義故事中的動作的名字MyAct。在MyAct中定義了動作MySequence。其中Actor為這個操作的發生者,此處用了個指標指回了實體owner也就是A1。
在接下來的
定義了兩個動作,一個是向左換道,另一個是向右換道。這樣便完成了整個超車動作。
在第一個Event中,
先描述了超車的動作
在
在
本文一一個換道超車的例子說明了OpenSCENARIO格式在場景描述中的方式。
贊同分享加關注,Next One is coming soon.