OpenSCENARIO란
로봇 시뮬레이션에서 "이런 상황을 만들어 테스트해라"를 어떻게 표현할까요? imSim은 시나리오를 코드 스크립트가 아니라 선언적 도메인 언어(DSL) 로 적습니다. 그 언어로 고른 게 자동차 업계 표준인 ASAM OpenSCENARIO 입니다 — 단, 흥미로운 방식으로 빌려 씁니다.
언어는 빌리고, 도메인은 직접 짓는다
OpenSCENARIO는 원래 자율주행차 검증용입니다(차선 변경, 차간 거리, 추월 같은 액션). 그 도메인 액션들은 로봇·무인체계엔 안 맞습니다. 그래서 imSim은 OpenSCENARIO의 언어 문법과 타입 시스템만 가져오고, 실제 동작 액션은 전부 자체 개발했습니다.
도식 렌더링 중…
- ASAM 층 —
scenario/serial/parallel/wait/emit같은 문법과time/length/speed/angle같은 SI 단위 타입. 이건 그대로 씁니다. - 실행 엔진 층 — 시나리오를 Behavior Tree로 컴파일해 tick하는 엔진.
- 도메인 액션 층 —
로봇 스폰,센서 노이즈 주입,교전 규칙 전환등. ASAM의 자동차 액션은 하나도 안 쓰고 전부 우리가 만든 것.
💡 왜 이렇게? 표준 언어를 차용하면 도구·파서·검증 생태계와 호환되고, 도메인 액션을 자체 구축하면 로봇·국방 같은 분야의 자유도를 얻습니다 — "표준 호환 + 도메인 자유"를 동시에 가져가는 설계입니다.
시나리오 = 코드 (Scenario-as-Code)
이 DSL의 핵심 가치는 시나리오 로직이 한 파일에 선언적으로 담긴다는 점입니다. 편성·동작·검증·판정이 사람이 읽을 수 있는 텍스트로 적히고, end-user는 이 언어만으로 같은 결과를 재현할 수 있습니다.
scenario:
do serial:
spawn 로봇들
parallel: 순찰 / 장애물 등장
assert 충돌 == 0
set_verdict(...)
⚠️ 시나리오 로직이 코드 스크립트로 새면 안 된다 — 절반은 DSL, 절반은 별도 파이썬 헬퍼에 흩어지면 "데모 한 번"용이 됩니다. 의도가 도메인 언어에 self-contained로 담겨야 납품 가능한 구조입니다. (이 self-containment 철학은 별도 글에서 깊이 다룹니다.)
한 줄 정리
📌 imSim은 ASAM OpenSCENARIO의 언어·타입만 차용하고 로봇·군사 도메인 액션은 직접 만든 3계층 DSL을 쓴다. 시나리오는 사람이 읽는 선언형 텍스트(scenario-as-code)로, 의도가 한 파일에 self-contained로 담긴다.
