OpenDRIVE / OpenSCENARIO / esmini 내보내기
drawtonomy에서 직접 그린 장면을 ASAM
OpenDRIVE(.xodr)
도로망 파일과
OpenSCENARIO(.xosc)
시나리오 파일로 변환할 수 있습니다. 두 파일은 하나의 zip으로 묶여
esmini에서 즉시 재생됩니다.
변환 범위는 의도적으로 기본적인 수준에 맞춰져 있습니다. ASAM 데이터 모델과 깔끔하게 대응되는 몇 가지 셰이프만 처리하고, 나머지는 제외합니다. 이 페이지에서는 정확히 무엇이 변환되는지, 내보낸 차량이 어떻게 움직이는지, 그리고 현재 범위 밖에 있는 것은 무엇인지 명확히 설명합니다.
전체 라운드트립 영상
섹션 제목: “전체 라운드트립 영상”아래 영상은 단일 테이크입니다. 교차로를 그리고, 경로를 그리고, 풋프린트를 생성한 뒤, esmini zip을 내보내고 .xosc를 esmini에서 재생합니다.
에디터에서 내보내기
섹션 제목: “에디터에서 내보내기”ASAM 내보내기 진입점은 하나입니다. drawtonomy는 .xodr / .xosc 메뉴 항목을 따로 제공하지 않으며, 두 파일은 항상 함께 생성되어 하나의 zip에 담깁니다.

- 장면을 그립니다(차선, 교차로, 차량, 경로 등).
- 메뉴 → **Export →
.zip (esmini)**를 선택합니다. - 프롬프트에서 기본 이름을 입력합니다(기본값:
drawtonomy-<날짜>). <name>.zip이 다운로드되며, 그 안에<name>.xodr,<name>.xosc, 그리고 시나리오가 참조하는 esmini 3D 모델 에셋이 포함됩니다.
현재 페이지 전체가 내보내집니다. ASAM 내보내기는 “선택 영역만” 모드를 지원하지 않습니다.
esmini에서 재생하기
섹션 제목: “esmini에서 재생하기”unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
차량은 주황색 선을 따라 주행합니다. 이 선이 바로 그린 경로에서 생성된 FollowTrajectoryAction입니다.
변환되는 항목
섹션 제목: “변환되는 항목”OpenDRIVE(.xodr)로 변환
섹션 제목: “OpenDRIVE(.xodr)로 변환”| drawtonomy 셰이프 | OpenDRIVE 요소 | 비고 |
|---|---|---|
| Lane | <road> 하나 | 차선 1개 = 독립 도로 1개 |
| Traffic light | 가장 가까운 도로의 <signal> | vehicle / pedestrian 유형만 |
| Crosswalk | <object type="crosswalk"> | 도로에 수직으로 배치 |
| Polygon (점 3개 이상) | <outline>이 포함된 <object type="patch"> | 교차로·영역 시각화 |
차량, 보행자, 독립 점, 자유 선형(linestring), 텍스트, 이미지는 .xodr에 기록되지 않습니다.
도로별 상세 사양:
- 기하 형상은 직선만 지원합니다. 도로 기준선은 차선의 왼쪽/오른쪽 경계에서 샘플링되어
<line>세그먼트로 출력됩니다.arc,spiral,poly3는 생성되지 않습니다. - 고정 차선 구성. 모든 도로는 좌측 차선(
id=1), 중앙 차선(id=0), 우측 차선(id=-1) 각각 하나씩, 모두type="driving"으로 설정됩니다. 다차선 도로 및 복수 차선 구간은 표현되지 않습니다. - 도로 표시는
solid white 0.13 m선으로 고정됩니다. - 교차로(junction) 없음. 모든 도로는
junction="-1"이며,<junction>요소는 생성되지 않습니다. 교차로는 polygon 패치(시각적 표현)와 차선의next/prev연결(첫 번째 항목만)에서 파생된 predecessor/successor 링크로만 표현됩니다. - 고도·횡단 경사 없음.
elevationProfile과lateralProfile은 빈 상태로 출력됩니다(평탄한 평면 도로). - 스케일은 16.67 px/m으로 고정되며, 지리 원점은
0입니다.
OpenSCENARIO(.xosc)로 변환
섹션 제목: “OpenSCENARIO(.xosc)로 변환”| drawtonomy 셰이프 | OpenSCENARIO 요소 |
|---|---|
| Vehicle | <ScenarioObject>(<Vehicle> 또는 <Pedestrian>) |
| 경로 풋프린트 (선두 차량) | <FollowTrajectoryAction> |
템플릿 이름이 pedestrian/walk 패턴과 일치하는 차량 셰이프는 <Pedestrian>으로 출력됩니다. 차선, 횡단보도, 신호등, 자유 선형은 .xosc에 포함되지 않습니다.
내보낸 시나리오는 의도적으로 최소한의 내용만 담습니다.
- 동적 동작은
FollowTrajectoryAction하나뿐입니다. 타임스탬프가 포함된 폴리라인으로, 속도 제어, 차선 변경, 신호 응답, 충돌 회피, 상호작용 조건은 없습니다. - 각 이동 객체는
SimulationTime ≥ 0에서 시작하며, 시나리오는 **60초에StopTrigger**로 종료됩니다.
경로 풋프린트가 차량 움직임이 되는 방법
섹션 제목: “경로 풋프린트가 차량 움직임이 되는 방법”동적 내보내기의 핵심 부분이므로 정확하게 설명합니다.

