Praktikum 3 - Andurid, if-lause, bang-bang kontroller¶
Enne praktikumi juurde asumist¶
Mine lehele https://github.com/sinu kasutajanimi/robotont_blank_scripts, kus asenda sinu kasutajanimi oma kasutajanimega.
Vajuta rohelist nuppu “Clone or download”
Kopeeri sealt aadress
Ava terminal, loo ssh-ühendus robotisse ning trüki sinna
cd catkin_ws/src
Seejärel sisesta
git clone -sinu-kopeeritud-link-
Seejärel sisesta
cd robotont_blank_scripts
Seejärel
git config user.email „YOUR-EMAIL-HERE“
Seejärel
git config user.name „YOUR-NAME-HERE“
Seejärel sisesta
git pull https://github.com/ut-ims-robotics/robotont_blank_scripts.git
Nüüd trüki terminali
catkin build
Kui see protsess on lõpetanud edukalt, sulge terminal ja oled valmis praktikumiga jätkama.
Mis andurid on Clearbotil?¶
Clearbotil on peal Realsense D435 3D kaamera, millest saab tavalise kaamerapildi ja sügavuspildi. Käesolevas praktikumis kasutame 3D kaamerast sügavuspildi andmeid. Aga mitte toorelt. Nimelt on 3D sügavuspildist võetud ainult üks riba ning tehtud sellest 2D laserskann. See laserskann on omakorda jagatud kolmeks ja võetud minimaalsed takistuste kaugused paremal, keskel ja vasakul.
Samuti on roboti ratastel enkoodrid, mis mõõdavad, kui palju ratas on liikunud, kuid seda me veel siin praktikumis ei kasuta.
Mis on kontroller?¶
Eelmises lõigus tutvustati, mis on andurid. Nüüd on vaja ka teada, 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 ning kui kiirus on suurem kui soovitud, siis laseb gaasi lahti. Ka selles praktikumis kirjutame ise kontrolleri.
Kui kaugel on meist eespool paiknevad asjad?¶
Selleks, et teada, kui kaugel on lähim asi vasakul, keskel ja paremal, saame tellida ROS rubriiki “/scan_to_distance”, mis annab meile laserskannist arvutatud väärtused.
Ava terminal ning loo ssh-ühendus robotisse.
Kirjuta sinna
roslaunch robotont_teleop teleop_with_laserscan.launch
Kui väljund on väga punane, kutsu juhendaja
Nüüd ava uus terminal
Selleks, et vaadata, mis andmeid robot meile annab, kasutame terminalis käsku
rostopic echo /scan_to_distance
leftMin, centerMin ja rightMin näitavad minimaalset kaugust igas sektoris. Ühikuks on meeter.
Liiguta oma kätt kaamera ees ning jälgi kuidas väärtused muutuvad.
Nüüd kui oleme aru saanud, kuidas need kaugused töötavad, on aeg neid kasutada.
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_blank_scripts/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 samuti 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_blank_scripts 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_blank_scripts praktikum3_betweenposts.py
Demonstreeri töötavat robotit juhendajale.
Enne praktikumi lõpetamist¶
- Ava uus terminal ning loo ssh-ühendus robotisse
- Sisesta sinna cd catkin_ws/src/robotont_blank_scripts
- Seejärel git add .
- Seejärel git config user.email „YOUR-EMAIL-HERE“
- Seejärel git config user.name „YOUR-NAME-HERE“
- Seejärel git commit -m „kommentaar mis praktikum oli“
- Seejärel git push
- Siin sisesta oma githubi kasutajanimi ja parool. Kontrolli, kas sinu github.com lehel uuenesid failid.
- Kui uuenesid, siis loo ssh-ühendus robotisse ning sisesta käsureale sudo poweroff.