विषयसूची:

जेटसन नैनो क्वाड्रुप्ड रोबोट ऑब्जेक्ट डिटेक्शन ट्यूटोरियल: 4 कदम
जेटसन नैनो क्वाड्रुप्ड रोबोट ऑब्जेक्ट डिटेक्शन ट्यूटोरियल: 4 कदम

वीडियो: जेटसन नैनो क्वाड्रुप्ड रोबोट ऑब्जेक्ट डिटेक्शन ट्यूटोरियल: 4 कदम

वीडियो: जेटसन नैनो क्वाड्रुप्ड रोबोट ऑब्जेक्ट डिटेक्शन ट्यूटोरियल: 4 कदम
वीडियो: Hiwonder PuppyPi Quadruped Robot with AI Vision Powered by Raspberry Pi ROS Open Source Robot Dog 2024, नवंबर
Anonim
Image
Image

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

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

हालाँकि मुझे खुद एक परियोजना के रूप में जेटबॉट के साथ कुछ समस्याएँ थीं:

1) यह मेरे लिए पर्याप्त महाकाव्य नहीं था। जेटसन नैनो महान प्रसंस्करण क्षमताओं वाला एक बहुत ही दिलचस्प बोर्ड है और इसके साथ एक साधारण पहिएदार रोबोट बनाना एक बहुत ही … भारी काम जैसा लग रहा था।

2) हार्डवेयर विकल्प। जेटबॉट को कुछ ऐसे हार्डवेयर की आवश्यकता होती है जो महंगे हैं/अन्य विकल्पों के साथ बदले जा सकते हैं - उदाहरण के लिए वे टेलीऑपरेशन के लिए जॉयस्टिक का उपयोग करते हैं। मजेदार लगता है, लेकिन क्या मुझे रोबोट को नियंत्रित करने के लिए वास्तव में जॉयस्टिक की आवश्यकता है?

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

चरण 1: अपना हार्डवेयर तैयार करें

अपना हार्डवेयर तैयार करें
अपना हार्डवेयर तैयार करें

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

मैंने नियमित USB रास्पबेरी पाई संगत वेब-कैम और एक Wifi USB डोंगल का उपयोग किया।

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

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

अगर (सीरियल.उपलब्ध ()) {स्विच (सीरियल.रीड ()) {

{

मामला एक':

आगे();

टूटना;

मामला '2':

वापस();

टूटना;

मामला '3':

दांए मुड़िए();

टूटना;

मामला '4':

बांए मुड़िए();

टूटना;

हम जांचते हैं कि क्या डेटा उपलब्ध है, और यदि यह है, तो इसे स्विच-केस नियंत्रण संरचना में पास करें। ध्यान दें, कि सीरियल से डेटा पात्रों के रूप में आता है, संख्या 1, 2, 3, 4 के आसपास एकल उद्धरण चिह्न पर ध्यान दें।

चरण 2: आवश्यक पैकेज स्थापित करें

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

यदि आप शेष सभी कार्य दूरस्थ रूप से करना चाहते हैं, तो SSH को सक्षम करके प्रारंभ करें।

सुडो उपयुक्त अद्यतन

sudo apt ओपनश-सर्वर स्थापित करें

SSH सर्वर अपने आप शुरू हो जाएगा।

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

ssh उपयोगकर्ता नाम@ip_address

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

आइए छवि हेरफेर के लिए पायथन पैकेज मैनेजर (पाइप) और पिलो को स्थापित करके शुरू करें।

sudo apt python3-pip python3-pil. स्थापित करें

फिर हम Jetbot रिपॉजिटरी स्थापित करेंगे, क्योंकि हम ऑब्जेक्ट डिटेक्शन करने के लिए इसके ढांचे के कुछ हिस्सों पर निर्भर हैं।

sudo apt स्थापित python3-smbus python-pyserial

गिट क्लोन

सीडी जेटबोट

sudo apt-cmake स्थापित करें

sudo python3 setup.py install

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

गिट क्लोन

सीडी

sudo pip3 इंस्टॉल-आर आवश्यकताएं-ओपनसीवी

इस लिंक से पहले से प्रशिक्षित एसएसडी (सिंगल शॉट डिटेक्टर) मॉडल डाउनलोड करें और इसे जेटस्पाइडर_डेमोस फ़ोल्डर में रखें।

अब हम जाने के लिए अच्छे हैं!

चरण 3: कोड चलाएँ

कोड चलाएँ
कोड चलाएँ

मैंने जेटस्पाइडर के लिए दो डेमो बनाए, पहला एक साधारण टेलीप्रेशन है, जो मैंने पहले बनाना पाई रोवर के लिए बनाया था और दूसरा ऑब्जेक्ट डिटेक्शन के लिए TensorRT का उपयोग करता है और माइक्रोकंट्रोलर को सीरियल कनेक्शन पर मूवमेंट कमांड भेजता है।.

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

निम्नलिखित ऑब्जेक्ट के लिए मुख्य स्क्रिप्ट जेटस्पाइडर_ऑब्जेक्ट_फॉलोइंग में object_following.py है, टेलीऑपरेशन के लिए जेटस्पाइडर_टेलीऑपरेशन में स्पाइडर_टेलोप.py है।

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

app.run (होस्ट = '0.0.0.0', थ्रेडेड = ट्रू)

जैसे ही हम अपने वेब ब्राउजर में 0.0.0.0 (लोकलहोस्ट) एड्रेस या नेटवर्क पर जेटसन नैनो एड्रेस खोलते हैं (ifconfig कमांड से चेक कर सकते हैं), यह फंक्शन एक्जीक्यूट हो जाएगा।

डीईएफ़ इंडेक्स ():

यह वेब पेज टेम्पलेट को प्रस्तुत करता है जो हमारे पास टेम्प्लेट फ़ोल्डर में है। टेम्प्लेट में वीडियो स्रोत एम्बेड किया गया है, इसलिए एक बार लोड होने के बाद, def video_feed(): निष्पादित किया जाएगा, जो एक प्रतिक्रिया ऑब्जेक्ट देता है जिसे जनरेटर फ़ंक्शन के साथ प्रारंभ किया जाता है।

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

def gen(): फंक्शन में हम जेनरेटर फंक्शन को एक इनफिनिट लूप में लागू करते हैं जो इमेज को कैप्चर करता है, इसे def execute(img) फंक्शन में भेजता है, इसके बाद वेब पेज पर इमेज को यील्ड करता है।

def execute(img): फ़ंक्शन वह जगह है जहां सभी जादू होता है, यह एक छवि लेता है, इसे ओपनसीवी के साथ बदलता है और इसे जेटबॉट ऑब्जेक्ट डिटेक्टर क्लास इंस्टेंस "मॉडल" में भेजता है। यह डिटेक्शन की सूची लौटाता है और हम OpenCV का उपयोग उनके चारों ओर नीली आयत बनाने के लिए करते हैं और ऑब्जेक्ट डिटेक्टेड क्लास के साथ एनोटेशन लिखते हैं। उसके बाद हम जांचते हैं कि क्या हमारी रुचि की कोई वस्तु है डिटेक्टमैचिंग_डिटेक्शन = [डी फॉर डी इन डिटेक्शन [0] अगर डी ['लेबल'] == 53]

यदि आप चाहते हैं कि आपका रोबोट अन्य वस्तुओं का अनुसरण करे, तो आप उस नंबर (53) को CoCo डेटासेट से अन्य नंबर में बदल सकते हैं, 53 एक सेब है। पूरी सूची category.py फ़ाइल में है।

अंत में अगर 5 सेकंड के लिए कोई वस्तु नहीं मिली है तो हम धारावाहिक पर रोबोट को रोकने के लिए वर्ण "5" प्रसारित करते हैं। यदि वस्तु पाई जाती है तो हम गणना करते हैं कि यह छवि के केंद्र से कितनी दूर है और तदनुसार कार्य करें (यदि केंद्र के करीब है, तो सीधे जाएं (धारावाहिक पर वर्ण "1"), यदि बाईं ओर है, तो बाएं जाएं, आदि)। आप अपने विशेष सेटअप के लिए सर्वश्रेष्ठ निर्धारित करने के लिए उन मूल्यों के साथ खेल सकते हैं!

चरण 4: अंतिम विचार

अंतिम विचार
अंतिम विचार

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

आप यहां एनवीडिया जेटबॉट ऑब्जेक्ट डिटेक्शन नोटबुक भी देख सकते हैं।

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

यदि आपका कोई प्रश्न है तो मुझे LinkedId पर जोड़ें और मशीन लर्निंग और रोबोटिक्स से संबंधित अधिक दिलचस्प परियोजनाओं के बारे में सूचित करने के लिए मेरे YouTube चैनल को सब्सक्राइब करें।

सिफारिश की: