ستغطي هذه المقالة نموذجًا لمشروع يعرض لوحة معلومات تُبلغ عن حالة اتصالات الروبوت باستخدام VEXlink وأيضًا حالة Jetson. تتم استضافة مشروع ai_demo على موقعنا Github. يقوم هذا المشروع التجريبي بجمع البيانات من معالج Jetson عبر اتصال USB التسلسلي. بمجرد استلام البيانات، يتم عرضها على شاشة V5 Brain ويتم إرسالها أيضًا إلى روبوت V5 الشريك المتصل عبر VEXlink.

ملاحظة: يتطلب هذا المشروع أحدث إصدار من VS Code Extension لـ V5. قم بتنزيل ملحق VS Code لـ V5 هنا.


نفيديا جيتسون نانو إلى VEX V5 Brain Communications

يحتوي معالج Jetson على تطبيق يقوم بجمع البيانات التالية من برنامج VEX AI:

OverUnder.png

بيانات موقع الروبوت:

  • موقع الروبوت X,Y بالأمتار من وسط الميدان.
  • سمت الروبوت (العنوان)، والارتفاع (الملعب)، والدوران (اللفة) كلها بالراديان.

بيانات اكتشاف الكائنات (ثلاثة أنواع):

بكسل (0,0).png

كشف الصورة (النوع الأول):
  • تمثل هذه البيانات كائنًا تم اكتشافه بواسطة كاميرا VEX AI Intel.
  • تصف هذه البيانات الكائن بالإشارة إلى صورة الكاميرا.
  • تكون قيم X وY والعرض والارتفاع بوحدات البكسل. تشير قيم البكسل إلى الزاوية العلوية اليسرى من مربع اكتشاف الصورة والكائن. دقة الصورة هي 640x480.

 

منظمة العفو الدولية XY (1).png

كشف الخريطة (النوع الثاني):

  • تمثل هذه البيانات موقع الجسم في الحقل بنفس نظام الإحداثيات مثل مستشعر GPS، ويتم الإبلاغ عنه بالأمتار.
  • يحتوي كل كائن أيضًا على موقع الكائن بالنسبة إلى مركز الحقل. تكون قيم X وY بوحدات الأمتار من مركز الحقل في محور كل منهما. قيمة Z هي أمتار من بلاطات الحقل (الارتفاع).

كائن الكشف (النوع الثالث):

الهياكل.PNG

  • يقوم هذا بتغليف جميع المعلومات حول الكائنات المكتشفة.
  • يحتوي كل كائن على قيمة تمثل تصنيف الكائن المكتشف. (معرف الفئة: 0 = GreenTriball، 1 = RedTriBall، 2 = BlueTriBall)
  • يحتوي كل كائن أيضًا على احتمال يمثل ثقة VEX AI في الاكتشاف. يحدث هذا بعد مرشح في model.py يزيل الاكتشافات ذات الاحتمالية المنخفضة.
  • بالإضافة إلى ذلك، تم الإبلاغ عن عمق الجسم بالأمتار من كاميرا VEX AI Intel.
  • يتم إرفاق اكتشاف الصورة واكتشاف الخريطة بكل كائن لتمثيل إحداثيات الكائن على الصورة وكذلك في العالم الحقيقي.

تفصيل لبرنامج ai_demo:

Main.cpp

image5.png

يتضمن المعيار لمشاريع VEX:

image7.png

قم بتعريف مثيل لفئة Jetson. يتم استخدام هذه الفئة لإرسال طلبات البيانات إلى Jetson وكذلك استقبال البيانات عبر اتصال USB التسلسلي.

#تعريف MANAGER_ROBOT 1

Define_manager_robot_1.png

قم بتعريف مثيل لفئة robot_link. سيتم استخدام هذا الكائن للاتصال ونقل البيانات بين هذا الروبوت والروبوت الشريك. يمكن تنزيل هذا المشروع نفسه على روبوتين منفصلين. سيحتاج روبوت واحد إلى الخط:

//#تعريف MANAGER_ROBOT 1

قبل تحميل الكود على الروبوت الثاني، ستحتاج إلى التعليق على هذا السطر:

تقوم فئة robot_link بإعداد رابط VEX الخاص بالروبوت وتتولى إرسال واستقبال البيانات بين الروبوتين. لن نخوض في التفاصيل في هذه المقالة حول كيفية عمل هذا الفصل. ستكون فكرة جيدة أن نفهم كيفية عمل رابط VEXlink أولاً. للحصول على معلومات أكثر تفصيلاً حول استخدام V5 VEXlink API، يشرح هذا المستند المكتبات الجديدة وكيفية استخدامها بفعالية للاتصال بين روبوت وآخر.

  • معالجو أحداث المنافسة

    firstAutoFlag.png

    أحد أكبر الاختلافات بين VAIC وVRC هو عدم وجود فترة تحكم للسائق. وبدلاً من ذلك هناك فترتان مستقلتان، فترة العزل وفترة التفاعل. في هذا المثال، توجد إجراءات منفصلة لكل فترة مستقلة. نظرًا لأن واجهة برمجة تطبيقات VEX لا تدعم ردي اتصال مختلفين، يجب أن تكون هناك علامة في البرنامج لتحديد الروتين الذي سيتم تنفيذه. في هذا البرنامج النموذجي، يتم استخدام "firstAutoFlag" لاستدعاء وظيفة العزل عند تمكين الحكم الذاتي لأول مرة، ووظيفة التفاعل عند تمكين الحكم الذاتي للمرة الثانية. هناك شيء واحد يجب ملاحظته وهو أنه إذا كانت هناك حاجة إلى إعادة تعيين المطابقة لسبب ما، فسيلزم إعادة تشغيل البرنامج التجريبي حتى يمكن إعادة تعيين أول AutoFlag.

  • رئيسي()

    الرئيسية (1).PNG

    هذه هي المهمة الرئيسية لهذا المشروع. يبدأ الأمر عن طريق استدعاء vexcodeInit() لإعداد بيئة VEXcode بشكل صحيح. بعد ذلك، يتم الإعلان عن كائن AI_RECORD محلي لتخزين البيانات التي نتلقاها من Jetson. يتم أيضًا إعداد مهمة منفصلة للتعامل مع تحديث الشاشة بأحدث البيانات. رمز هذه المهمة موجود في ملف Dashboard.cpp. يتم أيضًا تسجيل رد الاتصال المستقل للتعامل معه عند بدء الفترات المستقلة.

    تبدأ حلقة while() الرئيسية بنسخ أحدث البيانات من كائن jetson_comms إلى كائن AI_RECORD المحلي. ثم يقوم بعد ذلك بتمرير معلومات موقع الروبوت إلى كائن الارتباط بحيث يمكن نقلها إلى الروبوت الشريك. بمجرد الانتهاء من معالجة البيانات، فإنه يطلب المزيد من البيانات من Jetson وينام لمدة 66 مللي ثانية. معدل الاقتراع لهذه البيانات هو 15 هرتز. لا يوجد سبب لإجراء استطلاع أسرع حيث يتم تحديث بيانات نظام الذكاء الاصطناعي بمعدل 15 هرتز تقريبًا.

    ملاحظة: يجب طلب بيانات خريطة Jetson فقط من خلال مهمة واحدة.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: