Exporter vers OpenDRIVE / OpenSCENARIO / esmini
drawtonomy transforme une scène dessinée à la main en réseau routier ASAM
OpenDRIVE (.xodr)
accompagné d’un scénario
OpenSCENARIO (.xosc),
le tout regroupé dans une archive zip rejouable dans
esmini.
La conversion est volontairement basique — elle couvre les quelques formes qui s’appliquent directement au modèle de données ASAM et laisse le reste de côté. Cette page documente précisément ce qui est converti, ce que fait concrètement le véhicule exporté, et ce qui est hors périmètre, afin que la sortie ne promette jamais plus qu’elle ne tient.
Voir le cycle complet en vidéo
Section intitulée « Voir le cycle complet en vidéo »La vidéo ci-dessous est tournée en une seule prise : dessiner une intersection,
tracer un chemin, générer les empreintes, exporter l’archive esmini, puis
rejouer le .xosc exporté dans esmini.
Exporter depuis l’éditeur
Section intitulée « Exporter depuis l’éditeur »Il n’existe qu’un seul point d’entrée pour l’export ASAM. drawtonomy ne
propose pas de menus .xodr / .xosc séparés — les deux fichiers sont
produits ensemble et regroupés dans une seule archive.

- Dessinez votre scène (voies de circulation, une intersection, des véhicules, un chemin…).
- Ouvrez le menu → Export →
.zip (esmini). - Saisissez un nom de base lorsqu’on vous le demande (par défaut
drawtonomy-<date>). - Une archive
<nom>.zipse télécharge, contenant<nom>.xodr,<nom>.xoscet les ressources 3D esmini référencées par le scénario.
L’export porte sur la page entière — il n’existe pas de mode « sélection uniquement » pour la cible ASAM.
Rejouer l’archive
Section intitulée « Rejouer l’archive »unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
Le véhicule suit la ligne orange — cette ligne est la FollowTrajectoryAction
générée à partir du chemin que vous avez dessiné.
Ce qui est converti
Section intitulée « Ce qui est converti »Vers OpenDRIVE (.xodr)
Section intitulée « Vers OpenDRIVE (.xodr) »| Forme drawtonomy | Élément OpenDRIVE | Remarques |
|---|---|---|
| Lane | un <road> | 1 voie = 1 route indépendante |
| Traffic light | <signal> sur la route la plus proche | types véhicule / piéton uniquement |
| Crosswalk | <object type="crosswalk"> | placé perpendiculairement à la route |
| Polygon (≥ 3 points) | <object type="patch"> avec <outline> | représente visuellement les intersections et zones |
Tout le reste — véhicules, piétons, points isolés, linestrings libres, textes,
images — n’est pas écrit dans le .xodr.
Détails sur la géométrie de chaque route :
- Géométrie en segments droits uniquement. La ligne de référence est
échantillonnée à partir des bordures gauche/droite de la voie et émise sous
forme de segments
<line>. Aucune géométriearc,spiraloupoly3n’est produite. - Gabarit de voie fixe. Chaque route obtient exactement une voie gauche
(
id=1), une voie centrale (id=0) et une voie droite (id=-1), toutestype="driving". Les routes multi-voies et les sections multiples ne sont pas représentées. - Marquages routiers codés en dur : ligne
solid white 0.13 m. - Pas de jonctions. Chaque route porte
junction="-1"et aucun élément<junction>n’est jamais généré. Les intersections sont représentées uniquement par le patch polygonal (visuel) et par les liens prédécesseur/successeur issus des connexionsnext/prevde la voie (première entrée uniquement). - Pas d’élévation / de dévers —
elevationProfileetlateralProfilesont émis vides (routes planes et horizontales). - L’échelle est fixée à 16,67 px/m ; l’origine géographique est
0.
Vers OpenSCENARIO (.xosc)
Section intitulée « Vers OpenSCENARIO (.xosc) »| Forme drawtonomy | Élément OpenSCENARIO |
|---|---|
| Vehicle | un <ScenarioObject> (<Vehicle> ou <Pedestrian>) |
| Empreinte de chemin (le véhicule de tête) | une <FollowTrajectoryAction> |
Un « piéton » est simplement une forme Vehicle dont le nom de gabarit
correspond à un motif piéton/marche — il est émis en <Pedestrian> plutôt
qu’en <Vehicle>. Les voies, passages piétons, feux de circulation et
linestrings libres ne sont pas émis dans le .xosc.
Le scénario exporté est volontairement minimal :
- Le seul comportement dynamique est la
FollowTrajectoryAction— une polyligne horodatée. Il n’y a pas d’actions de vitesse, de changements de voie, de réponses aux feux, d’évitement de collision, ni aucune condition d’interaction. - Chaque entité en mouvement démarre à
SimulationTime ≥ 0et le scénario comporte unStopTriggerà 60 s codé en dur.
Comment une empreinte de chemin devient un mouvement de véhicule
Section intitulée « Comment une empreinte de chemin devient un mouvement de véhicule »C’est le cœur de l’export dynamique — voici une explication précise.

Un chemin (path) est un linestring que vous tracez, et les empreintes (footprints) sont des copies fantômes d’un véhicule disposées le long de ce chemin (la traîne visible dans l’éditeur). Lors de l’export :
- Seule l’empreinte de tête (la première) devient un
<ScenarioObject>en mouvement. Les fantômes suivants sont un aperçu côté canevas et sont ignorés — vous obtenez un seul véhicule qui parcourt l’intégralité du chemin, pas une file. - Les points de contrôle du chemin deviennent les sommets de la trajectoire, en mètres (ENU monde).
- Chaque sommet reçoit un
time, et le résultat est écrit sous la forme<Trajectory>→<Polyline>de<Vertex time="…">dans une<FollowTrajectoryAction>.
La vitesse est fixe (c’est la limitation principale)
Section intitulée « La vitesse est fixe (c’est la limitation principale) »La trajectoire est horodatée à une vitesse codée en dur de 10 m/s (≈ 36 km/h). drawtonomy ne dispose d’aucun champ de vitesse dans l’interface, et l’exporteur ne remplace jamais cette valeur par défaut. Dans esmini, l’entité affichera environ 36 km/h quel que soit ce que vous avez dessiné. Vous ne définissez pas une vitesse — vous façonnez le minutage via la disposition des empreintes, comme décrit ci-dessous.
Deux modes de minutage
Section intitulée « Deux modes de minutage »L’activation ou non du bouton Variable positioning détermine comment le temps est distribué le long de la trajectoire :
- Uniforme (bouton désactivé) — les empreintes sont espacées à intervalles
d’arc égaux (Interval) et le temps est
distance / 10 m/s. Le mouvement est à vitesse constante. Modifier l’Interval ne change que le nombre de sommets écrits (densité d’échantillonnage) ; la forme du chemin et la durée totale restent inchangées. - Variable (bouton activé) — chaque empreinte est fixée à une position le long du chemin, et la durée totale est divisée en tranches de temps égales entre les empreintes. Là où les empreintes sont regroupées, le véhicule avance lentement ; là où elles sont espacées, il avance vite. C’est le seul moyen de faire varier la vitesse effective le long du tracé.
Ce que vous modifiez ↔ ce qui change dans le .xosc
Section intitulée « Ce que vous modifiez ↔ ce qui change dans le .xosc »| Action dans l’éditeur | Effet sur l’export |
|---|---|
| Déplacer un point de contrôle du chemin | Coordonnées du sommet de trajectoire + durée totale (la longueur change, la vitesse reste à 10 m/s) |
| Faire glisser une empreinte en mode Variable | La position normalisée de cette empreinte → le time de son sommet → la vitesse (effective) locale de ce segment |
| Activer/désactiver Variable positioning | Bascule entre minutage à temps égaux et à vitesse constante |
| Changer l’Interval (mode uniforme) | Nombre de sommets uniquement — forme et vitesse de la trajectoire inchangées |
| Changer l’Anchor | Décalage d’affichage des empreintes uniquement — aucun effet sur la trajectoire exportée |
| Changer le gabarit de véhicule | vehicleCategory, modèle 3D, hauteur du bounding-box, preset de performance |
| Redimensionner le véhicule (l, h) | Dimensions du BoundingBox et géométrie des essieux |
| Faire pivoter le véhicule | Cap initial (uniquement lorsque le véhicule n’a pas de trajectoire) |
| Déplacer le véhicule | WorldPosition initiale (alignée sur le début de la trajectoire si elle en possède une) |
Pour répondre directement à la question fréquente : oui — déplacer une empreinte sur le chemin en mode Variable modifie le plan de vitesse exporté, car cela re-minute ce segment. Le faire en mode Uniform, ou changer l’Anchor, n’a aucun effet.
Valeurs codées en dur
Section intitulée « Valeurs codées en dur »Par souci de transparence sur le périmètre, ces éléments proviennent de
tables fixes ou de constantes, et non de paramètres que vous pouvez éditer :
catégorie de véhicule / presets de performance, chemins des modèles 3D,
hauteur des véhicules par catégorie, géométrie des essieux (dérivée de la
taille), mode de suivi (position), le déclencheur d’arrêt à 60 s, et —
surtout — la vitesse de trajectoire de 10 m/s.
Export programmatique
Section intitulée « Export programmatique »L’exporteur est fourni dans @drawtonomy/sdk et fonctionne sans l’éditeur.
Contrairement au menu, le SDK permet aussi d’émettre les deux fichiers
séparément :
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// Groupé (identique au menu) :const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// Ou chaque format individuellement :const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})Pour l’API complète et les points d’extension, voir la référence du SDK Exporteur.
Versions émises
Section intitulée « Versions émises »| Format | Version |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
Périmètre en un coup d’œil
Section intitulée « Périmètre en un coup d’œil »Pris en charge : routes en segments droits issues des voies ; signaux, passages piétons et patches d’intersection comme objets OpenDRIVE ; un véhicule par chemin suivant une trajectoire horodatée ; une archive esmini opérationnelle et rejouable immédiatement.
Pas encore pris en charge : jonctions OpenDRIVE, géométrie courbe, routes multi-voies, élévation des routes ; actions de vitesse OpenSCENARIO, changements de voie, logique de feux de circulation, interaction multi-agents, ou tout contrôle de vitesse par véhicule.
Voir aussi
Section intitulée « Voir aussi »- Architecture de l’exporteur — ce que fait le pipeline entre l’instantané et le fichier.
- Ajouter un format cible — intégrer CARLA, SUMO, Unity ou tout autre format.