టర్టిల్సిమ్తో PID నియంత్రణ
ప్రాజెక్ట్ యొక్క GitLab రిపోజిటరీ
సారాంశం
Move Turtle అనేది ROS యొక్క TurtleSimలో టర్టిల్ను నిర్దిష్ట కోఆర్డినేట్లకు (బిందువులకు) కదిలించే ఒక సరళమైన ROS పైథాన్ స్క్రిప్ట్. ఈ ప్రాజెక్ట్ కొలరాడో స్కూల్ ఆఫ్ మైన్స్ (CSOM)లో CSCI473 కోసం ఒక తరగతి ప్రాజెక్ట్గా ప్రారంభమైంది. తరువాత క్లోజ్డ్-లూప్ వ్యవస్థలను ఎలా సృష్టించవచ్చో నేర్చుకోవడానికి నేను ఉపయోగించిన ప్రాజెక్ట్గా అభివృద్ధి చెందింది. ఆ జ్ఞానాన్ని CSOM యొక్క హ్యూమన్ సెంటర్డ్ రోబోటిక్స్ (HCR) ల్యాబ్లో నా పనికి సహాయం చేసుకోవడానికి ఉపయోగించాను.
సందర్భం
కొంత నేపథ్యం కోసం, ROS అంటే రోబోట్ ఆపరేటింగ్ సిస్టమ్స్ అని అర్థం. ROS అనేది ఒక ఓపెన్-సోర్స్ రోబోటిక్స్ మిడిల్వేర్. ఇది సాధారణంగా ఉబుంటు ఆపరేటింగ్ సిస్టమ్తో కలిపి ఉపయోగించబడుతుంది మరియు రోబోటిక్ వ్యవస్థలోని సాఫ్ట్వేర్ భాగాలు/క్లస్టర్లను మెరుగ్గా నిర్వహించడానికి ఉపయోగపడుతుంది. ROSను ఎలా ఉపయోగించాలో మీరు ROS యొక్క అధికారిక వికీ ద్వారా మరింత తెలుసుకోవచ్చు. ROSలో మీరు రాసే కోడ్ C++ లేదా పైథాన్లో ఉంటుంది.
TurtleSim అనేది ROS మరియు ROS ప్యాకేజీలకు కొత్త వినియోగదారులకు పరిచయంగా ఉపయోగించే ఒక సరళమైన 2D రోబోట్ సిమ్యులేటర్. TurtleSim చేసేది అంతా ఒక టర్టిల్తో కూడిన సరళమైన 2D ప్రదర్శనను తెరవడమే. ఆ టర్టిల్ “రోబోట్”లా పనిచేస్తుంది, మరియు ఆ “రోబోట్”కు కదలడానికి మరియు/లేదా తిరగడానికి సందేశాలను పంపవచ్చు. కదులుతున్నప్పుడు, వాస్తవ ప్రపంచ భౌతిక శాస్త్రాన్ని సరళమైన రీతిలో అనుకరించడానికి TurtleSim కొంత యాదృచ్ఛిక లోపాన్ని సృష్టిస్తుంది.
ROS మరియు TurtleSim అంటే ఏమిటో తెలుసుకున్న తరువాత, నేను వాటిని ఎందుకు ఉపయోగించాను? 2020 వసంతకాలంలో, నా అండర్గ్రాడ్యుయేట్ కంప్యూటర్ సైన్స్ కోర్సులో భాగంగా కొలరాడో స్కూల్ ఆఫ్ మైన్స్లో “హ్యూమన్ సెంటర్డ్ రోబోటిక్స్” అనే తరగతిని తీసుకుంటున్నాను. ఈ తరగతిని డా. హావో జాంగ్ బోధించారు. ఈ తరగతిలో మూడు ప్రాజెక్ట్లు ఉన్నాయి. మొదటి ప్రాజెక్ట్లో ROSను సెటప్ చేయడం, ROSను ఎలా ఉపయోగించాలో నేర్చుకోవడం, మరియు ఓపెన్-లూప్ లేదా క్లోజ్డ్-లూప్ అల్గారిథమ్ను అమలు చేయడం ఉండేవి; ఆ అల్గారిథమ్ TurtleSimలోని టర్టిల్తో Mని గీయించాలి. అసలు ప్రాజెక్ట్ వివరణను ఇక్కడ చూడవచ్చు.
నేను ఆ తరగతిని తీసుకుంటున్నప్పుడు, ఓపెన్-లూప్ అల్గారిథమ్ను అమలు చేయడం ద్వారా ఈ ప్రాజెక్ట్ను పూర్తి చేశాను. ఈ పరిష్కారం పనిచేసింది, కానీ నిజంగా చాలా చెడ్డగా ఉండి, “సరిపడేంత మంచిదైన” Aని గీసింది, కానీ “గొప్పది”కి మాత్రం ఎక్కడా దగ్గరగా లేదు. 2020 ఫిబ్రవరి మధ్యకాలంలో ప్రాజెక్ట్ను సమర్పించిన తరువాత, ఒక సంవత్సరం తరువాత, సుమారు 2021 ఫిబ్రవరి వరకు దాని గురించి మర్చిపోయాను.
సవాలు
2021 ఫిబ్రవరిలో, కొలరాడో స్కూల్ ఆఫ్ మైన్స్లోని హ్యూమన్ సెంటర్డ్ రోబోటిక్స్ (HCR) ల్యాబ్లో పరిశోధనా సహాయకుడిగా నాకు ఉద్యోగం వచ్చింది, అక్కడ నేను డా. హావో జాంగ్ ఆధ్వర్యంలో పనిచేశాను. “రోబోట్లు దీర్ఘకాలం పనిచేయడం మరియు అనుకూలించడాన్ని సాధ్యం చేయడం” అనే లక్ష్యంతో “జీవితకాల సహకార స్వయంప్రతిపత్తి”పై పరిశోధన చేయడం ల్యాబ్ లక్ష్యం. 9-1-2022 (సెప్టెంబర్ 1, 2022) నాటికి, ల్యాబ్ కొలరాడో స్కూల్ ఆఫ్ మైన్స్ నుండి యూనివర్సిటీ ఆఫ్ మసాచుసెట్స్ అమ్హెర్స్ట్కు మారింది. అయితే, నేను అక్కడ పనిచేసినప్పుడు వారు ఇంకా కొలరాడోలోనే ఉన్నారు.
HCR ల్యాబ్లో, ట్రైటన్ ప్రాజెక్ట్పై పనిచేయాల్సిన బాధ్యత నాకు అప్పగించబడింది. ట్రైటన్ ప్రాజెక్ట్లో ట్రైటన్లు అని పిలువబడే అనేక, డజన్ల కొద్దీ రోబోట్లు ఉన్నాయి. ట్రైటన్లు త్రిభుజాకార ఓమ్ని వీల్ భూభాగ రోబోట్లు; అవి ఇలా కనిపిస్తాయి:
ట్రైటన్లతో పాటు, OptiTrack నుండి ఎనిమిది IR కెమెరాలు నేలపై కొన్ని అడుగుల ఎత్తులో “అష్టభుజి అమరికలో” ఏర్పాటు చేయబడ్డాయి. ఆ కెమెరాలు, OptiTrack యొక్క Motive సాఫ్ట్వేర్, Windows 10 నడుస్తున్న ఒక PC, మరియు 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 వికీలో గో టు గోల్ అనే ఈ అద్భుతమైన పోస్ట్ను కనుగొన్నాను; అందులో వారు క్రింది లోపాలపై దృష్టి పెట్టారు:
- దూర లోపం: కావలసిన స్థానం (X, Y) మరియు ప్రస్తుత స్థానం (X, Y) మధ్య దూరంలోని తేడా.
- థీటా లోపం: కావలసిన దిశ మరియు ప్రస్తుత దిశ మధ్య తేడా.
ప్రతిపాదిత పరిష్కారం
ఇవన్నీ తెలుసుకున్న తరువాత, ట్రైటన్ను ఒక నిర్దిష్ట వాస్తవ ప్రపంచ కోఆర్డినేట్కు కదిలించడానికి పరిష్కారం ఏమిటంటే, లక్ష్య కోఆర్డినేట్ మరియు ట్రైటన్ ప్రస్తుత కోఆర్డినేట్కు సంబంధించి ట్రైటన్ యొక్క దూర లోపం మరియు థీటా లోపం కోసం ఒక అనుపాత కంట్రోలర్ను ఉపయోగించడం. అయితే దీన్ని భౌతిక వ్యవస్థలో అమలు చేయడానికి ముందు, ఈ ఆలోచనను ఒక సిమ్యులేషన్లో పరీక్షించాలని అనుకున్నాను. ఆ సమయంలో, సిమ్యులేషన్గా TurtleSimను ఉపయోగించడం ఉత్తమ ఎంపిక అని భావించాను.
సిమ్యులేషన్లో పరీక్షించడం
సిద్ధాంతపరమైన పరిష్కారాన్ని వివరించిన తరువాత, వాస్తవ ప్రపంచ పరిస్థితి ద్వారా కాకుండా, మొదట సిమ్యులేషన్ ద్వారా దాన్ని ధృవీకరించాలని నిర్ణయించుకున్నాను. వాస్తవ ప్రపంచం తరచుగా శబ్దంతో నిండి ఉంటుంది; అది పరిష్కారం యొక్క ప్రభావశీలతను గందరగోళపరచి, అసంబంధ సమస్యలను ఎదుర్కొనేలా చేయవచ్చు. దీన్ని గుర్తించి, CSCI473లోని నా ప్రాజెక్ట్ను మళ్లీ పరిశీలించి, ఈ సిద్ధాంతపరమైన పరిష్కారానికి పరీక్షా స్థలంగా దాన్ని మార్చాను.
పాత కోడ్ను ROS Melodic ఉపయోగించడం నుండి ROS Noetic ఉపయోగించేలా నవీకరించి, కొంత పునరావృత మెరుగుదల చేసిన తరువాత, ప్రతిపాదిత పరిష్కారం TurtleSimలో పనిచేసేలా చేయగలిగాను. కొన్ని ఆసక్తికరమైన లక్ష్య కోఆర్డినేట్ మార్గాలతో దాని కార్యాచరణకు సంబంధించిన ప్రదర్శనలను ఈ బ్లాగ్ పోస్ట్ చివరలో చూడవచ్చు. వీటన్నింటికీ సంబంధించిన కోడ్ను ఇక్కడ చూడవచ్చు.
ముగింపు
సారాంశంగా, ఈ ప్రాజెక్ట్ ద్వారా, TurtleSim టర్టిల్ క్లోజ్డ్-లూప్ వ్యవస్థను ఉపయోగించి నిర్దేశించిన కోఆర్డినేట్లకు సమర్థవంతంగా నావిగేట్ చేసింది. ఇది 2020లో నేను మొదట రూపొందించిన ఓపెన్-లూప్ వ్యవస్థను గణనీయంగా అధిగమించింది. విజయవంతంగా పరీక్షించిన తరువాత, ఈ పరిష్కారాన్ని ట్రైటన్ రోబోట్లతో అమలు చేశాను. అయితే వాస్తవ ప్రపంచ శబ్దం ఊహించని సమస్యలను సృష్టించింది; వాటికి వారాల తరబడి డీబగ్గింగ్ మరియు వాస్తవ ప్రపంచ పరీక్షలు అవసరమయ్యాయి. ఆ వారాల తరువాత, TurtleSimలో పరీక్షించిన పరిష్కారాన్ని చివరికి ఉపయోగించడం ద్వారా ట్రైటన్ నిర్దిష్ట వాస్తవ ప్రపంచ కోఆర్డినేట్లకు చేరుకునేలా చేయగలిగాను. TurtleSimలో పరీక్షించిన పద్ధతిని ఉపయోగించి ట్రైటన్ నిర్దిష్ట వాస్తవ ప్రపంచ కోఆర్డినేట్లకు కదులుతున్న ప్రదర్శన ఇక్కడ ఉంది:
వెనక్కి చూసుకుంటే, వాస్తవ ప్రపంచ భౌతిక శాస్త్రాన్ని మరింతగా అనుకరించే సిమ్యులేషన్ను ఉపయోగించి ఉండాలని కోరుకుంటున్నాను. నేర్చుకోవడానికి TurtleSim గొప్పది, కానీ వాస్తవ ప్రపంచ రోబోటిక్స్ ఆలోచనలను పరీక్షించడానికి అంత గొప్పది కాదు. ఆ సమయంలో, నా సరళమైన ఉపయోగ సందర్భానికి అది సరిపోతుందని భావించాను, కానీ తరువాత అది అలా కాదని నిరూపించబడింది.
ఈ బ్లాగ్ పోస్ట్ యొక్క ప్రధాన లక్ష్యం TurtleSimలోని టర్టిల్, తదనంతరం ట్రైటన్ రోబోట్లు, నిర్దిష్ట లక్ష్య స్థానాలకు (X, Y) ఖచ్చితంగా నావిగేట్ చేయగల క్లోజ్డ్-లూప్ వ్యవస్థ సృష్టిని వివరించడం. ఈ లక్ష్యం సాధించబడిందని నేను నమ్ముతున్నాను, కానీ ఇది HCR ల్యాబ్లో నా పనిపై కొంత ఆసక్తిని రేకెత్తించి ఉండవచ్చు. ఇది తెలిసినందున, HCR ల్యాబ్లో నా పని అనుభవం గురించి మరిన్ని బ్లాగ్ పోస్ట్లు రాయాలని నేను ప్రణాళికలు కలిగి ఉన్నాను…
కదిలే టర్టిల్ (TurtleSim) ప్రదర్శనలు
ఈ వీడియోలో క్రింది ప్రదర్శనలు ఉన్నాయి:
- కేలీ నోడల్: ఒక సరళమైన కేలీ నోడల్ రూపకల్పన
- వృత్తాలు: సాలీడు గూడు వలె కనిపించే రూపకల్పన
- అంతర్గత వృత్తాలు: “వృత్తాల లోపల వృత్తాలు” రూపకల్పన
- M: చాలా సరళమైన M రూపకల్పన