Hoppa till innehåll

Exportera till OpenDRIVE / OpenSCENARIO / esmini

drawtonomy omvandlar en handritad scen till ett ASAM OpenDRIVE (.xodr) vägnät och ett OpenSCENARIO (.xosc) scenario, paketerat i ett enda zip som du kan spela upp direkt i esmini.

Konverteringen är avsiktligt grundläggande — den täcker de få former som passar rent in i ASAM:s datamodell och lämnar allt annat utanför. Den här sidan dokumenterar exakt vad som konverteras, vad det exporterade fordonet faktiskt gör och vad som inte ingår, så att resultatet aldrig lovar mer än det håller.

Videon nedan är ett enda tagning: rita en korsning, rita en bana, generera fotavtryck, exportera esmini-zippet och spela sedan upp den exporterade .xosc-filen i esmini.

En tagning: rita en korsning, rita en bana, generera fotavtryck, exportera esmini-zippet och spela upp den exporterade .xosc-filen i esmini.

Det finns ett exportalternativ för ASAM. drawtonomy visar inte separata menyval för .xodr och .xosc — båda filerna skapas ihop och packas i ett zip.

Exportmenyn med .zip (esmini) markerat

  1. Rita din scen (körfält, en korsning, fordon, en bana…).
  2. Öppna menyn → Export → .zip (esmini).
  3. Ange ett basnamn när du blir tillfrågad (standardvärdet är drawtonomy-<datum>).
  4. En <namn>.zip laddas ner med <namn>.xodr, <namn>.xosc och de 3D-modelltillgångar för esmini som scenariot refererar till.

Hela aktuella sidan exporteras — det finns inget läge för att bara exportera ett urval för ASAM-formaten.

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

Ett fordon som följer den exporterade trajektorien i esmini

Fordonet kör längs den orangea linjen — den linjen är den FollowTrajectoryAction som genererats från den bana du ritade.

drawtonomy-formOpenDRIVE-elementAnteckningar
Laneett <road>1 körfält = 1 oberoende väg
Traffic light<signal> på närmaste vägendast fordons-/gångartyp
Crosswalk<object type="crosswalk">placeras vinkelrätt mot vägen
Polygon (≥3 punkter)<object type="patch"> med <outline>fyller korsningar/ytor visuellt

Allt annat — fordon, fotgängare, fristående punkter, fria linjer, text, bilder — skrivs inte till .xodr-filen.

Mer om hur vägarna representeras:

  • Geometrin består enbart av räta linjer. Vägmedellinjen samplas från körfältets vänstra och högra gränser och skrivs som <line>-segment. Varken arc, spiral eller poly3 genereras.
  • Fast körfältslayout. Varje väg får exakt ett vänster körfält (id=1), ett mittfält (id=0) och ett höger körfält (id=-1), samtliga med type="driving". Flerfilsvägar och flera körfältssektioner representeras inte.
  • Vägmarkeringar är hårdkodade till en solid white 0.13 m-linje.
  • Inga korsningsnoder. Varje väg bär junction="-1" och inget <junction>-element genereras någonsin. Korsningar representeras bara via polygonplattan (visuellt) och via föregående/efterföljande länkar härrörande från körfältets next/prev-kopplingar (endast första posten).
  • Ingen höjd- eller tvärfallsprofilelevationProfile och lateralProfile skrivs tomma (plana vägar).
  • Skalan är fast vid 16,67 px/m; geografiskt ursprung är 0.
drawtonomy-formOpenSCENARIO-element
Vehicleett <ScenarioObject> (<Vehicle> eller <Pedestrian>)
Path footprint (ledfordonet)en <FollowTrajectoryAction>

En “pedestrian” är ett fordonsobjekt vars mallnamn matchar ett fotgängar-/gångmönster — det skrivs som <Pedestrian> i stället för <Vehicle>. Körfält, övergångsställen, trafiksignaler och fristående linjer inkluderas inte i .xosc-filen.

Det exporterade scenariot är avsiktligt minimalt:

  • Det enda dynamiska beteendet är FollowTrajectoryAction — en tidsstämplad polylinje. Det finns inga hastighetsstyrningar, körfältsbyten, trafiksignalrespons, kollisionsundvikande eller interaktionsvillkor.
  • Varje rörlig entitet startar vid SimulationTime ≥ 0 och scenariot har ett fast StopTrigger vid 60 s.

Hur ett banfotavtryck blir fordonets rörelse

Section titled “Hur ett banfotavtryck blir fordonets rörelse”

Det här är kärnan i den dynamiska exporten och förtjänar en noggrann genomgång.

Fotavtryckspanelen: Variable positioning, Interval och Anchor förklarade

En bana är en linje du ritar, och fotavtryck är spökkopior av ett fordon utplacerade längs banan (det spår du ser i editorn). Vid export:

  1. Bara det ledande fotavtrycket (det första) blir ett rörligt <ScenarioObject>. De efterföljande spökkopiornas roll är att ge en förhandsgranskning i editorn — de tas bort i exporten. Du får ett fordon som kör hela banan, inte en kö.
  2. Banans styrpunkter blir trajektoriehörn i världskoordinater (ENU, meter).
  3. Varje hörn tilldelas en time, och resultatet skrivs som en <Trajectory><Polyline> av <Vertex time="…"> inuti en <FollowTrajectoryAction>.

Hastigheten är fast (den viktigaste begränsningen)

Section titled “Hastigheten är fast (den viktigaste begränsningen)”

Trajektorien tidssätts med en hårdkodad 10 m/s (≈ 36 km/h). drawtonomy har inget hastighetsfält någonstans i gränssnittet och exportören åsidosätter aldrig standardvärdet. I esmini rapporterar entiteten ~36 km/h oavsett vad du ritade. Du ställer inte in hastigheten direkt — du styr tajmingen via fotavtryckets placering, som beskrivs nedan.

Huruvida banans Variable positioning-reglage är aktiverat avgör hur tidpunkterna fördelas längs trajektorien:

  • Uniform (reglage AV) — fotavtrycken sitter med lika stort bågavstånd (Interval) och tid beräknas som avstånd / 10 m/s. Rörelsen har konstant hastighet. Att ändra Interval påverkar bara hur många hörn som skrivs (samplingsdensitet); banans form och total varaktighet förblir oförändrade.
  • Variable (reglage PÅ) — varje fotavtryck är förankrat till en position längs banan, och den totala varaktigheten delas upp i lika stora tidsskivor mellan fotavtrycken. Där fotavtrycken sitter tätt rör sig fordonet långsamt; där de är utspridda rör det sig snabbt. Det här är det enda sättet att variera den effektiva hastigheten längs rutten.

Vad du redigerar ↔ vad som ändras i .xosc

Section titled “Vad du redigerar ↔ vad som ändras i .xosc”
EditoråtgärdEffekt på exporten
Flytta en banstyrpunktTrajektoriehörnets koordinater + total varaktighet (längden ändras, hastigheten förblir 10 m/s)
Dra ett fotavtryck i Variable-lägeFotavtryckets normaliserade position → time för det hörnet → lokal (effektiv) hastighet för det segmentet
Växla Variable positioningByter mellan lika-tid- och lika-hastighets-tajmning
Ändra Interval (uniform-läge)Antal hörn enbart — trajektoriens form och hastighet påverkas inte
Ändra AnchorBara fotavtryckets ritförskjutning — ingen effekt på den exporterade trajektorien
Byta fordonsmallvehicleCategory, 3D-modell, begränsningsboxens höjd, prestandapreset
Ändra storlek på fordonet (b, h)BoundingBox-mått och axelgeometri
Rotera fordonetStartriktning (bara när fordonet saknar trajektorie)
Flytta fordonetInitialt WorldPosition (fästs vid trajektoriens startpunkt om det finns en)

Kort svar på den vanligaste frågan: ja — att flytta ett fotavtryck längs banan i Variable-läge ändrar hastighetsplanen i exporten, eftersom det omtajmar det segmentet. Att flytta det i Uniform-läge, eller att ändra Anchor, gör det inte.

För fullständighetens skull: fordonskategori/prestandapresets, 3D-modellsökvägar, fordonshöjd per kategori, axelgeometri (härledd från storleken), följningsläge (position), 60 s stop-trigger och — viktigast av allt — trajektoriehastigheten 10 m/s är alla fasta och kan inte redigeras.

Exportören ingår i @drawtonomy/sdk och körs utan editorn. Till skillnad från menyn kan du med SDK:t även generera de två filerna separat:

import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// Paketerat (samma som menyn):
const { blob, baseName } = exporter.buildEsminiZip(snapshot, {
baseName: 'my-scene',
})
// Eller varje format för sig:
const xodr = exporter.exportToOpenDrive(snapshot)
const xosc = exporter.exportToOpenScenario(snapshot, {
xodrFilename: 'my-scene.xodr',
})

För det fullständiga API:et och förlängningspunkterna, se Exporter SDK-referens.

FormatVersion
OpenDRIVE1.8
OpenSCENARIO1.3

Stöds: Rätlinjiga vägar från körfält; signaler, övergångsställen och korsningsplättar som OpenDRIVE-objekt; ett fordon per bana som följer en tidssatt trajektorie; ett fungerande esmini-zip som du kan spela upp direkt.

Stöds ännu inte: OpenDRIVE-korsningsnoder, krökt geometri, flerfilsvägar, väghöjd; OpenSCENARIO-hastighetsstyrningar, körfältsbyten, trafiksignallogik, flerfordonssinteraktion eller individuell hastighetskontroll per fordon.