OpenSCENARIO란?
**OpenSCENARIO**는 에고 차량과 주변 교통 참가자가 시간에 따라 어떻게 움직이는지를 시뮬레이터가 그대로 재생할 수 있는 형태로 기술하는 ASAM 개방 표준입니다. 자율주행 시스템을 시나리오 기반으로 테스트할 때 사실상 표준으로 쓰이는 교환 포맷입니다.
이름은 같지만 서로 다른 두 계열
섹션 제목: “이름은 같지만 서로 다른 두 계열”OpenSCENARIO라는 이름 아래 사실상 독립된 두 사양이 존재합니다.
- OpenSCENARIO 1.x — XML 기반. 안정적이고 지원 범위가 넓습니다. 현재 대부분의 도구가 실제 운영 대상으로 삼는 버전은 1.3입니다.
- OpenSCENARIO 2.0 / DSL — 추상적이고 파라메트릭하며 확률적인 시나리오를 표현하기 위한 도메인 특화 언어입니다. 더 최근에 나왔고 표현력도 높으며 지원 도구도 늘고 있습니다.
두 포맷은 서로 호환되지 않습니다. 오늘날 대부분의 시뮬레이터와 SOTIF / ISO 21448 테스트 파이프라인이 실제로 소비하는 쪽은 1.x입니다.
OpenSCENARIO 1.x 파일의 구성
섹션 제목: “OpenSCENARIO 1.x 파일의 구성”1.x 시나리오는 보통 다음 요소로 이루어집니다.
- RoadNetwork 참조 — 대개 OpenDRIVE
.xodr파일이며,.osgb같은 씬 그래프 파일과 함께 쓰이기도 합니다. - Entities 블록 — 차량, 보행자, 기타 객체.
- Storyboard — 엔티티들이 시간 순서대로 수행하는 act, maneuver, event.
- Init 액션 — 시작 위치, 속도, 파라미터 할당.
짧은 시나리오 하나만 다룰 때는 XML도 그럭저럭 읽을 만하지만, 변형이 수십 개로 늘어나는 순간 유지 보수가 순식간에 버거워집니다. 저작 도구와 DSL이 필요해지는 지점이 바로 여기입니다.
흔히 쓰이는 저작 방식
섹션 제목: “흔히 쓰이는 저작 방식”- XML 직접 작성. 소규모 팀이나 기준(ground-truth) 픽스처 제작에서 흔히 씁니다.
- DSL / 코드 생성. OpenSCENARIO 2.0 DSL, Scenic, 또는 자체 제작한 생성기가 고수준 기술(記述)에서 XML을 뽑아냅니다.
- Python 라이브러리. scenariogeneration(과거의
pyoscx/pyodrx)은 OpenSCENARIO V1.0부터 V1.3.1까지 다루는 프로그래밍 API를 제공합니다. - 시뮬레이터 내장 시나리오 엔진. 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 storyboard를 저작하고 브라우저에서 esmini-WASM으로 바로 실행).
실무 시나리오 저작에서는 보통 이 중 여러 방식을 함께 씁니다 — 시나리오 자체는 Python 라이브러리나 DSL로 만들고, 도로 네트워크는 시각적 편집기로 만드는 식입니다.
drawtonomy의 위치
섹션 제목: “drawtonomy의 위치”drawtonomy는 브라우저에서 동작하는 OpenSCENARIO 1.x 저작·실행 환경입니다. 화이트보드에 그린 장면이 그대로 실행 가능한 storyboard가 됩니다. OpenSCENARIO 1.x를 가져오고, OpenSCENARIO 1.0–1.2를 내보내며(1.3은 곧 지원 예정), OpenDRIVE 1.8도 함께 내보낼 수 있습니다.
- 2D 탑다운 캔버스에 차선, 교차로, 차량, 보행자, 신호등, 노면 표시를 배치합니다.
- storyboard를 시각적으로 구성합니다 — phase, event, 액션 35종, 트리거 조건 19종 — 그리고 WebAssembly로 컴파일된 esmini로 브라우저 안에서 바로 실행하며, 2D 캔버스 옆에 3D 프리뷰(추격 / 조감 / 운전자 시점 카메라)도 함께 볼 수 있습니다.
- 기존
.xosc+.xodr쌍을 가져와 편집하거나, 그 쌍을 네이티브 esmini 실행용으로 내보냅니다. - 자연어 설명만으로도 시나리오를 만들 수 있습니다: drawtonomy가 storyboard 초안을 작성하고, 4단계 검증 게이트(실제 esmini 실행 포함)를 통과시킨 뒤 캔버스에 적용합니다.
익스포터는 이제 OpenDRIVE <junction> / <connection> / <laneLink> 구조와 <signal> 항목까지 생성합니다 — 더 이상 로드맵상의 계획이 아니라 실제로 동작하는 기능입니다. 다만 정확도에는 차이가 있습니다: 가져온 .xodr에서 편집 없이 그대로 넘어온 도로는 원본 교차로 위상을 높은 정확도로 유지하지만, 처음부터 그린 차선으로 새로 합성한 교차로는 아직 신뢰도가 충분하지 않습니다. 파라미터 스윕과 커스텀·ML 기반 컨트롤러는 여전히 지원하지 않습니다.
대규모 파라메트릭 배치로 시나리오 묶음(fleet)을 만드는 작업은 여전히 DSL이나 Python 라이브러리가 담당할 영역이며, 시각적 편집기의 역할 범위 밖입니다. drawtonomy가 더해주는 것은 아이디어(또는 자연어 프롬프트)에서 실행 가능하고 검토 가능한 시나리오까지 이르는 빠른 시각적 경로입니다.
관련 읽을거리
섹션 제목: “관련 읽을거리”- Scenario editor — 브라우저에서 phase, event, action, trigger를 저작하고 실행합니다.
- 첫 시나리오 만들기 — 빈 캔버스에서 시작하는 차선 변경 시나리오.
- RoadRunner와 OpenSCENARIO 용어 대조표 — 두 용어 체계를 대응시킨 표입니다.
- OpenDRIVE란?
- esmini란?
- 비교: drawtonomy vs 직접 작성하는 OpenSCENARIO XML