التصدير إلى OpenDRIVE وOpenSCENARIO وesmini
يُحوِّل drawtonomy المشهد المرسوم يدويًا إلى شبكة طرق بصيغة ASAM
OpenDRIVE (.xodr)
وسيناريو بصيغة
OpenSCENARIO (.xosc)،
مُعبَّأَين في ملف zip واحد يمكن تشغيله مباشرة في
esmini.
التحويل أساسي بقصد — يشمل الأشكال القليلة التي تُقابل نموذج بيانات ASAM مباشرةً، ويستثني الباقي. توضّح هذه الصفحة بدقة ما الذي يُحوَّل، وما الذي تفعله المركبة المُصدَّرة فعلًا، وما يخرج عن النطاق الحالي — حتى لا يُبالَغ في توقعات الناتج.
مشاهدة الرحلة الكاملة ذهابًا وإيابًا
Section titled “مشاهدة الرحلة الكاملة ذهابًا وإيابًا”الفيديو أدناه لقطة واحدة متواصلة: رسم تقاطع، رسم مسار، توليد بصمات، تصدير حزمة esmini، ثم تشغيل ملف .xosc المُصدَّر في esmini.
التصدير من المحرر
Section titled “التصدير من المحرر”يوجد نقطة دخول واحدة لتصدير ASAM. لا يعرض drawtonomy خيارات منفصلة لـ .xodr أو .xosc — يُنتَج كلا الملفين معًا ويُحزَّمان في zip واحد.

- ارسم المشهد (مسارات، تقاطع، مركبات، مسار حركة…).
- افتح القائمة ← Export ←
.zip (esmini). - أدخل اسمًا أساسيًا عند الطلب (الافتراضي
drawtonomy-<date>). - يُنزَّل ملف
<name>.zipيحتوي<name>.xodrو<name>.xoscوأصول النماذج ثلاثية الأبعاد التي يرجع إليها السيناريو.
يُصدَّر الصفحة الحالية بأكملها — لا يوجد وضع “التحديد فقط” لهدف ASAM.
تشغيل الملف
Section titled “تشغيل الملف”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> واحد | مسار واحد = طريق مستقل واحد |
| Traffic light | <signal> على أقرب طريق | نوع مركبة / مشاة فقط |
| Crosswalk | <object type="crosswalk"> | يُوضَع عموديًا على الطريق |
| Polygon (≥3 نقاط) | <object type="patch"> مع <outline> | يملأ التقاطعات والمناطق بصريًا |
كل ما عدا ذلك — المركبات، المشاة، النقاط المنفردة، الخطوط المستقيمة الحرة، النصوص، الصور — لا يُكتب في ملف .xodr.
تفاصيل كل طريق:
- الهندسة خطوط مستقيمة فقط. يُأخذ مرجع الطريق من حدود المسار اليسرى والأيمن ويُصدَّر كمقاطع
<line>. لا يُنتَج أي قوس أو حلزوني أوpoly3. - تخطيط ثابت للمسارات. كل طريق يحصل على مسار أيسر واحد (
id=1) ومسار مركزي (id=0) ومسار أيمن (id=-1)، جميعهاtype="driving". الطرق متعددة المسارات وأقسام المسار المتعددة غير مدعومة. - علامات الطريق مُثبَّتة على خط
solid white 0.13 m. - لا تقاطعات. كل طريق يحمل
junction="-1"ولا يُنتَج أي عنصر<junction>. تُعبَّر عن التقاطعات فقط عبر رقعة المضلع (بصريًا) وعبر روابط السلف/الخلف المستمدة من اتصالاتnext/prevللمسار (الإدخال الأول فقط). - لا ارتفاع أو ميل عرضي — تُصدَّر
elevationProfileوlateralProfileفارغتين (طرق مسطحة مستوية). - المقياس ثابت عند 16.67 بكسل/م؛ الأصل الجغرافي
0.
إلى OpenSCENARIO (.xosc)
Section titled “إلى OpenSCENARIO (.xosc)”| شكل drawtonomy | عنصر OpenSCENARIO |
|---|---|
| Vehicle | <ScenarioObject> (<Vehicle> أو <Pedestrian>) |
| Path footprint (المركبة الأمامية) | <FollowTrajectoryAction> |
“المشاة” هو شكل مركبة يطابق اسم قالبه نمط مشاة/مشي — يُصدَّر كـ <Pedestrian> بدلًا من <Vehicle>. المسارات، ممرات المشاة، إشارات المرور، والخطوط المستقيمة الحرة لا تُصدَّر في .xosc.
السيناريو المُصدَّر مُقتضب بقصد:
- السلوك الديناميكي الوحيد هو
FollowTrajectoryAction— خط متعدد النقاط مُختوم بالوقت. لا توجد إجراءات سرعة، تغييرات مسار، استجابات لإشارات المرور، تجنب تصادم، أو أي شروط تفاعل. - تبدأ كل كيان متحرك عند
SimulationTime ≥ 0وللسيناريوStopTriggerصارم عند 60 ث.
كيف تتحول بصمة المسار إلى حركة مركبة
Section titled “كيف تتحول بصمة المسار إلى حركة مركبة”هذا جوهر التصدير الديناميكي، لذا يستحق الدقة.

