drawtonomy vs esmini
esmini
섹션 제목: “esmini”esmini는 ASAM 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의 관계
섹션 제목: “drawtonomy와 esmini의 관계”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를 임베드할 때.
같은 OpenSCENARIO 생태계 안에서
섹션 제목: “같은 OpenSCENARIO 생태계 안에서”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에 스타를 눌러 업스트림 프로젝트를 응원해 주시기 바랍니다.