ستغطي هذه المقالة نموذجًا لمشروع يعرض لوحة معلومات تُبلغ عن حالة اتصالات الروبوت باستخدام 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:
بيانات موقع الروبوت:
- موقع الروبوت X,Y بالأمتار من وسط الميدان.
- سمت الروبوت (العنوان)، والارتفاع (الملعب)، والدوران (اللفة) كلها بالراديان.
بيانات اكتشاف الكائنات (ثلاثة أنواع):
- تمثل هذه البيانات كائنًا تم اكتشافه بواسطة كاميرا VEX AI Intel.
- تصف هذه البيانات الكائن بالإشارة إلى صورة الكاميرا.
- تكون قيم X وY والعرض والارتفاع بوحدات البكسل. تشير قيم البكسل إلى الزاوية العلوية اليسرى من مربع اكتشاف الصورة والكائن. دقة الصورة هي 640x480.
كشف الخريطة (النوع الثاني):
- تمثل هذه البيانات موقع الجسم في الحقل بنفس نظام الإحداثيات مثل مستشعر GPS، ويتم الإبلاغ عنه بالأمتار.
- يحتوي كل كائن أيضًا على موقع الكائن بالنسبة إلى مركز الحقل. تكون قيم X وY بوحدات الأمتار من مركز الحقل في محور كل منهما. قيمة Z هي أمتار من بلاطات الحقل (الارتفاع).
كائن الكشف (النوع الثالث):
- يقوم هذا بتغليف جميع المعلومات حول الكائنات المكتشفة.
- يحتوي كل كائن على قيمة تمثل تصنيف الكائن المكتشف. (معرف الفئة: 0 = GreenTriball، 1 = RedTriBall، 2 = BlueTriBall)
- يحتوي كل كائن أيضًا على احتمال يمثل ثقة VEX AI في الاكتشاف. يحدث هذا بعد مرشح في model.py يزيل الاكتشافات ذات الاحتمالية المنخفضة.
- بالإضافة إلى ذلك، تم الإبلاغ عن عمق الجسم بالأمتار من كاميرا VEX AI Intel.
- يتم إرفاق اكتشاف الصورة واكتشاف الخريطة بكل كائن لتمثيل إحداثيات الكائن على الصورة وكذلك في العالم الحقيقي.
تفصيل لبرنامج ai_demo:
Main.cpp
يتضمن المعيار لمشاريع VEX:
قم بتعريف مثيل لفئة Jetson. يتم استخدام هذه الفئة لإرسال طلبات البيانات إلى Jetson وكذلك استقبال البيانات عبر اتصال USB التسلسلي.
#تعريف MANAGER_ROBOT 1
قم بتعريف مثيل لفئة robot_link. سيتم استخدام هذا الكائن للاتصال ونقل البيانات بين هذا الروبوت والروبوت الشريك. يمكن تنزيل هذا المشروع نفسه على روبوتين منفصلين. سيحتاج روبوت واحد إلى الخط:
//#تعريف MANAGER_ROBOT 1
قبل تحميل الكود على الروبوت الثاني، ستحتاج إلى التعليق على هذا السطر:
تقوم فئة robot_link بإعداد رابط VEX الخاص بالروبوت وتتولى إرسال واستقبال البيانات بين الروبوتين. لن نخوض في التفاصيل في هذه المقالة حول كيفية عمل هذا الفصل. ستكون فكرة جيدة أن نفهم كيفية عمل رابط VEXlink أولاً. لمزيد من المعلومات التفصيلية حول استخدام واجهة الجديدة وكيفية استخدامها بشكل فعال للتواصل بين الروبوتات.
-
معالجو أحداث المنافسة
أحد أكبر الاختلافات بين VAIC وVRC هو عدم وجود فترة تحكم للسائق. وبدلاً من ذلك هناك فترتان مستقلتان، فترة العزل وفترة التفاعل. في هذا المثال، توجد إجراءات منفصلة لكل فترة مستقلة. نظرًا لأن واجهة برمجة تطبيقات VEX لا تدعم ردي اتصال مختلفين، يجب أن تكون هناك علامة في البرنامج لتحديد الروتين الذي سيتم تنفيذه. في هذا البرنامج النموذجي، يتم استخدام "firstAutoFlag" لاستدعاء وظيفة العزل عند تمكين الحكم الذاتي لأول مرة، ووظيفة التفاعل عند تمكين الحكم الذاتي للمرة الثانية. هناك شيء واحد يجب ملاحظته وهو أنه إذا كانت هناك حاجة إلى إعادة تعيين المطابقة لسبب ما، فسيلزم إعادة تشغيل البرنامج التجريبي حتى يمكن إعادة تعيين أول AutoFlag.
-
رئيسي()
هذه هي المهمة الرئيسية لهذا المشروع. يبدأ الأمر عن طريق استدعاء vexcodeInit() لإعداد بيئة VEXcode بشكل صحيح. بعد ذلك، يتم الإعلان عن كائن AI_RECORD محلي لتخزين البيانات التي نتلقاها من Jetson. يتم أيضًا إعداد مهمة منفصلة للتعامل مع تحديث الشاشة بأحدث البيانات. رمز هذه المهمة موجود في ملف Dashboard.cpp. يتم أيضًا تسجيل رد الاتصال المستقل للتعامل معه عند بدء الفترات المستقلة.
تبدأ حلقة while() الرئيسية بنسخ أحدث البيانات من كائن jetson_comms إلى كائن AI_RECORD المحلي. ثم يقوم بعد ذلك بتمرير معلومات موقع الروبوت إلى كائن الارتباط بحيث يمكن نقلها إلى الروبوت الشريك. بمجرد الانتهاء من معالجة البيانات، فإنه يطلب المزيد من البيانات من Jetson وينام لمدة 66 مللي ثانية. معدل الاقتراع لهذه البيانات هو 15 هرتز. لا يوجد سبب لإجراء استطلاع أسرع حيث يتم تحديث بيانات نظام الذكاء الاصطناعي بمعدل 15 هرتز تقريبًا.
ملاحظة: يجب طلب بيانات خريطة Jetson فقط من خلال مهمة واحدة.