المسار هو خط تعديل ترسمه، والبصمات هي نسخ شبحية من المركبة مُوزَّعة عليه (الأثر الذي تراه في المحرر). عند التصدير:
- فقط البصمة الأولى (المقدمة) تصبح
<ScenarioObject>متحركًا. الأشباح الخلفية معاينة على القماشة وتُحذف — تحصل على مركبة واحدة تقطع المسار بالكامل، لا طابورًا. - تصبح نقاط التحكم في المسار رؤوس المسار، بالأمتار في الإحداثيات العالمية (ENU).
- يحصل كل رأس على قيمة
time، والنتيجة تُكتب كـ<Trajectory>←<Polyline>من<Vertex time="…">داخل<FollowTrajectoryAction>.
السرعة ثابتة (وهذا القيد الجوهري)
Section titled “السرعة ثابتة (وهذا القيد الجوهري)”يُوقَّت المسار بسرعة مُثبَّتة 10 م/ث (≈ 36 كم/س). لا يوجد في drawtonomy حقل سرعة في أي مكان بالواجهة، والمُصدِّر لا يتجاوز الإعداد الافتراضي أبدًا. ستُشاهد في esmini الكيان يُبلّغ عن ~36 كم/س بغض النظر عما رسمته. لا تضبط السرعة — بل تشكّل التوقيت من خلال تخطيط البصمات، كما هو موضح أدناه.
وضعا التوقيت
Section titled “وضعا التوقيت”يحدد تبديل “Variable positioning” كيف يُوزَّع الوقت على طول المسار:
- موحّد (التبديل OFF) — تجلس البصمات عند Interval متساوية بالطول القوسي والوقت =
المسافة / 10 م/ث. الحركة بسرعة ثابتة. تغيير الـ Interval يغير فقط عدد الرؤوس المكتوبة (كثافة العينات)؛ شكل المسار والمدة الكلية لا يتغيران. - متغير (التبديل ON) — كل بصمة مُثبَّتة على موضع على طول المسار، والمدة الكلية تُقسَّم إلى شرائح زمنية متساوية بين البصمات. حيث تتكدس البصمات تسير المركبة ببطء؛ حيث تتفرق تسرع. هذه الطريقة الوحيدة للتحكم في السرعة الفعلية على طول المسار.
ما تحرّره ↔ ما يتغير في .xosc
Section titled “ما تحرّره ↔ ما يتغير في .xosc”| إجراء في المحرر | الأثر على التصدير |
|---|---|
| تحريك نقطة تحكم في المسار | إحداثيات رأس المسار + المدة الكلية (الطول يتغير، السرعة تبقى 10 م/ث) |
| سحب بصمة في وضع Variable | الموضع المُعيَّر للبصمة ← time رأسها ← السرعة (الفعلية) في تلك القطعة |
| تبديل Variable positioning | التبديل بين التوقيت المتساوي والسرعة المتساوية |
| تغيير Interval (الوضع الموحّد) | عدد الرؤوس فقط — شكل المسار والسرعة لا يتغيران |
| تغيير Anchor | إزاحة رسم البصمة فقط — لا أثر على المسار المُصدَّر |
| تغيير قالب المركبة | vehicleCategory، النموذج ثلاثي الأبعاد، ارتفاع الصندوق المحيط، الإعداد المسبق للأداء |
| تغيير حجم المركبة (w, h) | أبعاد BoundingBox وهندسة المحور |
| تدوير المركبة | الاتجاه الأولي (فقط حين لا يوجد مسار للمركبة) |
| تحريك المركبة | WorldPosition الأولي (يُضبَّط على بداية المسار إن وُجد) |
للإجابة المباشرة على السؤال الشائع: نعم — تحريك بصمة في منتصف المسار في الوضع المتغير يغير خطة السرعة المُصدَّرة، لأنه يُعيد توقيت تلك القطعة. تحريكها في الوضع الموحّد، أو تغيير الـ Anchor، لا يؤثر.
القيم الثابتة في الكود
Section titled “القيم الثابتة في الكود”لتوضيح النطاق الحقيقي، هذه القيم تأتي من خرائط أو ثوابت مُثبَّتة لا مما يمكن تعديله: فئة المركبة وإعداداتها المسبقة للأداء، مسارات النماذج ثلاثية الأبعاد، ارتفاع المركبة حسب الفئة، هندسة المحور (مستمدة من الحجم)، وضع الاتباع (position)، محفّز الإيقاف عند 60 ث، والأهم من كل ذلك — سرعة المسار 10 م/ث.
التصدير البرمجي
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 الكامل ونقاط التوسعة، راجع مرجع Exporter SDK.
الإصدارات المُنتَجة
Section titled “الإصدارات المُنتَجة”| الصيغة | الإصدار |
|---|---|
| OpenDRIVE | 1.8 |
| OpenSCENARIO | 1.3 |
نطاق الدعم بإيجاز
Section titled “نطاق الدعم بإيجاز”مدعوم: طرق مستقيمة من المسارات؛ إشارات المرور وممرات المشاة والرقع كعناصر OpenDRIVE؛ مركبة واحدة لكل مسار تتبع مسارًا مُوقَّتًا؛ حزمة esmini جاهزة للتشغيل فورًا.
غير مدعوم بعد: تقاطعات OpenDRIVE، الهندسة المنحنية، الطرق متعددة المسارات، ارتفاع الطريق؛ إجراءات السرعة في OpenSCENARIO، تغييرات المسار، منطق إشارات المرور، تفاعل متعدد العوامل، أو أي تحكم في سرعة كل مركبة.
انظر أيضًا
Section titled “انظر أيضًا”- بنية المُصدِّر — ما يحدث في خط الأنابيب بين اللقطة والملف.
- إضافة صيغة هدف — وصل CARLA أو SUMO أو Unity أو أي شيء آخر.