콘텐츠로 이동

drawtonomy vs esmini

esminiASAM OpenSCENARIO 1.x의 오픈소스 레퍼런스 시뮬레이터입니다. 스웨덴 ADAS 커뮤니티의 메인테이너들이 공개적으로 개발해 왔고, 이제는 OpenSCENARIO 1.x를 다루는 가장 널리 쓰이는 경량 런타임으로 자리 잡았습니다 — 코드가 깔끔하고 빠르며 동작이 예측 가능해서, drawtonomy를 포함한 사실상 모든 OpenSCENARIO 저작 도구가 esmini를 검증 기준으로 삼습니다. 오랜 시간에 걸쳐 고품질 오픈 런타임을 만들고 관리해 온 esmini 메인테이너들의 작업에 drawtonomy 팀은 깊은 존경을 표합니다.

esmini가 다루는 영역:

  • OpenSCENARIO 1.x 스토리보드를 시뮬레이션하는 네이티브 런타임: 액트, 시퀀스, 매뉴버, 조건부 트리거, 파라미터 선언, 컨트롤러까지 모두 실행합니다.
  • OpenSceneGraph 기반 3D 뷰어와 2D 조감도 뷰, 그리고 CI를 위한 헤드리스 모드.
  • C++ / Python / JavaScript(WebAssembly) API — 더 큰 시뮬레이터나 검증기, 학습 파이프라인에 임베드할 수 있습니다.
  • 차량 모델을 내장하고 있어서, .osgb 에셋을 따로 준비하지 않아도 표준 .xosc + .xodr만으로 시뮬레이션이 돌아갑니다.
  • 작고 빠르며 결과가 일관된 바이너리라 시나리오 회귀 테스트 스위트에도 잘 들어맞습니다.

조건부 트리거, 파라미터 스윕, 커스텀 컨트롤러, 스토리보드 전체 실행처럼 OpenSCENARIO 1.x의 시뮬레이션 시맨틱이 필요하다면 esmini가 표준이며, 이를 대체할 이유가 딱히 없습니다.

esmini는 Mozilla Public License 2.0으로 공개된 오픈소스입니다. drawtonomy가 브라우저 기반 OpenSCENARIO 시뮬레이터를 제공할 수 있는 것 자체가 이 라이선스와, 자신들의 작업을 오픈으로 공개하기로 한 esmini 팀의 선택 덕분입니다. drawtonomy는 번들에 포함된 esmini-WASM 바이너리에 대해 MPL-2.0의 고지 의무와 파일 단위 카피레프트 요건을 준수합니다.

drawtonomy는 주행 시나리오를 그리는 무료 브라우저 화이트보드입니다. 브라우저 내 시뮬레이터esmini를 WebAssembly로 컴파일한 것 위에 구축되어 있습니다 — 스토리보드를 실제로 실행하는 시뮬레이션 코어는 esmini 그 자체이며, 파서도 스토리보드 시맨틱도 차량 상태 처리도 모두 동일합니다. 시뮬레이션의 정확성은 drawtonomy의 성과가 아니라 esmini와 그 메인테이너들에게 귀속되는 것입니다.

drawtonomy가 그 위에 얹는 것은 캔버스 네이티브 셸입니다: 프레임 단위로 정확한 탐색(seek), 자아 차량을 따라 화면이 이동하는 Follow Ego 카메라, Path / Footprint 고스트 궤적, 원클릭 .webm 내보내기, 그리고 시나리오를 그릴 때 쓰던 것과 같은 캔버스. drawtonomy가 기여하는 부분은 딱 이 레이어뿐이며, esmini를 포크하거나 다시 구현한 것이 아닙니다.

역할을 나누면 이렇습니다.

항목esmini (네이티브)drawtonomy (esmini-WASM 위에 구축된 브라우저 시뮬레이터)
OpenSCENARIO 1.x 스토리보드 실행(액트·트리거·조건·컨트롤러)✅ esmini 런타임✅ esmini 런타임 (동일 엔진, esmini 자체의 WebAssembly 빌드)
OpenSceneGraph 3D 뷰어✅ 내장❌ 2D 캔버스만
CI / 회귀 스윕용 헤드리스 모드✅ 헤드리스 플래그❌ 브라우저 셸
C++ / Python API❌ JS만 (esmini-WASM)
프레임 단위 탐색 및 스텝 이동뷰어에 따라 다름✅ 스크러버 + 화살표 키
자아 차량 추적 카메라(Follow Ego — 화면이 자아 차량을 따라 이동)플래그로 가능✅ 토글 한 번
고스트 궤적(Path / Footprint)내장 없음✅ 간격 설정 가능
슬라이드 / PR / SNS용 .webm 녹화외부 화면 캡처 필요✅ 앱 내 내보내기, 화면비 프리셋 제공
설치 필요 여부C++ 빌드 또는 릴리스 바이너리 필요❌ 최신 브라우저만 있으면 실행
센서 시뮬레이션(카메라 / LiDAR / 레이더)

두 흐름은 처음부터 끝까지 서로 맞물립니다. drawtonomy의 OpenSCENARIO 번들 내보내기.xosc, .xodr, 그리고 로컬 esmini에서 시나리오를 바로 실행하는 run.sh가 담긴 zip 파일을 생성합니다. 같은 표준(OpenSCENARIO + OpenDRIVE)과 같은 시뮬레이션 코어를 공유하는, 서로 다른 두 개의 셸인 셈입니다.

두 경우 모두 런타임이 esmini라면, 브라우저 셸이 왜 필요할까요?

  • esmini가 설치되지 않은 환경에서 CI 실패를 트리아지할 때 — 노트북, 휴대폰, 빌려 쓰는 데스크톱 등 빌드 툴체인이 없는 곳에서도 .xosc를 바로 들여다볼 수 있습니다.
  • 리뷰어가 로컬에 esmini를 갖추지 않은 상태에서 시나리오 PR을 코드리뷰할 때.
  • 청중에게 아무것도 설치시키지 않고 OpenSCENARIO를 가르칠 때.
  • 슬라이드, 버그 리포트, SNS 게시물용으로 시뮬레이션을 .webm으로 녹화할 때 — drawtonomy는 내보내기 팝오버에서 16:9, 9:16, 1:1, 4:3, Free 화면비 프리셋을 바로 제공합니다.
  • scenariogeneration이나 Scenic으로 생성한 시나리오를 본격적인 시뮬레이터 실행에 앞서 눈으로 먼저 확인할 때.

반대로, 브라우저 셸을 건너뛰고 네이티브 esmini를 바로 써야 하는 경우:

  • OpenSceneGraph 3D 뷰어가 필요할 때.
  • 수백 개 시나리오에 대한 CI 스윕을 돌릴 때.
  • 더 큰 파이프라인 안에서 Python이나 C++로 esmini를 직접 구동하고 싶을 때.
  • 다른 시뮬레이터에 esmini를 임베드할 때.

drawtonomy와 esmini는 ASAM 표준인 OpenSCENARIO와 OpenDRIVE, 그리고 같은 시뮬레이션 코어를 공유합니다. drawtonomy는 말 그대로 내부에서 esmini를 호출하고 있으며, esmini 프로젝트가 없었다면 drawtonomy의 브라우저 기반 OpenSCENARIO 시뮬레이터도 존재할 수 없었을 것입니다. OpenSCENARIO 커뮤니티는 아직 작은 편이고, 그 안의 도구들 — esmini, drawtonomy, RoadRunner, Truevision Designer, LaneMaker, scenariogeneration — 은 같은 워크플로 안에서 저마다 다른 역할을 맡고 있습니다. esmini는 시뮬레이터이고, drawtonomy는 그 위에 구축된 브라우저 셸(더불어 직접 그리고 스케치할 수 있는 화이트보드)입니다.

drawtonomy의 OpenSCENARIO 시뮬레이터는 esmini 프로젝트가 존재하고, 오픈 라이선스로 공개하기로 선택했기 때문에 가능했습니다. 깔끔하고 빠르며 문서화가 잘 된 OpenSCENARIO 1.x 런타임을 만들어 온 수년간의 작업, 그리고 OpenSCENARIO 커뮤니티 전체의 안정적인 기준점 역할을 해 준 것에 대해 esmini 메인테이너와 컨트리뷰터들에게 깊이 감사드립니다. drawtonomy의 브라우저 기반 OpenSCENARIO 시뮬레이터 모드를 사용하신다면, GitHub에서 esmini에 스타를 눌러 업스트림 프로젝트를 응원해 주시기 바랍니다.