नियंत्रक का उपयोग करके किसी कार्य को पूरा करने के लिए अपने रोबोट को चलाना और ले जाना आसान हो सकता है। हालाँकि, ड्राइव प्रोग्राम का उपयोग करने की अपनी सीमाएँ हैं, और आपके रोबोट निर्माण या कार्य के आधार पर, आपको अलग-अलग नियंत्रणों की आवश्यकता हो सकती है। नियंत्रक को कोड करने से आप नियंत्रक को अनुकूलित कर सकते हैं, जिससे यह आपके रोबोट और कार्य के लिए बेहतर रूप से उपयुक्त हो सके। VEXcode EXP में नियंत्रक को कोड करने के कई तरीके हैं। प्रत्येक के अपने फायदे और सीमाएं हैं, और कुछ विधियां वांछित परिणाम के आधार पर कुछ स्थितियों के लिए बेहतर अनुकूल हैं।

यह आलेख आपको VEXcode EXP में नियंत्रक को कस्टम कोडिंग के लिए तीन अलग-अलग विकल्पों के बारे में बताएगा। प्रत्येक विधि का वर्णन उसके लाभों, सीमाओं और उपयोग के उदाहरण के साथ किया जाएगा, ताकि विधि चुनते समय आपको मार्गदर्शन मिल सके। इस लेख के प्रयोजनों के लिए, दिखाए गए सभी कोड उदाहरण क्लॉबोट के लिए बनाए गए थे। हालाँकि, समान अवधारणाओं को पर पाए जाने वाले कई अन्य बिल्ड और कस्टम बिल्ड पर लागू किया जा सकता है।

विकल्प 1: डिवाइस कॉन्फ़िगरेशन में बटन निर्दिष्ट करना

यह विकल्प तब बहुत अच्छा होता है जब आप बेसबॉट या क्लॉबॉट जैसे मानक बिल्ड का उपयोग कर रहे हों, और उसे शीघ्रता से चलाना चाहते हों।

यह विकल्प आपको डिवाइस कॉन्फ़िगरेशन में नियंत्रक पर बटनों को मोटर, ड्राइवट्रेन या मोटर समूह निर्दिष्ट करने देता है। डिवाइस कॉन्फ़िगरेशन में नियंत्रक को बटन असाइन करने के तरीके के बारे में अधिक जानकारी के लिए, यह आलेख देखें.

स्क्रीनशॉट 2023-07-26 अपराह्न 3.49.03 बजे.png

विकल्प 1 का सारांश: डिवाइस कॉन्फ़िगरेशन में बटन निर्दिष्ट करना

लाभ

सीमाएँ

उदाहरण स्थिति

  • बिना कोडिंग के त्वरित सेटअप
  • सबसे सरल विधि
  • आसानी से समायोज्य
  • बटनों को अलग-अलग मोटर, एक मानक ड्राइवट्रेन और मोटर समूह असाइन कर सकते हैं
  • बटन असाइनमेंट नियंत्रक पर बटनों की संख्या तक सीमित हैं
  • ड्राइवट्रेन में 4 मोटरों से अधिक नहीं हो सकता या उसे अनुकूलित नहीं किया जा सकता (केवल मानक ड्राइव समर्थित है, H ड्राइव, होलोनोमिक या अन्य कस्टम ड्राइवट्रेन समर्थित नहीं है)
  • किसी मानक बिल्ड जैसे बेसबॉट, क्लॉबॉट, या उन मानक बिल्डों में सरल संशोधन में हेरफेर करना। उदाहरण के लिए, एक बेसबोट जिसमें आगे की ओर एक इनटेक लगा होता है जिसे मोटर समूह द्वारा नियंत्रित किया जाता है।
  • रोबोट पर विभिन्न व्यवहारों के अनुरूप बटनों को बिना अधिक कोडिंग के शीघ्रता से नियंत्रित करना

विकल्प 2: फॉरएवर लूप का उपयोग करना

यदि आप मानक बिल्ड के बजाय कस्टम बिल्ड का उपयोग कर रहे हैं, या अपने कंट्रोलर में अधिक अनुकूलन करना चाहते हैं, तो यह विकल्प अच्छा है। फॉरएवर लूप का उपयोग करना आपके कंट्रोलर के लिए कस्टम कोड बनाने का एक बढ़िया परिचय है।

यह विकल्प नियंत्रक और उससे संबंधित बटनों के लिए सभी शर्तों को फॉरएवर लूप में रखता है। इससे अधिक लचीलापन मिलता है, विशेष रूप से कस्टम बिल्ड डिजाइन के साथ, लेकिन इसके लिए कुछ कोडिंग अनुभव की भी आवश्यकता होती है। हालाँकि, इस विकल्प का उपयोग करते समय एक बात ध्यान में रखनी होगी कि आपकी परियोजना कितनी लंबी और जटिल है। जितनी अधिक शर्तें जोड़ी जाएंगी, कोड स्टैक उतना ही लंबा हो जाएगा। इसका मतलब यह है कि कई ब्लॉकों को क्रम में निष्पादित करना होगा, और जब बहुत सारे ब्लॉक होंगे, तो इससे परियोजना का निष्पादन धीमा हो सकता है। धीमी परियोजना निष्पादन के कारण नियंत्रक बटन दबाने और रोबोट व्यवहार को देखने के बीच अंतराल उत्पन्न हो सकता है।

नीचे दर्शाया गया विशिष्ट उदाहरण एक तरीका है जिससे आप एक कस्टम डिजाइन रोबोट (जैसे कि एक कस्टम ड्राइवट्रेन वाला रोबोट) के साथ फॉरएवर लूप का उपयोग कर सकते हैं, ताकि रोबोट को चलाया जा सके और वस्तुओं के साथ बातचीत करने के लिए पंजे और हाथ में हेरफेर किया जा सके।

स्क्रीनशॉट 2023-07-26 अपराह्न 4.07.00 बजे.png

"विकल्प 2" VEXcode EXP प्रोजेक्ट फ़ाइल डाउनलोड करें >

विकल्प 2 कोड का स्पष्टीकरण.

कोड टुकड़ा

स्पष्टीकरण

आर्ममोटर स्टॉपिंग को होल्ड पर सेट करें और क्लॉमोटर स्टॉपिंग को होल्ड पर सेट करें

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

स्क्रीनशॉट 2023-07-26 at 4.07.59 PM.png EXP नियंत्रक लेबल के साथ.png

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

फॉरएवर लूप का उपयोग यह जांचने के लिए किया जाता है कि नियंत्रक पर कौन से बटन दबाए जा रहे हैं।

[मोटर वेग सेट करें] ब्लॉक का उपयोग 2 और 3 अक्षों के साथ वर्तमान नियंत्रक की स्थिति में मोटर वेग सेट करने के लिए किया जाता है। यह कार को ड्राइव में सेट करने के बराबर है। इससे कार जरूरी रूप से नहीं चलती, बल्कि यह उसे बस गति प्रदान करती है।

प्रत्येक जॉयस्टिक अक्ष -100 से +100 के बीच मान लौटाता है, तथा केन्द्रित होने पर शून्य मान लौटाता है। इसका अर्थ यह है कि जॉयस्टिक अक्ष को धकेलने पर यह -100% से 100% के बराबर हो जाता है। अक्षों को 100 या -100 की ओर जितना अधिक धकेला जाएगा, मोटर उतनी ही तेजी से घूमेगी।

फिर [स्पिन] ब्लॉक का उपयोग मोटर को वास्तव में चलाने के लिए किया जाता है। यह दिशा निर्धारित हो जाने के बाद कार में गैस दबाने के बराबर है। इससे प्रत्येक मोटर को चार नियंत्रक अक्षों में से एक द्वारा नियंत्रित किया जा सकता है।

स्क्रीनशॉट 2023-07-26 at 4.09.52 PM.png

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

[यदि तो अन्यथा यदि तो अन्यथा] ब्लॉक का उपयोग नियंत्रक पर दबाए जाने या छोड़े जाने वाले बटनों के लिए कुछ व्यवहारों को मैप करने के लिए किया जाता है। कोड के इस भाग में, निर्धारित शर्तें यह हैं कि यदि ऊपर या नीचे बटन दबाया जाता है। यदि ऐसा है, तो कुछ निश्चित व्यवहार होंगे, जैसे कि हाथ को ऊपर उठाना और नीचे करना। इस शर्त का एक और भाग भी है, यदि कोई भी बटन नहीं दबाया जाता है, तो भुजा का हिलना बंद हो जाता है।

ध्यान दें कि क्लॉ के लिए परियोजना में कोड का निम्नलिखित भाग भी इसी स्पष्टीकरण का अनुसरण करता है।

विकल्प 2 का सारांश: फॉरएवर लूप का उपयोग करना

लाभ

सीमाएँ

उदाहरण स्थिति

  • कस्टम बिल्ड को समायोजित कर सकता है, विशेष रूप से 4 से अधिक मोटरों वाले ड्राइवट्रेन को
  • एक ही बटन को अनेक व्यवहार निर्दिष्ट कर सकते हैं
  • नियंत्रक पर विभिन्न अक्षों को व्यवहार निर्दिष्ट कर सकते हैं (डिवाइस कॉन्फ़िगरेशन में केवल बाएं आर्केड, दाएं आर्केड, विभाजित आर्केड और टैंक ड्राइव के विकल्पों के विपरीत)
  • कुछ मात्रा में कोडिंग ज्ञान की आवश्यकता होती है (कंडीशनल, लूप्स, तथा कंट्रोलर पर बटन/जॉयस्टिक का ज्ञान)
  • परियोजना के धीमे निष्पादन, या बटन प्रतिक्रिया समय में देरी की संभावना। चूंकि सभी कमांड एक ही फॉरएवर लूप में समाहित होते हैं, इसलिए निर्धारित शर्तों और कोड की लंबाई के आधार पर कोड निष्पादन धीमी गति से चल सकता है।
  • कस्टम निर्मित रोबोट के साथ नियंत्रक का उपयोग करना, विशेष रूप से गैर-मानक ड्राइवट्रेन के साथ
  • जब एक ही बटन को एकाधिक व्यवहार निर्दिष्ट करना हो। उदाहरण के लिए, जब अप बटन दबाया जाता है, तो पंजा खुल सकता है, आगे बढ़ सकता है, और फिर किसी वस्तु के चारों ओर बंद हो सकता है।

विकल्प 3: ईवेंट का उपयोग करना

यदि आप अपने कंट्रोलर में बहुत सारे अनुकूलन चाहते हैं, तो इवेंट्स का उपयोग करना आपके लिए सबसे अच्छा विकल्प है। एक बटन दबाने से रोबोट के कई व्यवहार सक्रिय हो सकते हैं, जैसे कि पंजा खोलने के लिए बटन दबाना, हाथ उठाना, तथा एक निश्चित दूरी तक आगे बढ़ना। फॉरएवर लूप के भीतर प्रति बटन एकाधिक व्यवहारों को कोड करने का प्रयास करने से परियोजना का निष्पादन नाटकीय रूप से धीमा हो जाएगा - ईवेंट का उपयोग करने से आप इसे अधिक प्रभावी ढंग से कर सकते हैं।

यह विकल्प प्रोजेक्ट प्रवाह को विभाजित करने के लिए ईवेंट का उपयोग करता है। यह फॉरएवर लूप के उपयोग के समान है, लेकिन इससे कोड को अधिक व्यवस्थित किया जा सकता है, जिससे बटन निष्पादन की प्रतिक्रिया समय तेज हो जाता है। तीव्र प्रतिक्रिया समय का अर्थ है कि आपको नियंत्रक बटन दबाने और रोबोट के व्यवहार को देखने के बीच कोई अंतराल नहीं दिखेगा। यह उदाहरण पिछले प्रोजेक्ट के समान ही व्यवहार दिखाता है, लेकिन फॉरएवर लूप के बजाय इवेंट्स का उपयोग करके किया गया है।

स्क्रीनशॉट 2023-07-26 at 4.31.57 PM.png

"विकल्प 3" VEXcode EXP प्रोजेक्ट फ़ाइल डाउनलोड करें >

विकल्प 3 कोड का स्पष्टीकरण.

कोड टुकड़ा

स्पष्टीकरण

आर्ममोटर स्टॉपिंग को होल्ड पर सेट करें और क्लॉमोटर स्टॉपिंग को होल्ड पर सेट करें

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

स्क्रीनशॉट 2023-07-26 अपराह्न 4.33.05 बजे.png EXP नियंत्रक लेबल के साथ.png

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

{When controller axis} इवेंट ब्लॉक का उपयोग कुछ व्यवहारों को ट्रिगर करने के लिए किया जाता है जब नियंत्रक पर चार अक्षों में से एक को जॉयस्टिक का उपयोग करके बदला जाता है।

[मोटर वेग सेट करें] ब्लॉक का उपयोग मोटर वेग को A और D अक्षों के साथ वर्तमान नियंत्रक की स्थिति पर सेट करने के लिए किया जाता है। यह कार को ड्राइव में सेट करने के बराबर है। इससे कार जरूरी रूप से नहीं चलती, बल्कि यह उसे बस गति प्रदान करती है।

प्रत्येक जॉयस्टिक अक्ष -100 से +100 के बीच मान लौटाता है, तथा केन्द्रित होने पर शून्य मान लौटाता है। इसका अर्थ यह है कि जॉयस्टिक अक्ष को धकेलने पर यह -100% से 100% के बराबर हो जाता है। अक्षों को 100 या -100 की ओर जितना अधिक धकेला जाएगा, मोटर उतनी ही तेजी से घूमेगी।

फिर [स्पिन] ब्लॉक का उपयोग मोटर को वास्तव में चलाने के लिए किया जाता है। यह दिशा निर्धारित हो जाने के बाद कार में गैस दबाने के बराबर है। इससे प्रत्येक मोटर को चार नियंत्रक अक्षों में से एक द्वारा नियंत्रित किया जा सकता है।

स्क्रीनशॉट 2023-07-26 अपराह्न 4.33.30 बजे.png

इस कोड उदाहरण के लिए क्लॉबोट का उपयोग किया गया था। जब कंट्रोलर पर लगे बटनों का उपयोग भुजा को ऊपर उठाने और नीचे करने के लिए किया जाता है, तो जैसे ही बटन छोड़ा जाता है, गुरुत्वाकर्षण के कारण भुजा वापस नीचे गिर जाती है। दोनों भुजाओं और पंजों को “होल्ड” पर सेट करने से यह सुनिश्चित होगा कि नियंत्रक पर बटनों को छोड़ने के बाद भी भुजा और पंजा दोनों अपनी जगह पर बने रहेंगे।

{When controller axis} इवेंट ब्लॉक का उपयोग नियंत्रक पर दबाए जाने या छोड़े जाने वाले बटनों के लिए कुछ व्यवहारों को मैप करने के लिए किया जाता है। कोड के इस भाग में, निर्धारित शर्तें यह हैं कि यदि ऊपर या नीचे बटन दबाया जाता है। यदि ऐसा है, तो कुछ निश्चित व्यवहार होंगे, जैसे कि हाथ को ऊपर उठाना, नीचे करना, या रुकना।

ध्यान दें कि क्लॉ के लिए परियोजना में कोड का अंतिम भाग भी इसी स्पष्टीकरण का अनुसरण करता है।

विकल्प 3 का सारांश: ईवेंट का उपयोग करना

लाभ

सीमाएँ

उदाहरण स्थिति

  • कस्टम बिल्ड को समायोजित कर सकता है, विशेष रूप से 4 से अधिक मोटरों वाले ड्राइवट्रेन को
  • एक ही बटन को अनेक व्यवहार निर्दिष्ट कर सकते हैं
  • नियंत्रक पर विभिन्न अक्षों को व्यवहार निर्दिष्ट कर सकते हैं (डिवाइस कॉन्फ़िगरेशन में केवल बाएं आर्केड, दाएं आर्केड, विभाजित आर्केड और टैंक ड्राइव के विकल्पों के विपरीत)
  • तीव्र कोड निष्पादन और इस प्रकार, बटन अनुक्रियाशीलता (क्योंकि प्रत्येक शर्त को अलग से बुलाया जाता है और कोड के एक एकल स्टैक में एम्बेड नहीं किया जाता है)
  • विकल्पों (कंडीशनल, लूप, इवेंट्स, तथा कंट्रोलर पर बटन/जॉयस्टिक्स का ज्ञान) के कोडिंग ज्ञान की सबसे अधिक आवश्यकता होती है।
  • कस्टम निर्मित रोबोट के साथ नियंत्रक का उपयोग करना, विशेष रूप से गैर-मानक ड्राइवट्रेन के साथ
  • जब आप बिना किसी देरी के एक ही बटन को कई व्यवहार सौंपना चाहते हैं। उदाहरण के लिए, जब अप बटन दबाया जाता है, तो पंजा खुल सकता है, आगे बढ़ सकता है, और फिर किसी वस्तु के चारों ओर बंद हो सकता है।

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

Last Updated: