यह आलेख एक उदाहरण परियोजना को कवर करेगा जो VEXlink का उपयोग करके रोबोट से रोबोट संचार की स्थिति और जेटसन की स्थिति की रिपोर्ट करने वाला एक डैशबोर्ड प्रदर्शित करता है। ai_demo परियोजना हमारे Githubपर होस्ट की गई है। यह डेमो प्रोजेक्ट USB सीरियल कनेक्शन के माध्यम से जेटसन प्रोसेसर से डेटा एकत्र करता है। एक बार डेटा प्राप्त हो जाने पर इसे V5 ब्रेन की स्क्रीन पर प्रदर्शित किया जाता है और साथ ही इसे VEXlink के माध्यम से जुड़े हुए एक सहयोगी V5 रोबोट को भी प्रेषित किया जाता है।

नोट: इस परियोजना के लिए V5 के लिए VS कोड एक्सटेंशन के नवीनतम संस्करण की आवश्यकता है। V5 के लिए VS कोड एक्सटेंशन यहां से डाउनलोड करें.


NVIDIA Jetson Nano से VEX V5 ब्रेन कम्युनिकेशंस

जेटसन प्रोसेसर में एक एप्लिकेशन होता है जो VEX AI सॉफ्टवेयर से निम्नलिखित डेटा एकत्र करता है:

स्थान निर्धारण के लिए रोबोट की स्थिति, अभिविन्यास और समन्वय अक्षों को दर्शाने वाले दो क्षेत्र आरेख।

रोबोट स्थान डेटा:

  • क्षेत्र के केंद्र से मीटर में रोबोट का X,Y स्थान।
  • रोबोट का अजीमुथ (हेडिंग), एलिवेशन (पिच), रोटेशन (रोल) सभी रेडियन में।

ऑब्जेक्ट डिटेक्शन डेटा (तीन प्रकार):

कैमरे का दृश्य जिसमें पहचाने गए गेम ऑब्जेक्ट्स को रंग, स्थिति निर्देशांक और दूरी के आधार पर लेबल किया गया है।

छवि पहचान (प्रकार एक):

  • यह डेटा VEX AI इंटेल कैमरा द्वारा पता लगाई गई वस्तु का प्रतिनिधित्व करता है।
  • यह डेटा कैमरे की छवि के संदर्भ में वस्तु का वर्णन करता है।
  • X, Y, चौड़ाई और ऊँचाई के मान पिक्सेल की इकाइयों में हैं। पिक्सेल मान छवि और ऑब्जेक्ट डिटेक्शन बॉक्स के ऊपरी बाएं कोने के संदर्भ में हैं। छवि का रिज़ॉल्यूशन 640x480 है.

 

क्षेत्र आरेख जो X और Y निर्देशांक अक्षों और क्षेत्र के केंद्र में X0 Y0 की संदर्भ स्थिति को दर्शाता है।

मानचित्र संसूचन (प्रकार दो):

  • यह डेटा, मीटर में रिपोर्ट किए गए GPS सेंसर के समान निर्देशांक प्रणाली में क्षेत्र पर वस्तु के स्थान को दर्शाता है।
  • प्रत्येक वस्तु में क्षेत्र के केंद्र के सापेक्ष वस्तु का स्थान भी शामिल होता है। X और Y के मान उनके संबंधित अक्ष पर क्षेत्र के केंद्र से मीटर की इकाइयों में हैं। Z का मान फ़ील्ड टाइल्स (ऊंचाई) से मीटर है।

पता लगाने वाली वस्तु (प्रकार तीन):

यह C++ कोड का एक अंश है जो पहचाने गए ऑब्जेक्ट्स के लिए डेटा संरचनाओं को परिभाषित करता है, जिसमें वर्गीकरण, स्थिति और छवि तथा मानचित्र निर्देशांक शामिल हैं।

  • इसमें पता लगाई गई वस्तुओं के बारे में समस्त जानकारी समाहित होती है।
  • प्रत्येक ऑब्जेक्ट में एक मान होता है जो पता लगाई गई ऑब्जेक्ट के वर्गीकरण को दर्शाता है। (क्लास आईडी: 0 = ग्रीनट्राइबॉल, 1 = रेडट्राइबॉल, 2 = ब्लूट्राइबॉल)
  • प्रत्येक वस्तु में एक संभावना भी होती है जो पता लगाने में VEX AI के विश्वास को दर्शाती है। यह model.py में एक फिल्टर के बाद है जो कम संभावना वाले डिटेक्शन को हटा देता है।
  • इसके अलावा, VEX AI इंटेल कैमरा से वस्तु की गहराई मीटर में रिपोर्ट की जाती है।
  • छवि पहचान और मानचित्र पहचान प्रत्येक वस्तु से जुड़ी होती है, जो छवि पर तथा वास्तविक दुनिया में वस्तु के निर्देशांकों को प्रदर्शित करती है।

ai_demo कार्यक्रम का विवरण:

मुख्य.सीपीपी

मानक VEX प्रोजेक्ट इंक्लूड्स और इनिशियलाइज़ेशन सेटअप को दर्शाने वाला C++ कोड स्निपेट।

VEX परियोजनाओं के लिए मानक में शामिल हैं:

// जेटसन नैनो से स्थान और अन्य डेटा प्राप्त करने के लिए जेटसन क्लास का इंस्टेंस बनाएं
// डेटा
//
ai::jetson jetson_comms;

जेटसन वर्ग का एक उदाहरण घोषित करें। इस वर्ग का उपयोग जेटसन को डेटा के लिए अनुरोध भेजने के साथ-साथ यूएसबी सीरियल कनेक्शन के माध्यम से डेटा प्राप्त करने के लिए किया जाता है।

#परिभाषित करें प्रबंधक_रोबोट 1

C++ कोड स्निपेट जो #define MANAGER_ROBOT 1 नामक एक डिफाइन स्टेटमेंट का उपयोग करके मैनेजर और वर्कर रोबोट भूमिकाओं के कॉन्फ़िगरेशन को दर्शाता है।

robot_link वर्ग का एक उदाहरण घोषित करें. इस ऑब्जेक्ट का उपयोग इस रोबोट और एक सहयोगी रोबोट के बीच डेटा को जोड़ने और स्थानांतरित करने के लिए किया जाएगा। इसी प्रोजेक्ट को दो अलग-अलग रोबोटों पर डाउनलोड किया जा सकता है। एक रोबोट को निम्नलिखित पंक्ति की आवश्यकता होगी:

//#परिभाषित करें MANAGER_ROBOT 1

दूसरे रोबोट पर कोड लोड करने से पहले, आपको उस पंक्ति पर टिप्पणी करनी होगी:

रोबोट_लिंक वर्ग रोबोट के VEXlink को सेट करता है और दो रोबोटों के बीच डेटा के प्रेषण और प्राप्ति को संभालता है। इस लेख में हम इस बात पर विस्तार से नहीं जाने वाले हैं कि वह वर्ग किस प्रकार काम करता है। सबसे पहले यह समझना अच्छा होगा कि VEXlink कैसे काम करता है। V5 VEXlink API के उपयोग के बारे में अधिक विस्तृत जानकारी के लिए, नई लाइब्रेरी और रोबोट-से-रोबोट संचार के लिए उनका प्रभावी ढंग से उपयोग करने के तरीके के बारे में बताता है।

  • प्रतियोगिता इवेंट संचालक

    C++ कोड जो सशर्त तर्क को दर्शाता है, जो अलगाव और परस्पर क्रिया स्वायत्त रूटीन के बीच स्विच करता है।

    VAIC और VRC के बीच सबसे बड़ा अंतर यह है कि इसमें ड्राइवर नियंत्रण अवधि नहीं होती। इसके बजाय दो स्वायत्त अवधियाँ हैं, अलगाव अवधि और अंतःक्रिया अवधि। इस उदाहरण में, प्रत्येक स्वायत्त अवधि के लिए अलग-अलग रूटीन हैं। चूंकि VEX API दो अलग-अलग कॉलबैक का समर्थन नहीं करता है, इसलिए प्रोग्राम में एक फ्लैग होना आवश्यक है जो यह निर्धारित करे कि कौन सा रूटीन निष्पादित किया जाना है। इस उदाहरण प्रोग्राम में, “firstAutoFlag” का उपयोग आइसोलेशन फ़ंक्शन को कॉल करने के लिए किया जाता है जब पहली बार स्वायत्त सक्षम होता है, और इंटरैक्शन फ़ंक्शन को तब कॉल करने के लिए किया जाता है जब स्वायत्त दूसरी बार सक्षम होता है। ध्यान देने योग्य बात यह है कि यदि किसी कारणवश मैच को रीसेट करने की आवश्यकता हो, तो डेमो प्रोग्राम को पुनः आरंभ करना होगा ताकि firstAutoFlag को रीसेट किया जा सके।

  • मुख्य()

    जेटसन से डेटा प्राप्त करने, उसे प्रोसेस करने और पार्टनर रोबोट के साथ संचार करने वाले मुख्य लूप का C++ कोड स्निपेट।

    यह इस परियोजना का मुख्य कार्य है। यह VEXcode वातावरण को सही ढंग से सेट करने के लिए vexcodeInit() को कॉल करके शुरू होता है। इसके बाद, जेटसन से प्राप्त डेटा को संग्रहीत करने के लिए एक स्थानीय AI_RECORD ऑब्जेक्ट घोषित किया जाता है। स्क्रीन को नवीनतम डेटा से अपडेट करने के लिए एक अलग कार्य भी निर्धारित किया गया है। उस कार्य के लिए कोड dashboard.cpp फ़ाइल में निहित है। स्वायत्त कॉलबैक को भी स्वायत्त अवधियों के आरंभ होने पर संभालने के लिए पंजीकृत किया जाता है।

    मुख्य while() लूप jetson_comms ऑब्जेक्ट से नवीनतम डेटा को हमारे स्थानीय AI_RECORD ऑब्जेक्ट में कॉपी करके शुरू होता है। इसके बाद यह रोबोट की स्थान संबंधी जानकारी लिंक ऑब्जेक्ट को भेजता है, ताकि इसे हमारे पार्टनर रोबोट तक पहुंचाया जा सके। एक बार जब यह डेटा का प्रसंस्करण कर लेता है, तो यह जेटसन से और अधिक डेटा का अनुरोध करता है और 66 मिलीसेकंड के लिए सो जाता है। इस डेटा के लिए मतदान दर 15Hz है। चूंकि AI सिस्टम का डेटा लगभग 15Hz पर अपडेट होता है, इसलिए तेजी से मतदान करने का कोई कारण नहीं है।

    नोट: जेटसन मानचित्र डेटा को केवल एक ही कार्य द्वारा अनुरोधित करने की आवश्यकता है।

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

Last Updated: