Mis on kontroller?¶
Sissejuhatus¶
Varasemalt tutvusime anduritega ja kuvasime andurite näite. Nüüd uurime, kuidas saame liigutada robotit sõltuvalt andurite näidust. Selleks on olemas kontrollerid. Kontrollerite ülesanne on sõltuvalt sisendist, näiteks andurite näidust, muuta väljundit, näiteks mootorite kiirust. Näiteks auto püsikiirusehoidja mõõdab kiirust ning annab selle järgi erinevalt gaasi. Kui kiirus on väiksem kui soovitud, annab kontroller gaasi juurde ning kui kiirus on suurem kui soovitud, siis laseb gaasi lahti. Järgnevates näidetes kirjutame ise kontrolleri.
Proovime asjadele mitte otsa sõita¶
Võtame lahti faili, kuhu hakkame koodi kirjutama
Ava terminal ning loo ssh-ühendus robotisse.
Trüki terminali
nano catkin_ws/src/robotont/robotont_training/scripts/praktikum3_bangbang.py
See avab Python’i faili, kus hakkame väärtusi muutma.
Selleks, et me Python’is näeksime ja saaksime kasutada neid kaugusi, on meil muutuja nimega distances. Sellel muutujal on meie jaoks olulised kolm väärtust, mis on tabelis välja toodud.
Esialgu kasutame ainult distances.centerMin muutujat ning teeme robotile bang-bang kontrolleri. Bang-bang kontroller ehk eestikeeli kaks-punkt reguleerimine on automaatreguleerimine, kus lülitatakse seadet kahe oleku vahel, olenevalt anduri näidust. Näiteks kui toas on liiga külm, lülitab radiaator end sisse, kui temperatuur on normis või üle, lülitab end välja.
Meie robotiga kasutame bang-bang kontrollerit nõnda:
- Vaatame kui lähedal on eesolev asi
- Kui asi on piisavalt kaugel või takistus puudub, sõidame otse
- Kui asi on liiga lähedal, tagurdame
Ülesanne¶
Ava uus terminal ning loo ssh-ühendus robotisse.
Terminalis sisesta
roslaunch robotont_teleop teleop_with_laserscan.launch
See paneb käima ROSi draiveri, mis kontrollib rataste kiirusi vastavalt meie sõnumitele ning annab ka andmeid eesolevate takistuste kohta.
Kasutades if-else-lauset (https://progeopik.cs.ut.ee/03_liitlaused.html), kirjuta eelnevalt kirjeldatud bang-bang kontroller eelnevalt avatud praktikum3_bangbang.py faili.
Ülesanne on, et robot hoiaks end näiteks 0.5 meetri kaugusel takistusest.
Kasuta väikeseid kiirusi (0.2 m/s või vähem).
Salvesta fail, kasutades klahvikombinatsiooni Ctrl+X.
Koodi käitamiseks sisesta terminali
rosrun robotont_training praktikum3_bangbang.py
Ctrl+C paneb programmi kinni.
Demonstreeri töötavat kontrollerit juhendajale.
Vaatame, kuhu poole peaks sõitma kui ühes kohas asi ees on.¶
Selles ülesandes peab robot oskama nurga alt lähenedes avast läbi sõita.
Ava terminal ja loo ssh-ühendus robotisse ja sisesta
roslaunch robotont_teleop teleop_with_laserscan.launch
VÕI kasuta eelmisest ülesandest juba käivat terminali.
Võta ette uus terminal ning ava seal fail praktikum3_betweenposts.py
Kasutades teadmisi ja oskusi eelnevast ülesandest, kirjuta koodis ettenähtud kohta oma kood. Selle koodi abil peab robot oskama nurga alt avale lähenedes avast läbi sõitma. Nüüd on kasutada ka vasaku ja parema sektori kaugused. Robot peab suutma avast läbi sõita mõlemal pildil näidatud juhul.
Koodi jooksutamiseks sisesta terminali
rosrun robotont_training praktikum3_betweenposts.py
Demonstreeri töötavat robotit juhendajale.