Exportar para OpenDRIVE / OpenSCENARIO / esmini
O drawtonomy transforma uma cena desenhada à mão numa rede viária ASAM
OpenDRIVE (.xodr)
e num cenário
OpenSCENARIO (.xosc),
empacotados num único zip que pode reproduzir diretamente no
esmini.
A conversão é deliberadamente básica — abrange as formas que mapeiam de forma limpa para o modelo de dados ASAM e exclui tudo o resto. Esta página documenta exatamente o que é convertido, o que o veículo exportado faz de facto e o que fica fora de âmbito, para que o resultado nunca prometa mais do que oferece.
Ver o fluxo completo em vídeo
Seção intitulada “Ver o fluxo completo em vídeo”O vídeo abaixo foi gravado numa única tomada: desenhar uma interseção, desenhar
um percurso, gerar as pegadas, exportar o zip esmini e reproduzir o .xosc
exportado no esmini.
Exportar pelo editor
Seção intitulada “Exportar pelo editor”Existe um único ponto de exportação ASAM. O drawtonomy não expõe itens de
menu separados para .xodr / .xosc — ambos os arquivos são produzidos em
conjunto e compactados num único zip.

- Desenhe a sua cena (faixas, uma interseção, veículos, um percurso…).
- Abra o menu → Export →
.zip (esmini). - Introduza um nome base quando solicitado (por padrão:
drawtonomy-<data>). - Um
<nome>.zipé baixado, contendo<nome>.xodr,<nome>.xosce os recursos de modelos 3D do esmini referenciados pelo cenário.
A página atual completa é exportada — não existe modo de «só a seleção» para o destino ASAM.
Reproduzir no esmini
Seção intitulada “Reproduzir no esmini”unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
O veículo percorre a linha laranja — essa linha é a
FollowTrajectoryAction gerada a partir do percurso que desenhou.
O que é convertido
Seção intitulada “O que é convertido”Para OpenDRIVE (.xodr)
Seção intitulada “Para OpenDRIVE (.xodr)”| Forma drawtonomy | Elemento OpenDRIVE | Notas |
|---|---|---|
| Lane | um <road> | 1 faixa = 1 estrada independente |
| Traffic light | <signal> na estrada mais próxima | apenas tipo veículo / peão |
| Crosswalk | <object type="crosswalk"> | colocado perpendicularmente à estrada |
| Polygon (≥3 pontos) | <object type="patch"> com <outline> | representa visualmente interseções e áreas |
Tudo o resto — veículos, peões, pontos soltos, linestrings livres, texto,
imagens — não é escrito no .xodr.
Detalhes sobre cada estrada:
- A geometria é apenas linhas retas. A linha de referência da estrada é
amostrada a partir dos bordos esquerdo/direito da faixa e emitida como
segmentos
<line>. Não é produzida geometriaarc,spiraloupoly3. - Configuração de faixas fixa. Cada estrada tem exatamente uma faixa à
esquerda (
id=1), uma central (id=0) e uma à direita (id=-1), todas comtype="driving". Estradas com múltiplas faixas e secções de faixas múltiplas não são representadas. - Marcações codificadas para uma linha
solid white 0.13 m. - Sem junções. Cada estrada tem
junction="-1"e nunca é gerado um elemento<junction>. As interseções são representadas apenas pelo polígono (visual) e pelas ligações predecessor/successor derivadas das conexõesnext/prevda faixa (apenas a primeira entrada). - Sem perfil de elevação / superelevação —
elevationProfileelateralProfilesão emitidos vazios (estradas planas). - A escala é fixada em 16,67 px/m; a origem geográfica é
0.
Para OpenSCENARIO (.xosc)
Seção intitulada “Para OpenSCENARIO (.xosc)”| Forma drawtonomy | Elemento OpenSCENARIO |
|---|---|
| Vehicle | um <ScenarioObject> (<Vehicle> ou <Pedestrian>) |
| Path footprint (veículo principal) | uma <FollowTrajectoryAction> |
Um «peão» é simplesmente uma forma de veículo cujo nome de modelo corresponde
ao padrão pedestrian/walk — é emitido como <Pedestrian> em vez de
<Vehicle>. Faixas, passadeiras, semáforos e linestrings livres não são
emitidos para o .xosc.
O cenário exportado é intencionalmente mínimo:
- O único comportamento dinâmico é
FollowTrajectoryAction— uma polilinha com marcas temporais. Não existem ações de velocidade, mudanças de faixa, respostas a semáforos, desvio de colisões nem condições de interação. - Cada entidade em movimento começa em
SimulationTime ≥ 0e o cenário tem umStopTriggerfixo aos 60 s.
Como uma pegada de percurso se torna movimento de veículo
Seção intitulada “Como uma pegada de percurso se torna movimento de veículo”Esta é a parte central da exportação dinâmica, pelo que vale a pena ser preciso.

Um percurso (path) é uma linestring que desenha, e as pegadas (footprints) são cópias fantasma de um veículo dispostas ao longo dele (o rasto visível no editor). Na exportação:
- Só a pegada principal (a primeira) se torna um
<ScenarioObject>em movimento. As cópias seguintes são uma pré-visualização no editor e são descartadas — obtém um veículo que percorre todo o trajeto, não uma fila. - Os pontos de controle do percurso tornam-se os vértices da trajetória, em metros no referencial ENU.
- Cada vértice recebe um
time, e o resultado é escrito como uma<Trajectory>→<Polyline>de<Vertex time="…">dentro de uma<FollowTrajectoryAction>.
A velocidade é fixa (esta é a limitação principal)
Seção intitulada “A velocidade é fixa (esta é a limitação principal)”A trajetória é temporizada a 10 m/s fixos (≈ 36 km/h). O drawtonomy não tem campo de velocidade em nenhum lado da interface, e o exportador nunca altera o valor padrão. No esmini, a entidade reportará sempre ≈ 36 km/h, independentemente do que desenhou. Não define a velocidade — controla o tempo através da disposição das pegadas, conforme descrito a seguir.
Dois modos de temporização
Seção intitulada “Dois modos de temporização”A opção «Variable positioning» decide como o tempo é distribuído ao longo da trajetória:
- Uniforme (opção desativada) — as pegadas estão a intervalos de
comprimento de arco iguais (Interval) e o tempo é
distância / 10 m/s. O movimento tem velocidade constante. Alterar o Interval apenas muda o número de vértices escritos (densidade de amostragem); a forma do percurso e a duração total mantêm-se iguais. - Variável (opção ativada) — cada pegada está fixada numa posição ao longo do percurso, e a duração total é dividida em fatias de tempo iguais entre as pegadas. Onde as pegadas estão mais juntas, o veículo move-se mais devagar; onde estão mais espaçadas, move-se mais depressa. Esta é a única forma de variar a velocidade efetiva ao longo do trajeto.
O que editar ↔ o que muda no .xosc
Seção intitulada “O que editar ↔ o que muda no .xosc”| Ação no editor | Efeito na exportação |
|---|---|
| Mover um ponto de controle do percurso | Coordenadas do vértice da trajetória + duração total (o comprimento muda, a velocidade mantém-se a 10 m/s) |
| Arrastar uma pegada em modo Variable | Posição normalizada dessa pegada → time do seu vértice → velocidade local (efetiva) desse troço |
| Ativar/desativar Variable positioning | Alterna entre temporização de tempo igual e de velocidade igual |
| Alterar Interval (modo uniforme) | Apenas o número de vértices — a forma da trajetória e a velocidade não mudam |
| Alterar Anchor | Apenas o deslocamento visual das pegadas — não tem efeito na trajetória exportada |
| Alterar o modelo do veículo | vehicleCategory, modelo 3D, altura do bounding-box, predefinição de desempenho |
| Redimensionar o veículo (w, h) | Dimensões do BoundingBox e geometria dos eixos |
| Rodar o veículo | Orientação inicial (apenas quando o veículo não tem trajetória) |
| Mover o veículo | WorldPosition inicial (ancorado ao início da trajetória, se existir) |
Para responder diretamente à dúvida mais comum: sim — mover uma pegada a meio do percurso em modo Variable altera o plano de velocidade exportado, porque retemporizará esse segmento. Movê-la em modo Uniform, ou alterar o Anchor, não tem qualquer efeito.
Valores fixos no código
Seção intitulada “Valores fixos no código”Para ser transparente quanto ao âmbito, estes valores provêm de mapas ou
constantes fixas, não de nada que possa editar: categoria/predefinições de
desempenho do veículo, caminhos do modelo 3D, altura do veículo por categoria,
geometria dos eixos (derivada das dimensões), modo de seguimento (position),
o gatilho de paragem aos 60 s e — acima de tudo — a velocidade de trajetória
de 10 m/s.
Exportação programática
Seção intitulada “Exportação programática”O exportador é distribuído em @drawtonomy/sdk e funciona sem o editor. Ao
contrário do menu, o SDK permite também emitir os dois arquivos
individualmente:
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// Empacotado (igual ao menu):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// Ou cada formato separadamente:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})Para a API completa e pontos de extensão, consulte a Referência do SDK do Exportador.
Versões emitidas
Seção intitulada “Versões emitidas”| Formato | Versão |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
Âmbito resumido
Seção intitulada “Âmbito resumido”Suportado: estradas de linhas retas a partir de faixas; sinais, passadeiras e polígonos de interseção como objetos OpenDRIVE; um veículo por percurso a seguir uma trajetória temporizada; um zip esmini funcional que pode reproduzir de imediato.
Ainda não suportado: junções OpenDRIVE, geometria curva, estradas com múltiplas faixas, perfil de elevação; ações de velocidade OpenSCENARIO, mudanças de faixa, lógica de semáforos, interação entre múltiplos agentes ou qualquer controle de velocidade por veículo.
Ver também
Seção intitulada “Ver também”- Arquitetura do exportador — o que o pipeline faz entre o snapshot e o arquivo.
- Adicionar um formato de destino — integre CARLA, SUMO, Unity ou qualquer outra plataforma.