ייצוא ל-OpenDRIVE / OpenSCENARIO / esmini
drawtonomy ממיר סצנה מצוירת לרשת דרכים OpenDRIVE (.xodr)
ותרחיש OpenSCENARIO (.xosc) של ASAM,
ארוזים ב-zip אחד שניתן להריץ מיד ב-esmini.
ההמרה מכוונת להיות בסיסית במכוון — היא מכסה את הצורות שממפות בצורה נקייה למודל הנתונים של ASAM ומשאירה את השאר בחוץ. הדף הזה מתעד בדיוק מה מומר, מה הרכב המיוצא עושה בפועל, ומה מחוץ לתחום — כדי שהפלט לא יבטיח יותר ממה שיש.
צפייה ב-round-trip המלא
Section titled “צפייה ב-round-trip המלא”הווידאו הבא הוא לקיחה אחת ברצף: מצייר צומת, מצייר מסלול, מייצר footprints, מייצא את ה-zip ל-esmini, ואז מריץ את ה-.xosc המיוצא ב-esmini.
ייצוא מהעורך
Section titled “ייצוא מהעורך”נקודת כניסה אחת לייצוא ASAM. drawtonomy לא חושף פריטי תפריט נפרדים לקובצי .xodr / .xosc — שני הקבצים נוצרים יחד ונארזים ב-zip אחד.

- ציירו את הסצנה (נתיבים, צומת, רכבים, מסלול…).
- פתחו את התפריט ← Export →
.zip (esmini). - הזינו שם בסיס כשתתבקשו (ברירת מחדל:
drawtonomy-<date>). - קובץ
<name>.zipיורד ובתוכו<name>.xodr,<name>.xosc, ונכסי המודל התלת-ממדי של esmini שהתרחיש מפנה אליהם.
כל הדף הנוכחי מיוצא — אין מצב “בחירה בלבד” ליעד ASAM.
unzip drawtonomy-2026-05-30.zipcd drawtonomy-2026-05-30esmini --osc drawtonomy-2026-05-30.xosc --window 60 60 1024 768
הרכב נוסע לאורך הקו הכתום — הקו הזה הוא ה-FollowTrajectoryAction שנוצר מהמסלול שציירתם.
מה מומר
Section titled “מה מומר”ל-OpenDRIVE (.xodr)
Section titled “ל-OpenDRIVE (.xodr)”| צורת drawtonomy | אלמנט OpenDRIVE | הערות |
|---|---|---|
| Lane | <road> אחד | נתיב 1 = כביש עצמאי אחד |
| Traffic light | <signal> על הכביש הקרוב ביותר | סוג רכב / הולך רגל בלבד |
| Crosswalk | <object type="crosswalk"> | ממוקם ניצב לכביש |
| Polygon (3 נקודות ומעלה) | <object type="patch"> עם <outline> | ממלא ויזואלים של צומת/שטח |
כל השאר — רכבים, הולכי רגל, נקודות בודדות, linestrings חופשיים, טקסט, תמונות — אינו נכתב ל-.xodr.
עד כמה כל כביש מגיע:
- גיאומטריה של קווים ישרים בלבד. קו ייחוס הכביש מדגם מגבולות שמאל/ימין של הנתיב ומיוצא כקטעי
<line>. לא נוצרת גיאומטרייתarc,spiralאוpoly3. - פריסת נתיב קבועה. כל כביש מקבל בדיוק נתיב שמאלי אחד (
id=1), נתיב מרכזי אחד (id=0), ונתיב ימני אחד (id=-1), כולםtype="driving". כבישים עם מספר נתיבים וחלקי נתיב מרובים אינם מיוצגים. - סימוני הכביש מקודדים קשיח לקו
solid white 0.13 m. - אין צמתים. כל כביש נושא
junction="-1"ואף<junction>לא נוצר אי פעם. צמתים מועברים רק דרך ה-patch הפולגוני (ויזואלים) ודרך קישורי predecessor/successor הנגזרים מחיבוריnext/prevשל הנתיב (כניסה ראשונה בלבד). - ללא גובה / superelevation —
elevationProfileו-lateralProfileמיוצאים ריקים (כבישים שטוחים). - קנה מידה קבוע של 16.67 px/m; מקור גיאוגרפי הוא
0.
ל-OpenSCENARIO (.xosc)
Section titled “ל-OpenSCENARIO (.xosc)”| צורת drawtonomy | אלמנט OpenSCENARIO |
|---|---|
| Vehicle | <ScenarioObject> (<Vehicle> או <Pedestrian>) |
| Path footprint (הרכב המוביל) | <FollowTrajectoryAction> |
“הולך רגל” הוא פשוט צורת רכב ששמה תואם תבנית pedestrian/walk — הוא מיוצא כ-<Pedestrian> במקום <Vehicle>. נתיבים, מעברי חציה, רמזורים ו-linestrings חופשיים אינם מיוצאים ל-.xosc.
התרחיש המיוצא הוא מינימלי במכוון:
- ההתנהגות הדינמית היחידה היא
FollowTrajectoryAction— polyline עם חותמות זמן. אין פעולות מהירות, החלפות נתיב, תגובות לרמזורים, הימנעות מהתנגשות, או תנאי אינטראקציה כלשהם. - כל ישות נעה מתחילה ב-
SimulationTime ≥ 0והתרחיש מכילStopTriggerקשיח של 60 שניות.
איך footprint של מסלול הופך לתנועת רכב
Section titled “איך footprint של מסלול הופך לתנועת רכב”זהו ליבת הייצוא הדינמי, לכן כדאי להיות מדויקים.

Path הוא linestring שמצייר, ו-footprints הם עותקים-רוחות של רכב שמסודרים לאורכו (השובל שרואים בעורך). בייצוא:
- רק ה-footprint המוביל (הראשון) הופך ל-
<ScenarioObject>נע. הצללים הנגררים הם תצוגה מקדימה בלבד על הקנבס ומושמטים — מקבלים רכב אחד שנוסע לאורך כל המסלול, לא שיירה. - נקודות הבקרה של המסלול הופכות לצמתי המסלול, בקואורדינטות עולמיות (ENU) במטרים.
- כל צומת מקבל
time, והתוצאה נכתבת כ-<Trajectory>→<Polyline>של<Vertex time="…">בתוך<FollowTrajectoryAction>.
המהירות קבועה (זוהי המגבלה המרכזית)
Section titled “המהירות קבועה (זוהי המגבלה המרכזית)”המסלול מתוזמן ב-10 m/s קשיח (≈ 36 km/h). ל-drawtonomy אין שדה מהירות בשום מקום בממשק, והמייצא לעולם לא מבטל את ברירת המחדל. ב-esmini תראה את הישות מדווחת על ~36 km/h ללא תלות במה שציירת. במקום לקבוע מהירות, את/ה מעצב/ת את התזמון דרך פריסת ה-footprints, כמתואר בהמשך.
שני מצבי תזמון
Section titled “שני מצבי תזמון”מה שקובע הוא מתג Variable positioning במסלול:
- אחיד (מתג כבוי) — footprints ממוקמים במרחקי Interval שווים לאורך הקשת, והזמן הוא
מרחק / 10 m/s. התנועה היא מהירות קבועה. שינוי ה-Interval משנה רק את מספר הצמתים שנכתבים (צפיפות דגימה); צורת המסלול ומשך הזמן הכולל אינם משתנים. - משתנה (מתג פעיל) — כל footprint מוצמד למיקום לאורך המסלול, ומשך הזמן הכולל מחולק ל-פרוסות זמן שוות בין footprints. במקומות שה-footprints צפופים הרכב נע לאט; במקומות שהם מרווחים הוא נע מהר. זה הדרך היחידה לשנות את המהירות האפקטיבית לאורך המסלול.
מה עורכים ↔ מה משתנה ב-.xosc
Section titled “מה עורכים ↔ מה משתנה ב-.xosc”| פעולה בעורך | השפעה על הייצוא |
|---|---|
| הזזת נקודת בקרה של מסלול | קואורדינטות צומת המסלול + משך כולל (האורך משתנה, המהירות נשארת 10 m/s) |
| גרירת footprint במצב Variable | המיקום המנורמל של אותו footprint ← time של הצומת שלו ← המהירות האפקטיבית של אותה רגל |
| הפעלת Variable positioning | מחליף בין תזמון זמן-שווה ומהירות-שווה |
| שינוי Interval (מצב אחיד) | מספר הצמתים בלבד — צורת המסלול והמהירות אינן משתנות |
| שינוי Anchor | אופסט ציור ה-footprint בלבד — אין השפעה על המסלול המיוצא |
| שינוי תבנית הרכב | vehicleCategory, מודל תלת-ממד, גובה תיבת גבול, preset ביצועים |
| שינוי גודל הרכב (w, h) | מידות BoundingBox וגיאומטריית הסרנים |
| סיבוב הרכב | כיוון ראשוני (רק כשלרכב אין מסלול) |
| הזזת הרכב | WorldPosition ראשונית (מוצמדת לתחילת המסלול אם קיים) |
לסיכום השאלה הנפוצה: כן — הזזת footprint לאמצע המסלול במצב Variable משנה את תוכנית המהירות המיוצאת, כי היא מתזמנת מחדש את אותו קטע. הזזה במצב Uniform, או שינוי ה-Anchor, אינן משנות.
ערכים מקודדים קשיח
Section titled “ערכים מקודדים קשיח”לשקיפות מלאה לגבי התחום, הפרטים הבאים נקבעים ממפות או קבועים קבועים ולא מדבר שניתן לערוך: קטגוריית רכב/presets ביצועים, נתיבי מודל תלת-ממד, גובה רכב לפי קטגוריה, גיאומטריית סרנים (נגזרת מהגודל), מצב מעקב (position), ה-stop trigger של 60 שניות, ובעיקר — מהירות המסלול של 10 m/s.
ייצוא פרוגרמטי
Section titled “ייצוא פרוגרמטי”המייצא מגיע עם @drawtonomy/sdk ורץ ללא העורך. בניגוד לתפריט, ה-SDK מאפשר גם לייצא את שני הקבצים בנפרד:
import { exporter, createSnapshot } from '@drawtonomy/sdk'
const snapshot = createSnapshot(shapes)
// ארוז (זהה לתפריט):const { blob, baseName } = exporter.buildEsminiZip(snapshot, { baseName: 'my-scene',})
// או כל פורמט בנפרד:const xodr = exporter.exportToOpenDrive(snapshot)const xosc = exporter.exportToOpenScenario(snapshot, { xodrFilename: 'my-scene.xodr',})ל-API המלא ולנקודות הרחבה, ראו את עיון ה-SDK של המייצא.
גרסאות שמיוצאות
Section titled “גרסאות שמיוצאות”| פורמט | גרסה |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
סיכום התחום
Section titled “סיכום התחום”נתמך: כבישים של קווים ישרים מנתיבים; רמזורים, מעברי חציה ו-patches של צומת כאובייקטי OpenDRIVE; רכב אחד לכל מסלול שעוקב אחר מסלול מתוזמן; zip עובד ל-esmini שניתן להריץ מיד.
טרם נתמך: צמתי OpenDRIVE, גיאומטריה מעוקלת, כבישים רב-נתיביים, גובה כביש; פעולות מהירות ב-OpenSCENARIO, החלפות נתיב, לוגיקת רמזורים, אינטראקציה רב-סוכנים, או שליטה במהירות לרכב.
ראו גם
Section titled “ראו גם”- ארכיטקטורת המייצא — מה הצינור עושה בין snapshot לקובץ.
- הוספת פורמט יעד — חיבור CARLA, SUMO, Unity או כל יעד אחר.