**경로(path)**는 직접 그리는 선형이고, **풋프린트(footprint)**는 그 경로를 따라 배치된 차량 복사본(에디터에서 보이는 궤적)입니다. 내보낼 때의 동작:
- 선두 풋프린트(첫 번째)만 이동하는
<ScenarioObject>가 됩니다. 뒤따르는 복사본은 캔버스 미리보기이며 제외됩니다. 대기열이 아닌 하나의 차량이 경로 전체를 주행합니다. - 경로의 제어점이 세계 좌표(ENU, 미터) 기준 궤적 꼭짓점이 됩니다.
- 각 꼭짓점에
time이 부여되어<FollowTrajectoryAction>안의<Trajectory>→<Polyline>→<Vertex time="…">형태로 기록됩니다.
속도는 고정값입니다(핵심 제약 사항)
섹션 제목: “속도는 고정값입니다(핵심 제약 사항)”궤적 속도는 **하드코딩된 10 m/s(≈ 36 km/h)**입니다. drawtonomy UI에는 속도 입력 필드가 없으며, 내보내기 시 기본값을 재정의하지 않습니다. esmini에서 재생하면 그린 내용과 무관하게 약 36 km/h가 표시됩니다. 속도를 직접 설정하는 대신, 아래에서 설명하는 풋프린트 배치로 타이밍을 조절합니다.
두 가지 타이밍 모드
섹션 제목: “두 가지 타이밍 모드”경로의 “Variable positioning” 토글 상태에 따라 궤적을 따라 시간이 배분되는 방식이 달라집니다.
- 균일 모드(토글 OFF) — 풋프린트가 동일한 호 길이 Interval 간격으로 배치되고, 시간은
거리 / 10 m/s로 계산됩니다. 등속 움직임입니다. Interval을 변경하면 꼭짓점 수(샘플 밀도)만 바뀌고, 경로 형태와 총 소요 시간은 변하지 않습니다. - 가변 모드(토글 ON) — 각 풋프린트가 경로 위 특정 위치에 고정되며, 총 소요 시간이 풋프린트 사이에 동일한 시간 간격으로 나뉩니다. 풋프린트가 가깝게 모여 있으면 차량이 천천히, 멀리 떨어져 있으면 빠르게 이동합니다. 경로 구간별 유효 속도를 조절하는 유일한 방법입니다.
에디터 조작 ↔ .xosc 변화 대응표
섹션 제목: “에디터 조작 ↔ .xosc 변화 대응표”| 에디터 조작 | 내보내기에 미치는 영향 |
|---|---|
| 경로 제어점 이동 | 궤적 꼭짓점 좌표 + 총 소요 시간(길이 변경, 속도 10 m/s 유지) |
| 가변 모드에서 풋프린트 드래그 | 해당 풋프린트의 정규화된 위치 → 꼭짓점 time → 해당 구간 유효 속도 |
| Variable positioning 토글 전환 | 등시간 / 등속도 타이밍 방식 전환 |
| Interval 변경(균일 모드) | 꼭짓점 수만 변경 — 궤적 형태와 속도는 유지 |
| Anchor 변경 | 풋프린트 그리기 오프셋만 변경 — 내보낸 궤적에 영향 없음 |
| 차량 템플릿 변경 | vehicleCategory, 3D 모델, 바운딩박스 높이, 성능 프리셋 |
| 차량 크기(w, h) 조절 | BoundingBox 치수와 차축 기하 |
| 차량 회전 | 초기 방향(궤적이 없는 차량에만 적용) |
| 차량 이동 | Init WorldPosition(궤적이 있으면 시작점에 스냅) |
자주 묻는 질문에 직접 답하자면, 가변 모드에서 경로 중간에 풋프린트를 이동하면 해당 구간의 타이밍이 재조정되어 내보낸 속도 계획이 바뀝니다. 균일 모드에서 이동하거나 Anchor를 변경하는 경우에는 영향이 없습니다.
하드코딩된 값 목록
섹션 제목: “하드코딩된 값 목록”범위를 솔직하게 밝히기 위해, 아래 항목은 고정 맵이나 상수에서 가져오며 에디터에서 편집할 수 없습니다. 차량 카테고리/성능 프리셋, 3D 모델 경로, 카테고리별 차량 높이, 차축 기하(크기에서 산출), 추종 모드(position), 60초 정지 트리거, 그리고 가장 중요한 10 m/s 궤적 속도가 이에 해당합니다.
프로그래밍 방식 내보내기
섹션 제목: “프로그래밍 방식 내보내기”내보내기 도구는 @drawtonomy/sdk에 포함되어 에디터 없이도 실행됩니다. 메뉴와 달리 SDK에서는 두 파일을 개별적으로 출력할 수도 있습니다.
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// 번들 내보내기(메뉴와 동일):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// 개별 형식으로 내보내기:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})전체 API와 확장 지점은 Exporter SDK 레퍼런스를 참고하세요.
출력 버전
섹션 제목: “출력 버전”| 형식 | 버전 |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
지원 범위 요약
섹션 제목: “지원 범위 요약”지원: 차선에서 변환한 직선 도로, OpenDRIVE 객체로서의 신호·횡단보도·교차로 패치, 경로를 따라 타임드 궤적으로 이동하는 차량 하나, 즉시 재생 가능한 esmini zip.
미지원: OpenDRIVE 교차로(junction), 곡선 기하, 다차선 도로, 도로 고도; OpenSCENARIO 속도 제어, 차선 변경, 신호 로직, 다중 에이전트 상호작용, 차량별 속도 설정.
함께 보기
섹션 제목: “함께 보기”- 내보내기 아키텍처 — 스냅샷에서 파일까지 파이프라인이 하는 일.
- 대상 형식 추가하기 — CARLA, SUMO, Unity 등 새로운 대상 연결.