मैं धीमी (30 हर्ट्ज) प्रणाली के साथ फास्ट (200 हर्ट्ज) रियलटाइम सिस्टम को कैसे नियंत्रित कर सकता हूं?


12

हम वर्तमान में स्वतंत्रता और सेंसर की कई नियंत्रित डिग्री के साथ एक मोबाइल रोबोट + माउंटेड आर्म डिजाइन कर रहे हैं।

मैं दो भागों में एक वास्तुकला पर विचार कर रहा हूं:

  1. आर्म मोटर्स और एनकोडर को नियंत्रित करने के लिए रियलटाइम कंट्रोलरों का एक सेट (या तो रास्पबेरी पिस, जैसे कि एक्सनोमई या नंगे मेटल माइक्रोकंट्रोलर) आरटीओएस चलाते हैं। हमें माइक्रोकंट्रोलर्स की संख्या के आधार पर x = 1,2,3 ... के साथ इन मशीनों को RTx कहते हैं। यह कंट्रोल लूप 200Hz पर चलेगा।

  2. एक शक्तिशाली वेनिला लिनेक्स मशीन जो SLAM, मोकैप की गणना करने के लिए आरओएस चलाती है, और उच्च-स्तरीय तर्क निष्पादित करती है (रोबोट के कार्य को निर्धारित करें और मोटर्स की वांछित स्थिति और गति की गणना करें)। यह कंट्रोल लूप 30Hz पर चलेगा।

मुझे पता है कि मेरे ढांचे को अधिक मोटर्स, अधिक सेंसर, अधिक पीसी (जैसे बाहरी मोकैप के लिए) के लिए मापनीय होना चाहिए।

मेरी मुख्य समस्या यह तय करना है कि पीसी 1 के साथ विभिन्न आरटीएक्स संचार कैसे करें। मैंने रोबोट आर्किटेक्चर (उदाहरण के लिए HRP2 ) से संबंधित कागजात देखे हैं , ज्यादातर वे उच्च स्तरीय नियंत्रण वास्तुकला का वर्णन करते हैं, लेकिन मुझे अभी तक इस बारे में जानकारी नहीं मिल पाई है कि उच्च स्तर के साथ और स्केलेबल तरीके से निम्न स्तर का संचार कैसे हो। क्या मैं कुछ भुल गया?

PC1 के साथ मोटर नियंत्रण सुनिश्चित करने के लिए तेजी से आरटी मशीनों को जोड़ने के लिए, मैंने TCP / IP, CAN और UART पर विचार किया है:

  • टीसीपी / आईपी: नियतात्मक नहीं है, लेकिन जगह में रखना आसान है। क्या गैर नियतांक एक वास्तविक मुद्दा है (क्योंकि इसका उपयोग केवल धीमी गति से 30 हर्ट्ज पर किया जाएगा)?
  • कर सकते हैं: धीमी गति से, बहुत विश्वसनीय, कारों को लक्षित (देखा है कि रोबोट के साथ CAN का उपयोग कर कुछ छूट हैं लेकिन यह विदेशी लग रहा था)
  • UART: अगर मेरे पास मोटर नियंत्रण के लिए केवल एक RT मशीन होती तो मैं UART पर विचार करता, लेकिन मुझे लगता है कि यह पोर्ट कई RTx के साथ अच्छी तरह से पैमाने पर नहीं है क्या टीसीपी / आईपी वास्तव में इसकी गैर-निर्धारक विशेषताओं के कारण नहीं है? यह उपयोग में बहुत आसान है…

फिलहाल कोई समाधान मुझे स्पष्ट नहीं लगता है। और जैसा कि मैं एक विशिष्ट विश्वसनीय और स्केलेबल समाधान का उपयोग करके कोई गंभीर रोबोट उदाहरण नहीं पा सकता हूं, मुझे एक विकल्प बनाने के लिए आत्मविश्वास नहीं है।

क्या इस बिंदु या साहित्य पर किसी का स्पष्ट दृष्टिकोण है? क्या रोबोट पर विशिष्ट या मुख्यधारा के संचार समाधान का उपयोग किया जाता है?


1
यदि आप वास्तविक समय नेटवर्क में देख रहे हैं, तो आप ईथर को एक नज़र देना चाहते हैं!
शाहबाज़

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

जवाबों:


8

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

मैंने रोबोट आर्किटेक्चर [...] से संबंधित कागजात देखे हैं, लेकिन मुझे अभी तक इस बारे में जानकारी नहीं मिली है कि उच्च स्तर के साथ और स्केलेबल तरीके से निम्न स्तर का संचार कैसे किया जाए। क्या मैं कुछ भुल गया?

आपके विवरण से, ऐसा लगता है कि आप प्रत्येक आरटीएक्स नियंत्रक को सीधे पीसी 1 पर टाई करने की कोशिश कर रहे हैं, जो आरओएस चल रहा है। आपने जो भी याद किया है वह यह है कि ROS को विभिन्न दरों पर डेटा का उत्पादन और उपभोग करने वाले अनुप्रयोगों के एक समूह को संभालने के लिए डिज़ाइन किया गया है।

आपके आवेदन की जरूरत है एक संचार पुल - अपने 200Hz पाश और अपने ROS पर्यावरण के बीच एक एकल इंटरफ़ेस। दूसरे शब्दों में, बजाय PC1 करने के लिए प्रत्येक RTX नियंत्रक बांधने की, सभी RTX नियंत्रकों एक साथ टाई और कनेक्ट कि PC1 करने के लिए।

उदाहरण के लिए, आरटीएक्स सिस्टम को एक साथ जोड़ने के लिए एक I2C बस का उपयोग करें , और "आर्म मास्टर" (एएम) होने के लिए एक और आरटीएक्स नियंत्रक जोड़ें। AM का काम कुछ PC1 के अनुकूल प्रारूप और प्रोटोकॉल में आने वाली कमांड को स्वीकार करना होगा, और उन कमांड को I2C संदेशों में बदलना होगा। फिर आप AM को कमांड भेजने के लिए एक ROS ऐप लिखेंगे।

I2C के साथ ऐसा करने का एक और तरीका यह होगा कि आप सीधे PC1 पर I2C कंट्रोलर लगाएं और एक ROS ऐप में सभी आर्म कंट्रोलिंग लॉजिक लिखें। यह आपके लक्ष्य को पूरा करने के लिए एक अधिक सुव्यवस्थित तरीके की तरह लग सकता है, लेकिन यह डिबगिंग को और अधिक कठिन बना सकता है क्योंकि आप सिस्टम के प्रतिरूपता को हटा रहे हैं - आपको इसे दो आसानी से परीक्षण योग्य घटकों के बजाय एक बड़े जटिल सिस्टम के रूप में समस्या निवारण करना होगा।


मुझे संचार पुल की यह अवधारणा पसंद है। आगे के लिंक पर मेरी नज़र होगी। आपका बहुत बहुत धन्यवाद!
arennuit

5

मैं कहूंगा कि किसी भी एप्लिकेशन को जहां बड़ी संख्या में संचार नोड्स की आवश्यकता होती है (सेंसर या एक्ट्यूएटर) सिस्टम बस के रूप में लागू होने से लाभ होगा (बिंदु के विपरीत बिंदु जैसे UART या ईथरनेट), वायरिंग जटिलता के कारण, नियतात्मकता प्रतिरूपकता।

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

यह शर्म की बात है कि एकीकृत कैन की उपलब्धता UART (RS-485) या I2C (अभी तक) के रूप में व्यापक नहीं है, क्योंकि मुझे लगता है कि यह वास्तव में वितरित संवेदन और सक्रियता की समस्या को सरल करता है। और जबकि सामान्य 1 एमबीपीएस धीमा लग सकता है, यह आमतौर पर सभी बस सदस्यों की ताज़ा दरों की गणना के बाद पर्याप्त से अधिक है (और ट्रांसमिशन की दर हमेशा बढ़ाई जा सकती है, बस की लंबाई, प्रतिबाधा और क्या आपके ट्रांससेवर्स इसकी अनुमति देंगे) के आधार पर। वहाँ भी शानदार सिमुलेशन सॉफ्टवेयर उपलब्ध है, जो मूल रूप से सबसे खराब स्थिति प्रतिक्रिया समय की गारंटी देता है (उदाहरण के लिए RealTime-at-work में एक मुफ्त CAN बस विश्लेषक है जिसे RTaW-Sim कहा जाता है)। और अंत में, ऐसा लगता है कि एकीकृत कैन के साथ एमईएमएस सेंसर की उपलब्धता कम है।

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

लेकिन, वास्तविक प्रश्न पर वापस जाने के लिए, मुझे लगता है कि यदि आप अपने सिस्टम को वास्तविक समय निर्धारित बिंदुओं के रूप में वर्णित करते हैं, तो कमांड के बजाय (जैसे कि लगातार गोटो कोण जैसे कमांड को निर्देश देने के बजाय एक मोटर कोण को प्रसारित करता है), यह बीच युग्मन को सरल करता है 200 हर्ट्ज और 30 हर्ट्ज लूप।


हाय एडी, मैंने अभी आपके उत्तर पर ध्यान दिया है। क्या आप "पॉइंट-टू-पॉइंट लिंक" और "सिस्टम बस" के बीच अंतर बता सकते हैं? विशेष रूप से आप पहली बार बिंदु-से-निम्न ग्रेड का उल्लेख करते हैं लेकिन फिर आप कहते हैं कि डायनामिक्सल UART का उपयोग करता है और महान है ... मुझे यकीन नहीं है कि मैं अनुसरण करता हूं (हालांकि मैं मानता हूं कि सिस्टम बसें उपयोग में आसानी के संदर्भ में बहुत कुछ लाती हैं। धन्यवाद)
arennuit

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

मैं समझ गया! अतिरिक्त विवरण के लिए एक साल बाद धन्यवाद;)
arennuit

4

आपको लगता है कि 2 अलग (लेकिन संबंधित) समस्याएं हैं जिन्हें आप एक बार में हल करने की कोशिश कर रहे हैं। आइए अपने कॉनड्रूम को छोटे टुकड़ों में तोड़ते हैं:

  1. मैं एक धीमी प्रणाली (30 हर्ट्ज) से एक तेज नियंत्रक (200 हर्ट्ज) तक कमांड कैसे संवाद कर सकता हूं , और मैं अपने 30 हर्ट्ज थिंकटैंक पर 200 हर्ट्ज पर प्राप्त होने वाले डेटा को कैसे संवाद कर सकता हूं?
  2. मैं कैसे नियंत्रित कर सकता हूं कि 200Hz पर क्या हो रहा है, जब मैं केवल रोबोट को बता सकता हूं कि 30Hz पर क्या करना है?

आइटम 1 को हार्डवेयर में हल किया जा सकता है क्योंकि आपका मूल प्रश्न इंगित करता है- आप 200Hz पर डेटा को कतारबद्ध कर सकते हैं और पैकेट को अपने उच्च स्तर के सिस्टम में 30Hz पर भेज सकते हैं। आप इसे टीसीपी / आईपी के साथ कर सकते हैं, या संभवतः आप कितना डेटा भेजना चाहते हैं, इसके आधार पर कर सकते हैं। विभिन्न हार्डवेयर में अलग-अलग अधिकतम डेटा दर होती हैं। आरओएस जैसे आर्किटेक्चर के स्तर को जोड़ने के लिए संचार पुल / आर्बिटर के रूप में कार्य करने के लिए जैसा कि अन्य पदों में सुझाव दिया गया है, इससे भी मदद मिल सकती है।

आइटम 2 एक नियंत्रण सिद्धांत समस्या है जिसे अकेले हार्डवेयर के साथ हल नहीं किया जा सकता है। SLAM, स्थिति और गति का निर्धारण, और कार्य का निर्धारण जो आप चाहते हैं, होशियार होने की आवश्यकता होगी क्योंकि वे कम बार जानकारी भेजते और प्राप्त करते हैं। आप शायद 2 नियंत्रण लूप चाहेंगे : 1 200Hz पर और 1 30Hz पर।

वहाँ कि कवर फीड-आगे, फ़ीड वापस अन्य प्रश्न के बहुत सारे, और पीआईडी नियंत्रण छोरों है, लेकिन आप विशेष रूप से scaleability- तरह से सबसे विशाल सिस्टम पैमाने कर रहा है के बारे में पूछा लेयरिंग ताकि कम से कम आवश्यक जानकारी जो कुछ हार्डवेयर भर में चला जाता है नियंत्रण छोरों और तर्क आप के साथ समाप्त उदाहरण के लिए, आपका शीर्ष स्तर नियंत्रक केवल लक्ष्य स्थिति बिंदु और निचले स्तर एक को एक औसत लक्ष्य गति दे सकता है, दूसरी बार 30 बार गति को न बदलें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.