टर्टलसिम के साथ पीआईडी नियंत्रण
सारांश
मूव टर्टल एक सरल ROS पायथन स्क्रिप्ट है जो ROS के टर्टलसिम में कछुए को निर्दिष्ट समन्वयों (बिंदुओं) पर ले जाती है। यह प्रोजेक्ट कोलोराडो स्कूल ऑफ माइनस (CSOM) में CSCI473 के लिए एक कक्षा प्रोजेक्ट के रूप में शुरू हुआ और बाद में एक प्रोजेक्ट में विकसित हुआ जिसका उपयोग मैंने यह सीखने में किया कि कैसे क्लोज-लूप सिस्टम बनाए जा सकते हैं, जिसका ज्ञान मैंने CSOM के ह्यूमन सेंटर रोबोटिक्स (HCR) लैब में अपने काम में मदद के लिए उपयोग किया।
संदर्भ
कुछ पृष्ठभूमि के लिए, ROS का अर्थ है रोबोट ऑपरेटिंग सिस्टम। ROS एक ओपन-सोर्स रोबोटिक्स मिडलवेयर है, जो आमतौर पर उबंटू ऑपरेटिंग सिस्टम के साथ जोड़ा जाता है, जिसका उपयोग एक रोबोटिक सिस्टम के सॉफ़्टवेयर घटकों/क्लस्टर को बेहतर ढंग से प्रबंधित करने के लिए किया जाता है। आप ROS का उपयोग कैसे करें, इसके बारे में अधिक जानने के लिए ROS के आधिकारिक विकि पर जा सकते हैं। आप जो कोड ROS में लिखते हैं वह या तो C++ या पायथन में होता है।
टर्टलसिम एक सरल 2D रोबोट सिम्युलेटर है जिसका उपयोग ROS और ROS पैकेजों के लिए नए उपयोगकर्ताओं के लिए परिचय के रूप में किया जाता है। टर्टलसिम केवल एक सरल 2D डिस्प्ले खोलता है जिसमें एक कछुआ होता है। वह कछुआ “रोबोट” के रूप में कार्य करता है और आप उस “रोबोट” को स्थानांतरित करने और/या मोड़ने के लिए संदेश भेज सकते हैं। खैर, टर्टलसिम चलते समय कुछ यादृच्छिक त्रुटि उत्पन्न करता है ताकि वास्तविक दुनिया के भौतिकी को सरल तरीके से अनुकरण किया जा सके।
यह जानने के लिए कि मैं ROS और टर्टलसिम का उपयोग क्यों कर रहा था? खैर, वसंत 2020 में मैं कोलोराडो स्कूल ऑफ माइनस में “ह्यूमन सेंटर्ड रोबोटिक्स” नामक एक कक्षा ले रहा था जो मेरी स्नातक कंप्यूटर विज्ञान कक्षा के हिस्से के रूप में थी। कक्षा का संचालन डॉ. हाओ झांग द्वारा किया गया था। कक्षा में तीन प्रोजेक्ट शामिल थे और पहले प्रोजेक्ट में ROS सेटअप करना, ROS का उपयोग करना सीखना और एक ओपन-लूप या क्लोज-लूप एल्गोरिदम लागू करना शामिल था जो टर्टलसिम में कछुए को एक M बनाने के लिए प्रेरित करेगा। मूल प्रोजेक्ट विवरण यहां देखा जा सकता है।
जब मैं कक्षा ले रहा था, मैंने इस प्रोजेक्ट को एक ओपन-लूप एल्गोरिदम लागू करके पूरा किया। यह समाधान काम करता था लेकिन यह वास्तव में खराब था और एक A खींचा जो “पर्याप्त अच्छा” था लेकिन “महान” के करीब नहीं था। फरवरी 2020 के मध्य में प्रोजेक्ट जमा करने के बाद, मैं एक साल बाद फरवरी 2021 के आसपास तक इसके बारे में भूल गया।
चुनौती
फरवरी 2021 में, मुझे कोलोराडो स्कूल ऑफ माइनस के ह्यूमन सेंटर रोबोटिक्स (HCR) लैब में एक रिसर्च असिस्टेंट के रूप में काम पर रखा गया, जहां मैंने डॉ. हाओ झांग के अधीन काम किया। लैब का लक्ष्य “जीवन भर के सहयोगात्मक स्वायत्तता पर शोध करना है, जिसका उद्देश्य रोबोटों को लंबे समय तक संचालित और अनुकूलित करने में सक्षम बनाना है”। 9-1-2022 (1 सितंबर 2022) के अनुसार, लैब कोलोराडो स्कूल ऑफ माइनस से मैसाचुसेट्स एमहर्स्ट विश्वविद्यालय में स्थानांतरित हो गई है। लेकिन, जब मैं वहां काम कर रहा था, वे अभी भी कोलोराडो में स्थित थे।
HCR लैब में, मुझे ट्राइटन प्रोजेक्ट पर काम करने का कार्य सौंपा गया। ट्राइटन प्रोजेक्ट में ट्राइटन नामक कई, दर्जनों, रोबोट शामिल थे। ट्राइटन त्रिकोणीय ओमनी व्हील ग्राउंड रोबोट थे जो इस तरह दिखते थे:
ट्राइटन के साथ, आठ IR कैमरे ऑप्टिट्रैक से “आठकोण क्रम” में जमीन से कुछ फीट ऊपर व्यवस्थित किए गए थे। उन कैमरों का उपयोग करते हुए, ऑप्टिट्रैक का मोटिव सॉफ़्टवेयर, विंडोज 10 चलाने वाला एक पीसी, और ROS; एक 2 मीटर x 2 मीटर x 2 मीटर (x, y, z) स्थान बनाया गया है जहां वस्तुओं की वास्तविक दुनिया की स्थिति को मोशन कैप्चर मार्कर्स के साथ निर्धारित किया जा सकता है।
मेरे ट्राइटन प्रोजेक्ट के साथ पहला कार्य यह था कि मैं स्क्रिप्ट बनाऊं जो ट्राइटन रोबोट को एक विशिष्ट वास्तविक दुनिया की स्थिति में ले जाए। उस समय, मुझे यह कैसे प्राप्त करना है, इस बारे में निश्चित नहीं था लेकिन मुझे CSCI473 के पहले प्रोजेक्ट की याद थी जहां क्लोज-लूप सिस्टम का विचार मेरे लिए पेश किया गया था, इसलिए मैंने क्लोज-लूप सिस्टम और इसके परिणामस्वरूप फीडबैक सिस्टम पर वास्तव में शोध करना शुरू किया।
शोध
मेरे शोध के दौरान, मैंने एरोस्पेसकंट्रोल्सलैब द्वारा एक शानदार वीडियो खोजा:
इस वीडियो में, मुझे एक पीआईडी सिस्टम का विचार दिखाया और समझाया गया। एक पीआईडी सिस्टम एक क्लोज-लूप, नियंत्रण लूप, सिस्टम है जो वास्तविक दुनिया के डेटा के आधार पर विशिष्ट आउटपुट उत्पन्न करता है। बुनियादी शब्दों में, यह एक फीडबैक सिस्टम है जो वांछित मान और मापे गए मान के बीच के अंतर के आधार पर अपने आउटपुट को समायोजित करता है। यह एक पीआईडी नियंत्रक के लिए सूत्र है:
$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$
- $u(t)$ नियंत्रण संकेत है।
- $K_p$, $K_i$, $K_d$ क्रमशः अनुपात, समाकलन, और व्युत्पन्न लाभ हैं।
- $e(t)$ त्रुटि संकेत है (वांछित और वास्तविक आउटपुट के बीच का अंतर)।
- $\int e(t) dt$ समय के साथ त्रुटि का समाकलन है।
- $\frac{de(t)}{dt}$ त्रुटि का व्युत्पन्न है।
इस बारे में अधिक जानने के लिए, एरोस्पेसकंट्रोल्सलैब का वीडियो या इस अद्भुत विकिपीडिया लेख को देखें जिसका सूत्र यहाँ से है।
अपने शोध करने के बाद और अपने स्मार्ट दोस्तों और प्रोफेसरों से कुछ मदद प्राप्त करने के बाद, मैंने यह निर्धारित किया कि ट्राइटन को एक विशिष्ट समन्वय तक पहुँचने में मदद करने के लिए अनुपात नियंत्रक, P नियंत्रक, का उपयोग करना सबसे अच्छा होगा।
चूंकि ट्राइटन एक ग्राउंड रोबोट है, मुझे केवल X और Y समन्वयों के बारे में चिंता करने की आवश्यकता है। यह जानने के बाद, मुझे फिर यह निर्धारित करना था कि P नियंत्रक में मापने और संसाधित करने के लिए कौन से वांछित मान और मापे गए मान हैं। अपने शोध में मैंने ROS विकी पर गोल पर जाएं नामक एक अद्भुत पोस्ट पाई जहां उन्होंने निम्नलिखित त्रुटियों पर ध्यान केंद्रित किया:
- दूरी त्रुटि: वांछित स्थान (X, Y) और वर्तमान स्थान (X, Y) के बीच की दूरी में अंतर।
- थेटा त्रुटि: वांछित अभिविन्यास और वर्तमान अभिविन्यास के बीच का अंतर।
प्रस्तावित समाधान
इन सभी को जानने के बाद, ट्राइटन को एक विशिष्ट वास्तविक दुनिया के समन्वय पर ले जाने के लिए समाधान यह है कि ट्राइटन की दूरी त्रुटि और लक्ष्य समन्वय और ट्राइटन के वर्तमान समन्वय के संबंध में थेटा त्रुटि के लिए अनुपात नियंत्रक का उपयोग किया जाए। लेकिन इसे एक भौतिक प्रणाली में लागू करने से पहले, मैं इस विचार का परीक्षण एक सिमुलेशन में करना चाहता था और, उस समय, मुझे लगा कि टर्टलसिम का उपयोग सिमुलेशन के रूप में सबसे अच्छा विकल्प था।
सिमुलेशन में परीक्षण
सैद्धांतिक समाधान को रेखांकित करने के साथ, मैंने इसे वास्तविक दुनिया के परिदृश्य के बजाय सिमुलेशन के माध्यम से प्रारंभिक रूप से मान्य करने का विकल्प चुना। वास्तविक दुनिया अक्सर शोर से भरी होती है जो समाधान की प्रभावशीलता को धुंधला कर सकती है और अप्रासंगिक मुद्दों से निपटने की आवश्यकता हो सकती है। इसे स्वीकार करते हुए, मैंने CSCI473 से अपने प्रोजेक्ट पर फिर से गौर किया और इसे इस सैद्धांतिक समाधान के लिए एक परीक्षण मैदान के रूप में अनुकूलित किया।
ROS मेलोडिक से ROS नोएटिक का उपयोग करने के लिए पुराने कोड को अपडेट करने के बाद और कुछ पुनरावृत्त सुधार के साथ, मैंने टर्टलसिम में प्रस्तावित समाधान को काम करते हुए पाया। इसकी कार्यक्षमता के प्रदर्शन, कुछ शानदार लक्ष्य समन्वय पथों के साथ, इस ब्लॉग पोस्ट के अंत में पाए जा सकते हैं। इसके लिए सभी कोड यहां देखा जा सकता है।
निष्कर्ष
संक्षेप में, इस प्रोजेक्ट के माध्यम से, टर्टलसिम कछुआ क्लोज-लूप सिस्टम का उपयोग करके सेट समन्वयों पर प्रभावी ढंग से नेविगेट करता है, जो 2020 में मेरे प्रारंभिक ओपन-लूप सिस्टम की तुलना में काफी बेहतर है। सफलतापूर्वक परीक्षण के बाद, मैंने इस समाधान को ट्राइटन रोबोटों के साथ लागू किया। लेकिन वास्तविक दुनिया का शोर अप्रत्याशित मुद्दों को पेश करता है जिससे हफ्तों तक डिबगिंग और वास्तविक दुनिया के परीक्षण की आवश्यकता होती है। उन हफ्तों के बाद, मैंने अंततः ट्राइटन को विशिष्ट वास्तविक दुनिया के समन्वयों तक पहुँचाने में सफलतापूर्वक समाधान का उपयोग किया जिसे मैंने टर्टलसिम में परीक्षण किया था। यहाँ एक डेमो है जिसमें ट्राइटन विशिष्ट वास्तविक दुनिया के समन्वयों की ओर बढ़ रहा है जिसका परीक्षण टर्टलसिम में किया गया था:
पश्चातवर्ती में, मैं चाहता था कि मैंने एक ऐसा सिमुलेशन का उपयोग किया होता जो वास्तविक दुनिया के भौतिकी को बेहतर ढंग से अनुकरण करता। टर्टलसिम सीखने के लिए बहुत अच्छा है लेकिन वास्तविक दुनिया के रोबोटिक्स विचारों का परीक्षण करने के लिए अच्छा नहीं है। उस समय, मुझे लगा कि यह मेरे सरल उपयोग के मामले के लिए पर्याप्त अच्छा होगा लेकिन बाद में यह साबित हुआ कि ऐसा नहीं था।
इस ब्लॉग पोस्ट का प्राथमिक उद्देश्य एक क्लोज-लूप सिस्टम का निर्माण करना था जो टर्टलसिम में कछुए को सक्षम बनाता है, और इसके बाद ट्राइटन रोबोटों को निर्दिष्ट लक्ष्य स्थानों (X, Y) पर सटीक रूप से नेविगेट करने में सक्षम बनाता है। मुझे विश्वास है कि यह उद्देश्य प्राप्त किया गया था, लेकिन इससे HCR लैब में मेरे काम में कुछ रुचि उत्पन्न हो सकती है। यह जानकर, मेरे पास HCR लैब में अपने कार्य अनुभव के बारे में अधिक ब्लॉग पोस्ट बनाने की योजनाएँ हैं…
मूविंग टर्टल (टर्टलसिम) डेमो
इस वीडियो में निम्नलिखित डेमो शामिल हैं:
- केली नोडल: एक सरल केली नोडल डिज़ाइन
- गोल: एक मकड़ी-जाल जैसा डिज़ाइन
- आंतरिक गोल: “गोल के अंदर गोल” डिज़ाइन
- M: एक बहुत सरल M डिज़ाइन