विषयसूची:

मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक: 9 कदम
मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक: 9 कदम

वीडियो: मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक: 9 कदम

वीडियो: मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक: 9 कदम
वीडियो: बोरवेल में बच्चा गिर गया - क्या रोबोट उसे निकाल पायेगा | Borewell Rescue Robot 2024, नवंबर
Anonim
Image
Image
मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक
मैटलैब-आधारित आरओएस रोबोटिक नियंत्रक

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

ROS एक उभरता हुआ ढांचा है जिसका उपयोग जटिल रोबोटिक्स सिस्टम विकसित करने के लिए किया जाता है। इसके अनुप्रयोगों में शामिल हैं: स्वचालित असेंबली सिस्टम, टेलीऑपरेशन, प्रोस्थेटिक आर्म्स और औद्योगिक क्षेत्र की भारी मशीनरी।

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

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

वीडियो-संपादन क्रेडिट: अम्मार अखेर, [email protected]. पर

आपूर्ति

परियोजना के लिए निम्नलिखित घटकों की आवश्यकता है:

(1) आरओएस पीसी / रोबोट

(२) राउटर

(3) MATLAB के साथ पीसी (संस्करण: 2014 या इसके बाद के संस्करण)

चरण 1: सब कुछ सेटअप प्राप्त करना

सब कुछ सेटअप प्राप्त करना
सब कुछ सेटअप प्राप्त करना

इस निर्देश के लिए, मैं अपने लिनक्स पीसी और रोस-काइनेटिक के लिए उबंटू 16.04 का उपयोग कर रहा हूं, इसलिए भ्रम से बचने के लिए मैं रोस काइनेटिक और उबंटू 16.04 का उपयोग करने की सलाह देता हूं क्योंकि इसमें रोस-काइनेटिक के लिए सबसे अच्छा समर्थन है। रोस काइनेटिक कैसे स्थापित करें, इस बारे में अधिक जानकारी के लिए https://wiki.ros.org/kinetic/Installation/Ubuntu पर जाएं। MATLAB के लिए आप या तो लाइसेंस खरीदते हैं या यहां से एक ट्रेल संस्करण डाउनलोड करते हैं।

चरण 2: यह समझना कि नियंत्रक कैसे काम करता है

यह समझना कि नियंत्रक कैसे काम करता है
यह समझना कि नियंत्रक कैसे काम करता है

एक पीसी MATLAB पर रोबोटिक नियंत्रक चलाता है। नियंत्रक आईपी पते और रोस पीसी/रोबोट के बंदरगाह को लेता है।

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

चरण 3: एक ROS-MATLAB इंटरफ़ेस बनाना

एक ROS-MATLAB इंटरफ़ेस बनाना
एक ROS-MATLAB इंटरफ़ेस बनाना
एक ROS-MATLAB इंटरफ़ेस बनाना
एक ROS-MATLAB इंटरफ़ेस बनाना
एक ROS-MATLAB इंटरफ़ेस बनाना
एक ROS-MATLAB इंटरफ़ेस बनाना

ROS-MATLABInterface MATLAB में अपने रोबोट एल्गोरिदम को प्रोटोटाइप करने और ROS-संगत रोबोट पर परीक्षण करने के लिए शोधकर्ताओं और छात्रों के लिए एक उपयोगी इंटरफ़ेस है। यह इंटरफ़ेस मैटलैब में रोबोटिक्स सिस्टम टूलबॉक्स द्वारा बनाया जा सकता है और हम अपने एल्गोरिथ्म को प्रोटोटाइप कर सकते हैं और इसका परीक्षण कर सकते हैं एक ROS-सक्षम रोबोट या रोबोट सिमुलेटर जैसे Gazebo और V-REP में।

अपने MATLAB पर रोबोटिक्स सिस्टम टूलबॉक्स स्थापित करने के लिए, बस टूलबार पर ऐड-ऑन विकल्प पर जाएं और ऐड-ऑन एक्सप्लोरर में रोबोटिक टूलबॉक्स खोजें। रोबोटिक टूलबॉक्स का उपयोग करके हम किसी विषय को प्रकाशित या सब्सक्राइब कर सकते हैं, जैसे कि ROS नोड, और हम इसे ROS मास्टर बना सकते हैं। MATLAB-ROS इंटरफ़ेस में अधिकांश ROS फ़ंक्शंस हैं जिनकी आपको अपनी परियोजनाओं के लिए आवश्यकता हो सकती है।

चरण 4: आईपी पता प्राप्त करना

IP पता प्राप्त करना
IP पता प्राप्त करना
IP पता प्राप्त करना
IP पता प्राप्त करना

नियंत्रक के काम करने के लिए यह जरूरी है कि आप अपने ROS रोबोट/पीसी का आईपी पता और MATLAB पर नियंत्रक चलाने वाले पीसी को जानते हों।

अपने पीसी का आईपी प्राप्त करने के लिए:

विंडोज़ पर:

कमांड प्रॉम्प्ट खोलें और ipconfig कमांड टाइप करें और IPv4 एड्रेस नोट करें

लिनक्स के लिए:

ifconfig कमांड टाइप करें और इनसेट एड्रेस नोट कर लें। अब जब आपके पास आईपी पता है, तो जीयूआई बनाने का समय आ गया है …

चरण 5: नियंत्रक के लिए एक GUI बनाएँ

नियंत्रक के लिए एक GUI बनाएँ
नियंत्रक के लिए एक GUI बनाएँ
नियंत्रक के लिए एक GUI बनाएँ
नियंत्रक के लिए एक GUI बनाएँ
नियंत्रक के लिए एक GUI बनाएँ
नियंत्रक के लिए एक GUI बनाएँ

GUI बनाने के लिए, MATLAB खोलें और कमांड विंडो में गाइड टाइप करें। यह गाइड ऐप को खोलेगा, हालांकि हम अपना GUI बना रहे होंगे। आप अपने GUI को डिज़ाइन करने के लिए MATLAB पर ऐप डिज़ाइनर का भी उपयोग कर सकते हैं।

हम कुल 9 बटन बनाएंगे (जैसा कि अंजीर में दिखाया गया है):

6 पुश-बटन: फॉरवर्ड, बैकवर्ड, लेफ्ट, राइट, कनेक्ट टू रोबोट, डिस्कनेक्ट

3 संपादन योग्य-बटन: रोस पीसी आईपी, पोर्ट और विषय का नाम।

संपादन योग्य-बटन वे बटन हैं जो आरओएस पीसी के आईपी, इसके पोर्ट और इनपुट के रूप में विषय का नाम लेंगे। विषय का नाम वह है जिसके माध्यम से MATLAB नियंत्रक और ROS रोबोट/पीसी संचार करते हैं। संपादन योग्य बटन पर स्ट्रिंग को संपादित करने के लिए, बटन पर राइट-क्लिक करें >> इंस्पेक्टर गुण >> स्ट्रिंग पर जाएं और बटन के टेक्स्ट को संपादित करें।

एक बार आपका GUI पूरा हो जाने के बाद, आप बटनों को प्रोग्राम कर सकते हैं। यहीं से शुरू होता है असली मजा…

चरण 6: GUI संपादन योग्य बटनों की प्रोग्रामिंग

GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग
GUI संपादन योग्य बटनों की प्रोग्रामिंग

GUI को.fig फ़ाइल के रूप में सहेजा जाता है लेकिन कोड/कॉलबैक फ़ंक्शन.m प्रारूप में सहेजे जाते हैं।.m फ़ाइल में आपके सभी बटनों के लिए कोड होता है। अपने बटनों में कॉल-बैक फ़ंक्शन जोड़ने के लिए, बटन पर राइट-क्लिक करें > >कॉलबैक देखें>>कॉलबैक। यह आपके GUI के लिए.m फ़ाइल खोलेगा जहाँ उस विशेष बटन को परिभाषित किया गया है।

पहला कॉलबैक जिसे हम कोड करने जा रहे हैं वह ROS IP संपादन योग्य बटन के लिए है। फंक्शन एडिट1_कॉलबैक के तहत निम्नलिखित कोड लिखें:

फ़ंक्शन संपादित करें 1_कॉलबैक (एचओब्जेक्ट, इवेंटडेटा, हैंडल)

वैश्विक ros_master_ip

ros_master_ip = प्राप्त करें (hObject, 'स्ट्रिंग')

यहां फ़ंक्शन को एडिट1_कॉलबैक के रूप में परिभाषित किया गया है, जो पहले संपादन योग्य बटन की बात कर रहा है। जब हम इस संपादन योग्य बटन में आरओएस नेटवर्क से एक आईपी पता दर्ज करते हैं, तो यह आईपी-पते को एक वैश्विक चर में एक स्ट्रिंग के रूप में संग्रहीत करेगा जिसे ros_master_ip कहा जाता है।

फिर बस _OpeningFcn(hObject, eventdata, handles, varargin) के तहत निम्नलिखित को परिभाषित करें (अंजीर देखें):

वैश्विक ros_master_ip

वैश्विक रोस_मास्टर_पोर्ट

वैश्विक teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

आपने विश्व स्तर पर ros-pc ip (ros_master_ip), port (ros_master_port) और Teleop Topic नाम को हार्ड-कोड किया है। यह क्या करता है कि यदि आप संपादन योग्य बटनों को खाली छोड़ देते हैं, तो आपके कनेक्ट होने पर इन पूर्व-निर्धारित मानों का उपयोग किया जाएगा।

अगला कॉलबैक जिसे हम कोड करने जा रहे हैं वह पोर्ट संपादन योग्य बटन के लिए है।

फंक्शन एडिट2_कॉलबैक के तहत निम्नलिखित कोड लिखें:

फ़ंक्शन संपादित करें 2_कॉलबैक (एचओब्जेक्ट, इवेंटडेटा, हैंडल)

वैश्विक रोस_मास्टर_पोर्ट

ros_master_port = प्राप्त करें (hObject, 'स्ट्रिंग')

यहां फ़ंक्शन को edit2_Callback के रूप में परिभाषित किया गया है, जो दूसरे संपादन योग्य बटन की बात कर रहा है। जब हम इस संपादन योग्य बटन में ROS नेटवर्क से ros pc/robot के पोर्ट में प्रवेश करते हैं, तो यह पोर्ट को ros_master_port नामक वैश्विक चर में एक स्ट्रिंग के रूप में संग्रहीत करेगा।

इसी तरह अगला कॉलबैक जिसे हम कोड करने जा रहे हैं वह विषय नाम संपादन योग्य बटन के लिए है।

फंक्शन एडिट3_कॉलबैक के तहत निम्नलिखित कोड लिखें:

फ़ंक्शन संपादित करें3_कॉलबैक (एचओब्जेक्ट, इवेंटडेटा, हैंडल)

वैश्विक teleop_topic_name

teleop_topic_name = प्राप्त करें (hObject, 'स्ट्रिंग')

Ros_master_port के समान, यह भी वैश्विक चर में स्ट्रिंग के रूप में संग्रहीत है।

आगे हम पुश बटन के लिए कॉल-बैक फ़ंक्शन को देखने जा रहे हैं…

चरण 7: जीयूआई पुश बटन प्रोग्रामिंग

जीयूआई पुश बटन प्रोग्रामिंग
जीयूआई पुश बटन प्रोग्रामिंग
जीयूआई पुश बटन प्रोग्रामिंग
जीयूआई पुश बटन प्रोग्रामिंग

हमारे द्वारा पहले बनाए गए पुश बटन वे हैं जिनका उपयोग हम नियंत्रक से रोबोट को स्थानांतरित करने, कनेक्ट करने और डिस्कनेक्ट करने के लिए करेंगे। पुश बटन कॉलबैक को निम्नानुसार परिभाषित किया गया है:

उदाहरण के लिए फ़ंक्शन pushbutton6_Callback (hObject, इवेंटडेटा, हैंडल)

नोट: जिस क्रम में आपने अपने पुश बटन बनाए हैं, उसके आधार पर उन्हें उसी के अनुसार क्रमांकित किया जाएगा। इसलिए मेरी.m फाइल में फंक्शन pushbutton6 फॉरवर्ड के लिए हो सकता है जबकि आपकी.m फाइल में यह बैकवर्ड के लिए हो सकता है इसलिए इसे ध्यान में रखें। यह जानने के लिए कि आपके पुश बटन के लिए कौन सा सटीक कार्य है, बस राइट-क्लिक करें >> कॉलबैक देखें >> कॉलबैक और यह आपके पुशबटन के लिए फ़ंक्शन को खोल देगा लेकिन इस निर्देश के लिए मैं मान रहा हूं कि यह मेरे जैसा ही है।

रोबोट से कनेक्ट करें बटन के लिए:

समारोह के तहत pushbutton6_Callback(hObject, eventdata, handles):

समारोह pushbutton6_Callback(hObject, eventdata, handles) global ros_master_ip

वैश्विक रोस_मास्टर_पोर्ट

वैश्विक teleop_topic_name

वैश्विक रोबोट

ग्लोबल वेल्म्सजी

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

सेटेनव ('ROS_MASTER_URI', ros_master_uri)

रोसिनिट

रोबोट = rospublisher (teleop_topic_name, 'ज्यामिति_msgs/ट्विस्ट');

velmsg = रोज़मैसेज (रोबोट);

यह कॉलबैक ros_master_ip और पोर्ट को जोड़कर ROS_MASTER_URI वैरिएबल सेट करेगा। फिर rosinit कमांड कनेक्शन को इनिशियलाइज़ करेगा। कनेक्ट करने के बाद, यह ज्योमेट्री_एमएसजीएस/ट्विस्ट का एक प्रकाशक बनाएगा, जिसका उपयोग कमांड वेलोसिटी भेजने के लिए किया जाएगा। विषय का नाम वह नाम है जो हम संपादन बॉक्स में देते हैं। एक बार कनेक्शन सफल हो जाने पर, हम फॉरवर्ड, बैकवर्ड, लेफ्ट, राइट पुश बटन को संचालित करने में सक्षम होंगे।

फॉरवर्ड, बैकवर्ड पुश बटन में कॉलबैक जोड़ने से पहले, हमें रैखिक और कोणीय वेग की गति को आरंभ करने की आवश्यकता है।

इसलिए नीचे _OpeningFcn(hObject, eventdata, handles, varargin) निम्नलिखित को परिभाषित करें (अंजीर देखें):

वैश्विक लेफ्ट_स्पिनवेलोसिटी ग्लोबल राइट_स्पिनवेलोसिटी

वैश्विक आगे वेग

वैश्विक पिछड़ा वेग

लेफ्ट_स्पिन वेलोसिटी = 2;

राइट_स्पिन वेलोसिटी = -2;

आगे वेग = ३;

पिछड़ा वेग = -3;

नोट: सभी वेग rad/s. में हैं

अब जब वैश्विक चर परिभाषित हो गए हैं तो चलिए मोशन पुशबटन को प्रोग्राम करते हैं।

फॉरवर्ड पुशबटन के लिए:

समारोह pushbutton4_Callback(hObject, eventdata, handles) global velmsg

वैश्विक रोबोट

वैश्विक teleop_topic_name

वैश्विक आगे वेग

velmsg. Angular. Z = 0;

velmsg. Linear. X = आगे वेग;

भेजें (रोबोट, वेलम्सजी);

लैचपब = रोसपब्लिशर (teleop_topic_name, 'IsLatching', सच);

इसी तरह बैकवर्ड पुशबटन के लिए:

फ़ंक्शन पुशबटन 5_कॉलबैक (एचओब्जेक्ट, इवेंटडेटा, हैंडल)

ग्लोबल वेल्म्सजी

वैश्विक रोबोट

वैश्विक पिछड़ा वेग

वैश्विक teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = पिछड़ा वेग;

भेजें (रोबोट, वेलम्सजी);

लैचपब = रोसपब्लिशर (teleop_topic_name, 'IsLatching', सच);

इसी तरह लेफ्ट पुशबटन के लिए: फ़ंक्शन pushbutton3_Callback(hObject, इवेंटडेटा, हैंडल)

ग्लोबल वेलम्सग्लोबल रोबोट ग्लोबल लेफ्ट_स्पिन वेलोसिटी

वैश्विक teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

भेजें (रोबोट, वेलम्सजी);

लैचपब = रोसपब्लिशर (teleop_topic_name, 'IsLatching', सच);

इसी तरह राइट पुशबटन के लिए:

ग्लोबल वेलम्सग्लोबल रोबोट

ग्लोबल राइट_स्पिनवेलोसिटी

वैश्विक teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

भेजें (रोबोट, वेलम्सजी);

लैचपब = रोसपब्लिशर (teleop_topic_name, 'IsLatching', सच);

एक बार जब सभी कॉलबैक फ़ंक्शन जोड़ दिए जाते हैं और फ़ाइलें सहेज ली जाती हैं, तो हम अपने नियंत्रक का परीक्षण कर सकते हैं।

चरण 8: आरओएस पीसी (लिनक्स) पर नेटवर्क कॉन्फ़िगरेशन सेट करना

आरओएस पीसी (लिनक्स) पर नेटवर्क कॉन्फ़िगरेशन सेट करना
आरओएस पीसी (लिनक्स) पर नेटवर्क कॉन्फ़िगरेशन सेट करना
आरओएस पीसी (लिनक्स) पर नेटवर्क कॉन्फ़िगरेशन सेट करना
आरओएस पीसी (लिनक्स) पर नेटवर्क कॉन्फ़िगरेशन सेट करना

हम एक रोस पीसी (लिनक्स) पर नियंत्रक का परीक्षण करेंगे, जिसके लिए नेटवर्क कॉन्फ़िगरेशन की स्थापना की आवश्यकता होगी। यदि आप एक लिनक्स पीसी पर भी नियंत्रक चला रहे हैं, तो आपको वहां नेटवर्क कॉन्फ़िगरेशन भी सेट करना होगा।

नेटवर्क विन्यास:

अपनी टर्मिनल विंडो खोलें और टाइप करें gedit.bashrc

फ़ाइल खुलने के बाद निम्नलिखित जोड़ें:

#रोबोट मशीन विन्यास

निर्यात ROS_MASTER_URI=https://localhost:11311

# ROS मास्टर नोड का IP पता

निर्यात ROS_HOSTNAME=

निर्यात ROS_IP=

गूंज "ROS_HOSTNAME:" $ROS_HOSTNAME

गूंज "ROS_IP:"$ROS_IP

गूंज "ROS_MASTER_URI:"$ROS_MASTER_URI

डायनेमिक आईपी असाइनमेंट के कारण आपको हर बार इस स्टेप को फॉलो करना होगा।

चरण 9: नियंत्रक चलाएँ

नियंत्रक चलाएँ
नियंत्रक चलाएँ

हम गज़ेबो में एक कछुए बॉट पर अपने नियंत्रक का परीक्षण करने जा रहे हैं।

गज़ेबो स्थापित करने के लिए, कृपया https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install देखें

कछुआ बॉट स्थापित करने के लिए, कृपया देखें

वह फोल्डर खोलें जहां आपने MATLAB पर अपनी.fig और.m फाइलें सेव की थीं और रन दबाएं (जैसा कि चित्र में दिखाया गया है)। इससे पीसी पर कंट्रोलर खुल जाएगा। कनेक्ट को दबाने से पहले, सुनिश्चित करें कि आपका टर्टल बॉट सिम्युलेटर काम कर रहा है।

अपने टर्टलबॉट सिमुलेशन का परीक्षण करने के लिए:

रोस पीसी पर टर्मिनल खोलें और टाइप करें: $ roslaunch टर्टलबोट_गज़ेबो टर्टलबोट_वर्ल्ड.लॉन्च। यह उस पीसी पर टर्टलबोट का अनुकरण खोलेगा। टर्टलबॉट का विषय नाम /cmd_vel_mux/input/teleop है, जिसे हमने पहले ही एप्लिकेशन में प्रदान किया है। संपादन योग्य बटन में रोस पीसी आईपी पता, पोर्ट और विषय का नाम टाइप करें और रोबोट बटन से कनेक्ट करें दबाएं। जब आप फॉरवर्ड, बैकवर्ड आदि दबाते हैं तो आपका टर्टल बॉट हिलना शुरू कर देना चाहिए।

रैखिक और कोणीय वेग देखने के लिए:

एक नया टर्मिनल खोलें और कमांड टाइप करें: $ rostopic echo /cmd_vel_mux/input/teleop

और वहां आपके पास, आपका अपना मैटलैब-आधारित आरओएस रोबोटिक कंट्रोलर है। अगर आपको मेरा निर्देश पसंद आया हो तो कृपया इसे पहली बार लेखक प्रतियोगिता में वोट दें और इसे अधिक से अधिक लोगों के साथ साझा करें। धन्यवाद।

सिफारिश की: