ข้ามไปยังเนื้อหา

OpenSCENARIO คืออะไร?

OpenSCENARIO คือมาตรฐานเปิดของ ASAM สำหรับอธิบายสถานการณ์ขับขี่แบบไดนามิก คือพฤติกรรมของยานพาหนะหลัก (ego) และผู้เข้าร่วมจราจรรายอื่นตามลำดับเวลา ในรูปแบบที่ซิมูเลเตอร์นำไปเล่นซ้ำได้ ปัจจุบันถือเป็นรูปแบบไฟล์แลกเปลี่ยนมาตรฐานสำหรับการทดสอบระบบขับขี่อัตโนมัติบนฐานสถานการณ์

มีสเปกสองชุดที่ใช้ชื่อเดียวกันแต่เป็นอิสระต่อกันเกือบทั้งหมด

  • OpenSCENARIO 1.x — รูปแบบ XML เสถียรและรองรับกว้างขวาง เวอร์ชัน 1.3 คือเป้าหมาย production หลักของเครื่องมือส่วนใหญ่ในปัจจุบัน
  • OpenSCENARIO 2.0 / DSL — ภาษาเฉพาะโดเมนสำหรับสถานการณ์แบบ abstract, parametric และ probabilistic ใหม่กว่า มีความสามารถสูงกว่า และเริ่มมีเครื่องมือรองรับมากขึ้นเรื่อย ๆ

สองรูปแบบนี้ใช้แทนกันไม่ได้ แต่ 1.x คือสิ่งที่ซิมูเลเตอร์และไปป์ไลน์ทดสอบ SOTIF / ISO 21448 ส่วนใหญ่ใช้อยู่ในปัจจุบัน

ไฟล์ 1.x โดยทั่วไปประกอบด้วย

  • การอ้างอิง RoadNetwork — มักชี้ไปยังไฟล์ OpenDRIVE .xodr และอาจมาพร้อมไฟล์ scene-graph เช่น .osgb
  • ส่วน Entities — ยานพาหนะ คนเดินเท้า และวัตถุอื่น ๆ
  • Storyboard — act, maneuver และ event ที่แต่ละ entity ดำเนินการตามลำดับเวลา
  • Init action — ตำแหน่งเริ่มต้น ความเร็ว และค่าพารามิเตอร์

XML อ่านง่ายเมื่อเป็นสถานการณ์เดียวที่สั้น แต่พอขยายไปหลายสิบตัวแปรก็ดูแลรักษายาก ตรงนี้เองที่เครื่องมือสร้างสถานการณ์และ DSL เข้ามาช่วย

  • เขียน XML ด้วยมือ — พบบ่อยในทีมขนาดเล็กและ fixture สำหรับ ground-truth
  • DSL / codegen — OpenSCENARIO 2.0 DSL, Scenic หรือ generator ที่พัฒนาขึ้นเองภายในองค์กร สร้าง XML จาก description ระดับสูงกว่า
  • Python library — scenariogeneration (เดิมชื่อ pyoscx / pyodrx) มี API แบบเขียนโปรแกรมสำหรับ OpenSCENARIO + OpenDRIVE ครอบคลุมตั้งแต่ OpenSCENARIO V1.0 ถึง V1.3.1
  • Scenario engine ในตัวซิมูเลเตอร์ — CARLA ScenarioRunner สร้างและรันสถานการณ์สำหรับ CARLA รองรับทั้ง Python และ OpenSCENARIO 1.0 / 2.0
  • โปรแกรมแก้ไขแบบ visual — MathWorks RoadRunner (ส่งออกทั้ง XML และ DSL), Truevision Designer (เน้น OpenDRIVE), Blender Driving Scenario Creator (add-on ของ Blender) และ drawtonomy (สร้าง storyboard OpenSCENARIO 1.x แบบเต็มรูปแบบและรันในเบราว์เซอร์ผ่าน esmini-WASM)

การสร้างสถานการณ์ในระดับ production มักใช้หลายแนวทางร่วมกัน — บ่อยครั้งเป็น Python library หรือ DSL สำหรับตัวสถานการณ์เอง ควบคู่กับโปรแกรมแก้ไขแบบ visual สำหรับโครงข่ายถนน

drawtonomy คือ สภาพแวดล้อมสร้างและรัน OpenSCENARIO 1.x บนเบราว์เซอร์ — ไวท์บอร์ดที่ฉากซึ่งวาดขึ้นกลายเป็น storyboard ที่รันได้จริง รองรับทั้งการนำเข้า OpenSCENARIO 1.x และส่งออก OpenSCENARIO 1.0–1.2 (1.3 กำลังจะตามมา) พร้อมกับ OpenDRIVE 1.8

  • วางเลน ทางแยก ยานพาหนะ คนเดินเท้า สัญญาณไฟจราจร และเครื่องหมายบนถนน ลงบนแคนวาส 2D แบบมองจากด้านบน
  • สร้าง storyboard แบบ visual — phase, event, action ทั้ง 35 แบบ และ trigger condition ทั้ง 19 แบบ — แล้วรันในเบราว์เซอร์ผ่าน esmini ที่คอมไพล์เป็น WebAssembly พร้อมพรีวิว 3D (กล้อง Chase / มุมสูงแบบนก / คนขับ) ควบคู่ไปกับแคนวาส 2D
  • นำเข้าคู่ไฟล์ .xosc + .xodr ที่มีอยู่แล้วมาแก้ไข หรือส่งออกคู่ไฟล์นี้เพื่อรันบน esmini แบบ native
  • สร้างสถานการณ์จากคำอธิบายภาษาธรรมชาติได้: drawtonomy ร่าง storyboard ขึ้นมา ตรวจสอบผ่าน validation gate สี่ชั้น (รวมถึงการรัน esmini จริง) แล้วนำไปใช้กับแคนวาสให้อัตโนมัติ

ตัวส่งออกตอนนี้สร้างโครงสร้าง OpenDRIVE <junction> / <connection> / <laneLink> และรายการ <signal> ได้แล้ว — ไม่ใช่สิ่งที่อยู่ใน roadmap อีกต่อไป ส่วนที่ต้องแยกแยะเรื่องความแม่นยำคือ: ถนนที่นำเข้าจาก .xodr เดิมโดยไม่ได้แก้ไข จะคงโทโพโลยีทางแยกดั้งเดิมไว้ได้อย่างแม่นยำสูง แต่ทางแยกที่สังเคราะห์ขึ้นจากเลนที่วาดขึ้นใหม่เองยังไม่น่าเชื่อถือเท่า สิ่งที่ยังขาดอยู่คือ parameter sweep และ controller แบบกำหนดเองหรือขับเคลื่อนด้วย ML

ฝูงสถานการณ์ (scenario fleet) — ชุดพารามิเตอร์ขนาดใหญ่ — ยังคงเหมาะกับการสร้างจาก DSL หรือ Python library มากกว่า ซึ่งอยู่นอกขอบเขตของโปรแกรมแก้ไขแบบ visual สิ่งที่ drawtonomy เพิ่มเข้ามาคือเส้นทางแบบ visual ที่รวดเร็วจากไอเดีย (หรือ prompt ภาษาธรรมชาติ) ไปสู่สถานการณ์ที่รันได้และตรวจสอบได้