विषयसूची:

Rpibot - रोबोटिक्स सीखने के बारे में: 9 कदम
Rpibot - रोबोटिक्स सीखने के बारे में: 9 कदम

वीडियो: Rpibot - रोबोटिक्स सीखने के बारे में: 9 कदम

वीडियो: Rpibot - रोबोटिक्स सीखने के बारे में: 9 कदम
वीडियो: How to Become a Robotics Engineer with Full Information – [Hindi] – Quick Support 2024, जुलाई
Anonim
Rpibot - रोबोटिक्स सीखने के बारे में
Rpibot - रोबोटिक्स सीखने के बारे में

मैं एक जर्मन ऑटोमोटिव कंपनी में एम्बेडेड सॉफ्टवेयर इंजीनियर हूं। मैंने इस परियोजना को एम्बेडेड सिस्टम के लिए एक सीखने के मंच के रूप में शुरू किया था। परियोजना को जल्दी रद्द कर दिया गया था लेकिन मुझे इसमें इतना मज़ा आया कि मैंने अपने खाली समय में काम करना जारी रखा। यह परिणाम…

मेरी निम्नलिखित आवश्यकताएं थीं:

  • सरल हार्डवेयर (फोकस सॉफ्टवेयर है)
  • सस्ता हार्डवेयर (लगभग 100€)
  • विस्तार योग्य (कुछ विकल्प पहले से ही विवरण का हिस्सा हैं)
  • एकल 5V स्रोत (पावरबैंक) से सभी घटकों के लिए आपूर्ति वोल्टेज

सीखने के अलावा वास्तव में कोई लक्ष्य नहीं था। मंच का उपयोग सीखने, निगरानी, रोबोटिक प्रतियोगिता,…

यह एक शुरुआती ट्यूटोरियल नहीं है। आपको इसके बारे में कुछ बुनियादी ज्ञान की आवश्यकता है:

  • प्रोग्रामिंग (पायथन)
  • बुनियादी इलेक्ट्रॉनिक्स (सही वोल्टेज द्वारा मॉड्यूल को एक साथ जोड़ने के लिए)
  • बुनियादी नियंत्रण सिद्धांत (पीआईडी)

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

संपूर्ण स्रोत कोड और फ़ाइलें यहां उपलब्ध हैं:

आपूर्ति:

यांत्रिकी

  • 1x प्लाईवुड बोर्ड (A4 आकार, 4 मिमी मोटा)
  • 3x M4 x 80 स्क्रू और नट
  • एन्कोडर के लिए सेकेंडरी आउटपुट शाफ्ट के साथ 2x गियर मोटर्स। पहिए।
  • 1x फ्री व्हील

1x पैन और टिल्ट कैमरा माउंटिंग (वैकल्पिक)

इलेक्ट्रानिक्स

  • हेडर और कैमरा के साथ 1x रास्पबेरी पाई ज़ीरो
  • 1x पीसीए 9685 सर्वो नियंत्रण
  • 2x ऑप्टिकल एनकोडर व्हील और सर्किट
  • 1x महिला जम्पर तार
  • 1x यूएसबी पावरबैंक
  • 1x DRV8833 दोहरी मोटर चालक
  • कैमरा पैन और टिल्ट के लिए 2x माइक्रो सर्वोस SG90 (वैकल्पिक)
  • 1x MPU9250 IMU (वैकल्पिक)
  • 1x HC-SR04 अल्ट्रासोनिक दूरी सेंसर (वैकल्पिक)
  • 1x छिद्रित बोर्ड और सोल्डरिंग तार, हेडर,…

चरण 1: चेसिस का निर्माण करें

चेसिस का निर्माण करें
चेसिस का निर्माण करें
चेसिस का निर्माण करें
चेसिस का निर्माण करें
चेसिस का निर्माण करें
चेसिस का निर्माण करें

मैं एक अच्छा मैकेनिक डिजाइनर नहीं हूं। साथ ही परियोजनाओं का लक्ष्य चेसिस में ज्यादा समय नहीं बिताना है। वैसे भी मैंने निम्नलिखित आवश्यकताओं को परिभाषित किया है:

  • सस्ती सामग्री
  • फास्ट असेंबली और डिस्सेप्लर
  • विस्तार योग्य (उदाहरण के लिए अतिरिक्त सेंसर के लिए स्थान)
  • इलेक्ट्रॉनिक्स के लिए ऊर्जा बचाने के लिए हल्की सामग्री

प्लाईवुड से एक आसान और सस्ता चेसिस बनाया जा सकता है। फ्रेट्सॉ और हैंड ड्रिल के साथ मशीन बनाना आसान है। सेंसर और मोटर के लिए होल्डिंग बनाने के लिए आप लकड़ी के छोटे हिस्सों को गोंद कर सकते हैं।

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

मुक्त पहिया अंत में बहुत हल्का और माउंट करने में आसान है। विकल्प सभी भारी या घर्षण से भरे हुए थे (मैंने अंतिम एक को खोजने से पहले उनमें से कुछ की कोशिश की)। मुख्य पहियों को माउंट करने के बाद पूंछ मुक्त पहिया को समतल करने के लिए मुझे केवल लकड़ी के स्पेसर को काटना पड़ा।

पहिया गुण (सॉफ्टवेयर गणना के लिए)

परिधि: २१, ५ सेमी दालें: २० दालें/रेव। संकल्प: १, ०७५ सेमी (अंत में १ पल्स लगभग १ सेमी है, जो सॉफ्टवेयर गणना के लिए आसान है)

चरण 2: इलेक्ट्रॉनिक्स और वायरिंग

इलेक्ट्रॉनिक्स और वायरिंग
इलेक्ट्रॉनिक्स और वायरिंग
इलेक्ट्रॉनिक्स और वायरिंग
इलेक्ट्रॉनिक्स और वायरिंग
इलेक्ट्रॉनिक्स और वायरिंग
इलेक्ट्रॉनिक्स और वायरिंग

जैसा कि चित्र में दिखाया गया है, परियोजना विभिन्न मॉड्यूल का उपयोग कर रही है।

रास्पबेरी पाई ज़ीरो मुख्य नियंत्रक है। यह सेंसर को पढ़ रहा है और पीडब्लूएम सिग्नल द्वारा मोटर्स को नियंत्रित कर रहा है। यह वाईफाई द्वारा रिमोट पीसी से जुड़ा है।

DRV8833 एक डुअल मोटर एच-ब्रिज है। यह मोटर्स को पर्याप्त करंट प्रदान कर रहा है (जो रास्पबेरी पाई नहीं कर सकता क्योंकि आउटपुट केवल कुछ एमए वितरित कर सकते हैं)।

हर बार जब प्रकाश एनकोडर पहियों से गुजर रहा होता है तो ऑप्टिकल एनकोडर एक चौकोर आकार का संकेत प्रदान कर रहा होता है। हर बार सिग्नल चालू होने पर सूचना प्राप्त करने के लिए हम रास्पबेरी पाई के एचडब्ल्यू इंटरप्ट का उपयोग करेंगे।

PCA9695 एक सर्वो नियंत्रण बोर्ड है। यह एक I2C सीरियल बस द्वारा संचार कर रहा है। यह बोर्ड पीडब्लूएम सिग्नल और आपूर्ति वोल्टेज प्रदान कर रहा है जो कैम के पैन और झुकाव के लिए सर्वो को नियंत्रित कर रहे हैं।

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

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

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

चरण 3: सॉफ्टवेयर इन्फ्रास्ट्रक्चर

सॉफ्टवेयर इन्फ्रास्ट्रक्चर
सॉफ्टवेयर इन्फ्रास्ट्रक्चर
सॉफ्टवेयर इन्फ्रास्ट्रक्चर
सॉफ्टवेयर इन्फ्रास्ट्रक्चर

यांत्रिकी प्राप्त करने के बाद, हम आरामदायक विकास की स्थिति के लिए कुछ सॉफ्टवेयर बुनियादी ढांचे की स्थापना करेंगे।

गीता

यह एक स्वतंत्र और खुला स्रोत संस्करण नियंत्रण प्रणाली है। इसका उपयोग बड़ी परियोजनाओं को लिनक्स के रूप में प्रबंधित करने के लिए किया जाता है, लेकिन इसे आसानी से छोटे प्रोजेक्ट के लिए भी इस्तेमाल किया जा सकता है (देखें जीथब और बिटबकेट)।

परियोजना परिवर्तनों को स्थानीय रूप से ट्रैक किया जा सकता है और समुदाय के साथ सॉफ़्टवेयर साझा करने के लिए दूरस्थ सर्वर पर भी धकेला जा सकता है।

मुख्य उपयोग किए गए आदेश हैं:

गिट क्लोन https://github.com/makerobotics/RPIbot.git [स्रोत कोड और गिट कॉन्फ़िगरेशन प्राप्त करें]

गिट पुल मूल मास्टर [रिमोट रिपोजिटरी से नवीनतम प्राप्त करें]

गिट स्थिति [स्थानीय भंडार की स्थिति प्राप्त करें। क्या कोई फाइल बदली गई है?] git log [काम की सूची प्राप्त करें] git add । [अगली प्रतिबद्धता के लिए विचार करने के लिए सभी परिवर्तित फाइलों को मंच पर जोड़ें] गिट प्रतिबद्ध-एम "प्रतिबद्धता के लिए टिप्पणी" [स्थानीय भंडार में परिवर्तन प्रतिबद्ध करें] गिट पुश मूल मास्टर [रिमोट रिपोजिटरी में सभी कामों को धक्का दें]

लॉगिंग

पायथन कुछ अंतर्निहित लॉगिंग फ़ंक्शन प्रदान कर रहा है। आगे के विकास को शुरू करने से पहले सॉफ्टवेयर संरचना को पहले से ही सभी लॉगिंग ढांचे को परिभाषित करना चाहिए।

लॉगर को टर्मिनल में या लॉग फ़ाइल में परिभाषित प्रारूप के साथ लॉग करने के लिए कॉन्फ़िगर किया जा सकता है। हमारे उदाहरण में, लकड़हारा वेबसर्वर वर्ग द्वारा कॉन्फ़िगर किया गया है लेकिन हम इसे स्वयं भी कर सकते हैं। यहां हम केवल लॉगिंग स्तर को DEBUG पर सेट करते हैं:

लकड़हारा = logging.getLogger(_name_)

logger.setLevel(लॉगिंग. DEBUG)

मापन और प्लॉटिंग

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

अर्धविराम से अलग ट्रेस फ़ाइल हमारे मुख्य पायथन कोड द्वारा उत्पन्न होती है और इसमें इस तरह के शीर्षलेख होने चाहिए:

टाइमस्टैम्प; yawCorr; एनकोडरआर; I_L; odoDistance; कुल्हाड़ी; एनकोडर एल; I_R; यॉ; eSpeedR; eSpeedL; pwmL; speedL; साइकिल टाइम कंट्रोल; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw; साइकिलटाइमसेंस;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

पहले कॉलम में टाइमस्टैम्प है। निम्नलिखित कॉलम निःशुल्क हैं। प्लॉटिंग स्क्रिप्ट को प्लॉट किए जाने वाले कॉलम की सूची के साथ बुलाया जाता है:

रिमोट@पीसी:~/पायथन rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

प्लॉट स्क्रिप्ट टूल फोल्डर में उपलब्ध है:https://github.com/makerobotics/RPIbot/tree/master/t…

प्लॉटर पायथन में मैथप्लोटलिब का उपयोग कर रहा है। आपको इसे अपने पीसी में कॉपी करना होगा।

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

अंत में चित्र में दिखाए अनुसार प्लॉट के साथ एक विंडो खोली जाती है।

दूरस्थ संचार

रास्पबेरी पाई के लिए विकास इंटरफ़ेस SSH है। फ़ाइलों को सीधे लक्ष्य पर संपादित किया जा सकता है, या scp द्वारा कॉपी किया जा सकता है।

रोबोट को नियंत्रित करने के लिए, एक वेब सर्वर Pi पर चल रहा है, जो Websockets के माध्यम से नियंत्रण प्रदान करता है। यह इंटरफ़ेस अगले चरण में वर्णित है।

रास्पबेरी पाई सेट करें

स्रोत कोड (setup_rpi.txt) के "डॉक्टर" फ़ोल्डर में रास्पबेरी पाई के सेटअप का वर्णन करने वाली एक फ़ाइल है। कई स्पष्टीकरण नहीं हैं लेकिन कई उपयोगी आदेश और लिंक हैं।

चरण 4: यूजर इंटरफेस

यूजर इंटरफेस
यूजर इंटरफेस

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

सॉफ़्टवेयर वास्तुशिल्प

यूजर इंटरफेस निम्नलिखित फाइलों द्वारा बनाया गया है: gui.html [वेब पेज नियंत्रण और लेआउट का वर्णन] gui.js [नियंत्रणों को संभालने और हमारे रोबोट के लिए एक वेबसोकेट कनेक्शन खोलने के लिए जावास्क्रिप्ट कोड शामिल है] gui.css [की शैलियों को शामिल करता है एचटीएमएल नियंत्रित करता है। नियंत्रणों की स्थिति यहां परिभाषित की गई है]

वेबसोकेट संचार

यूजर इंटरफेस सबसे अच्छा नहीं है, लेकिन यह काम कर रहा है। मैंने यहां उन तकनीकों पर ध्यान केंद्रित किया जो मेरे लिए नई थीं जैसे कि Websockets।

वेब साइट वेबसोकेट्स द्वारा रोबोट वेब सर्वर से संचार कर रही है। यह एक द्विदिश संचार चैनल है जो कनेक्शन शुरू होते ही खुला रहेगा। हम वेबसोकेट के माध्यम से रास्पबेरी पाई को रोबोट के आदेश भेजते हैं और प्रदर्शन के लिए जानकारी (गति, स्थिति, कैमरा स्ट्रीम) वापस प्राप्त करते हैं।

इंटरफ़ेस लेआउट

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

चरण 5: रोबोट प्लेटफॉर्म की प्रोग्रामिंग

रोबोट प्लेटफॉर्म प्रोग्रामिंग
रोबोट प्लेटफॉर्म प्रोग्रामिंग
रोबोट प्लेटफॉर्म प्रोग्रामिंग
रोबोट प्लेटफॉर्म प्रोग्रामिंग
रोबोट प्लेटफॉर्म प्रोग्रामिंग
रोबोट प्लेटफॉर्म प्रोग्रामिंग

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

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

मुख्य सॉफ्टवेयर वास्तुकला

सॉफ्टवेयर वस्तु उन्मुख है, कुछ वस्तुओं में विभाजित है। मेरा विचार कोड को 3 कार्यात्मक ब्लॉकों में विभाजित करना था:

सेंस थिंक एक्ट्यूएट

Sense.py

मुख्य सेंसर अधिग्रहण और प्रसंस्करण। डेटा को एक शब्दकोश में संग्रहीत किया जाता है जिसका उपयोग निम्न चरण में किया जाता है।

Control.py

कुछ एब्स्ट्रैक्शन के बाद एक एक्चुएशन सबक्लास मोटर्स और सर्वो को नियंत्रित कर रहा है। मुख्य कंट्रोल ऑब्जेक्ट मोटर के लिए उच्च स्तरीय कमांड और कंट्रोल एल्गोरिदम (पीआईडी) को भी संभाल रहा है।

rpibot.py

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

प्रत्येक मॉड्यूल को अकेले या पूरी परियोजना के हिस्से के रूप में चलाया जा सकता है। आप केवल सेंसर की जानकारी को समझ सकते हैं और प्रिंट कर सकते हैं ताकि यह जांचा जा सके कि सेंसर सही तरीके से जुड़े हुए हैं और सही जानकारी दे रहे हैं।

पीआईडी नियंत्रण

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

अंत में, हम प्रत्येक पहिया गति और रोबोट दिशा को भी नियंत्रित करना चाहते हैं। ऐसा करने के लिए हमें दो नियंत्रण तर्कों को कैस्केड करना होगा।

जटिलता को चरण दर चरण बढ़ाने के लिए, रोबोट को नियंत्रित किया जाना चाहिए:

खुला लूप (स्थिर शक्ति के साथ)

पीडब्लूएम = के

फिर क्लोज लूप एल्गोरिथम जोड़ें

pwm = Kp.speedError+ki. Integration(speedError)

और अंत में दिशा नियंत्रण को अंतिम चरण के रूप में जोड़ें।

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

सेट; केपी; 1.0

मैं किसी भी ओवरशॉट से बचने के लिए पी पैरामीटर को काफी कम सेट कर सकता था। शेष त्रुटि I पैरामीटर (एकीकृत त्रुटि) द्वारा ठीक की जाती है

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

प्रयुक्त नियंत्रण आरेख संलग्न है। यह रोबोट नियंत्रण के केवल बाईं ओर दिखाता है।

चरण 6: सेंसर अंशांकन

सेंसर अंशांकन
सेंसर अंशांकन
सेंसर अंशांकन
सेंसर अंशांकन
सेंसर अंशांकन
सेंसर अंशांकन

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

उपयोग करने से पहले IMU सेंसर संकेतों को कैलिब्रेट करने की आवश्यकता होती है। कुछ सेंसर सिग्नल बढ़ते कोण और स्थिति पर निर्भर करते हैं।

त्वरण और रोटेशन गति अंशांकन

अनुदैर्ध्य त्वरण (A_x) के लिए सबसे आसान अंशांकन है। ठहराव के समय लगभग 0 m/s² होना चाहिए। यदि आप सेंसर को ठीक से घुमाते हैं, तो आप गुरुत्वाकर्षण (लगभग 9, 8 मी/से²) को माप सकते हैं। a_x को कैलिब्रेट करने के लिए, आपको बस इसे ठीक से माउंट करना होगा और फिर ऑफसेट को 0 m/s² को स्टैंडस्टिल पर प्राप्त करने के लिए परिभाषित करना होगा। अब A_x को कैलिब्रेट किया गया है। आप रोटेशन गति के लिए ऑफ़सेट को उसी तरह से स्टैंडस्टिल पर प्राप्त कर सकते हैं।

कम्पास के लिए मैग्नेटोमीटर अंशांकन

चुंबकीय क्षेत्र सेंसर के लिए अधिक जटिल अंशांकन आवश्यक है। क्षैतिज स्तर पर चुंबकीय क्षेत्र प्राप्त करने के लिए हम m_x और m_y का उपयोग करेंगे। m_x और m_y होने से हमें कंपास शीर्षक की गणना करने का अवसर मिलेगा।

हमारे सरल उद्देश्य के लिए हम केवल कठोर लोहे के विचलन को जांचेंगे। यह किया जाना चाहिए क्योंकि सेंसर अंतिम स्थिति में है क्योंकि यह चुंबकीय क्षेत्र की गड़बड़ी पर निर्भर करता है।

जब हम रोबोट को z-अक्ष के चारों ओर घुमाते हैं तो हम m_x और m_y रिकॉर्ड करते हैं। हम XY चार्ट में m_x बनाम m_y प्लॉट करते हैं। एक दीर्घवृत्त में परिणाम जैसा कि चित्र में दिखाया गया है। दीर्घवृत्त को मूल के केंद्र में रखना होता है। यहां हम दोनों दिशाओं में ऑफसेट प्राप्त करने के लिए m_x और m_y के अधिकतम और न्यूनतम मानों पर विचार करते हैं। अंत में हम अंशांकन की जांच करते हैं और देखते हैं कि दीर्घवृत्त अब केंद्रित है।

नरम लोहे के अंशांकन का मतलब होगा कि हम चित्र को एक दीर्घवृत्त से एक वृत्त में बदलते हैं। यह प्रत्येक वरिष्ठ मूल्य पर एक कारक जोड़कर बनाया जा सकता है।

एक परीक्षण दिनचर्या को अब पुन: अंशांकित करने के लिए या कम से कम यह जांचने के लिए कोडित किया जा सकता है कि सेंसर अभी भी अंशांकित हैं।

कम्पास शीर्षक

कंपास हेडिंग की गणना के लिए अब मैग्नेटोमीटर डेटा का उपयोग किया जाएगा। इसके लिए हमें m_x और m_y संकेतों को एक कोण में बदलना होगा। पायथन सीधे math.atan2 फ़ंक्शन प्रदान कर रहा है जिसका यह लक्ष्य है। संपूर्ण गणना mpu9250_i2c.py फ़ाइल ("calcHeading(mx, my, mz)") में परिभाषित है।

चरण 7: वैकल्पिक डिजाइन

वैकल्पिक डिजाइन
वैकल्पिक डिजाइन
वैकल्पिक डिजाइन
वैकल्पिक डिजाइन
वैकल्पिक डिजाइन
वैकल्पिक डिजाइन

डिजाइन पूरी तरह से खुला होने के कारण इस परियोजना में काफी समय लगा। प्रत्येक घटक के लिए मैंने कुछ प्रोटोटाइप कार्यान्वयन किए और सिस्टम की सीमाओं का अनुभव किया।

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

पीसीए 9695. से जुड़ा निरंतर रोटेशन सर्वो

डीसी मोटर के लिए एक अतिरिक्त एच-ब्रिज से बचने के लिए, मैंने पहली बार निरंतर रोटेशन सर्वो के साथ शुरुआत की। ये पहले से मौजूद पीसीए 9695 सर्वो ड्राइवर द्वारा संचालित थे। सभी प्रणोदन यांत्रिकी और संवाददाता इलेक्ट्रॉनिक्स बहुत सरल थे। इस डिजाइन में दो कमियां थीं:

  • सर्वो की खराब नियंत्रण सीमा।
  • लापता एन्कोडर होल्डिंग स्थान

सर्वो ५०% pwm के साथ चलना शुरू करते हैं और लगभग ५५% पर पूर्ण गति रखते हैं। यह एक बहुत ही खराब नियंत्रण सीमा है।

एक एन्कोडर होल्डिंग के बिना, जाने के लिए तैयार एन्कोडर ढूंढना बहुत मुश्किल था। मैंने 3 अलग-अलग परावर्तन एन्कोडर का परीक्षण किया जो चेसिस पर लगाए गए थे। मैंने काले और सफेद वर्गों के साथ पहिया के बाहर एक स्व-निर्मित एन्कोडर व्हील को टेप किया। मैंने QTR-1RC सेंसर का उपयोग किया है जिसे सही सिग्नल प्राप्त करने के लिए बहुत अधिक सिग्नल प्रोसेसिंग की आवश्यकता होती है। रास्पबेरी पाई उस तरह की रीयल टाइम प्रोसेसिंग करने में सक्षम नहीं थी। इसलिए मैंने रोबोट में रीयल टाइम कंट्रोलर के रूप में एक NodeMCU D1 मिनी जोड़ने का फैसला किया। यह संसाधित सेंसर डेटा देने के लिए सीरियल UART द्वारा रास्पबेरी पाई से जुड़ा था। NodeMCU HC-SR04 सेंसर का प्रबंधन भी कर रहा था। यांत्रिकी कठिन और बहुत मजबूत नहीं थी, सीरियल लाइन को I2C लाइन और मोटर्स से शोर मिल रहा था, इसलिए आखिरकार मैंने चेसिस के दूसरे संस्करण को साधारण गियर डीसी मोटर्स द्वारा संचालित किया। एक एच-ब्रिज। ऑप्टिकल एन्कोडर लगाने के लिए इन मोटरों में द्वितीयक आउटपुट शाफ्ट होता है।

चरण 8: छवि प्रसंस्करण

मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी
मूर्ति प्रोद्योगिकी

ऑटोनॉमस ड्राइविंग को बेहतर बनाने के लिए, हम कुछ इमेज प्रोसेसिंग कर सकते हैं।

ओपनसीवी पुस्तकालय इसके लिए एक संदर्भ है। इसका उपयोग पायथन द्वारा तेजी से बाधा का पता लगाने के लिए किया जा सकता है।

हम एक छवि कैप्चर करते हैं और कुछ छवि प्रसंस्करण कार्यों को लागू करते हैं:

पहले परीक्षण कैनी और सोबेल परिवर्तनों के साथ किए गए थे। कैनी एक अच्छा उम्मीदवार हो सकता है लेकिन पर्याप्त समझदार नहीं है। सोबेल बहुत समझदार है (बहुत अधिक वस्तुओं का पता चला है)।

अंत में मैंने सभी क्षैतिज और ऊर्ध्वाधर ग्रेडिएंट्स (फर्नीचर का पता लगाने) को मिलाने के लिए अपना फ़िल्टर बनाया:

  • रंग छवि को ग्रे स्तर की छवि में बदलें
  • छोटे शोर को दूर करने के लिए छवि को धुंधला करें
  • छवि को एक श्वेत और श्याम छवि के लिए थ्रेसहोल्ड करें
  • अब हम दीवारों और फर्नीचर के रूप में वस्तुओं का पता लगाने के लिए क्षैतिज और ऊर्ध्वाधर ग्रेडिएंट का पता लगाते हैं
  • हम केवल बड़ी शेष आकृति को फ़िल्टर करते हैं (चित्र में रंगीन आकृति देखें)

अब हम इस नई जानकारी का उपयोग बाधाओं का पता लगाने के लिए कर सकते हैं…

चरण 9: अगले चरण…

अगला कदम…
अगला कदम…
अगला कदम…
अगला कदम…

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

  • यॉ और मैग्नेटिक हेडिंग सिग्नल का सेंसर फ्यूजन
  • कैमरा इमेज प्रोसेसिंग (उसके लिए केवल कम CPU उपलब्ध)
  • टक्कर का पता लगाने (अल्ट्रासोनिक दूरी और कैमरा)
  • नक्शा निर्माण या अभिविन्यास

अब जाओ और अपनी चुनौतियाँ या लक्ष्य बनाएँ…

सिफारिश की: