
हाय हमर! और यहाँ हम फिर से हैं! कई संदेहियों की अवहेलना में, जो अक्सर हमारे रास्ते में मिलते थे, हम टॉड बॉट रोबोट परियोजना को विकसित करना जारी रखते हैं। यह पोस्ट एक जोड़तोड़ नियंत्रण उपकरण के रूप में
MoveIt मॉड्यूल के परिचय का एक निरंतरता है।
सबसे पहले, मैं यह कहना चाहता हूं कि हम जोड़तोड़ के माध्यम से वस्तुओं को पकड़ने और स्थानांतरित करने के कार्य में महत्वपूर्ण परिणाम प्राप्त करने में कामयाब रहे, साथ ही साथ वस्तुओं को पहचानने में भी, लेकिन पहले चीजें।
MoveIt में कब्जा करने के बारे में थोड़ा सिद्धांत
किसी ऑब्जेक्ट का कैप्चर एक कन्वेयर के रूप में प्रस्तुत किया जा सकता है जिसमें कई चरणों होते हैं जिसमें एक पूर्ण प्रक्षेपवक्र, निष्पादन के लिए तैयार होता है, गणना की जाती है: मैनिप्युलेटर की प्रारंभिक स्थिति से ऑब्जेक्ट के सीधे ऊपर उठने तक। ये गणना निम्नलिखित डेटा पर आधारित हैं:
- दृश्य नियोजन मॉनिटर द्वारा प्रदान किया गया दृश्य नियोजन उपकरण
- ऑब्जेक्ट आईडी कैप्चर करें
- इस ऑब्जेक्ट के लिए ब्रश कैप्चर पोजिशन
बदले में निम्नलिखित में निम्नलिखित डेटा शामिल हैं:
- जोड़तोड़ के "ब्रश" की स्थिति और अभिविन्यास
- इस मुद्रा के लिए एक सफल हड़पने की अपेक्षित संभावना।
- जोड़तोड़ के प्रारंभिक दृष्टिकोण, जिसे वेक्टर की दिशा के रूप में परिभाषित किया गया है - दृष्टिकोण की न्यूनतम / वांछित दूरी
- कैप्चर के बाद मैनिपुलेटर का इंडेंटेशन, जिसे वेक्टर की दिशा के रूप में परिभाषित किया गया है - इंडेंटेशन की न्यूनतम दूरी
- अधिकतम मनोरंजक बल
इससे पहले कि सिस्टम कन्वेयर शुरू करता है, हमारी वस्तु को पकड़ने के लिए ब्रश की स्थिति के लिए संभावित विकल्प उत्पन्न करना आवश्यक है। हमारे मामले में, हम यह धारणा बनाते हैं कि सभी कैप्चर की गई वस्तुओं में एक आयताकार आकार होता है। तदनुसार, जब दो उंगलियों के रूप में कैप्चर करते हैं, तो हमारे पास विषय के विश्वसनीय कैप्चर के लिए केवल दो युग्मित विमान होते हैं, न कि ऊपर और नीचे की गिनती जिस पर विषय खड़ा होता है। इसके अनुसार, एक जोड़ी विमानों और दूसरे के लिए गोलार्द्धों के रूप में कब्जा करने की स्थिति उत्पन्न होती है।

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

