Ekspor ke OpenDRIVE / OpenSCENARIO / esmini
drawtonomy mengubah adegan yang Anda gambar menjadi jaringan jalan ASAM
OpenDRIVE (.xodr)
beserta skenario
OpenSCENARIO (.xosc),
dikemas dalam satu zip yang langsung bisa diputar di
esmini.
Konversinya memang sederhana — hanya elemen yang terpetakan bersih ke model data ASAM yang disertakan, selebihnya dihilangkan. Halaman ini menjelaskan secara tepat apa yang dikonversi, apa yang dilakukan kendaraan hasil ekspor, dan apa yang belum didukung — agar tidak ada ekspektasi yang berlebihan.
Lihat demo lengkap
Section titled “Lihat demo lengkap”Video di bawah adalah satu pengambilan gambar tanpa potongan: menggambar persimpangan, menggambar jalur, menghasilkan footprint, mengekspor zip esmini, lalu memutar ulang .xosc di esmini.
Cara mengekspor dari editor
Section titled “Cara mengekspor dari editor”Hanya ada satu titik ekspor ASAM. drawtonomy tidak menyediakan menu .xodr atau .xosc secara terpisah — kedua file dihasilkan sekaligus dan dikemas dalam satu zip.

- Gambar adegan Anda (jalur, persimpangan, kendaraan, jalur lintasan…).
- Buka menu → Export →
.zip (esmini). - Masukkan nama dasar saat diminta (default:
drawtonomy-<tanggal>). - File
<nama>.zipakan diunduh, berisi<nama>.xodr,<nama>.xosc, serta aset model 3D esmini yang dirujuk skenario.
Seluruh halaman aktif diekspor — tidak ada mode “seleksi saja” untuk target ASAM.
Memutar ulang di esmini
Section titled “Memutar ulang di esmini”unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
Kendaraan berjalan mengikuti garis oranye — garis itulah FollowTrajectoryAction yang dihasilkan dari jalur yang Anda gambar.
Elemen yang dikonversi
Section titled “Elemen yang dikonversi”Ke OpenDRIVE (.xodr)
Section titled “Ke OpenDRIVE (.xodr)”| Elemen drawtonomy | Elemen OpenDRIVE | Catatan |
|---|---|---|
| Lane | satu <road> | 1 jalur = 1 jalan independen |
| Traffic light | <signal> pada jalan terdekat | tipe kendaraan / pejalan kaki saja |
| Crosswalk | <object type="crosswalk"> | diletakkan tegak lurus terhadap jalan |
| Polygon (≥3 titik) | <object type="patch"> dengan <outline> | mengisi visual persimpangan/area |
Semua elemen lain — kendaraan, pejalan kaki, titik bebas, linestring bebas, teks, gambar — tidak ditulis ke .xodr.
Detail teknis setiap jalan:
- Geometri hanya garis lurus. Garis referensi jalan diambil dari batas kiri/kanan jalur dan diemisikan sebagai segmen
<line>. Tidak ada geometriarc,spiral, ataupoly3. - Tata jalur tetap. Setiap jalan mendapat tepat satu jalur kiri (
id=1), satu jalur tengah (id=0), dan satu jalur kanan (id=-1), semua bertipetype="driving". Jalan multi-jalur dan beberapa section jalur tidak didukung. - Marka jalan dikode keras sebagai garis
solid white 0.13 m. - Tidak ada junction. Setiap jalan membawa
junction="-1"dan tidak ada elemen<junction>yang dihasilkan. Persimpangan hanya direpresentasikan lewat patch polygon (visual) dan tautan predecessor/successor yang berasal dari koneksinext/prevjalur (hanya entri pertama). - Tidak ada elevasi / superelevasi —
elevationProfiledanlateralProfilediemisikan kosong (jalan datar, planar). - Skala tetap 16,67 px/m; asal geografis adalah
0.
Ke OpenSCENARIO (.xosc)
Section titled “Ke OpenSCENARIO (.xosc)”| Elemen drawtonomy | Elemen OpenSCENARIO |
|---|---|
| Vehicle | <ScenarioObject> (<Vehicle> atau <Pedestrian>) |
| Path footprint (kendaraan terdepan) | <FollowTrajectoryAction> |
“Pejalan kaki” adalah shape kendaraan yang nama templatenya cocok dengan pola pedestrian/walk — diemisikan sebagai <Pedestrian> bukan <Vehicle>. Jalur, crosswalk, traffic light, dan linestring bebas tidak diemisikan ke .xosc.
Skenario yang diekspor dibuat sesederhana mungkin:
- Satu-satunya perilaku dinamis adalah
FollowTrajectoryAction— polyline bertanda waktu. Tidak ada aksi kecepatan, pergantian jalur, respons terhadap lampu lalu lintas, penghindaran tabrakan, atau kondisi interaksi apa pun. - Setiap entitas bergerak mulai dari
SimulationTime ≥ 0dan skenario memilikiStopTriggerkeras di 60 detik.
Bagaimana footprint jalur menjadi gerakan kendaraan
Section titled “Bagaimana footprint jalur menjadi gerakan kendaraan”Inilah inti dari ekspor dinamis, jadi perlu dijelaskan secara tepat.

Path adalah linestring yang Anda gambar, sedangkan footprint adalah salinan bayangan kendaraan yang tersebar di sepanjangnya (jejak yang terlihat di editor). Saat diekspor:
- Hanya footprint terdepan (yang pertama) yang menjadi
<ScenarioObject>bergerak. Bayangan di belakangnya adalah pratinjau di sisi kanvas dan dihapus — Anda mendapat satu kendaraan yang menempuh seluruh jalur, bukan antrian. - Titik kontrol jalur menjadi verteks trajektori, dalam satuan meter (ENU world).
- Setiap verteks mendapat nilai
time, dan hasilnya ditulis sebagai<Trajectory>→<Polyline>berisi<Vertex time="…">di dalam<FollowTrajectoryAction>.
Kecepatan dikode keras (ini adalah batasan utama)
Section titled “Kecepatan dikode keras (ini adalah batasan utama)”Trajektori ditentukan waktunya dengan kecepatan tetap 10 m/s (≈ 36 km/jam). drawtonomy tidak memiliki field kecepatan di mana pun dalam UI, dan exporter tidak pernah mengganti nilai default ini. Di esmini, entitas akan dilaporkan berjalan ~36 km/jam terlepas dari apa yang Anda gambar. Anda tidak mengatur kecepatan — Anda mengatur timing lewat tata letak footprint, seperti dijelaskan berikut.
Dua mode timing
Section titled “Dua mode timing”Toggle “Variable positioning” pada jalur menentukan cara waktu didistribusikan sepanjang trajektori:
- Uniform (toggle OFF) — footprint berada pada jarak busur Interval yang sama dan waktu dihitung dari
jarak / 10 m/s. Gerakannya berkecepatan konstan. Mengubah Interval hanya mengubah jumlah verteks yang ditulis (kerapatan sampel); bentuk jalur dan durasi total tidak berubah. - Variable (toggle ON) — setiap footprint dikaitkan ke posisi tertentu di sepanjang jalur, dan durasi total dibagi menjadi irisan waktu yang sama antar-footprint. Di mana footprint berdekatan, kendaraan bergerak lambat; di mana berjauhan, kendaraan bergerak cepat. Ini adalah satu-satunya cara untuk memvariasikan kecepatan efektif di sepanjang rute.
Aksi editor ↔ perubahan pada .xosc
Section titled “Aksi editor ↔ perubahan pada .xosc”| Aksi di editor | Efek pada ekspor |
|---|---|
| Pindahkan titik kontrol jalur | Koordinat verteks trajektori + durasi total (panjang berubah, kecepatan tetap 10 m/s) |
| Seret footprint dalam mode Variable | Posisi ternormalisasi footprint → nilai time verteksnya → kecepatan efektif lokal pada segmen tersebut |
| Toggle Variable positioning | Beralih antara timing waktu-sama dan kecepatan-sama |
| Ubah Interval (mode uniform) | Hanya jumlah verteks — bentuk trajektori dan kecepatan tidak berubah |
| Ubah Anchor | Hanya offset gambar footprint — tidak berpengaruh pada trajektori yang diekspor |
| Ubah template kendaraan | vehicleCategory, model 3D, tinggi bounding box, preset performa |
| Ubah ukuran kendaraan (w, h) | Dimensi BoundingBox dan geometri axle |
| Putar kendaraan | Heading awal (hanya saat kendaraan tidak memiliki trajektori) |
| Pindahkan kendaraan | WorldPosition init (terpasang ke titik awal trajektori jika ada) |
Untuk menjawab pertanyaan umum secara langsung: ya — memindahkan footprint ke titik tertentu di jalur dalam mode Variable mengubah rencana kecepatan yang diekspor, karena segmen tersebut di-retime. Memindahkannya dalam mode Uniform, atau mengubah Anchor, tidak berpengaruh.
Nilai yang dikode keras
Section titled “Nilai yang dikode keras”Demi transparansi tentang cakupan, nilai-nilai berikut berasal dari peta atau konstanta tetap dan tidak bisa Anda ubah: kategori/preset performa kendaraan, jalur model 3D, tinggi kendaraan per kategori, geometri axle (diturunkan dari ukuran), mode mengikuti (position), stop trigger 60 detik, dan — yang paling penting — kecepatan trajektori 10 m/s.
Ekspor programatik
Section titled “Ekspor programatik”Exporter tersedia di @drawtonomy/sdk dan berjalan tanpa editor. Tidak seperti menu, SDK juga memungkinkan Anda mengekspor kedua file secara terpisah:
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// Dikemas (sama dengan menu):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// Atau masing-masing format secara tersendiri:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})Untuk API lengkap dan titik ekstensi, lihat Referensi Exporter SDK.
Versi yang dihasilkan
Section titled “Versi yang dihasilkan”| Format | Versi |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
Ringkasan cakupan
Section titled “Ringkasan cakupan”Didukung: jalan garis lurus dari jalur; sinyal, crosswalk, dan patch persimpangan sebagai objek OpenDRIVE; satu kendaraan per jalur mengikuti trajektori bertanda waktu; zip esmini yang langsung bisa diputar.
Belum didukung: junction OpenDRIVE, geometri melengkung, jalan multi-jalur, elevasi jalan; aksi kecepatan OpenSCENARIO, pergantian jalur, logika lampu lalu lintas, interaksi multi-agen, atau kontrol kecepatan per kendaraan.
Lihat juga
Section titled “Lihat juga”- Arsitektur exporter — apa yang dilakukan pipeline antara snapshot dan file.
- Menambahkan format target — sambungkan CARLA, SUMO, Unity, atau format apa pun.