Programmeerime ROS roboti sõitma

Sissejuhatus

Selles sektsioonis kirjutame programmi, mis paneb roboti sõitma. ROSis on enamasti kasutusel programmeerimiskeeled C++ ja Python. Meie valik on Python, sest see on lihtsam ja sobib paremini programmeerimisega alustamiseks. Pythoniga tutvumisel on abiks Tartu Ülikooli arvutiteaduste instituudi programmeerimisõpik.

ROS-rubriigid

ROSis töötavad samal ajal erinevad sõlmed. Sõlmed on programmid, mis täidavad ROSis mingit konkreetset ülesannet. Näiteks võib üks sõlm suhelda kaameraga ja saata sealt pilti, teine sõlm liigutada soovitud suunas roboti rattad, kolmanda sõlme abil juhtida robotit klaviatuuri abil jne.

Selleks, et kogu robot ühtsena töötaks, peavad sõlmed omavahel suhtlema. Näiteks sõlm, mis paneb rattad liikuma, peab teadma kuhu suunas rattad liikuma panna ning see informatsioon tuleb sõlmelt, kus saad klaviatuuriga robotit juhtida. Suhtlemiseks on ROSis kasutusel ROS-rubriigid. Rubriigil on oma nimi ning sõlmed saavad sinna sõnumeid kuulutada ning sealt tellida. Roboti kiiruse määramiseks on ROSis kujunenud standard rubriik nimega “cmd_vel” (velocity command). Sinna rubriiki saab kuulutada sõnumeid, mis määravad kuhu poole robot liikuma peaks. Samaaegselt tellib sellest rubriigist sõnumeid rattaid juhtiv sõlm, mis edastab saabunud kiirused juba rattaid kontrollivale juhtelektroonikale.

Rubriik cmd_vel

Selleks, et robot liikuma hakkaks, peame sellele edastama info, kui kiiresti ja mis suunas liikuda. Selleks on meile muutmiseks saadaval kolm argumenti: x-suunaline kiirus, y-suunaline kiirus ja z-telje ümber pöörlemiskiirus.

../_images/coord.png

Positiivsed x’i väärtused panevad roboti edasi sõitma, negatiivsed tagurpidi. Positiivsed y’i väärtused panevad roboti vasakule sõitma, negatiivsed paremale. Positiivsed z’i väärtused panevad roboti vastupäeva pöörlema, negatiivsed päripäeva. x ja y väärtused on ühikutes m/s, seega hoia need alla ühe.

Etteantud näidiskoodis on võimalus muuta kõiki kolme argumenti. Esimene eesmärk on aru saada, kuidas need töötavad, et oskaks hiljem neid kasutada ka keerukamatel juhtudel. Leia koodis see koht ning muutes x, y ja z väärtusi, lahenda järgnevad ülesanded.

vel_msg.linear.x = 0
vel_msg.linear.y = 0
vel_msg.angular.z = 0
velocity_publisher.publish(vel_msg)
rospy.sleep(0.1)

Näiteülesanne

  1. Ava terminal ja sisesta käsk
nano catkin_ws/src/ros_koolitus/scripts/move.py

See avab Python’i faili, kus hakkame väärtusi muutma.

  1. Failis on muudatuste tegemiseks eraldi ala, mis on ümbritsetud ridadega YOUR CODE HERE START ja YOUR CODE HERE END.

    ../_images/yourcodehere.png
  2. Määra vel_msg.linear.x väärtuseks 0.2.

  3. Salvesta ning välju.

Programmi käitamine simulaatoris

Tarkvara arendamisel tekib tihtipeale vigu, mis näiteks suurte tööstusrobotite puhul võivad põhjustada pöördumatut kahju nii robotile endale, ümbritsevatele objektidele kui ka roboti operaatorile. Selle vältimiseks on enne programmi käivitamist päris robotil alati kasulik seda põhjalikult testida simulaatoris. ROSi simulatsioonikeskkonnaks on Gazebo. Gazebo võimaldab luua virtuaalse maailma, paigutada sinna robot, ja simuleerida toimuvat.

  1. Gazebo käitamiseks ava uus terminali aken ning sisesta käsk:
roslaunch robotont_description gazebo.launch
  1. Otsi uuesti üles eelmine terminal ja käivita seal oma muudatustega programm:
rosrun ros_koolitus move.py

Märkus

Peatamiseks vajuta samas terminalis korraga klahve Ctrl + C.

  1. Kontrolli, kas robot sõitis otse. Kui ei sõitnud, siis mõtle, mis võis minna valesti ja vajadusel küsi abi juhendajalt.

Ülesanded

Nüüd, kui tutvus on tehtud, proovi lahendada järgmised väljakutsed. Iga ülesande järel kirjuta üles kasutatud x, y ja z väärtused.

  1. Pane robot sõitma tagasi.
  2. Pane robot sõitma vasakule/paremale.
  3. Pane robot pöörama vasakule/paremale.
  4. Pane robot sõitma 45 kraadise nurga all.
  5. Pane robot kaares sõitma.
  6. Pane robot ringis sõitma.

Vahetame simulaatori roboti vastu

Kui simulaatoris sõidab robot nagu soovitud, on aeg proovida sõitmist päris roboti peal. Eelnevas näites töötas ROSi tuum sülearvutis. Selles näites kasutame ROS tuuma, mis käivitatakse robotis koos draiveriga. Nii saab ühendada arvuti ja roboti ühtsesse ROS süsteemi, mis võimaldab sõlmede omavahelist suhtlust hoolimata sellest, et sõlmed ise asuvad hoopis eri arvutite peal.

Kõigepealt käivitame robotis draiveri sõlme, mis ühtlasi paneb käima ka ROS tuuma.

  1. Sulge Gazebo, selleks leia terminal, kust Gazebo käivitasid ja vajuta CTRL + C
  2. Kasutades sama terminali, loo ssh-ühendus robotisse ja käivita seal
roslaunch robotont_teleop teleop_bare.launch

See paneb käima ROSi roboti draiveri sõlme, mis kontrollib rataste kiirusi vastavalt meie saadetud sõnumitele.

Kuna nüüd soovime kasutada ROSi tuuma robotil, siis on vaja sisestada sülearvuti terminalis käsk:

seadista_robot

Sisesta roboti number ja vajuta Enter.

Nõuanne

See käsk teeb mõned muudatused ROS keskkonnaparameetrites. Kõik ROS tööriistad ja programmid, mis edaspidi selles terminali aknas kasutatakse on nüüd seadistatud võtavad simulatsioonikeskkonna asemel ühendust robotiga.

  1. Nüüd tuleb välja ROS tõeline võimekus, sest oma muudetud move.py programmi saad käivitada täpselt nii nagu simulatsiooni puhul.
rosrun ros_koolitus move.py

Märkus

Peatamiseks töötab endiselt klahvikombinatsioon Ctrl + C.

Kopeerime juhtimisprogrammi sülearvutist robotisse

Kui roboti juhtimise eest vastutavad sõlmed on käivitatud mitte roboti vaid mõne muu arvuti peal, siis võib kehva ühenduse korral olla roboti töös tõrkeid ja robot ei reageeri piisavalt kiiresti. Seega on kasulik tagasiside põhjal juhtimissüsteemid hoida võimalikult riistvara lähedal ja vältida aeglase võrgu (näiteks WiFi) mõju.

scp on programm, millega saab kopeerida faile ühest arvutitest teise kasutades ssh-ühendust.

  1. Ava sülearvutis uus terminal ja kopeeri move.py sülearvutist robotisse. Ära unusta asendada clearbot-X oma roboti nimega!
scp ~/catkin_ws/src/ros_koolitus/scripts/move.py kasutaja@clearbot-X:~/catkin_ws/src/ros_koolitus/scripts/
  1. Kontrolli, et eelmises peatükis käivitatud ROS draiver oleks endiselt töökorras.
  2. Ava uus terminal ja sisene ssh kaudu robotisse.
  3. Käivita kopeeritud move.py fail kimbus ros_koolitus.

Kärarohke WiFi võrgu korral võiksid märgata erinevusi võrreldes sülearvutist juhtimisega. Kas robot käitub teisiti või mitte?