Lewati ke konten

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.

Video di bawah adalah satu pengambilan gambar tanpa potongan: menggambar persimpangan, menggambar jalur, menghasilkan footprint, mengekspor zip esmini, lalu memutar ulang .xosc di esmini.

Satu pengambilan: gambar persimpangan, gambar jalur, hasilkan footprint, ekspor zip esmini, lalu putar ulang .xosc di esmini.

Hanya ada satu titik ekspor ASAM. drawtonomy tidak menyediakan menu .xodr atau .xosc secara terpisah — kedua file dihasilkan sekaligus dan dikemas dalam satu zip.

Submenu Export dengan .zip (esmini) yang disorot

  1. Gambar adegan Anda (jalur, persimpangan, kendaraan, jalur lintasan…).
  2. Buka menu → Export → .zip (esmini).
  3. Masukkan nama dasar saat diminta (default: drawtonomy-<tanggal>).
  4. File <nama>.zip akan 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.

Terminal window
unzip drawtonomy-2026-05-30.zip
cd drawtonomy-2026-05-30
esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768

Kendaraan mengikuti trajektori hasil ekspor di esmini

Kendaraan berjalan mengikuti garis oranye — garis itulah FollowTrajectoryAction yang dihasilkan dari jalur yang Anda gambar.

Elemen drawtonomyElemen OpenDRIVECatatan
Lanesatu <road>1 jalur = 1 jalan independen
Traffic light<signal> pada jalan terdekattipe 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 geometri arc, spiral, atau poly3.
  • Tata jalur tetap. Setiap jalan mendapat tepat satu jalur kiri (id=1), satu jalur tengah (id=0), dan satu jalur kanan (id=-1), semua bertipe type="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 koneksi next / prev jalur (hanya entri pertama).
  • Tidak ada elevasi / superelevasielevationProfile dan lateralProfile diemisikan kosong (jalan datar, planar).
  • Skala tetap 16,67 px/m; asal geografis adalah 0.
Elemen drawtonomyElemen 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 ≥ 0 dan skenario memiliki StopTrigger keras 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.

Panel footprint: Variable positioning, Interval, dan Anchor dijelaskan

Path adalah linestring yang Anda gambar, sedangkan footprint adalah salinan bayangan kendaraan yang tersebar di sepanjangnya (jejak yang terlihat di editor). Saat diekspor:

  1. 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.
  2. Titik kontrol jalur menjadi verteks trajektori, dalam satuan meter (ENU world).
  3. 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.

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 di editorEfek pada ekspor
Pindahkan titik kontrol jalurKoordinat verteks trajektori + durasi total (panjang berubah, kecepatan tetap 10 m/s)
Seret footprint dalam mode VariablePosisi ternormalisasi footprint → nilai time verteksnya → kecepatan efektif lokal pada segmen tersebut
Toggle Variable positioningBeralih antara timing waktu-sama dan kecepatan-sama
Ubah Interval (mode uniform)Hanya jumlah verteks — bentuk trajektori dan kecepatan tidak berubah
Ubah AnchorHanya offset gambar footprint — tidak berpengaruh pada trajektori yang diekspor
Ubah template kendaraanvehicleCategory, model 3D, tinggi bounding box, preset performa
Ubah ukuran kendaraan (w, h)Dimensi BoundingBox dan geometri axle
Putar kendaraanHeading awal (hanya saat kendaraan tidak memiliki trajektori)
Pindahkan kendaraanWorldPosition 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.

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.

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.

FormatVersi
OpenDRIVE1.8
OpenSCENARIO1.3

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.