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** 1. Ava terminal ning loo ssh-ühendus robotisse. 2. Trüki terminali .. code-block:: bash 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. .. figure:: ../images/lab03/tabel.png :scale: 100 % .. 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 -------- 1. Ava uus terminal ning loo ssh-ühendus robotisse. 2. 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. 3. 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. 4. Kasuta väikeseid kiirusi (0.2 m/s või vähem). 5. Salvesta fail, kasutades klahvikombinatsiooni Ctrl+X. 6. Koodi käitamiseks sisesta terminali **rosrun robotont_training praktikum3_bangbang.py** Ctrl+C paneb programmi kinni. 7. 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. 1. 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. 2. Võta ette uus terminal ning ava seal fail **praktikum3_betweenposts.py** 3. 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. .. figure:: ../images/lab03/yl2setup.png :scale: 70 % .. 4. Koodi jooksutamiseks sisesta terminali **rosrun robotont_training praktikum3_betweenposts.py** 5. Demonstreeri töötavat robotit juhendajale.