1- प्रारंभिक स्थिति; 2- प्री-कैप्चर की स्थिति; 3 - स्थिति पर कब्जा;
कन्वेयर के निष्पादन के दौरान, आइटम को बढ़ाने के लिए अंतिम योजना में व्यक्तिगत प्रक्षेपवक्र को जोड़ा जाएगा। यदि कब्जा सफलतापूर्वक सभी चरणों से गुजरा, तभी योजना को लागू किया जा सकता है। सामान्य रूप से पाइपलाइन एल्गोरिथ्म इस तरह दिखता है:
- प्रक्षेपवक्र को प्रारंभिक स्थिति से प्री-कैप्चर बिंदु तक नियोजित किया जाता है। यदि हम रनवे पर एक हवाई जहाज के उतरने के साथ एक सादृश्य आकर्षित करते हैं, तो यह एक लैंडिंग दृष्टिकोण होगा।
- सभी पर्यावरणीय वस्तुओं को शुरू में टकराव मैट्रिक्स में शामिल किया गया था, जिसके बारे में हमने यहां लिखा था। हमारे कब्जा करने के लिए सफल होने के लिए, टक्कर की जांच अक्षम है। फिर पकड़ खुल जाती है।
- पूर्व-कैप्चर बिंदु से कैप्चर बिंदु तक ऑब्जेक्ट में मैनिपुलेटर के दृष्टिकोण के प्रक्षेपवक्र की गणना की जाती है।
- पकड़ बंद हो जाती है।
- कब्जा की गई वस्तु को अभी भी टकराव की वस्तु द्वारा दर्शाया जाता है ताकि यह अब कब्जा का हिस्सा हो और प्रक्षेपवक्र की योजना बनाते समय ध्यान में रखा जाए।
- फिर, इंडेंटेशन पथ को कैप्चर स्थिति से सतह पर ऑब्जेक्ट को फाड़ने और ऑब्जेक्ट को ऊपर उठाने के परिणाम को ठीक करने के लिए प्री-कैप्चर बिंदु पर उत्पन्न किया जाता है।
एक निर्माण योजना जिसमें सभी आवश्यक प्रक्षेप पथ शामिल हैं, अब पूरा हो सकता है।
जो अभी तक नहीं कहा गया है
जैसा कि हमने अपने प्रयोगों में प्रवेश किया, हमने अपनी स्वतंत्रता की प्रारंभिक चार डिग्री में दो और जोड़ने का फैसला किया। वीडियो और फोटो में उन्हें लाल रंग में दिखाया गया है। यह इस तथ्य के कारण है कि जब कांटा या एन्थ्रोपोमोर्फिक ब्रश के रूप में ग्रिपर का उपयोग किया जाता है, तो मैनिपुलेटर का अच्छा लचीलापन आवश्यक है। वैसे, यदि आप एक वैक्यूम सक्शन कप को एक पकड़ के रूप में उपयोग करते हैं, तो सब कुछ कुछ सरलीकृत होता है और स्वतंत्रता की 4 डिग्री पर्याप्त हो सकती है, क्योंकि कब्जा करने के लिए केवल एक विमान का उपयोग किया जाता है।
वास्तव में, कैप्चर करने की क्षमता काफी हद तक कैप्चर पदों की पीढ़ी पर निर्भर करती है: अधिक से अधिक विविधताएं उत्पन्न होती हैं, सबसे आसान यह इष्टतम चुनना होगा। हालाँकि, इस सिक्के का एक दूसरा हिस्सा है: जितने अधिक स्थान, उतने ही अधिक समय उन्हें संसाधित करने में लगेंगे। हमारे मामले में, हमने पहले 10, 34 स्थान, फिर 68, और फिर 136 उत्पन्न किया। सबसे अच्छा विकल्प जो हमें सूट करता था वह था 34 स्थान। न्यूनतम पदों की संख्या के साथ, मैनिप्युलेटर के लिए उत्पन्न मुद्रा में बनना काफी मुश्किल है, एक नियम के रूप में मैनिपुलेटर बस शारीरिक रूप से उस तक नहीं पहुंच सकता है: यह उस तरह से बाहर करने में सक्षम नहीं है, बहुत छोटा, बहुत लंबा, आदि। 34 में, सभी स्थितियों को पूरा करने वाले 2 से 5 पदों पर हैं।
वस्तु मान्यता
इन उद्देश्यों के लिए, हमने ROS नोड tabletop_object_detector का उपयोग करने का निर्णय लिया। यह ब्रिटिश कोलंबिया विश्वविद्यालय के वैज्ञानिकों द्वारा लागू किया गया था और पहले से ही खुद को स्थापित करने में कामयाब रहा है। हालांकि, मेरी राय में, एक प्रणाली का चुनाव सीधे उन स्थितियों पर निर्भर होना चाहिए जिसमें आप मान्यता को लागू करने जा रहे हैं और उन वस्तुओं को पहचानने की आवश्यकता है। हमारे मामले में, मान्यता वस्तुओं के आकार के अनुसार की जाती है, और यदि आपको टमाटर की कैन से खीरे के डिब्बे को अलग करने की आवश्यकता है, तो यह विधि काम नहीं करेगी। वस्तुओं की पहचान करने के लिए, Kinect से प्राप्त गहन कैमरा डेटा का उपयोग किया जाता है।
पहचानने से पहले, आपको सबसे पहले सिस्टम को प्रशिक्षित करने की आवश्यकता है - वांछित वस्तु का 3 डी मॉडल बनाने के लिए।

प्रिंगल्स के एक पैक का 3 डी मॉडल
उसके बाद, सिस्टम डेटाबेस में उपलब्ध मॉडल के साथ प्राप्त आंकड़ों की तुलना करता है।
मान्यता परिणाम इस तरह दिखता है:

जैसा कि अपेक्षित था, वस्तुओं की खोज की गति सीधे उस मशीन की शक्ति पर निर्भर करती है जिस पर डेटा संसाधित होता है। हमने इंटेल कोर 2 डुओ 1.8ghz और 3Gb रैम के साथ एक लैपटॉप का उपयोग किया है। इसके अलावा, वस्तुओं की पहचान में लगभग 1.5 - 2 सेकंड का समय लगा।
खैर, निश्चित रूप से, पर्यावरण से वस्तुओं को भेद करने और पहचानने में सक्षम होने के नाते, अब मैं उन्हें लेना और स्थानांतरित करना चाहता हूं। अगला कदम एक वास्तविक रोबोट पर मान्यता कार्यों और जोड़तोड़ नियंत्रण का एकीकरण होगा।