विषयसूची:

चैनल मिक्सिंग को समझना: 4 चरण (चित्रों के साथ)
चैनल मिक्सिंग को समझना: 4 चरण (चित्रों के साथ)

वीडियो: चैनल मिक्सिंग को समझना: 4 चरण (चित्रों के साथ)

वीडियो: चैनल मिक्सिंग को समझना: 4 चरण (चित्रों के साथ)
वीडियो: VIDEO l मैं अच्छी भली अकेली हुँ बिस्मिल चाँद शहरों की l #Bewafai Dard Bhara New Bhojpuri 2023 song 2024, नवंबर
Anonim
Image
Image
मिक्स विधि » कोई नहीं
मिक्स विधि » कोई नहीं

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

मिक्सिंग बस यह है कि आपके जॉयस्टिक के डेटा का उपयोग यह निर्धारित करने के लिए किया जाता है कि चेसिस के प्रत्येक तरफ कितनी बिजली की आपूर्ति की जानी चाहिए।

यदि आप जॉयस्टिक खोलते हैं, तो आम तौर पर आप अंदर दो पोटेंशियोमीटर देखेंगे। एक वाई अक्ष (ऊपर और नीचे) के साथ अपनी वर्तमान स्थिति को मापने के लिए, और दूसरा यह मापने के लिए कि आप एक्स अक्ष के साथ कहां हैं (अगल-बगल)।

हालाँकि मेरे पास इस विषय पर कोई औपचारिक प्रशिक्षण नहीं है, मुझे पहले कोड में मिश्रण करना पड़ा है और हाल ही में मैं इस विषय में थोड़ा और गहराई से जाना चाहता था।

पहले मैं यह नोट करना चाहता हूं कि अधिकांश आरसी ट्रांसमीटरों में कई मोटर नियंत्रकों की तरह मिश्रण क्षमता होती है। यदि आपको अपने कोड में स्वयं मिश्रण करना है तो यह जानकारी सबसे उपयोगी होगी। उदाहरण के लिए कहें कि यदि आप RC रिसीवर से अनमिक्स्ड डेटा पढ़ने के लिए Arduino का उपयोग कर रहे हैं, या आप जॉयस्टिक में बर्तन से एनालॉग डेटा पढ़ रहे हैं, या यदि आप मोबाइल ऐप पर डिजिटल जॉयस्टिक से निर्देशांक पढ़ रहे हैं।

आइए कुछ अलग मिश्रण दृष्टिकोणों पर एक नज़र डालें।

चरण 1: मिक्स विधि »कोई नहीं

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

उदाहरण के लिए, यदि आप जॉयस्टिक को सीधे आगे की ओर धकेलते हैं, तो Y अक्ष पूर्ण गति से है और X अक्ष 0 पर है। तो आप सीधे जाने के बजाय मंडलियों में गाड़ी चला रहे होंगे।

चरण 2: विधि विधि » घुमाएँ

विधि विधि » घुमाएँ
विधि विधि » घुमाएँ

एक सहकर्मी ने एक बार मुझे बताया कि, एक गरीब आदमी के मिश्रण के लिए आप एक चुटकी में अपने ट्रांसमीटर को 45 डिग्री घुमा सकते हैं। यदि आप जॉयस्टिक में दो पोटेंशियोमीटर के मानों को ग्रिड पर x और y अक्ष के रूप में मानते हैं (दोनों अक्ष -100 से +100 तक फैले हुए हैं) तो यह बहुत मायने रखता है क्योंकि आप दोनों अक्ष पर +100 पर जा रहे हैं जैसे ही आप जॉयस्टिक को ऊपर और दाईं ओर धकेलते हैं। इसलिए यदि यह सीधे आपके दो चेसिस चैनलों (आपके रोबोट के बाएँ और दाएँ भाग) पर मैप करता है तो यह आपके रोबोट को आगे बढ़ा देगा।

इसलिए मिश्रण की पहली विधि मैंने कभी कोशिश की थी कि ग्रिड के केंद्र बिंदु के बारे में x और y समन्वय 45 डिग्री को गणितीय रूप से घुमाएं।

