- हार्डवेयर आवश्यक:
- प्रोग्रामिंग आवश्यकता:
- रास्पबेरी पाई पर प्रसंस्करण स्थापित करना:
- सर्किट आरेख:
- रास्पबेरी पाई बॉल ट्रैकिंग कार्यक्रम:
- रास्पबेरी पाई बॉल ट्रैकिंग रोबोट का कार्य:
रोबोटिक्स, आर्टिफिशियल इंटेलिजेंस और मशीन लर्निंग का क्षेत्र तेजी से विकसित हो रहा है कि निकट भविष्य में मानव जाति की जीवन शैली को बदलना सुनिश्चित है। रोबोट को सेंसर और मशीन लर्निंग प्रोसेसिंग के माध्यम से वास्तविक दुनिया के साथ समझने और बातचीत करने के लिए सोचा जाता है। छवि मान्यता लोकप्रिय तरीकों में से एक है जिसमें रोबोट को वस्तुओं को समझने के लिए सोचा जाता है जैसे हम करते हैं वैसे ही एक कैमरे के माध्यम से वास्तविक दुनिया को देखते हैं। इस परियोजना में, रास्पबेरी पाई की शक्ति का उपयोग एक रोबोट बनाने के लिए करें जो गेंद को ट्रैक कर सके और फुटबॉल खेलने वाले रोबोट की तरह इसका पालन कर सके ।
OpenCV एक बहुत प्रसिद्ध और खुला स्रोत उपकरण है जिसका उपयोग इमेज प्रोसेसिंग के लिए किया जाता है, लेकिन इस ट्यूटोरियल में चीजों को सरल रखने के लिए हम प्रोसेसिंग ईई का उपयोग कर रहे हैं। चूंकि एआरएम के लिए प्रसंस्करण ने प्रसंस्करण के लिए जीपीआईओ पुस्तकालय भी जारी किया है, हमें रास्पबेरी पाई के साथ काम करने के लिए अब अजगर और प्रसंस्करण के बीच बदलाव नहीं करना होगा। सही लगता है? तो चलिए शुरू करते हैं।
हार्डवेयर आवश्यक:
- रास्पबेरी पाई
- रिबन केबल के साथ कैमरा मॉड्यूल
- रोबोट चेसिस
- पहिया के साथ गियर मोटर्स
- L293D मोटर ड्राइवर
- पावर बैंक या कोई अन्य पोर्टेबल पावर स्रोत
प्रोग्रामिंग आवश्यकता:
- रास्पबेरी पाई के लिए मॉनिटर या अन्य डिस्प्ले
- पी के लिए की बोर्ड या माउस
- एआरएम सॉफ्टवेयर प्रसंस्करण
नोट: प्रोग्रामिंग के दौरान तारों के माध्यम से पाई से जुड़ा डिस्प्ले होना अनिवार्य है क्योंकि तभी कैमरे के वीडियो को देखा जा सकता है
रास्पबेरी पाई पर प्रसंस्करण स्थापित करना:
जैसा कि पहले बताया गया है कि हम अपने रास्पबेरी पाई को प्रोग्राम करने के लिए प्रसंस्करण वातावरण का उपयोग करेंगे और न कि अजगर के उपयोग के डिफ़ॉल्ट तरीके से। तो, नीचे दिए गए चरणों का पालन करें:
चरण 1: - अपने रास्पबेरी पाई को अपने मॉनिटर, कीबोर्ड और माउस से कनेक्ट करें और इसे चालू करें।
चरण 2: - सुनिश्चित करें कि आप पाई एक सक्रिय इंटरनेट कनेक्शन से जुड़े हैं क्योंकि हम कुछ चीजों को डाउनलोड करने वाले हैं।
चरण 3: - प्रसंस्करण एआरएम पर क्लिक करें, रास्पबेरी पाई के लिए प्रसंस्करण आईडीई डाउनलोड करने के लिए। डाउनलोड जिप फाइल के रूप में होगा।
चरण 4: - डाउनलोड हो जाने के बाद, आप अपने पसंदीदा निर्देशिका में ज़िप फ़ोल्डर में फ़ाइलें निकालें। मैंने इसे अपने डेस्कटॉप पर निकाला।
चरण 5: - अब, निकाले गए फ़ोल्डर को खोलें और प्रसंस्करण नाम की फ़ाइल पर क्लिक करें। यह एक विंडो खोलना चाहिए जैसा कि नीचे दिखाया गया है।
चरण 6: - यह वह वातावरण है जहाँ हम अपने कोड टाइप करेंगे। जो लोग Arduino से परिचित हैं, उनके लिए YES से चौंकना नहीं चाहिए क्योंकि IDE Arduino के समान दिखता है और इसलिए यह कार्यक्रम करता है।
चरण 7: - हमें अपनी गेंद को काम करने के लिए प्रोग्राम के बाद दो पुस्तकालयों की आवश्यकता है, फिर स्थापित करने के लिए बस स्केच -> आयात पुस्तकालय - लाइब्रेरी जोड़ें पर क्लिक करें । निम्न डायलॉग बॉक्स खुलेगा।
चरण 8: - रास्पबेरी पाई और हिट दर्ज करने के लिए शीर्ष बाएं टेक्स्ट बॉक्स का उपयोग करें, आपको खोज परिणाम कुछ इस तरह दिखना चाहिए।
चरण 9: - "जीएल वीडियो" और "हार्डवेयर I / O" नामक पुस्तकालयों की खोज करें और उन्हें स्थापित करने के लिए इंस्टॉल पर क्लिक करें। सुनिश्चित करें कि आप दोनों पुस्तकालयों को स्थापित करते हैं।
चरण 10: - आपके इंटरनेट के आधार पर इंस्टॉलेशन में कुछ मिनट लगेंगे। एक बार जब हम प्रसंस्करण सॉफ्टवेयर के लिए तैयार हैं।
सर्किट आरेख:
इस रास्पबेरी पाई बॉल ट्रैकिंग प्रोजेक्ट का सर्किट आरेख नीचे दिखाया गया है।
जैसा कि आप देख सकते हैं कि सर्किट में एक पीआई कैमरा, मोटर चालक मॉड्यूल और रास्पबेरी पाई से जुड़े मोटर्स की एक जोड़ी शामिल है। पूरा सर्किट एक मोबाइल पावर बैंक (उपरोक्त सर्किट में AAA बैटरी द्वारा दर्शाया गया है) द्वारा संचालित है।
चूंकि रास्पबेरी पाई पर पिन विवरण का उल्लेख नहीं किया गया है, हमें नीचे की तस्वीर का उपयोग करके पिनों को सत्यापित करने की आवश्यकता है
मोटर्स को चलाने के लिए, हमें चार पिन (ए, बी, ए, बी) की आवश्यकता है। यह चार पिन क्रमशः GPIO14,4,17 और 18 से जुड़े हुए हैं। नारंगी और सफेद तार मिलकर एक मोटर के लिए कनेक्शन बनाते हैं। इसलिए हमारे पास दो मोटरों के लिए दो जोड़े हैं।
मोटर्स L293D मोटर चालक मॉड्यूल से जुड़े हुए हैं जैसा कि चित्र में दिखाया गया है और चालक मॉड्यूल एक पावर बैंक द्वारा संचालित है । सुनिश्चित करें कि पावर बैंक का ग्राउंड रास्पबेरी पाई के मैदान से जुड़ा हुआ है, तभी आपका कनेक्शन काम करेगा।
यही कारण है कि हम अपने हार्डवेयर कनेक्शन के साथ किया जाता है, आइए अपने प्रसंस्करण वातावरण पर वापस जाएं और अपने रोबोट को एक गेंद को ट्रैक करने के तरीके को सिखाने के लिए प्रोग्रामिंग शुरू करें।
रास्पबेरी पाई बॉल ट्रैकिंग कार्यक्रम:
पूरा प्रसंस्करण कार्यक्रम इस परियोजना का यह पेज है, जिसे आप सीधे का उपयोग के अंत में दिया जाता है। आगे बस नीचे, मैंने कोड के काम को समझाया है ताकि आप इसे अन्य समान परियोजनाओं के लिए उपयोग कर सकें।
कार्यक्रम की अवधारणा बहुत सरल है। हालांकि परियोजना का इरादा एक गेंद को ट्रैक करना है, हम वास्तव में ऐसा नहीं करने जा रहे हैं। हम सिर्फ उसके रंग का उपयोग करके गेंद की पहचान करने जा रहे हैं। जैसा कि हम सभी जानते हैं कि वीडियो चित्रों के निरंतर फ्रेम के अलावा और कुछ नहीं हैं। इसलिए हम प्रत्येक तस्वीर लेते हैं और इसे पिक्सेल में विभाजित करते हैं। फिर हम गेंद के रंग के साथ प्रत्येक पिक्सेल रंग की तुलना करते हैं; अगर कोई मैच पाया जाता है तो हम कह सकते हैं कि हमने गेंद पाई है। इस जानकारी से हम स्क्रीन पर गेंद की स्थिति (पिक्सेल रंग) की पहचान कर सकते हैं। यदि स्थिति बहुत बाईं ओर है तो हम रोबोट को दाईं ओर ले जाते हैं, यदि स्थिति बहुत दूर है तो हम रोबोट को बाईं ओर ले जाते हैं ताकि पिक्सेल स्थिति हमेशा स्क्रीन के केंद्र में रहे। आप एक स्पष्ट तस्वीर पाने के लिए डैनियल शिफमैन का कंप्यूटर विजन वीडियो देख सकते हैं।
हमेशा की तरह हम डाउनलोड करने वाले दो पुस्तकालयों को आयात करके शुरू करते हैं । यह निम्नलिखित दो पंक्तियों द्वारा किया जा सकता है। हार्डवेयर I / O लाइब्रेरी का उपयोग प्रसंस्करण वातावरण से सीधे PI के GPIO पिन तक पहुंचने के लिए किया जाता है, रास्पबेरी पाई कैमरा मॉड्यूल तक पहुंचने के लिए glvideo लाइब्रेरी का उपयोग किया जाता है।
आयात प्रसंस्करण.io। *; आयात gohai.glvideo। *;
सेटअप फ़ंक्शन के अंदर हम मोटर को नियंत्रित करने के लिए आउटपुट पिंस को इनिशियलाइज़ करते हैं और पाई कैमरा से वीडियो भी प्राप्त करते हैं और इसे 320 * 240 के आकार की विंडो में आकार देते हैं।
शून्य सेटअप () {आकार (320, 240, पी 2 डी); वीडियो = नया GLCapture (यह); video.start (); trackColor = रंग (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
शून्य ड्रा अनंत लूप इस लूप के अंदर कोड जब तक कार्यक्रम समाप्त हो जाता है पर अमल किया जाएगा की तरह है। यदि कोई कैमरा स्रोत उपलब्ध है तो हम इससे निकलने वाले वीडियो को पढ़ते हैं
शून्य ड्रा () {पृष्ठभूमि (0); if (video.available) ()) {video.read (); }}
फिर हम वीडियो फ्रेम को पिक्सेल में विभाजित करना शुरू करते हैं । प्रत्येक पिक्सेल का मूल्य लाल, हरा और नीला होता है। ये मान चर r1, g1 और b1 में संग्रहीत हैं
for (int x = 0; x <video.width; x ++) {के लिए (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // क्या है वर्तमान रंग रंग currentColor = video.pixels; float r1 = red (currentColor); फ्लोट जी 1 = हरा (वर्तमान रंग); float b1 = blue (currentColor);
करने के लिए शुरू में गेंद के रंग का पता लगाने, हम रंग पर क्लिक करने के लिए है। एक बार क्लिक करने पर बॉल का रंग ट्रैककॉल नामक वैरिएबल में जमा हो जाएगा ।
void mousePressed () {// सहेजें रंग जहां माउस को ट्रैकरेलर चर int int = mouseX + mouseY * video.width में क्लिक किया जाता है; trackColor = video.pixels; }
एक बार जब हमारे पास ट्रैक का रंग और वर्तमान रंग होता है तो हमें उनकी तुलना करनी होती है। यह तुलना डिस्टर्ब फंक्शन का उपयोग कर रही है। यह जांचता है कि वर्तमान रंग ट्रैक रंग के कितने करीब है।
फ्लोट डी = डिस्ट (आर 1, जी 1, बी 1, आर 2, जी 2, बी 2);
सटीक मिलान के लिए डिस्ट का मान शून्य होगा । इसलिए, यदि डिस्ट का मान किसी निर्दिष्ट मान (वर्ल्ड रिकॉर्ड) से कम है तो हम मान लेते हैं कि हमने ट्रैक कलर ढूंढ लिया है। फिर हम उस पिक्सेल का स्थान प्राप्त करते हैं और इसे गेंद के स्थान को खोजने के लिए चर निकटतम X और निकटतम Y में संग्रहीत करते हैं
if (d <worldRecord) {worldRecord = d; निकटतम x = x; निकटतम = y; }
हम यह भी संकेतित रंग के चारों ओर एक दीर्घवृत्त खींचते हैं ताकि संकेत मिल सके कि रंग मिल गया है। स्थिति का मान भी कंसोल पर मुद्रित होता है, यह डीबगिंग करते समय बहुत मदद करेगा।
if (worldRecord <10) {// ट्रैक किए गए पिक्सेल भरण (trackColor) पर एक वृत्त खींचना; स्ट्रोक वाइट (4.0); स्ट्रोक (0); दीर्घवृत्त (निकटतम एक्सएक्सएक्स, निकटतम, 16, 16); प्रिंट्लन (निकटतम एक्सएक्सएक्स, निकटतम वाई);
अंत में हम निकटतम एक्स और निकटतम वाई की स्थिति की तुलना कर सकते हैं और मोटर्स को इस तरह से समायोजित कर सकते हैं कि रंग स्क्रीन के केंद्र में पहुंच जाता है। नीचे दिए गए कोड का उपयोग रोबोट को दाईं ओर मोड़ने के लिए किया जाता है क्योंकि रंग की X स्थिति स्क्रीन के बाईं ओर पाई गई थी (<चरण)
अगर (निकटतम x <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); देरी (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); प्रिंट्लन ("राइट मुड़ें"); }
इसी तरह हम आवश्यक दिशा में मोटर्स को नियंत्रित करने के लिए एक्स और वाई की स्थिति की जांच कर सकते हैं। हमेशा की तरह आप पूर्ण कार्यक्रम के लिए पृष्ठ के निचले भाग को संदर्भित कर सकते हैं।
रास्पबेरी पाई बॉल ट्रैकिंग रोबोट का कार्य:
एक बार जब आप हार्डवेयर और प्रोग्राम के साथ तैयार हो जाते हैं तो कुछ मजा करने का समय आ जाता है। इससे पहले कि हम जमीन पर अपने बॉट का परीक्षण करें, हमें यह सुनिश्चित करना चाहिए कि सब कुछ ठीक चल रहा है। प्रसंस्करण कोड की निगरानी और लॉन्च करने के लिए अपने पाई को कनेक्ट करें। आपको एक छोटी खिड़की पर वीडियो फीड देखना चाहिए। अब, गेंद को फ्रेम के अंदर लाएं और रोबोट को सिखाने के लिए गेंद पर क्लिक करें कि वह इस विशेष रंग को ट्रैक करे। अब स्क्रीन के चारों ओर गेंद को घुमाएं और आपको पहियों को घूमते हुए देखना चाहिए।
यदि सब कुछ अपेक्षित रूप से काम कर रहा है, तो बॉट को जमीन पर छोड़ दें और उसके साथ खेलना शुरू करें। सुनिश्चित करें कि सर्वोत्तम परिणामों के लिए कमरे को समान रूप से रोशन किया गया है। परियोजना का पूरा काम नीचे दिए गए वीडियो में दिखाया गया है । आशा है कि आपने इस परियोजना को समझा और कुछ इसी तरह के निर्माण का आनंद लिया। यदि आपको कोई समस्या है तो नीचे टिप्पणी अनुभाग पर उन्हें पोस्ट करें या मदद करें।