跳到內容

OpenSCENARIO 是什麼?

OpenSCENARIO 是 ASAM 制定的開放標準,用於描述動態駕駛場景——自駕車與其他交通參與者隨時間推移的行為,並以模擬器可重播的格式呈現。它是自動駕駛系統場景測試的事實交換格式。

這個名稱底下存在兩個相互獨立的規格:

  • OpenSCENARIO 1.x — 以 XML 為基礎。穩定、相容性廣。目前大多數工具以 1.3 修訂版為主要目標。
  • OpenSCENARIO 2.0 / DSL — 用於抽象、參數化與機率性場景的領域特定語言,較新、表達能力更強,工具支援持續成長中。

兩種格式不能互換,但當前大多數模擬器與 SOTIF / ISO 21448 測試流程仍以 1.x 為主。

一個 1.x 場景通常包含:

  • RoadNetwork 參考——通常是 OpenDRIVE .xodr 檔案,有時搭配 .osgb 場景圖檔案。
  • Entities 區塊——車輛、行人及其他物件。
  • Storyboard——各實體依時間順序執行的幕(act)、動作與事件。
  • Init 動作——起始位置、速度與參數指定。

單一短場景以 XML 閱讀尚算直觀,但一旦擴展到數十個變體,維護難度便急速上升。這正是編寫工具與 DSL 的切入點。

  • 手寫 XML。 適合小型團隊與基準測試用例。
  • DSL / 程式碼生成。 OpenSCENARIO 2.0 DSL、Scenic,或自行開發的生成器,將高層描述轉換為 XML。
  • Python 函式庫。 scenariogeneration(前身為 pyoscx / pyodrx)提供 OpenSCENARIO + OpenDRIVE 的程式化 API,涵蓋 OpenSCENARIO V1.0 至 V1.3.1。
  • 模擬器內建的場景引擎。 CARLA ScenarioRunner 在 CARLA 中定義並執行場景,支援 Python 介面與 OpenSCENARIO 1.0 / 2.0。
  • 視覺化編輯器。 MathWorks RoadRunner(可匯出 XML 與 DSL)、Truevision Designer(以 OpenDRIVE 為核心)、Blender Driving Scenario Creator(Blender 外掛),以及 drawtonomy(能編寫完整 OpenSCENARIO 1.x 故事板,並在瀏覽器中以 esmini-WASM 執行)。

實際的場景製作往往同時使用多種工具——通常以 Python 函式庫或 DSL 撰寫場景邏輯本身,搭配視覺化編輯器處理道路網路。

drawtonomy 是一個以瀏覽器為基礎的 OpenSCENARIO 1.x 編寫與執行環境——一塊白板,你在上面畫出的場景會直接變成可執行的故事板。它匯入 OpenSCENARIO 1.x,匯出 OpenSCENARIO 1.0–1.2(1.3 即將支援),並同時支援 OpenDRIVE 1.8:

  • 在 2D 俯視畫布上放置車道、路口、車輛、行人、紅綠燈與道路標線。
  • 以視覺化方式建構故事板——階段、事件、全部 35 種 action,以及全部 19 種 trigger 條件——並在瀏覽器中執行,底層是編譯為 WebAssembly 的 esmini,同時在 2D 畫布旁提供 3D 預覽(跟隨 / 鳥瞰 / 駕駛視角鏡頭)。
  • 匯入既有的 .xosc + .xodr 組合並編輯,或匯出這組檔案供原生 esmini 環境執行。
  • 從自然語言描述生成場景:drawtonomy 會草擬一份故事板,對照四道驗證關卡進行檢查(包含一次實際的 esmini 執行),再套用到畫布上。

匯出器目前已能輸出 OpenDRIVE 的 <junction> / <connection> / <laneLink> 元素與 <signal> 項目——這已經不再是路線圖項目。真正重要的是精度差異:未經編輯、原封不動延續匯入 .xodr 的道路,能以高保真度呈現原始路口拓樸;但從你從零手繪的車道合成出的路口,目前還不夠可靠。仍然缺少的是:參數掃描,以及自訂或 ML 驅動的控制器。

至於場景車隊——大批量的參數化場景——仍然最適合用 DSL 或 Python 函式庫生成,這部分不在視覺化編輯器的範圍內。drawtonomy 的價值在於提供一條快速的視覺化路徑,讓一個想法(或一段自然語言提示)變成可執行、可檢視的場景。