Kontrol ng PID gamit ang TurtleSim
Abstrak
Ang Move Turtle ay isang simpleng ROS python script na gumagalaw sa pagong sa TurtleSim ng ROS papunta sa tinukoy na mga coordinate (mga punto). Nagsimula ang proyektong ito bilang isang proyekto sa klase para sa CSCI473 sa Colorado School of Mines (CSOM) at kalaunan ay umunlad tungo sa isang proyekto na ginamit ko upang matulungan akong matutunan kung paano nililikha ang mga closed-loop na sistema, ang kaalamang iyon ay ginamit upang tulungan ako sa trabaho ko sa Human Centered Robotics (HCR) Lab ng CSOM.
Konteksto
Bilang kaunting background, ang ROS ay nangangahulugang Robot Operating Systems. Ang ROS ay isang open-source na middleware para sa robotics, kadalasang pinapares sa operating system na Ubuntu, na ginagamit upang mas mahusay na pamahalaan ang mga software component/cluster ng isang robotic system. Maaari kang matuto nang higit pa tungkol sa paggamit ng ROS sa opisyal na wiki ng ROS. Ang code na sinusulat mo sa ROS ay nasa C++ o Python.
Ang TurtleSim ay isang simpleng 2D na simulator ng robot na ginagamit bilang isang pagpapakilala sa ROS at mga ROS package para sa mga bagong gumagamit ng ROS. Ang lahat ng ginagawa ng TurtleSim ay magbukas ng isang simple 2D na display na may isang pagong. Gumagawa ang pagong na iyon bilang “robot” at maaari kang magpadala ng mga mensahe sa “robot” na iyon upang kumilos at/o umikot. Bagaman kapag gumagalaw, ang TurtleSim ay nagbuo ng ilang random na error upang gayahin ang pisika ng totoong mundo sa isang simpleng paraan.
Alam na kung ano ang ROS at TurtleSim, bakit ko sila ginagamit? Nu’ng Spring 2020 kumuha ako ng klase na tinatawag na “Human Centered Robotics” sa Colorado School of Mines bilang bahagi ng aking load sa undergraduate na computer science. Itinuro ang klase ni Dr. Hao Zhang. Binubuo ang klase ng tatlong proyekto at ang unang proyekto ay binubuo ng pag-setup ng ROS, pag-aaral kung paano gamitin ang ROS, at pagpapatupad ng alinman sa open-loop o closed-loop na algorithm na magpapalakad sa pagong sa TurtleSim upang iguhit ang isang M. Ang orihinal na deskripsyon ng proyekto ay makikita DITO.
Nang kinukuha ko ang klase, natapos ko ang proyektong ito sa pamamagitan ng pagpapatupad ng isang open-loop na algorithm. Gumana ang solusyon na ito ngunit talagang hindi maganda at gumuhit ng isang A na “sapat na” ngunit hindi malapit sa “dakila”. Pagkatapos isumite ang proyekto bandang kalagitnaan ng Pebrero 2020, nakalimutan ko ito hanggang isang taon matapos, mga bandang Pebrero 2021.
Hamon
Noong Pebrero 2021, natanggap ako bilang Research Assistant sa Human Centered Robotics (HCR) Lab sa Colorado School of Mines kung saan nagtrabaho ako sa ilalim ni Dr. Hao Zhang. Layunin ng lab na magsagawa ng pananaliksik sa “lifelong collaborative autonomy, na may layuning payagan ang mga robot na gumana at mag-adapt sa mahabang panahon.” Mula noong 9-1-2022 (Setyembre 1, 2022), lumipat ang lab mula sa Colorado School of Mines patungo sa University of Massachusetts Amherst. Ngunit, noong nagtrabaho ako roon, nasa Colorado pa rin sila.
Sa HCR Lab, inatasan akong magtrabaho sa proyektong Triton. Binubuo ang proyektong Triton ng maraming, dosenang, mga robot na tinatawag na Tritons. Ang mga Triton ay mga triangular na omni wheel ground robots na ganito ang hitsura:
Kasama ng mga Triton, may walong IR Cameras mula sa OptiTrack na inayos sa loob ng isang “octagon order” ilang talampakan mula sa lupa. Gamit ang mga camera na iyon, ang Motive software ng Optitrack, isang PC na tumatakbo ng Windows 10, at ROS; isang 2 metro na x 2 metro na x 2 metro (x, y, z) na espasyo ang nilikha kung saan ang eksaktong posisyon sa totoong mundo ng mga bagay na may motion capture markers ay maaaring matukoy.
Ang unang gawain ko sa proyektong Triton ay gumawa ng mga script na nagpapagalaw sa Triton robot papunta sa isang partikular na posisyon sa totoong mundo. Noong panahong iyon, hindi ako sigurado kung paano ito makakamit ngunit naalala ko ang unang proyekto mula sa CSCI473 kung saan ipinakilala sa akin ang ideya ng isang closed-loop na sistema, kaya nagsimula akong mag-research nang mabuti tungkol sa closed-loop systems at, sa turn, mga feedback system.
Pananaliksik
Sa panahon ng aking pananaliksik, natuklasan ko ang napakagandang video na ito ng AerospaceControlsLab:
Sa videong ito, ipinakita at ipinaliwanag sa akin ang ideya ng isang PID system. Ang isang PID system ay isang closed-loop, control loop na sistema na gumagawa ng mga partikular na output batay sa data mula sa totoong mundo. Sa mga batayang termino, ito ay isang feedback system na ina-adjust ang output nito batay sa pagkakaiba sa pagitan ng ninanais na halaga at ng nasukat na halaga. Ito ang pormula para sa isang PID controller:
$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$
- $u(t)$ ay ang control signal.
- $K_p$, $K_i$, $K_d$ ay ang proportional, integral, at derivative gains ayon sa pagkakasunod-sunod.
- $e(t)$ ay ang error signal (ang pagkakaiba sa pagitan ng ninanais at aktwal na output).
- $\int e(t) dt$ ay ang integral ng error sa paglipas ng panahon.
- $\frac{de(t)}{dt}$ ay ang derivative ng error.
Upang matuto nang higit pa tungkol dito, tingnan ang video ng AerospaceControlsLab o ang kahanga-hangang artikulo sa wikipedia kung saan nanggaling ang pormula.
Matapos gawin ang aking pananaliksik pati na rin kumuha ng tulong mula sa aking matatalinong kaibigan at propesor, napagpasyahan kong ang paggamit ng isang Proportional Controller, P Controller, ang pinakamainam upang matulungang maabot ng Triton ang isang partikular na coordinate.
Dahil ang Triton ay isang ground robot, kailangan ko lamang mag-alala tungkol sa mga X at Y coordinate. Batid ito, kinailangan kong tukuyin kung aling mga ninanais na halaga at nasukat na halaga ang susukatin at ipoproseso sa loob ng P Controller(s). Sa aking pananaliksik natagpuan ko ang kahanga-hangang post sa ROS wiki na tinatawag na Pumunta sa Layunin kung saan nila pinagtutunan ang mga sumusunod na error:
- Error sa Distansya: Ang pagkakaiba sa distansya sa pagitan ng ninanais na lokasyon (X, Y) at ng kasalukuyang lokasyon (X, Y).
- Error sa Theta: Ang pagkakaiba sa pagitan ng ninanais na orientasyon at ng kasalukuyang orientasyon.
Iminungkahing Solusyon
Batid ang lahat ng ito, ang solusyon para mapasunod ang Triton sa isang partikular na coordinate sa totoong mundo ay ang paggamit ng isang Proportional Controller para sa error ng distansya ng Triton at error sa theta kaugnay ng goal coordinate at ng kasalukuyang coordinate ng Triton. Ngunit bago ito ipatupad sa isang pisikal na sistema, gusto ko munang subukan ang ideya sa isang simulation at, noong panahong iyon, inisip kong ang paggamit ng TurtleSim bilang simulation ang pinakamainam na pagpipilian.
Pagsubok sa Simulation
Sa naka-outline na teoretikal na solusyon, pinili kong unang i-validate ito sa pamamagitan ng simulation, sa halip na isang totoong senaryo. Ang totoong mundo ay madalas na magulo ng ingay na maaaring sumalubong sa bisa ng solusyon at humantong sa pagharap sa mga hindi kaugnay na isyu. Kinilala ito, binalik ko ang aking proyekto mula sa CSCI473 at inangkop ito bilang isang testing ground para sa teoretikal na solusyong ito.
Matapos i-update ang lumang code mula sa paggamit ng ROS Melodic tungo sa paggamit ng ROS Noetic at may ilang paulit-ulit na refinement, nakuha kong gumana ang iminungkahing solusyon sa TurtleSim. Makikita ang mga demonstrasyon ng pag-andar nito, na may ilang magagandang landas ng goal coordinate, sa dulo ng blog post na ito. Ang code para sa lahat nito ay makikita DITO.
Konklusyon
Sa kabuuan, sa pamamagitan ng proyektong ito, ang pagong sa TurtleSim ay epektibong nagna-navigate papunta sa itinakdang mga coordinate gamit ang closed-loop na sistema, na mas mahusay nang malaki kumpara sa aking inisyal na open-loop na sistema noong 2020. Matagumpay na nasubukan, ipinatupad ko ang solusyong ito sa mga Triton robots. Ngunit ang ingay sa totoong mundo ay nagpakita ng mga hindi inaasahang isyu na nangangailangan ng mga linggong pag-debug at pagsubok sa totoong mundo. Pagkatapos ng mga linggong iyon, sa huli nakamit kong maabot ng Triton ang mga partikular na coordinate sa totoong mundo sa pamamagitan ng paggamit ng solusyon na sinubukan ko sa TurtleSim. Narito ang demo ng Triton na gumagalaw papunta sa partikular na mga coordinate sa totoong mundo gamit ang metodong sinubukan sa TurtleSim:
Sa pagbalik-tanaw, sana gumamit ako ng isang simulation na mas mahusay mag-simulate ng pisika ng totoong mundo. Maganda ang TurtleSim para sa pag-aaral pero hindi perpekto para sa pagsubok ng mga ideya sa totoong robotics. Noong panahon na iyon, inisip ko na sapat na ito para sa aking simpleng kaso ngunit ipinakita nang kalaunan na hindi iyon ang kaso.
Pangunahing layunin ng blog post na ito ang i-outline ang paglikha ng isang closed-loop na sistema na nagpapahintulot sa pagong sa TurtleSim, at kasunod nito ang mga Triton robots, na eksaktong mag-navigate papunta sa tinukoy na mga goal na posisyon (X, Y). Naniniwala akong naabot ang layuning ito, at maaaring nagbigay ito ng ilang interes sa aking trabaho sa HCR Lab. Batid ito, may mga plano akong gumawa pa ng mga blog post tungkol sa aking karanasan sa trabaho sa HCR Lab…
Mga Demo ng Paggalaw ng Pagong (TurtleSim)
Ang video na ito ay naglalaman ng mga sumusunod na demo:
- Cayley Nodal: Isang simpleng Cayley Nodal na disenyo
- Circles: Isang disenyo na parang spider-web
- Inner Circles: Isang “mga bilog sa loob ng mga bilog” na disenyo
- M: Isang napakasimpleng disenyo ng M