Praktikum 3 - Andurid, if-lause, bang-bang kontroller

Enne praktikumi juurde asumist

  1. Mine lehele https://github.com/sinu kasutajanimi/robotont_blank_scripts, kus asenda sinu kasutajanimi oma kasutajanimega.

  2. Vajuta rohelist nuppu “Clone or download”

  3. Kopeeri sealt aadress

  4. Ava terminal, loo ssh-ühendus robotisse ning trüki sinna

    cd catkin_ws/src

  5. Seejärel sisesta

    git clone -sinu-kopeeritud-link-

  6. Seejärel sisesta

    cd robotont_blank_scripts

  7. Seejärel

    git config user.email „YOUR-EMAIL-HERE“

  8. Seejärel

    git config user.name „YOUR-NAME-HERE“

  9. Seejärel sisesta

    git pull https://github.com/ut-ims-robotics/robotont_blank_scripts.git

  10. Nüüd trüki terminali

    catkin build

  11. 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.

../_images/gridlaserscan.png

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.

  1. Ava terminal ning loo ssh-ühendus robotisse.

  2. Kirjuta sinna

    roslaunch robotont_teleop teleop_with_laserscan.launch

    Kui väljund on väga punane, kutsu juhendaja

  3. Nüüd ava uus terminal

  4. Selleks, et vaadata, mis andmeid robot meile annab, kasutame terminalis käsku

    rostopic echo /scan_to_distance

    ../_images/terminal.png

    leftMin, centerMin ja rightMin näitavad minimaalset kaugust igas sektoris. Ühikuks on meeter.

  5. 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

  1. Ava terminal ning loo ssh-ühendus robotisse.

  2. 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.

../_images/tabel.png

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 samuti 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_blank_scripts 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.

    ../_images/yl2setup.png
  4. Koodi jooksutamiseks sisesta terminali

    rosrun robotont_blank_scripts praktikum3_betweenposts.py

  5. Demonstreeri töötavat robotit juhendajale.

Enne praktikumi lõpetamist

  1. Ava uus terminal ning loo ssh-ühendus robotisse
  2. Sisesta sinna cd catkin_ws/src/robotont_blank_scripts
  3. Seejärel git add .
  4. Seejärel git config user.email „YOUR-EMAIL-HERE“
  5. Seejärel git config user.name „YOUR-NAME-HERE“
  6. Seejärel git commit -m „kommentaar mis praktikum oli“
  7. Seejärel git push
  8. Siin sisesta oma githubi kasutajanimi ja parool. Kontrolli, kas sinu github.com lehel uuenesid failid.
  9. Kui uuenesid, siis loo ssh-ühendus robotisse ning sisesta käsureale sudo poweroff.