टर्टलसिमसह PID नियंत्रण
सारांश
Move Turtle ही एक साधी ROS python स्क्रिप्ट आहे जी ROS च्या TurtleSim मधील टर्टलला निर्दिष्ट निर्देशांकांवर (बिंदूंवर) हलवते. हा प्रकल्प Colorado School of Mines (CSOM) येथील CSCI473 या वर्गातील प्रकल्प म्हणून सुरू झाला आणि नंतर बंद-लूप प्रणाली कशा तयार करता येतात हे शिकण्यास मला मदत करण्यासाठी वापरलेल्या प्रकल्पात विकसित झाला. या ज्ञानाचा उपयोग CSOM च्या Human Center Robotics (HCR) Lab मधील माझ्या कामात मला मदत करण्यासाठी झाला.
संदर्भ
काही पार्श्वभूमीसाठी, ROS म्हणजे Robot Operating Systems. ROS हे मुक्त-स्रोत रोबोटिक्स मिडलवेअर आहे, जे सामान्यतः Ubuntu ऑपरेटिंग सिस्टमसोबत वापरले जाते आणि रोबोटिक प्रणालीतील सॉफ्टवेअर घटक/क्लस्टर्स अधिक चांगल्या प्रकारे व्यवस्थापित करण्यासाठी वापरले जाते. ROS कसे वापरावे याबद्दल अधिक माहिती तुम्ही ROS च्या अधिकृत विकीवर मिळवू शकता. ROS मध्ये तुम्ही लिहिलेला कोड C++ किंवा Python मध्ये असतो.
TurtleSim हे एक साधे 2D रोबोट सिम्युलेटर आहे, जे ROS च्या नवीन वापरकर्त्यांना ROS आणि ROS पॅकेजेसची ओळख करून देण्यासाठी वापरले जाते. TurtleSim एवढेच करते की ते टर्टलसह एक साधा 2D डिस्प्ले उघडते. तो टर्टल “रोबोट” म्हणून काम करतो आणि तुम्ही त्या “रोबोटला” हलण्यासाठी आणि/किंवा वळण्यासाठी संदेश पाठवू शकता. टर्टल हलवताना, प्रत्यक्ष जगातील भौतिकशास्त्राचे साध्या पद्धतीने अनुकरण करण्यासाठी TurtleSim काही यादृच्छिक त्रुटी निर्माण करते.
ROS आणि TurtleSim म्हणजे काय हे माहीत असताना, मी त्यांचा वापर का करत होतो? 2020 च्या वसंत ऋतूत मी Colorado School of Mines येथे माझ्या पदवीपूर्व संगणकशास्त्राच्या अभ्यासक्रमाचा भाग म्हणून “Human Centered Robotics” नावाचा वर्ग घेत होतो. हा वर्ग Dr. Hao Zhang यांनी शिकवला. या वर्गात तीन प्रकल्प होते आणि पहिल्या प्रकल्पात ROS सेट करणे, ROS कसा वापरायचा हे शिकणे आणि TurtleSim मधील टर्टलला M काढता येईल असा एकतर खुला-लूप किंवा बंद-लूप अल्गोरिदम लागू करणे यांचा समावेश होता. मूळ प्रकल्पाचे वर्णन येथे पाहता येते.
मी हा वर्ग घेत असताना, खुला-लूप अल्गोरिदम लागू करून हा प्रकल्प पूर्ण केला. हे समाधान कार्यरत होते, परंतु ते खरोखरच खराब होते आणि “पुरेसा चांगला” असलेला, पण “उत्कृष्ट” म्हणता येणार नाही असा A काढत होते. फेब्रुवारी 2020 च्या मध्याच्या सुमारास प्रकल्प सादर केल्यानंतर, सुमारे एक वर्षाने, फेब्रुवारी 2021 च्या आसपास, मला त्याबद्दल विसर पडला.
आव्हान
फेब्रुवारी 2021 मध्ये, मला Colorado School of Mines येथील Human Centered Robotics (HCR) Lab मध्ये Research Assistant म्हणून नोकरी मिळाली, जिथे मी Dr. Hao Zhang यांच्या मार्गदर्शनाखाली काम केले. या प्रयोगशाळेचे उद्दिष्ट “दीर्घकालीन सहयोगी स्वायत्ततेवर संशोधन करणे, ज्याचा हेतू रोबोट्सना दीर्घ काळ कार्यरत राहण्यास आणि परिस्थितीनुसार जुळवून घेण्यास सक्षम करणे” हे आहे. 9-1-2022 (1 सप्टेंबर 2022) पर्यंत, ही प्रयोगशाळा Colorado School of Mines मधून University of Massachusetts Amherst येथे स्थलांतरित झाली आहे. परंतु, मी तेथे काम करत असताना ती अजूनही Colorado येथेच होती.
HCR Lab मध्ये मला Triton प्रकल्पावर काम करण्याचे काम सोपवण्यात आले. Triton प्रकल्पात Tritons नावाचे अनेक, डझनभर, रोबोट्स होते. Tritons हे त्रिकोणी omni wheel जमिनीवर चालणारे रोबोट्स होते, जे असे दिसत होते:
Tritons सोबत, OptiTrack कडील आठ IR Cameras जमिनीपासून काही फूट उंचीवर “अष्टकोनी रचनेत” लावलेले होते. त्या कॅमेऱ्यांचा, Optitrack च्या Motive सॉफ्टवेअरचा, Windows 10 चालवणाऱ्या PC चा आणि ROS चा वापर करून, 2 मीटर बाय 2 मीटर बाय 2 मीटर (x, y, z) अशी जागा तयार केली जाते, जिथे motion capture markers असलेल्या वस्तूंचे प्रत्यक्ष जगातील अचूक स्थान निश्चित करता येते.
Triton प्रकल्पातील माझे पहिले काम Triton रोबोटला प्रत्यक्ष जगातील विशिष्ट स्थानावर हलवणाऱ्या स्क्रिप्ट्स तयार करणे हे होते. त्या वेळी हे कसे साध्य करायचे याची मला खात्री नव्हती, पण 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 चा व्हिडिओ किंवा ज्या सूत्रातून हे घेतले आहे तो हा उत्कृष्ट wikipedia लेख पाहा.
माझे संशोधन केल्यानंतर तसेच माझ्या हुशार मित्रांकडून आणि प्राध्यापकांकडून काही मदत घेतल्यानंतर, Triton ला विशिष्ट निर्देशांकापर्यंत पोहोचवण्यासाठी प्रमाण नियंत्रक, म्हणजेच P Controller, वापरणे सर्वोत्तम ठरेल असे मी ठरवले.
Triton हा जमिनीवर चालणारा रोबोट असल्यामुळे, मला फक्त X आणि Y निर्देशांकांची चिंता करणे आवश्यक आहे. हे माहीत झाल्यावर, P Controller(s) मध्ये कोणती अपेक्षित मूल्ये आणि मोजलेली मूल्ये मोजायची व त्यावर प्रक्रिया करायची हे मला ठरवावे लागले. माझ्या संशोधनात मला ROS विकीवरील Go to Goal नावाची ही उत्कृष्ट पोस्ट सापडली, ज्यात त्यांनी पुढील त्रुटींवर लक्ष केंद्रित केले:
- अंतर त्रुटी: अपेक्षित स्थान (X, Y) आणि वर्तमान स्थान (X, Y) यांमधील अंतराचा फरक.
- थीटा त्रुटी: अपेक्षित अभिमुखता आणि वर्तमान अभिमुखता यांमधील फरक.
प्रस्तावित समाधान
हे सर्व माहीत झाल्यावर, Triton ला प्रत्यक्ष जगातील विशिष्ट निर्देशांकावर हलवण्याचे समाधान म्हणजे लक्ष्य निर्देशांक आणि Triton च्या वर्तमान निर्देशांकाच्या संदर्भात Triton च्या अंतर त्रुटीसाठी आणि थीटा त्रुटीसाठी प्रमाण नियंत्रक वापरणे. परंतु हे प्रत्यक्ष प्रणालीमध्ये लागू करण्यापूर्वी, मला ही कल्पना सिम्युलेशनमध्ये तपासायची होती आणि त्या वेळी, सिम्युलेशन म्हणून TurtleSim वापरणे हा सर्वोत्तम पर्याय आहे असे मला वाटले.
सिम्युलेशनमध्ये चाचणी
सैद्धांतिक समाधान स्पष्ट केल्यानंतर, प्रत्यक्ष जगातील परिस्थितीऐवजी सिम्युलेशनद्वारे सुरुवातीला त्याची पडताळणी करण्याचा मी निर्णय घेतला. प्रत्यक्ष जग अनेकदा अशा आवाजाने भरलेले असते जो समाधानाच्या परिणामकारकतेत गोंधळ निर्माण करू शकतो आणि असंबंधित समस्यांना सामोरे जाण्यास भाग पाडू शकतो. हे लक्षात घेऊन, मी CSCI473 मधील माझ्या प्रकल्पाकडे पुन्हा वळलो आणि या सैद्धांतिक समाधानासाठी त्याचे चाचणीस्थळ म्हणून रूपांतर केले.
जुना कोड ROS Melodic वरून ROS Noetic वापरण्यासाठी अद्ययावत केल्यानंतर आणि काही पुनरावृत्तीच्या सुधारणा केल्यानंतर, मला प्रस्तावित समाधान TurtleSim मध्ये कार्यरत करता आले. त्याच्या कार्यक्षमतेची प्रात्यक्षिके, काही मनोरंजक लक्ष्य निर्देशांक मार्गांसह, या ब्लॉग पोस्टच्या शेवटी पाहता येतील. या सर्वांचा कोड येथे पाहता येतो.
निष्कर्ष
थोडक्यात, या प्रकल्पाद्वारे TurtleSim मधील टर्टल बंद-लूप प्रणालीचा वापर करून निश्चित निर्देशांकांवर प्रभावीपणे नेव्हिगेट करते आणि 2020 मधील माझ्या सुरुवातीच्या खुल्या-लूप प्रणालीपेक्षा लक्षणीयरीत्या चांगली कामगिरी करते. यशस्वी चाचणीनंतर, मी हे समाधान Triton रोबोट्समध्ये लागू केले. परंतु प्रत्यक्ष जगातील आवाजामुळे अनपेक्षित समस्या निर्माण झाल्या, ज्यांसाठी अनेक आठवडे डीबगिंग आणि प्रत्यक्ष जगातील चाचण्या कराव्या लागल्या. त्या आठवड्यांनंतर, TurtleSim मध्ये तपासलेले समाधान वापरून Triton ला विशिष्ट प्रत्यक्ष-जगातील निर्देशांकांपर्यंत पोहोचवण्यात मला अखेरीस यश आले. TurtleSim मध्ये तपासलेल्या पद्धतीचा वापर करून Triton विशिष्ट प्रत्यक्ष जगातील निर्देशांकांवर जात असल्याचे प्रात्यक्षिक येथे आहे:
मागे वळून पाहता, प्रत्यक्ष जगातील भौतिकशास्त्राचे अधिक चांगले अनुकरण करणारे सिम्युलेशन मी वापरले असते असे मला वाटते. शिकण्यासाठी TurtleSim उत्तम आहे, पण प्रत्यक्ष जगातील रोबोटिक्सच्या कल्पनांची चाचणी घेण्यासाठी ते तितकेसे चांगले नाही. त्या वेळी, माझ्या साध्या उपयोगाच्या बाबतीत ते पुरेसे चांगले ठरेल असे मला वाटले, पण नंतर तसे नसल्याचे सिद्ध झाले.
या ब्लॉग पोस्टचा प्राथमिक उद्देश TurtleSim मधील टर्टलला आणि त्यानंतर Triton रोबोट्सना निर्दिष्ट लक्ष्य स्थानांवर (X, Y) अचूकपणे नेव्हिगेट करता यावे यासाठी बंद-लूप प्रणालीची निर्मिती स्पष्ट करणे हा होता. हे उद्दिष्ट साध्य झाले असे मला वाटते, परंतु कदाचित त्यामुळे HCR Lab मधील माझ्या कामाबद्दल काही रस निर्माण झाला असेल. हे माहीत असल्यामुळे, HCR Lab मधील माझ्या कामाच्या अनुभवाबद्दल आणखी ब्लॉग पोस्ट्स लिहिण्याची माझी योजना आहे…
हलणारा टर्टल (TurtleSim) प्रात्यक्षिके
या व्हिडिओमध्ये पुढील प्रात्यक्षिके आहेत:
- Cayley Nodal: एक साधी Cayley Nodal रचना
- वर्तुळे: कोळ्याच्या जाळ्यासारखी रचना
- आतील वर्तुळे: “वर्तुळांच्या आत वर्तुळे” अशी रचना
- M: एक अतिशय साधी M रचना