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

يتطلب هذا المشروع أحدث إصدار من VEXcode Pro V5 (الإصدارات 2.0.2 والإصدارات الأحدث). تم تنزيل VEXcode Pro V5 هنا.

VEXcode-Pro-V5-icon.png


Nvidia Jetson Nano to VEX V5 Brain Communications

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

Screen_Shot_2021-02-05_at_3.30.04_PM.png

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

  • موقع الروبوت X ، Y بالملليمتر من مركز الميدان.
  • سمت الروبوت (الاتجاه) والارتفاع (الانحدار) والدوران (الدوران) كلها بوحدات الراديان.

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

image4.png

معلومات الصندوق (النوع الأول):
  • تمثل هذه البيانات كائنًا تم اكتشافه بواسطة مستشعر الصورة AI.
  • تحتوي البيانات على قيمة تمثل تصنيف الكائن المكتشف. (القيم: 0 = كرة حمراء ، 1 = كرة زرقاء ، 2 = هدف)
  • تصف هذه البيانات الكائن بالإشارة إلى صورة الفيديو.
  • تكون قيم X و Y والعرض والارتفاع بوحدات البكسل. تشير قيم البكسل إلى الزاوية اليسرى العلوية لشاشة الفيديو. دقة الصورة 320 × 240.

image2.png

image6.png

معلومات الخريطة (النوع الثاني):

  • تمثل هذه البيانات نفس البيانات مثل معلومات الصندوق ولكن هذه البيانات ستستمر إذا توقف الكائن عن الاكتشاف.
  • كل كائن له قيمة عمرية تزيد لكل إطار من إطارات الفيديو التي لم يتم اكتشاف الكائن. لذلك كلما ارتفع الرقم العمري لشيء ما كلما طالت المدة منذ أن اكتشف نظام الذكاء الاصطناعي هذا الكائن.
  • يحتوي كل كائن على قيمة تمثل تصنيف الكائن المكتشف. (القيم: 0 = كرة حمراء ، 1 = كرة زرقاء ، 2 = هدف)
  • يحتوي كل كائن أيضًا على موقع الكائن بالنسبة إلى مركز الحقل. قيم X و Y بوحدات المليمترات من مركز الحقل في محور كل منهما. قيمة Z هي ملليمترات من بلاطات الحقل.

    ملاحظة: يتم تحويل هذه القيم إلى البوصات والدرجات لمطابقة البيانات المعروضة على لوحة معلومات الويب.
  • في برنامج ai_demo ، يتم تمثيل قيم هذه الكائنات بواسطة بنية MAP_RECORD.

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

        • Main.cpp

          image5.png

          يشمل المعيار لمشاريع VEX:

          image7.png

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

          #define MANAGER_ROBOT 1

          تعريف_manager_robot_1.png

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

          // # عرّف MANAGER_ROBOT 1

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

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

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

    firstAutoFlag.png

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

  • الأساسية()

    image3.png

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

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

    ملاحظة: لا يلزم طلب بيانات خريطة Jetson إلا من خلال مهمة واحدة.

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