यह ठीक काम करता है, हालाँकि मैं 100% शक्ति के साथ आगे नहीं बढ़ सकता क्योंकि जब आप घूम रहे होते हैं, तो समग्र गति ग्रिड के भीतर एक वृत्त के लिए विवश होती है, जिसका अर्थ है कि आप वास्तव में उस शीर्ष दाएं कोने में कभी नहीं जा सकते।

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

यदि आप मेरी तरह एक दृश्य शिक्षार्थी हैं, तो इस निर्देश की शुरुआत में वीडियो देखकर इस अवधारणा को समझना आसान हो सकता है।

आइए कुछ कोड उदाहरण देखें।

मेरे कोड उदाहरणों के बारे में नोट्स: मैं छोड़ रहा हूं कि आपको जॉयस्टिक_एक्स और जॉयस्टिक_वाई मान कैसे मिलते हैं क्योंकि यह आपके प्रोजेक्ट के आधार पर बदल जाएगा। इसके अलावा, मैं ± १०० के लिए मानचित्रण/विवश कर रहा हूं, लेकिन आपको पीडब्लूएम के लिए १०००-२००० या एनालॉग आउटपुट आदि के लिए ०-२५ पर मैप करने की आवश्यकता हो सकती है। मैं हमेशा विवश करता हूं… बस मामले में।

अरुडिनो उदाहरण:

// गणितीय रूप से घुमाएं

डबल रेड = -45*M_PI/180; इंट लेफ्ट थ्रोटल = जॉयस्टिक_एक्स * कॉस (रेड) - जॉयस्टिक_य * पाप (रेड); इंट राइट थ्रोटल = जॉयस्टिक_y * कॉस (रेड) + जॉयस्टिक_एक्स * पाप (रेड); // बाएं थ्रॉटल को रोकें = बाधा (बाएं थ्रॉटल, -100, 100); राइट थ्रॉटल = विवश (राइट थ्रॉटल, -100, 100);

जावास्क्रिप्ट उदाहरण:

//गणितीय रूप से रोटेटवार रेड = -45*Math. PI/180; लेफ्ट थ्रोटल = जॉयस्टिक_x * Math.cos(rad) - Joystick_y * Math.sin(rad); दायां थ्रोटल = जॉयस्टिक_य * Math.cos(rad) + Joystick_x * Math.sin(rad);//constrainleftThrottle = विवश (बाएं थ्रॉटल, -100, 100); दायां थ्रॉटल = बाधा (दायां थ्रॉटल, -100, 100); // सहायक फ़ंक्शनवार बाधा = फ़ंक्शन (संख्या, न्यूनतम, अधिकतम) {वापसी Math.min (Math.max (संख्या, न्यूनतम), अधिकतम); };

चरण 3: विधि विधि »सरल

विधि विधि » सरल
विधि विधि » सरल

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

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

और वैसे मैं इस सरल को अपमानजनक रूप से नहीं कहता … सादगी में एक सुंदरता है।

अरुडिनो उदाहरण:

इंट लेफ्ट थ्रॉटल = जॉयस्टिक_य + जॉयस्टिक_एक्स;

इंट राइट थ्रॉटल = जॉयस्टिक_य - जॉयस्टिक_एक्स; // बाएं थ्रॉटल को रोकें = बाधा (बाएं थ्रॉटल, -100, 100); राइट थ्रॉटल = विवश (राइट थ्रॉटल, -100, 100);

जावास्क्रिप्ट उदाहरण:

वर लेफ्टचैनल = जॉयस्टिक_y + जॉयस्टिक_x;

वर राइटचैनल = जॉयस्टिक_य - जॉयस्टिक_एक्स;//बाएं चैनल को रोकें = बाधा (बाएं चैनल, -100, 100); दायां चैनल = बाधा (दाएं चैनल, -100, 100); // सहायक फ़ंक्शनवार बाधा = फ़ंक्शन (संख्या, न्यूनतम, अधिकतम) {वापसी Math.min (Math.max (संख्या, न्यूनतम), अधिकतम); };

चरण 4: विधि विधि »आनुपातिक

विधि विधि » आनुपातिक
विधि विधि » आनुपातिक

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

आप मेरे उदाहरणों में सभी दिशाओं में -200 से +200 के पैमाने के साथ समाप्त होते हैं, मैं इसे ± 100 तक मैप करता हूं क्योंकि यह प्रत्येक चैनल पर जाने वाली शक्ति के प्रतिशत का प्रतिनिधित्व करता है - हालांकि आप इसे अपने उपयोग में जो भी काम करना चाहते हैं उसे मैप करना चाहेंगे- आपके मोटर नियंत्रक के लिए मामला। उदाहरण के लिए यदि आप पीडब्लूएम सिग्नल भेज रहे हैं तो आप इसे 1000 से 2000 तक मैप कर सकते हैं या यदि आप एनालॉग सिग्नल भेज रहे हैं तो आप इसे 0-255 पर मैप कर सकते हैं और दिशा को बूलियन आदि के रूप में सेट कर सकते हैं।

अरुडिनो उदाहरण:

इंट लेफ्ट थ्रॉटल = जॉयस्टिक_y + जॉयस्टिक_x;

इंट राइट थ्रोटल = जॉयस्टिक_य - जॉयस्टिक_एक्स;// कुछ मामलों में अधिकतम 100 है, कुछ मामलों में यह 200// अंतर में कारक है इसलिए अधिकतम हमेशा 200int diff = abs(abs(joystick_y) - abs(joystick_x)); लेफ्ट थ्रॉटल = लेफ्ट थ्रॉटल <0? लेफ्ट थ्रॉटल - डिफ: लेफ्ट थ्रोटल + डिफ; राइट थ्रॉटल = राइट थ्रॉटल <0? राइट थ्रॉटल - डिफ: राइट थ्रॉटल + डिफ; // ± 200 से ± 100 तक का नक्शा या आपको जो भी रेंज चाहिए लेफ्ट थ्रॉटल = नक्शा (बाएं थ्रोटल, 0, 200, -100, 100); दायां थ्रॉटल = नक्शा (दायां थ्रोटल, 0, 200, -100, 100); // बाधा बाएं थ्रॉटल = बाधा (बाएं थ्रॉटल, -100, 100); दायां थ्रॉटल = बाधा (दायां थ्रॉटल, -100, 100);

जावास्क्रिप्ट उदाहरण:

var leftThrottle = Joystick_y + Joystick_x;var rightThrottle = Joystick_y - Joystick_x;// कुछ मामलों में अधिकतम १०० है, कुछ मामलों में यह २०० है, // आइए अंतर को ध्यान में रखें ताकि अधिकतम हमेशा 200var diff = Math.abs हो (Math.abs(joystick_y) - Math.abs(joystick_x));बाएं थ्रोटल = बायां थ्रॉटल <0? लेफ्ट थ्रॉटल - डिफ: लेफ्ट थ्रोटल + डिफ; राइट थ्रोटल = राइट थ्रॉटल <0? राइट थ्रॉटल - डिफरेंशियल: राइट थ्रोटल + डिफ; // मैप ± 200 बैक डाउन से ± 100 या जो भी आपको चाहिए -100, 100); // बाएं थ्रॉटल = बाधा (बाएं थ्रॉटल, -100, 100); दायां थ्रॉटल = बाधा (दाएं थ्रॉटल, -100, 100); // कुछ सहायक फ़ंक्शनवर बाधा = फ़ंक्शन (संख्या, न्यूनतम, अधिकतम) {वापसी Math.min (Math. अधिकतम (संख्या, न्यूनतम), अधिकतम); }; वर नक्शा = फ़ंक्शन (संख्या, इनमिन, इनमैक्स, आउटमिन, आउटमैक्स) { वर पी, इनस्पैन, आउटस्पैन, मैप किया गया; इनमिन = इनमिन + इनमैक्स; संख्या = संख्या + अधिकतम में; इनमैक्स = इनमैक्स + इनमैक्स; inSpan = Math.abs (inMax-inMin); पी = (संख्या/में)*100; आउटमिन = आउटमिन + आउटमैक्स; आउटमैक्स = आउटमैक्स + आउटमैक्स; आउटस्पैन = Math.abs (आउटमैक्स - आउटमिन); मैप किया गया = आउटस्पैन*(पी/100) - (आउटमैक्स/2); मैप की गई वापसी;};

सिफारिश की: