विषयसूची:

स्व-शिक्षण अराजक रोबोट: ३ चरण
स्व-शिक्षण अराजक रोबोट: ३ चरण

वीडियो: स्व-शिक्षण अराजक रोबोट: ३ चरण

वीडियो: स्व-शिक्षण अराजक रोबोट: ३ चरण
वीडियो: Ep : 3 | Search for Ultimate Reality in Metaphysics | Dr. Vikas Divyakirti 2024, नवंबर
Anonim
स्व-शिक्षण अराजक रोबोट
स्व-शिक्षण अराजक रोबोट

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

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

चरण 1: हार्डवेयर उर्फ रोबोट

हार्डवेयर उर्फ रोबोट
हार्डवेयर उर्फ रोबोट
हार्डवेयर उर्फ रोबोट
हार्डवेयर उर्फ रोबोट
हार्डवेयर उर्फ रोबोट
हार्डवेयर उर्फ रोबोट

आप की जरूरत है:

- 1 अरुडिनो ड्यू

- 8 माइक्रोसर्वो

- 1 PS/2 माउस

- 1 लेवलशिफ्टर

- सेंसर-शील्ड या इसी तरह के कुछ प्रकार, मैं सेंसर शील्ड से थक गया और अपना खुद का वेल्ड कर दिया।

-तार

-सर्वो के लिए बाहरी 5V बिजली की आपूर्ति

- कुछ स्क्रैप धातु के टुकड़े, कुछ गोंद और कुछ स्टील के धागे। और टेप!

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

टिप्स: कुछ काफी भारी धातु भागों का उपयोग करें, इससे रोबोट को चलना आसान हो जाता है।

सर्वो को नियत से कनेक्ट करें, मेरे मामले में वे D39, 41, 43, 45, 47, 49, 51, 53 से जुड़े हैं।

सर्वो को बाहरी 5V बिजली की आपूर्ति से कनेक्ट करें। इसके लिए किसी तरह का शील्ड बनाएं या फिर सेंसर शील्ड या इसी तरह का इस्तेमाल करें। देय राशि 5V पिन से सर्वो को न खिलाएं, यह पर्याप्त नहीं है, देय जल जाएगा। मैंने सभी सर्वो को 5 वी वितरित करने के लिए एक छोटे प्रोटोटाइप बोर्ड का उपयोग किया। यह बोर्ड PS/2 माउस घड़ी और डेटा लाइनों के लिए लेवल शिफ्टर भी रखता है। बोर्ड माउस को 5V भी फीड करता है। याद रखें जमीन को बाहरी शक्ति से Arduino के कारण जमीन से कनेक्ट करें! स्कीमैटिक्स दिखाता है कि यह सब कैसे कनेक्ट किया जाए।

PS/2 को पावर (5V) और ग्राउंड से कनेक्ट करें। PS/2 की घड़ी और डेटा लाइन को लेवल शिफ्टर के माध्यम से ड्यू से कनेक्ट करें। (देय 3.3V, PS/2 5V चला जाता है)। D12 पर घड़ी और D13 पर डेटा कनेक्ट करें।

PS / 2 प्रोटोकॉल के विवरण के लिए, यह एक बहुत अच्छा निर्देश है:

www.instructables.com/id/Optical-Mouse-Od…

जैज़ीकैमल द्वारा पीएस/2 लाइब्रेरी जिसका मैंने उपयोग किया है:

चरण 2: कोड

कोड
कोड

सबसे पहले मैं यह कह दूं: मैं कोई प्रोग्रामर नहीं हूं। कुछ हिस्से बहुत व्यापक हैं, एक कुशल प्रोग्रामर निश्चित रूप से इसे छोटा कर सकता है और इसी तरह।

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

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

जैसा कि आप छवियों में देख सकते हैं, माउस को एक पतली रस्सी पर खींचा जाता है। पहले इसे माउस-केबल में घसीटा गया। हालाँकि, केबल एक प्रकार की कड़ी होती है, इसलिए रोबोट ने माउस को खींचने के बजाय हिलाना सीख लिया। उच्च अंक का उत्पादन मिलाते हुए …

कोड 50 व्यक्तियों का उपयोग करता है। इसका मूल 50x50 बाइट्स की एक सरणी है।

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

एक रन की शुरुआत में 8 चर m1, m2, m3, m4, m5, m6, m7 और m8 (प्रत्येक सर्वो के लिए एक) होते हैं। इस रोबोट में उन सभी का निरंतर प्रारंभिक मान होता है। "टॉल्केन" में एमś व्यक्ति के मूल्यों के आधार पर केस/स्विच लूप में परिवर्तित हो जाते हैं। उदाहरण के लिए "1" का मान निम्नलिखित को निष्पादित करता है: m1 = m1 + m2।

यदि एक व्यक्ति है: 1, 2, 3, 0, 0, 0, 0….. तो mś निम्न प्रकार से रूपांतरित होगा:

एम1 = एम1 + एम2;

एम1 = एम1 + एम3;

एम1 = एम1 + एम4;

टॉलकेन 256 विभिन्न गणितीय संक्रियाओं की एक सूची है, इसलिए इंडिविज ऐरे का प्रत्येक संभावित मान m मानों के गणितीय परिवर्तन का प्रतिनिधित्व करता है।

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

विकास के हर चरण में, 4 व्यक्ति रेंगने में प्रतिस्पर्धा करते हैं। सबसे अच्छे दो व्यक्ति दो बच्चों के माता-पिता होंगे, बच्चे दो सबसे खराब व्यक्तियों की जगह लेंगे। जब बच्चे बनाए जाते हैं, तो एक माता-पिता से "जेनेटिक कोड" का एक टुकड़ा दूसरे माता-पिता से एक टुकड़े के लिए कारोबार किया जाता है, इससे दो नए व्यक्ति बनते हैं।

यदि कोई व्यक्ति बिल्कुल भी प्रदर्शन नहीं करता है, तो नए लोगों को उत्पन्न करने के लिए व्यक्तियों का उत्परिवर्तन होगा।

आप GitHub पर कोड पा सकते हैं:

चरण 3: इसे कैसे प्रशिक्षित करें?

यह मुश्किल हिस्सा है। ठीक से प्रशिक्षित करने के लिए, आपको प्रत्येक रन के बाद इसे "रीसेट" करना होगा। इसका मतलब है कि आपको इसे हर बार एक ही पोजीशन में रखना है।

मैंने यह सुनिश्चित करने के लिए कोड के अंदर कुछ चेक-पॉइंट लगाए हैं कि रोबोट अपनी शुरुआती स्थिति में है।

तो रोबोट को संरेखित करें और इसे चलने दें।

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

मेरे रोबोट ने कुछ घंटों के बाद रेंगना सीखा। इसे क्रॉल करने के लिए वीडियो डाउनलोड करें। यह उस दिशा में नहीं गया जैसा मैंने सोचा था कि यह होगा!

विभिन्न मंजिलों को भी आजमाएं! मेरे रोबोट ने नायलॉन कालीन पर सबसे अच्छा प्रदर्शन किया।

संभावित सुधार:

1. बेहतर होगा कि PS/2 माउस को पढ़ने के लिए एक अलग नैनो हो, और संसाधित दूरी को सीरियल में स्थानांतरित करके नैनो को भेजें। मेरे PS/2 माउस को पढ़ना थोड़ा अस्थिर है। कोड के कुछ हिस्सों को पढ़ने/समाशोधन करने वाले माउस का यही कारण है।

2. किसी प्रकार का परीक्षण रिग जो रोबोट को उसकी प्रारंभिक स्थिति में वापस खींच लेता है, प्रशिक्षण को गति देगा।

3. मुझे लगता है कि इसे मेरे मुकाबले थोड़ा धीमा प्रशिक्षित करना बुद्धिमानी है। धीमा प्रशिक्षण आश्वासन देता है कि इसे "सही दिशा में" प्रशिक्षित किया जाता है। कई टेस्ट रन का औसत प्रदर्शन एक संभावित तरीका हो सकता है।

सिफारिश की: