← أحدث الأبحاث
⚡ electrical engineering

Compiling OpenSCENARIO 2.1 for Scenario-Based Testing in CARLA

تقترح هذه الورقة بنية مترجم حديثة متعددة المراحل تترجم لغة ASAM OpenSCENARIO 2.1 الوصفية مباشرة إلى سلوكيات قابلة للتنفيذ في بيئة CARLA باستخدام واجهة أمامية تعتمد على ANTLR4 ووسط برمجِي دلالي، مما يتيح اختباراً قائماً على السيناريوهات مدفوعاً بالنيات ومعلناً دون الاعتماد على أدوات تحليل قديمة أو أدوات حل منطقية خارجية.

المؤلفون الأصليون: Thoshitha Gamage, Lasanthi Gamage

نُشر 2026-04-21
📖 4 دقيقة قراءة☕ قراءة في استراحة قهوة

المؤلفون الأصليون: Thoshitha Gamage, Lasanthi Gamage

البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل

تخيل أنك مخرج تحاول تصوير مشهد مطاردة سيارات معقد وعالي المخاطر لفيلم ما. في الأيام الخوالي، كان عليك إعطاء ممثليك (السيارات) تعليمات محددة وصارمة للغاية: "قد بسرعة 30 ميلاً في الساعة، ثم انعطف يساراً بعد 5 ثوانٍ بالضبط من قرع الجرس". كان هذا يشبه كتابة الكود بلغة OpenSCENARIO 1.3 (XML). لقد كان الأمر يعمل، لكنه كان فظاً، وصعب القراءة، وإذا أردت تغيير السيناريو، كان عليك إعادة كتابة أجزاء ضخمة منه.

الآن، تخيل لغة جديدة، OpenSCENARIO 2.1 (DSL)، حيث يمكنك ببساطة أن تقول: "يجب على سيارة الشرير أن تقطع الطريق أمام سيارة البطل، وتفرمل فجأة، وعلى البطل أن ينحرف ويومض بأضواء سيارته". هذا أكثر طبيعية ومرونة؛ إنه يشبه كتابة قصة بدلاً من كتابة جدول بيانات.

المشكلة:
المشكلة هي أن "استوديو التصوير" (محاكي CARLA، وهو أداة شهيرة لاختبار السيارات ذاتية القيادة) لا يتحدث هذه اللغة الجديدة بعد. هو يفهم فقط التعليمات القديمة والصارمة. إذا حاولت تغذيته بالسيناريو الجديد والمتطور، فسوف يتعطل أو يصاب بالارتباك.

الحل (هذه الورقة البحثية):
قام المؤلفان، توشيتا ولاسانثي غاماجي، ببناء آلة ترجمة ذكية للغاية (مترجم/Compiler) تجلس بين السيناريو الجديد الخاص بك والمحاكي. فكر في الأمر كمترجم فوري ماهر يستمع إلى قصتك باللغة الطبيعية ويحولها فوراً إلى الأوامر التقنية المحددة التي يفهمها المحاكي.

إليك كيف تعمل "آلة الترجمة" هذه، مقسمة إلى ثلاث خطوات بسيطة:

1. المترجم (الواجهة الأمامية - Frontend)

أولاً، تقرأ الآلة السيناريو الخاص بك. هي لا تقرأ الكلمات فحسب، بل تبني مخططاً (يسمى شجرة بناء الجملة المجردة - Abstract Syntax Tree) لقصتك.

  • التشبيه: تخيل مهندساً معمارياً يقرأ وصفك لمنزل ("باب أحمر كبير على اليسار") ويرسم مخططاً تقنياً دقيقاً. هم لا يبنون المنزل بعد؛ هم فقط يتأكدون من أن التعليمات منطقية على الورق.

2. فاحص المنطق (الواجهة الوسطى - Middle-End)

بعد ذلك، تقوم الآلة بفحص المخطط بحثاً عن الأخطاء. هل للسيارة اسم؟ هل السرعة واقعية؟ هل الممثلون معرفون بشكل صحيح؟

  • التشبيه: هذا يشبه مفتش المباني الذي يفحص المخطط. يتأكدون من أنك لم تحاول بناء مسبح فوق السطح أو أخبرت سيارة بأن تقود عبر جدار صلب. إنهم يصلحون أي أخطاء منطقية قبل بدء البناء.

3. طاقم الإنشاء (الواجهة الخلفية - Backend)

أخيراً، تأخذ الآلة المخطط المعتمد وتبدأ في "بناء" المشهد داخل المحاكي. وهي تستخدم نظاماً يسمى أشجار السلوك (Behavior Trees) (فكر فيها كخرائط تدفق للسيارات).

  • التشبيه: هذا هو طاقم الإنشاء. بدلاً من مجرد اتباع قائمة ثابتة، هم يستخدمون مخططاً انسيابياً ديناميكياً. إذا قام "الشرير" بالفرملة، فإن المخطط يخبر "البطل" فوراً بالانحراف. إذا قام "البطل" بوميض أضواء سيارته، فإن المخطط يخبر "الشرير" بالتباطؤ. يحدث هذا في الوقت الفعلي، استجابةً للمشهد أثناء تطوره.

الميزات "السحرية"

تسلط الورقة الضوء على بعض الأشياء الرائعة التي يمكن لهذا المترجم القيام بها والتي لم تستطع الأنظمة القديمة فعلها:

  • "السبورة" (المزامنة - Blackboard): تخيل ممثلين على خشبة المسرح. أحدهما يحتاج إلى انتظار انتهاء الآخر من جملته قبل البدء في جملته. يستخدم هذا النظام "سبورة" حيث يمكن للممثلين الصراخ بإشارات (مثل "أنا أفرمل!" أو "لقد انحرفت!")، والممثلون الآخرون يستمعون إلى السبورة ويتفاعلون فوراً، دون الحاجة إلى مؤقت صارم.
  • "ساحر الرياضيات" (التعبيرات الديناميكية - Dynamic Expressions): يمكنك أن تقول للسيارة، "قد بسرعة تزيد بمقدار 10 أميال في الساعة عن السيارة التي أمامك". كانت الأنظمة القديمة ستعاني مع هذه الرياضيات. هذا المترجم الجديد يحسب تلك السرعة آنياً، في كل ثانية، مع تعديل السرعة مع تسارع السيارة الأخرى أو تباطؤها.
  • "شرطي المرور" (سجل الطرق - Method Registry): لدى المترجم "دليل هاتف" ضخم (سجل) يعرف بالضبط كيفية تحويل أمر مثل change_lane إلى الكود منخفض المستوى المحدد الذي يحتاجه المحاكي لتحريك عجلات السيارة فعلياً.

تجربة القيادة (دراسة حالة)

لإثبات نجاح العمل، أجروا اختباراً درامياً:

  1. سيارة البطل (تسلا) تقود على الطريق.
  2. شاحنة الشرير (HGV) تسرع، وتقطع الطريق أمام البطل، وتضغط على المكابح بقوة (اختبار فرملة - brake check).
  3. سيارة البطل تكتشف الخطر فوراً، وتنعطف إلى الحارة المجالة، وتومض بأضواء العالي لتنبيه الشاحنة.
  4. كلتا السيارتين تتباطآن وتتوقفان بأمان قبل الاصطدام بعائق ثابت.

تعامل النظام مع كل هذا في وقت واحد: الرياضيات، تغيير الحارات، وميض الأضواء، والتوقيت، دون أن يتعطل المحاكي.

لماذا يهم هذا؟

حالياً، اختبار السيارات ذاتية القيادة بطيء ومكلف لأنك تضطر لكتابة كود معقد لكل اختبار. هذا المترجم يسمح للباحثين بكتابة الاختبارات بلغة بسيطة وسهلة القراءة (مثل القصة) وترك المهمة الصعبة للكمبيوتر.

العائق:
في الوقت الحالي، هذا المترجم مكتوب بلغة بايثون (لغة عالية المستوى)، وهي أبطأ قليلاً مما لو كانت مكتوبة بلغة C++ (لغة منخفضة المستوى وأسرع). الأمر يشبه استخدام مترجم فوري ذكي ولكن بطيء نوعاً ما. يخطط المؤلفون لترقية المحرك إلى لغة C++ في المستقبل لجعل العملية فائقة السرعة لمحاكاة حركة المرور الضخمة والمعقدة.

باخت-اختصار، تبني هذه الورقة جسراً بين "الطريقة البشرية" لوصف سيناريوهات القيادة و"طريقة الكمبيوتر" لمحاكاتها، مما يجعل اختبار مدى أمان السيارات ذاتية القيادة أمراً أسهل بكثير.

غارق في أبحاث مجالك؟

تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.

جرّب Digest →