क्या हमें रोबोट अनुसंधान / अनुप्रयोग के लिए आरओएस का निर्माण करना है? मुख्य लाभ क्या है? आरओएस कब या किन स्थितियों में अनिवार्य है?
क्या हमें रोबोट अनुसंधान / अनुप्रयोग के लिए आरओएस का निर्माण करना है? मुख्य लाभ क्या है? आरओएस कब या किन स्थितियों में अनिवार्य है?
जवाबों:
मैं कंप्यूटर पर वापस आ गया हूँ!
जैसा कि मैंने इस टिप्पणी में कहा है , आरओएस आमतौर पर अनिवार्य नहीं है। आरओएस कई लोगों के बीच एक मंच है, जो ज्यादातर विलो गैराज के कारण कुछ समय में मुफ्त रोबोट देने के लिए प्रसिद्ध है, जिसने भी सबसे अधिक आरओएस मॉड्यूल लिखा था। यह कहा, यह सबसे अच्छा मंच संभव नहीं है, और निश्चित रूप से पीढ़ी विशेष कुछ भी नहीं है। विशेष रूप से, उक्त प्रतियोगिता में कम-गुणवत्ता वाले मॉड्यूलों की संख्या अधिक थी, जिससे कि संख्या अधिक हो।
समय के साथ, ROS मॉड्यूल की गुणवत्ता बेहतर हो गई है और उनमें से बहुत सारे भी हैं। आरओएस का उपयोग करना, इसलिए आपके पास पहले से किए गए बहुत से पुन: उपयोग का लाभ है। आप यहां कुछ कारणों को पढ़ सकते हैं कि आप ROS का उपयोग क्यों करना चाहते हैं।
इसे ध्यान में रखते हुए, आपको साइड इफेक्ट के लिए भी देखना चाहिए।
आरओएस के साथ, आपके पास कई नोड्स हैं जो नेटवर्क के माध्यम से एक दूसरे के साथ बात करते हैं। यह कभी-कभी अच्छा और आसान होता है, लेकिन आम तौर पर संदेशों के स्वागत में बेतहाशा भिन्नता होती है। नतीजतन, आपको यह सुनिश्चित करने के लिए एक बड़ा नियंत्रण विलंब करना होगा कि सभी संदेश आने का मतलब है, जिसका अर्थ है कि आप घटनाओं पर तेजी से प्रतिक्रिया नहीं कर सकते हैं, जिसका अर्थ है कि आपको अपने रोबोट को धीमी गति से स्थानांतरित करना है ताकि उन घटनाओं को याद न करें।
मानो या न मानो, लोग वास्तव में ROS ( MoveIt! घटकों के प्रासंगिक सेट का नाम है) के माध्यम से रोबोट नियंत्रण करते हैं । धीरे। असुरक्षित। लेकिन आसान!
वितरित नहीं होने पर भी, ROS एक वास्तविक समय का प्लेटफ़ॉर्म नहीं है। इसका मतलब है कि आप किसी भी समय अपने कार्यों को शेड्यूल करने के लिए लिनक्स कर्नेल के पूर्ण विवेक पर हैं जो इसे फिट देखता है। यह कुछ अनुप्रयोगों के लिए ठीक है, लेकिन दूसरों के लिए ठीक नहीं है। इसलिए आपको अपनी आवश्यकताओं को देखने की जरूरत है। क्या आपको इस बात की गारंटी है कि आपका काम एक ज्ञात समय सीमा के भीतर पूरा होगा? यदि हां, तो आपको एक वास्तविक समय प्रणाली की आवश्यकता है।
एक अन्य बिंदु पर विचार करना है, जबकि ROS संचार का एक सामान्य प्रोटोकॉल है, यह अनिवार्य रूप से केवल होस्ट किए गए वातावरण के लिए समर्थित है। होस्ट किए गए का अर्थ है कोड एक कर्नेल के ऊपर चलता है, जैसा कि फ्रीस्टैंडिंग के विपरीत होता है जिसका अर्थ है कि कोड सीधे हार्डवेयर को नियंत्रित करता है (जैसे, एक माइक्रोकंट्रोलर पर)।
यदि आपके रोबोटिक्स एप्लिकेशन को हार्डवेयर के करीब चलाया जाता है, और इसलिए आपको एक ऐसे कार्यक्रम की आवश्यकता होगी जो एक माइक्रोकंट्रोलर पर चलता हो, तो आरओएस आपकी कोई मदद नहीं करता है।
पिछले नहीं बल्कि कम से कम, एक मंच लॉक-इन में आरओएस परिणामों के लिए विकसित करना। इसका मतलब यह है कि यदि भविष्य में, एक कारण या किसी अन्य के लिए, आप अपने काम को अन्य रोबोट प्लेटफॉर्म, जैसे OROCOS, YARP, इत्यादि पर आधारित करने का निर्णय लेते हैं, तो यह अच्छा होगा।
आप कुछ हद तक लिनक्स पर भी बंद होंगे। लिनक्स सबसे अच्छा है, इसमें कोई संदेह नहीं है, लेकिन एक दिन आप किसी अन्य प्रणाली, जैसे कि QNX, VxWorks आदि का समर्थन करने के लिए समाप्त हो सकते हैं, और आपको वहां भी समस्याएं होंगी।
यदि आप माइक्रोकंट्रोलर के लिए लिख रहे हैं, तो आरओएस के बारे में भूल जाएं। यदि आप उच्च-स्तरीय मॉड्यूल लिख रहे हैं, तो मैं अत्यधिक पोर्टेबल कोड लिखने की सलाह देता हूं। उदाहरण के लिए, मान लें कि आपने एक नया सेंसर विकसित किया है, और आप एक ऐसा मॉड्यूल लिखना चाहते हैं जो इस सेंसर से डेटा प्राप्त करता है, जो आपके कंप्यूटर से CAN बस के माध्यम से जुड़ा होता है।
इस स्थिति में आप क्या कर सकते हैं एक स्वतंत्र पुस्तकालय लिखना है, ऐसे कार्यों के साथ जो आपके सेंसर के साथ काम करने और डेटा प्राप्त करने में सक्षम हैं। तुम भी पुस्तकालय में एक धागा पैदा करने के बारे में सोच सकते हैं जो समय-समय पर डेटा को प्राप्त करता है और संलग्न करता है।
एक बार जब आपके पास यह सहायक पुस्तकालय होता है, तो आप CLI, GUI, ROS मॉड्यूल, OROCOS मॉड्यूल, YARP मॉड्यूल, Matlab से कनेक्ट करने के लिए, या जो भी आप अपने सेंसर के साथ बातचीत करने के लिए उपयोग करना चाहते हैं, लिखने के लिए स्वतंत्र हैं।
अंतिम नोट: मैंने जो यहां कहा है वह आम तौर पर सभी रोबोटिक्स प्लेटफार्मों पर लागू होता है और केवल आरओएस पर नहीं।
"आरओएस" एक सापेक्ष शब्द है, एपीएम पूर्ण रूप से कस्टम कोड चलाता है जिसे विशेष रूप से क्वाड्रोकोप्टर नियंत्रण के लिए डिज़ाइन किया गया है, जहां एक कस्टम आरओएस दुर्घटनाग्रस्त होने से बचाने के लिए वांछनीय हो सकता है, दूसरी ओर नवियो + लिनक्स कर्नेल पर चलता है और ऑटोपायलट के अलावा अन्य कोड चलाता है। और फिर भी दुर्घटनाग्रस्त होने से बचाए रखता है। अधिकांश आरओएस वास्तव में मौजूदा ओएस के शीर्ष पर फ़ंक्शंस का एक सेट हैं, जो जमीन से ऊपर एक ओएस लिखने के विपरीत हैं। किसी भी चीज़ के साथ, यह निर्भर करता है।
डिस्क्लेमर: यह उत्तर किसी भी तरह से शाहबाज़ की पोस्ट की प्रतिक्रिया है, इसलिए इसमें प्रो-रॉस पूर्वाग्रह है।
मुझे नहीं लगता है कि आरओएस अनिवार्य है, लेकिन यह एक महान शुरुआती बिंदु है और निवेश करने का समय है। यह विलो गैराज के भीतर शुरू हुआ, लेकिन यह कंपनी गायब हो गई और आरओएस अभी भी जीवित है, उपयोग और विकसित है। आरओएस का अधिकांश हिस्सा पूरी तरह से खुला स्रोत है और व्यावसायिक रूप से उपयोग करने योग्य भी है, इसलिए कोई रास्ता नहीं है कि आरओएस बस गायब हो जाए अगर कोई कंपनी इसमें रुचि नहीं ले रही है। पाठ्यक्रम के कोड की गुणवत्ता मुख्य मॉड्यूल और अत्याधुनिक एल्गोरिदम के कार्यान्वयन के बीच भिन्न होती है जो कुछ पीएचडी छात्र अपने पेपर के साथ प्रकाशित करते हैं।
आरओएस औद्योगिक सेटिंग्स में अधिक से अधिक गति उठा रहा है (मुझे आश्चर्य होगा कि अगर दुनिया भर में रोबोटिक्स स्टार्टअप का एक महत्वपूर्ण हिस्सा है जो आरओएस का उपयोग नहीं करते हैं)। कुछ एल्गोरिदम आरओ-औद्योगिक कंसोर्टियम द्वारा आगे बनाए रखा और विकसित किया जा रहा है, यदि आप सदस्यों पर एक नज़र रखते हैं, तो यह एक अच्छी शर्त है कि आरओएस उद्योग में एक मानक बनने जा रहा है:
http://rosindustrial.org/ric/current-members/
आरओएस का उपयोग करने का वितरित तरीका नए पैकेज बनाने और बनाए रखने में बहुत मदद करता है, खासकर टीमों के भीतर। संदेश और एक्शन परिभाषाएँ इंटरफेस को परिभाषित करने में बहुत मदद करती हैं ताकि हार्डवेयर और एल्गोरिदम का तेज़ी से आदान-प्रदान किया जा सके। यह नए टीम के सदस्यों को एकीकृत करने में भी मदद करता है क्योंकि यदि यह दुर्घटनाग्रस्त हो जाता है तो एक नया नोड नोड को नीचे लाएगा (जब तक कि यह सभी रैम नहीं खाता है ..) तो यह आंशिक रूप से काम करने वाले नोड्स को उनके सिस्टम के रूप में एकीकृत करने के लिए सुरक्षित है प्रभाव सीमित है। संचार टीसीपी का उपयोग करता है जो विश्वसनीय और तेज है (एक स्थानीय मशीन पर), ताकि संदेश गुजरना बहुत जल्दी हो (एक नियंत्रण लूप के लिए कई सौ हर्ट्ज संभव है)।
गैर-वास्तविक समय
आरओएस वर्तमान में रीयलटाइम नहीं है क्योंकि एल्गोरिदम के विशाल बहुमत को रियलटाइम की कोई आवश्यकता नहीं है। सेंसिंग या प्लानिंग में ज्यादातर मामलों में रियल टाइम की कमी नहीं होती (कितने लोग सेल्फ ड्राइविंग हाई स्पीड कार बना रहे हैं?)। यह पर्याप्त है अगर अंतिम नियंत्रण लूप वास्तविक समय में चलता है और यह कई मामलों में सीधे मोटर पर किया जा सकता है (जिस पर अंतिम स्थिति उदाहरण के लिए CAN के माध्यम से भेजी जाती है)। हालांकि रियल टाइम ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ) के मुख्य लक्ष्यों में से एक है, भले ही आपको भविष्य में पूरे सिस्टम के लिए इसकी आवश्यकता हो, लेकिन ROS ने आपको कवर किया है ।
यदि आप वास्तव में एम्बेडेड सामान को चलाना चाहते हैं, तो निश्चित रूप से आर्कडिनो का एक कनेक्शन है, ताकि आप आरएसओ पर सीधे आरओएस संदेश लिख सकें जो तब सीरियल कनेक्शन के माध्यम से भेजे जाते हैं।
विंडोज पर रोस चलाना वर्तमान में एक दर्द है, लेकिन जैसा कि विंडोज लिनक्स के करीब जा रहा है (यहां तक कि कुछ बैश की तरह शुरू होता है), यह केवल समय की बात है जब तक यह संभव है। (लेकिन जो वैसे भी खिड़कियों के साथ एक रोबोट चलाना चाहता है?)
हार्डवेयर इंटरफेस और एल्गोरिदम:
मुझे लगता है कि यह वास्तव में आरओएस के लिए एक मजबूत बिंदु है। व्यावसायिक रूप से उपलब्ध बहुत सारे रोबोट पहले से ही ROS इंटरफ़ेस के साथ आते हैं या किसी ने पहले से ही इंटरफ़ेस को लागू करने के लिए कुछ समय का निवेश किया है। मूवमेंट में ज्यादातर कमर्शियल आर्म्स का इस्तेमाल किया जा सकता है, ताकि किसी खास आर्म को चलाने के लिए एप्लीकेशन को दूसरे हार्डवेयर के साथ दोबारा इस्तेमाल किया जा सके।
समुदाय:
आरओएस के लिए एक और मजबूत बिंदु। नए एल्गोरिदम में बहुत तेज़ी से एक ROS-इंटरफ़ेस मिलता है और बहुत सारे लोगों को एक ही समस्या थी क्योंकि आप किसी को आपकी मदद करने के लिए पाएंगे।
http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf