विषयसूची:

रोबो-तकनीशियन: 8 कदम
रोबो-तकनीशियन: 8 कदम
Anonim
रोबो-तकनीशियन
रोबो-तकनीशियन

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

बचाव के लिए रोबो-तकनीशियन।

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

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

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

हार्डवेयर

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

सॉफ्टवेयर

  • मैटलैब (2018a और 2017b दोनों का उपयोग किया गया था और ऐसा लगता है कि इससे बहुत कम फर्क पड़ता है)
  • मैटलैब के लिए रास्पबेरी पाई सपोर्ट पैकेज
  • मैटलैब से कनेक्शन के लिए रास्पबेरी पाई कोड (नीचे दिए गए स्रोत कोड का लिंक)
  • मैटलैब के लिए इमेज प्रोसेसिंग टूलबॉक्स (आप टूलबॉक्स के बिना इस प्रोजेक्ट को बहुत ज्यादा नहीं कर सकते हैं)
  • वैकल्पिक: आपके फोन पर मैटलैब मोबाइल स्थापित है, जिसके बारे में मैं बाद में बताऊंगा

चरण 1: हार्डवेयर सेट करना

ef.engr.utk.edu/ef230-2018-08/projects/roo…

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

डॉक्टर रूमबा

और एक और बहुत महत्वपूर्ण बिंदु।

जब आप ऊपर दिए गए लिंक से फ़ाइलें डाउनलोड करते हैं, तो उन्हें ऊपर वर्णित फ़ोल्डर में रखें, क्योंकि मैटलैब के लिए उपयोगकर्ता द्वारा जेनरेट की गई फ़ाइलों को वर्तमान कार्यशील फ़ोल्डर में होना आवश्यक है।

उस रास्ते से हटकर, चलिए कोड पर चलते हैं।

चरण 2: उन सभी सेंसर को ढूँढना

उन सभी सेंसर को ढूँढना
उन सभी सेंसर को ढूँढना
उन सभी सेंसर को ढूँढना
उन सभी सेंसर को ढूँढना

एक सेकंड लें और iRobot® का निरीक्षण करें। यह जानना अच्छा है कि ये कहां हैं, इसलिए आपको रोबो-तकनीशियन द्वारा प्राप्त इनपुट का अंदाजा है, और आप यह पता लगाने में सक्षम होंगे कि आपके द्वारा सेटअप किए गए पथ का अनुसरण करने के बजाय चीज़ मंडलियों में क्यों घूम रही है (यह हो सकता है या नहीं हुआ होगा)। आप स्पष्ट रूप से सामने की तरफ बड़ा फिजिकल बम्प सेंसर देखेंगे। क्लिफ सेंसर देखने में थोड़ा अधिक कठिन हैं, आपको इसे पलटना होगा और सामने के किनारे के पास चार, स्पष्ट प्लास्टिक की खिड़कियों की तलाश करनी होगी। लाइट बम्प सेंसर और भी अधिक छिपे हुए हैं, लेकिन अभी के लिए यह कहने के लिए पर्याप्त होगा कि चमकदार ब्लैक बैंड में लाइव iRobot® के सामने चलता है, जो भौतिक बंप सेंसर बार के सामने है।

व्हील ड्रॉप सेंसर हैं, लेकिन ये इस परियोजना में अप्रयुक्त हैं, इसलिए हम सेंसर का परीक्षण करने के लिए आगे बढ़ेंगे।

चरण 3: पैरामीटर सेट करने के लिए परीक्षण

पैरामीटर सेट करने के लिए परीक्षण
पैरामीटर सेट करने के लिए परीक्षण

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

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

सुनिश्चित करें कि रास्पबेरी पाई को iRobot® में प्लग किया गया है और आपका कंप्यूटर उसी इंटरनेट कनेक्शन से जुड़ा है। आप अपने बालों को खींचने में कम समय व्यतीत करेंगे यह पता लगाने की कोशिश कर रहे हैं कि मैटलैब कनेक्ट क्यों नहीं होगा।

r = रूमबा (आपके द्वारा सेट किया गया नंबर)

इस परिस्थिति में चर "r" आवश्यक नहीं है, आप इसे जो चाहें कह सकते हैं, लेकिन यह एकल अक्षर चर का उपयोग करने के लिए जीवन को आसान बनाता है।

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

अब कमांड के साथ टेस्ट सेंसर शुरू करें:

आर.टेस्ट सेंसर

ध्यान रखें कि "r." वह चर है जिसे आपने पहले परिभाषित किया था, इसलिए यदि यह 'r' नहीं है तो 'r' को बदल दें। जो कुछ भी आपने तय किया है। यह एक टन जानकारी के साथ टेस्ट सेंसर स्क्रीन लाएगा।

इस प्रोजेक्ट के लिए लाइटबम्पर, बंपर और क्लिफ सेक्शन पर ध्यान दें। यह सुनिश्चित करने के लिए रोबो-तकनीशियन को घुमाएँ कि विभिन्न सतहों पर सेंसर कैसे बदलते हैं, या ligthBumper मानों को बदलने के लिए किसी वस्तु को कितना करीब होना चाहिए, आदि। इन नंबरों को ध्यान में रखें (या उन्हें लिख लें) क्योंकि आप करेंगे उन्हें सेट करने की आवश्यकता है कि आप एक सेकंड में पैरामीटर हैं।

चरण 4: कोड शुरू करना

सबसे पहले आप एक फंक्शन का निर्माण करेंगे। मैंने इसे "पथ" कहा, लेकिन फिर से, नाम आवश्यक नहीं है, लेकिन मैं इसे अभी से "पथ" के रूप में संदर्भित करूंगा।

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

सूची = {'लाल', 'नीला', 'हरा'}

प्रोब्लिस्ट = {'कैजुअल्टी, सेव इमेज', 'कंपोनेंट आउट ऑफ प्लेस, सेव इमेज', 'अपेक्षित, जारी रखें'} पाथकलर = लिस्ट डीएलजी ('प्रॉम्प्टस्ट्रिंग', 'सेलेक्ट ए पाथ कलर', … 'सिलेक्शनमोड', 'सिंगल', 'लिस्टस्ट्रिंग', सूची) प्रोब = 0; ड्राइव = ;

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

चरण 5: जबकि लूप का शीर्ष: भौतिक टक्कर सेंसर

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

यदि आपने पिछले चरणों में रोबो-तकनीशियन पर सभी सेंसर का परीक्षण किया है, तो आप जानेंगे कि बंप सेंसर का एक तर्क मान (0 या 1) होता है, जिसमें शून्य सेंसर की सामान्य, बिना दबाए स्थिति का प्रतिनिधित्व करता है। कोड के लिए इसे ध्यान में रखें।

जबकि ट्रू% मेन जबकि लूप% बंपर जानकारी प्राप्त करता है S = r.getBumpers यदि S. लेफ्ट ~ = 0 r.stop और S.right ~ = 0 r.stop अन्य यदि S.front ~ = 0 r.stop end

यह मूल है "अगर यह कुछ हिट करता है, तो रोकें" भाग। यदि सेंसर टकराव का पता लगाते हैं, तो यह कोड के अगले भाग पर चला जाता है, जो फोटो प्राप्त करने के लिए रोबो-तकनीशियन की स्थिति को फिर से समायोजित करता है।

यदि S.बाएं ~= 0% यदि लूप बंपर जानकारी लेता है और फ़ोटो के लिए कैमरा संरेखित करता है r.turnAngle(5) पॉज़ (0.5) img = r.getImage% फ़ोटो लेता है और छवि प्रदर्शित करता है (img)% संवाद बॉक्स prob = listdlg (' PromptString', 'एक अनपेक्षित बाधा मिली, कृपया पहचानें'…, 'SelectionMode', 'single', 'ListString', problist) और S.right ~=0 r.turnAngle(-5) रोकें(0.5) img = r. getImage image(img) prob = listdlg('PromptString', 'एक अप्रत्याशित बाधा मिली, कृपया पहचानें'…, 'SelectionMode', 'single', 'ListString', problist) और S.front ~= 0 r.moveDistance(- ०.१) रोकें (०.५) img = r.getImage image (img) prob = listdlg ('प्रॉम्प्टस्ट्रिंग', 'एक अप्रत्याशित बाधा मिली, कृपया पहचानें'…, 'सिलेक्शनमोड', 'सिंगल', 'लिस्टस्ट्रिंग', प्रोबलिस्ट) अंत

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

अब मैंने बम्प सेंसर वाले हिस्से और फोटो सेविंग पार्ट के बीच में एक कोड सेक्शन डाला है। यह लाइटबम्पर मान लेता है और ड्राइव वेग को 0.025 मीटर/सेकंड (बहुत धीमा) पर सेट करता है, जो वास्तव में आवश्यक नहीं है, लेकिन यह रोबो-तकनीशियन को चीजों में पीटने और अंततः भौतिक बंप सेंसर को खराब करने में कटौती करता है।

L = r.getLightBumpers यदि L.बाएं > १०० || एल.लेफ्टफ्रंट >100 || एल.राइटफ्रंट >100 || एल राइट> १०० ड्राइव = ०.०२५ आर.सेटड्राइव वेलोसिटी (०.०२५) और ड्राइव = ०.१ अंत

यह वह हिस्सा होगा जहां आपके द्वारा देखे गए मूल्य (और उम्मीद है कि नीचे लिखे गए) पहले चलन में आते हैं।

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

अगला भाग वह है जहाँ फ़ोटो बाद के लिए सहेजे जाते हैं।

% अगर प्रोब डायलॉग में पहला या दूसरा विकल्प चुना गया था, तो इमेज को सेव करता है अगर प्रोब == 1% अगर लूप फोटो के लिए फाइल की जानकारी बनाता है, तो टाइमस्टैम्प टी = क्लॉक के साथ लिखता है; बेसनाम = स्प्रिंटफ ('\ img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); फ़ोल्डर = 'ई: / UTK / कक्षाएं / 18 / ef230 / irobot / चित्र गिरना'; फुलफाइलनाम = फुलफाइल (फोल्डर, बेसनेम); imwrite(img, fullFileName) बंद करें चित्र 1 विराम(2) और यदि जांच == 2 t = घड़ी; बेसनाम = स्प्रिंटफ ('\ img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); फ़ोल्डर = 'ई: / UTK / कक्षाएं / 18 / ef230 / irobot / चित्र गिरना'; फुलफाइलनाम = फुलफाइल (फोल्डर, बेसनेम); imwrite(img, fullFileName) बंद चित्र 1 विराम(2) अंत

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

फिजिकल बम्प सेंसर को कवर करके, हम क्लिफ सेंसर्स और पाथ फॉलो पर आगे बढ़ सकते हैं।

चरण 6: पथ का अनुसरण

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

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

क्लियर आईएमजी क्लियर टी क्लियर बेसनेम क्लियर फुलफाइलनाम क्लियर फोल्डर

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

C = r.getCliffSensors % यदि लूप एक रंग बैंड (सफ़ेद) का अनुसरण करता है यदि C.leftFront> 2000 && C.rightFront> २०००% स्ट्रेट पाथ गाइडेंस r.setDriveVelocity(drive) और यदि C.leftFront २०००% सही हो जाता है यदि रोबोट बहुत दूर चला जाता है बाएँ r.turnAngle(-2.5) और अगर C.leftFront >2000 && C.rightFront<2000% बाएँ मुड़ जाते हैं यदि रोबोट बहुत दूर चला जाता है r.turnAngle(2.5) और यदि C.बायाँफ्रंट <2000 && C.rightFront 100 || एल.लेफ्टफ्रंट >100 || एल.राइटफ्रंट >100 || L.right>100 img = r.getImage अंत% जांच करता है कि क्या पथ में कोई मोड़ है यदि C.बाएं>2800 && C.right <2800 r.turnAngle(2.5) और यदि C.बाएं 2800 r.turnAngle(- २.५) पथ छवि पहचान के लिए अंत% स्थान धारक ('छवि प्राप्त करना') अंत अंत अंत

ध्यान रखें कि मेरे द्वारा चुने गए चर नाम वैकल्पिक हैं, लेकिन फिर से मुझे लगता है कि यह संभव होने पर एकल अक्षर चर का उपयोग करना आसान बनाता है।

कोड के मध्य भाग की व्याख्या करने के लिए, जब दो फ्रंट सेंसर पथ के किनारे से निकलते हैं (जब यह चौराहे पर आता है या जब यह पथ के अंत तक पहुंचता है) तो यह देखने के लिए दिखता है कि इसके सामने कुछ है या नहीं. काम करने के लिए आपको पथ के अंत में या किसी भी चौराहे पर जमीन पर एक वस्तु रखनी होगी।

एक बार फोटो लेने के बाद यह पता लगाने के लिए कि क्या करना है, छवि पहचान का उपयोग करता है। कोड के इस भाग में एक प्लेसहोल्डर भी होता है:

पथ छवि पहचान के लिए% स्थान धारक('छवि प्राप्त करना')

मैंने इस पल के लिए इसका इस्तेमाल किया क्योंकि मैं विशेष रूप से पाठ और रंग प्रसंस्करण के बारे में बात करना चाहता था, जो अगले चरण में है।

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

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

img = r.getImage img = imcrop (img, [0 30 512 354]) img = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) लाल = माध्य (माध्य) आईएमजीबी (:,:, 1))); जी = माध्य (माध्य (आईएमजीबी (:,:, 2))); बी = माध्य (माध्य (आईएमजीबी (:,:, 3)));

यह तीव्रता की जाँच है। इसका उपयोग अगले खंड में यह तय करने के लिए किया जाएगा कि वह क्या करना चाहता है।

if red > g && red >b if pathcolor == 1 imgc = imcrop(img, [0 30 512 354]) R = ocr(img) if R. Words{1} == IMAGE || आर.वर्ड्स{2} == इमेज || आर.वर्ड्स{3} ==इमेज टी = घड़ी; बेसनाम = स्प्रिंटफ ('\ img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); फ़ोल्डर = 'ई: / UTK / कक्षाएं / 18 / ef230 / irobot / चित्र गिरना'; फुलफाइलनाम = फुलफाइल (फोल्डर, बेसनेम); imwrite(img, fullFileName) पॉज़ (2) अन्य यदि R. Words{1} == RIGHT || आर.वर्ड्स{2} == राइट || R. Words{3} ==Right r.turnAngle(-75) और यदि R. Words{1} == LEFT || आर. शब्द{2} == बाएँ || R. Words{3} == बाएँ r.turnAngle(75) और यदि R. Words{1} == BACK || आर.वर्ड्स{2} == बैक || R. Words{3} ==BACK r.turnAngle(110) end else r.turnAngle(110) end end

यह खंड तय करता है कि पहले संवाद बॉक्स में चुना गया रंग कैमरे द्वारा देखे जा रहे रंग से मेल खाता है या नहीं। यदि ऐसा होता है तो यह टेक्स्ट रिकग्निशन चलाता है। यह देखता है कि कौन सा शब्द (IMAGE, BACK, RIGHT या LEFT) प्रकट होता है और फिर या तो मुड़ता है (दाएं और बाएं के लिए), घूमता है (पीछे के लिए) या चित्र लेता है और इसे पहले की तरह ही सहेजता है।

मैंने विभिन्न रंगों के लिए कोड का केवल एक खंड प्रदान किया है।

कोड को नीले और हरे रंग की पहचान करने की अनुमति देने के लिए, बस कोड को कॉपी करें और सेगमेंट के शीर्ष पर लॉजिक चेक बदलें और शीर्ष डायलॉग बॉक्स से रंग चयन के अनुरूप "pathcolor == (number)" सेट करें (के लिए) कोड के रूप में यह प्रदर्शित होता है, नीला 2 होगा और हरा 3 होगा)।

चरण 8: तैयार उत्पाद

तैयार उत्पाद
तैयार उत्पाद

अब रोबो-तकनीशियन को मंगल मिशन मॉड्यूल के चारों ओर ज़ूम करना चाहिए और कुछ भी जगह से बाहर होने पर अंतरिक्ष यात्रियों को वापस रिपोर्ट करना चाहिए।

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

आशा है कि आपने मंगल मिशन के लिए एक छोटे से सहायक को स्थापित करने का आनंद लिया है, और मज़ेदार निर्माण किया है।

सिफारिश की: