टर्टल को चलाएँ (TurtleSim)

परियोजना ऑन GitLab & GitHub

सारांश

Move Turtle एक सरल ROS पायथन स्क्रिप्ट है जो ROS के TurtleSim में कछुए को निर्दिष्ट निर्देशांक (बिंदुओं) पर ले जाता है। यह प्रोजेक्ट कोलोराडो स्कूल ऑफ़ माइन्स (CSOM) में CSCI473 के एक क्लास प्रोजेक्ट के रूप में शुरू हुआ और बाद में एक ऐसे प्रोजेक्ट में विकसित हुआ जिसका उपयोग मैंने क्लोज़-लूप सिस्टम कैसे बनाते हैं सीखने के लिए किया, जिससे प्राप्त ज्ञान को मैंने CSOM के Human Center Robotics (HCR) लैब में अपने काम में उपयोग किया।

संदर्भ

कुछ पृष्ठभूमि के लिए, ROS का अर्थ है Robot Operating Systems। ROS एक ओपन-सोर्स रोबोटिक्स मिडलवेयर है, जो आमतौर पर Ubuntu ऑपरेटिंग सिस्टम के साथ उपयोग किया जाता है, और यह रोबोटिक सिस्टम के सॉफ़्टवेयर घटकों/क्लस्टरों को बेहतर ढंग से प्रबंधित करने के लिए उपयोग किया जाता है। आप ROS के आधिकारिक विकी के माध्यम से ROS का उपयोग कैसे करें, इसके बारे में अधिक सीख सकते हैं। ROS में आप जो कोड लिखते हैं वह या तो C++ या Python में होता है।

TurtleSim एक सरल 2D रोबोट सिम्युलेटर है जो ROS और ROS पैकेजों का परिचय देने के लिए उपयोग किया जाता है। TurtleSim केवल एक सरल 2D डिस्प्ले के साथ एक कछुआ खोलता है। वह कछुआ “रोबोट” के रूप में कार्य करता है और आप उस “रोबोट” को संदेश भेजकर उसे चलाने या मोड़ने के लिए निर्देश दे सकते हैं। वास्तव में, TurtleSim कुछ यादृच्छिक त्रुटि उत्पन्न करता है ताकि वास्तविक दुनिया की भौतिकी को सरल तरीके से सिम्युलेट किया जा सके।

अब जब आप जानते हैं कि ROS और TurtleSim क्या हैं, तो मैं उनका उपयोग क्यों कर रहा था? खैर, वसंत 2020 में मैं कोलोराडो स्कूल ऑफ़ माइन्स में “Human Centered Robotics” नामक एक क्लास ले रहा था, जो मेरे अंडरग्रेजुएट कंप्यूटर साइंस कोर्स का हिस्सा था। यह क्लास डॉ. हाओ ज़ांग द्वारा पढ़ाई गई थी। इस क्लास में तीन प्रोजेक्ट थे और पहला प्रोजेक्ट ROS सेटअप करने, ROS का उपयोग सीखने, और एक ओपन-लूप या क्लोज़-लूप एल्गोरिद्म को लागू करने का था जिससे TurtleSim में कछुआ एक M बनाता। मूल प्रोजेक्ट विवरण यहाँ देखा जा सकता है।

जब मैं क्लास ले रहा था, मैंने इस प्रोजेक्ट को एक ओपन-लूप एल्गोरिद्म लागू करके पूरा किया। यह समाधान काम करता था लेकिन बहुत खराब था और एक A बनाता था जो “पर्याप्त अच्छा” था लेकिन “उत्कृष्ट” नहीं था। फरवरी 2020 के मध्य में प्रोजेक्ट जमा करने के बाद, मैं इसे एक साल बाद, लगभग फरवरी 2021 तक भूल गया।

चुनौती

फ़रवरी 2021 में, मैं कोलोराडो स्कूल ऑफ़ माइन्स में Human Centered Robotics (HCR) लैब में रिसर्च असिस्टेंट के रूप में नियुक्त हुआ, जहाँ मैं डॉ. हाओ ज़ांग के तहत काम करता था। लैब का लक्ष्य “जीवन भर सहयोगी स्वायत्तता पर शोध करना, जिससे रोबोट लंबे समय तक संचालन और अनुकूलन कर सकें” है। 1-9-2022 (1 सितंबर 2022) तक, लैब कोलोराडो स्कूल ऑफ़ माइन्स से यूनिवर्सिटी ऑफ़ मैसाचुसेट्स एमहर्स्ट में स्थानांतरित हो गया। लेकिन जब मैं वहाँ काम कर रहा था, वे अभी भी कोलोराडो में स्थित थे।

HCR लैब में, मुझे ट्राइटन प्रोजेक्ट पर काम करने का कार्य दिया गया। ट्राइटन प्रोजेक्ट में कई, दर्जनों, ट्राइटन नामक रोबोट शामिल थे। ट्राइटन त्रिकोणीय ओम्नी व्हील ग्राउंड रोबोट थे जो इस प्रकार दिखते थे:

ट्राइटन के साथ, आठ IR कैमरे OptiTrack से “ऑक्टागन क्रम” में जमीन से कुछ फीट ऊपर व्यवस्थित थे। इन कैमरों, OptiTrack के Motive सॉफ़्टवेयर, Windows 10 चलाने वाले पीसी, और ROS का उपयोग करके; एक 2 मीटर बाय 2 मीटर बाय 2 मीटर (x, y, z) स्थान बनाया गया जहाँ वस्तुओं की वास्तविक दुनिया में स्थितियों को मोशन कैप्चर मार्कर के साथ निर्धारित किया जा सकता है।

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

शोध

अपने शोध के दौरान, मैंने AerospaceControlsLab द्वारा एक शानदार वीडियो पाया:

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

$$ 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}$ त्रुटि का अवकलन है।

और अधिक जानने के लिए, AerospaceControlsLab का वीडियो या इस अद्भुत विकिपीडिया लेख को देखें।

अपने शोध और स्मार्ट मित्रों व प्रोफेसरों की मदद से, मैंने तय किया कि एक प्रोपोर्शनल कंट्रोलर, P कंट्रोलर, ट्राइटन को एक विशिष्ट निर्देशांक तक पहुँचाने में सबसे अच्छा रहेगा।

चूँकि ट्राइटन एक ग्राउंड रोबोट है, मुझे केवल X और Y निर्देशांक की चिंता करनी है। इस बात को समझते हुए, मुझे P कंट्रोलर में कौन से इच्छित मान और मापे गए मान को मापना और प्रक्रिया करना है, यह निर्धारित करना था। मेरे शोध में मैंने ROS विकी पर एक शानदार पोस्ट पाया जिसका नाम Go to Goal है, जहाँ उन्होंने निम्नलिखित त्रुटियों पर ध्यान दिया:

  • दूरी त्रुटि: इच्छित स्थान (X, Y) और वर्तमान स्थान (X, Y) के बीच दूरी का अंतर।
  • थेटा त्रुटि: इच्छित अभिविन्यास और वर्तमान अभिविन्यास के बीच अंतर।

प्रस्तावित समाधान

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

सिमुलेशन में परीक्षण

सैद्धांतिक समाधान को स्पष्ट करने के बाद, मैंने इसे वास्तविक दुनिया के बजाय सिमुलेशन के माध्यम से सत्यापित करने का विकल्प चुना। वास्तविक दुनिया अक्सर शोर से भरी होती है जो समाधान की प्रभावशीलता को धुंधला कर सकती है। इस बात को समझते हुए, मैंने अपने CSCI473 प्रोजेक्ट को पुनः देख कर इसे एक परीक्षण मंच के रूप में उपयोग किया।

ROS Melodic से ROS Noetic में कोड को अपडेट करने और कुछ पुनरावृत्त सुधार के बाद, मैंने प्रस्तावित समाधान को TurtleSim में काम करता देखा। इसके कार्यक्षमता के प्रदर्शन, कुछ शानदार लक्ष्य निर्देशांक पथों के साथ, इस ब्लॉग पोस्ट के अंत में देखे जा सकते हैं। इस सभी कोड को यहाँ देखा जा सकता है।

निष्कर्ष

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

पछताते हुए, मैं चाहता हूँ कि मैं एक ऐसा सिमुलेशन उपयोग करता जो वास्तविक दुनिया की भौतिकी को बेहतर ढंग से सिमुलेट करता। TurtleSim सीखने के लिए अच्छा है लेकिन वास्तविक दुनिया के रोबोटिक्स विचारों के परीक्षण के लिए नहीं। उस समय, मैं सोचता था कि यह मेरे सरल उपयोग केस के लिए पर्याप्त है, लेकिन बाद में यह सिद्ध नहीं हुआ।

इस ब्लॉग पोस्ट का मुख्य उद्देश्य एक क्लोज़-लूप सिस्टम बनाना था जिससे TurtleSim में कछुआ और बाद में ट्राइटन रोबोट्स को निर्दिष्ट लक्ष्य स्थितियों (X, Y) पर सटीक रूप से नेविगेट किया जा सके। मुझे लगता है कि यह लक्ष्य प्राप्त हो गया है, और यह मेरे HCR लैब में मेरे काम में कुछ रुचि उत्पन्न कर सकता है। इस बात को जानते हुए, मैं HCR लैब में अपने कार्य अनुभव के बारे में अधिक ब्लॉग पोस्ट बनाने की योजना बना रहा हूँ…

Moving Turtle (TurtleSim) डेमो

इस वीडियो में निम्नलिखित डेमो शामिल हैं:

  • Cayley Nodal: एक सरल Cayley Nodal डिज़ाइन
  • Circles: एक मकड़ी-वेब जैसा डिज़ाइन
  • Inner Circles: “सर्कल्स के अंदर सर्कल्स” डिज़ाइन
  • M: एक बहुत सरल M डिज़ाइन