Simulatsioonide kasutamine on hea viis ROSi õppimiseks ilma, et peaks füüsilist robotit omama. Selles peatükis kasutame lihtsalt 2D simulatsiooni nimega Turtlesim.
Esmalt käivitame roscore:
$ roscore
Käivitame sõlme nimega turtlesim_node teegist turtlesim:
$ rosrun turtlesim turtlesim_node
Kui sõlm käivitada avaneb simulatsioon graafilise kasutajaliisedega.
Teek sisaldab ka sõlme, mille abil saab klaviatuuriga robotile liikumise sõnumeid saata.
Käivitame uues terminali aknas roboti kaugjuhtimise sõlme:
$ rosrun turtlesim turtle_teleop_key
Kui nüüd selles terminalis nooleklahve vajutada, saame robotit simulatsioonis liigutada:
Vaatame kuidas see töötab, kasutades tööriista rqt_graph, mis visualiseerib sõlmede ja teemade suhteid:
$ rqt_graph
Käsu käivitades avaneb graafiline kasutajaliides. Näeme, et sõlm /teleop_turtle loeb noolteklahvide vajutusi ja teeb nendest roboti kiiruse geometry_msgs/Twist. See saadetakse teemasse /turtle1/command_velocity, mida kuulab roboti simulatsioon. Kui samad sõlmed jooksutada erinevate arvutite peal, siis saame robotit teisest arvutist juhtida. Sarnast konfiguratsiooni kasutatakse tihti päris robotite kaugjuhtimiseks.
Roboti juhtimiseks kasutatakse sõnumi tüüpi geometry_msgs/Twist, mis koosneb lineaar- ja nurkkiirusest. Proovime ise käsurea pealt kiiruse avaldada. TAB klahvi saab kasutada käsu automaatseks lõpetamiseks. Kasutame tööriistal rostopic pub argumenti -r 1, mis saadab ette antud sõnumit 1 Hz sagedusega:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
Näeme, et robot liigub simulatsioonis ringjoonelisest.
Teemas olevate andmete visualiseerimiseks ajas kasutatakse tööriista rqt_plot. Selle tööriista abil on võimalik kuvada sõnumite väärtusi graafikuna. Seda tööriista saab kasutada näiteks andurite väärtuste visualiseerimiseks. Turtlesim simulaator avaldab roboti x ja y kordinaadid teemasse /turtle1/pose/x ja /turtle1/pose/y. Proovime neid teemasid graafikul kuvada.
Käivita rqt_plot:
$ rqt_plot
Kui lisada graafikule teemad /turtle1/pose/x ja /turtle1/pose/y näeme reaalajas roboti asukohta x ja y teljel: