Robot Operating System - ROS segédlet

Hasonló dokumentumok
Robot Operating System

MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR

Operációs rendszer szintek. Robot Operációs Rendszer. Operációs rendszer szintek. Tartalom Kernel. Programkönyvtárak

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Cisco Catalyst 3500XL switch segédlet

Youtube videó letöltés és konvertálás Linuxon

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

Mobil Informatikai Rendszerek

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Operációs rendszerek. 4. gyakorlat. BASH bevezetés, script írása, futtatása UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

chmod umask chown, chgrp

2017/01/27 08:59 1/6 Gettext Rendszer

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával Útmutató 2010.

Programozás I. gyakorlat

Broadlink RM mini 3 infra vezérlő integrálása az inels rendszerbe

2. lépés: openssh szerver telepítés sudo apt-get install openssh-server

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Országos Területrendezési Terv térképi mellékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával

RapidMiner telepítés i. RapidMiner telepítés

Google Drive szinkronizálása asztali géppel Linux rendszeren

A virtuális környezetet menedzselő program. Első lépésként egy új virtuális gépet hozzunk létre a Create a New Virtual Machine menüponttal.

LINUX PMB LINUXOS PARANCSOK ÉS HASZNÁLATUK - GRUB

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Csomagkezelés haladó. Bakai Dániel, volt reszortvezető

OPERÁCIÓS RENDSZEREK II GYAKORLAT

A L i n u x r u h á j a

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

1_Linux_bevezeto_bash

Az állományok kezelésére használt fontosabb parancsok

Számítógépes Hálózatok

2. gyakorlat: Tartományvezérlő, DNS, tartományba léptetés, ODJ, Core változat konfigurálása, RODC

Bevezető. Servlet alapgondolatok

Mobil Informatikai Rendszerek

FRISSÍTÉSI LEÍRÁS A WINIKSZ PROGRAMCSOMAGHOZ

STATISTICA VERSION 13 CONCURRENT NETWORK TELEPÍTÉSE

Operációs Rendszerek. Windows Parancssor

Beágyazott információs rendszerek 4. házi feladat

LINUX LDAP címtár. Mi a címtár?

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Elemi alkalmazások fejlesztése I.

Néhány kihagyhatatlan Linux tipp és trükk. Ezeket a tippeket olvasóink osztották meg velünk

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Hálózati architektúrák és Protokollok GI 8. Kocsis Gergely

Thermo1 Graph. Felhasználói segédlet

4. Gyakorlat: Csoportházirend beállítások

S z á m í t ó g é p e s a l a p i s m e r e t e k

FortiClient VPN-IPSec kliens konfigurációs segédlet

italc felhasználói dokumentáció

Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0

Szkriptnyelvek. 1. UNIX shell

Linux alapok. Parancsok általános alakja parancs kapcsolók paraméterek

A legfontosabb DOS parancsok

discosnp demo - Peterlongo Pierre 1 DISCOSNP++: Live demo

Linux alapok gyakorlat

Verziókezelt konfigurációmanagement++ Pásztor György, SZTE Klebelsberg Könyvtár

italc felhasználói dokumentáció

Frissítési útmutató

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Automatizált Java Build. ApacheAnt használatával

Programozás C++ -ban 2007/7

LINUX PMB VIRTUALBOX TÖRTÉNELEM DEBIAN ALAPPARANCSOK - GRUB

Java-s Nyomtatványkitöltő Program Súgó

Hálózati adminisztráció Linux (Ubuntu 9.04) 9. gyakorlat

SAMBA. Forrás: Lajber Zoltán: SAMBA alapok dia, SZIE

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

SysVinit / Upstart / Systemd. Zahemszky Gábor mérnök tanácsadó

A MOKKA hitelesítő szoftver telepítése és használata

S z á m í t ó g é p e s a l a p i s m e r e t e k

Számítógépes Hálózatok GY 3-4.hét

Operációs Rendszerek II. labor alkalom

Útmutató az OKM 2007 FIT-jelentés telepítéséhez

Komputeralgebra Rendszerek

Bérprogram vásárlásakor az Ügyfélnek ben és levélben is megküldjük a termék letöltéséhez és aktiválásához szükséges termékszámot.

VIII. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

A NetBeans IDE Ubuntu Linux operációs rendszeren

Programozási nyelvek JAVA EA+GY 1. gyakolat

Operációs rendszerek I. IIII. gyakorlat

Kiszolgálók üzemeltetése. Iványi Péter

Telepítési dokumentáció. Naviscon Informatikai Zrt Budapest, Montevideó utca 16/b.

Bluetooth Software frissítés leírása Android eszköz használata esetén IVE-W530BT

API tervezése mobil környezetbe. gyakorlat

NAV nyomtatványok kitöltésének támogatása

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA-

Programozás alapjai 9.Gy: Struktúra 2.

Selling Platform Telepítési útmutató Gyakori hibák és megoldások

Hardver és szoftver követelmények

Első lépések. File/New. A mentés helyét érdemes módosítani! Pl. Dokumentumok. Fájlnév: pl. Proba

Hálózatok építése és üzemeltetése

Szoftver technológia. Build systems. Cserép Máté ELTE Informatikai Kar 2019.

Telepítés, újratelepítés több számítógépre, hálózatos telepítés Kulcs-Bér program

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Programozás II. 2. Dr. Iványi Péter

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

1. Alapok. Programozás II

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

Átírás:

MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR ÁLTALÁNOS INFORMATIKAI TANSZÉK Robot Operating System - ROS segédlet Intelligens számítási módszerek tárgy gyakorlataihoz Készítette: Tompa Tamás Miskolc, 2014

A ROS-ról A Robot Operating System, vagyis a ROS egy keretrendszer, melyet a robotikában széles körben alkalmaznak. Nyílt forráskódú, amerikai fejlesztésű rendszer, amely könyvtárai segítségével lehetővé teszi robot alkalmazások fejlesztését. Előnye, hogy sok előre beépített funkciót tartalmaz, ilyenek például az arcfelismerés, mozgáskövetés, sztereo látás (több kamera segítségével), robotvezérlés, útvonaltervezés, SLAM, stb. Fejlesztését 2007-ben kezdte a Stanford Artificial Intelligence Laboratory (SAIL) a Stanford AI Robot projekt keretében, majd 2008-ban csatlakozott a fejlesztéshez a Willow Garage és még számos kutatócsoport. Az alábbi ábrán néhány robot látható, melyet a ROS rendszer működtet: A ROS főként Linux operációs rendszert (Mac OS X-et, illetve már Windows-t is, nem stabil!) és C++ illetve Python programozási nyelveket támogat. A ROS-ban elékészült alkalmazásokat node-oknak nevezik, melyek közötti kommunikációt maga a ROS rendszer valósítja meg. A robotot vezérlő ROS alkalmazás több ilyen komponensből (node-ból) épül fel. ROS verziók: Box Turtle (2010 Február) C Turtle (2010 Augusztus) Diamondback (2011 Február) Electric Emys (2011 Augusztus) Fuerte Turtle (2012 Március) Groovy Galapagos (2012 Október) Hydro (2013 szeptember)

1. A ROS telepítése (Installation) A telepítés a különbözős operációs rendszerek esetén eltérő, a következő lépések Ubuntu esetén érvényesek: 1.1 Ubuntu 12.04 (Precise) sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list' 1.1 Ubuntu 12.10 (Quantal) sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu quantal main" > /etc/apt/sources.list.d/ros-latest.list' 1.1 Ubuntu 13.04 (Raring) sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu raring main" > /etc/apt/sources.list.d/ros-latest.list' 1.2 wget http://packages.ros.org/ros.key -O - sudo apt-key add - 1.3 sudo apt-get update 1.4 sudo apt-get install ros-hydro-desktop-full 1.5 sudo rosdep init rosdep update 1.6 echo "source /opt/ros/hydro/setup.bash" >> ~/.bashrc source ~/.bashrc 1.7 source /opt/ros/hydro/setup.bash 1.8 sudo apt-get install python-rosinstall 3

1.9 ROS környezeti változók A ROS rendszer környezeti változóinak lekérdezése * export grep ROS declare -x CMAKE_PREFIX_PATH="/opt/ros/hydro" declare -x CPATH="/opt/ros/hydro/include" declare -x LD_LIBRARY_PATH="/opt/ros/hydro/lib" declare -x OLDPWD="/home/thomas/ros/catkin_ws/src/beginner_tutorials/msg" declare -x PATH="/opt/ros/hydro/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games:/usr/local/games" declare -x PKG_CONFIG_PATH="/opt/ros/hydro/lib/pkgconfig" declare -x PYTHONPATH="/opt/ros/hydro/lib/python2.7/dist-packages" declare -x ROS_ETC_DIR="/opt/ros/hydro/etc/ros" declare -x ROS_PACKAGE_PATH="/home/thomas/ros/catkin_ws/" declare -x ROS_ROOT="/opt/ros/hydro/share/ros" Fontos: a ROS_PACKAGE_PATH nevű környezeti változóhoz hozzá kell adni a használni kívánt munkaterületet (workspace-t) pl.: export ROS_PACKAGE_PATH="/home/thomas/ros/catkin_ws/" A ROS_PACKAGE_PATH -t minden minden egyes újabb megnyitott terminál ablak esetén be kell állítani, ahhoz, hogy erre ne legyen szükség ezen környezeti változó beállításának parancsát bele kell másolni a./ros/catkin_ws/devel/setup.bash-ba, tehát az export ROS_PACKAGE_PATH="/home/thomas/ros/catkin_ws/" utasítás szükséges hozzáadni a setup.bash tartalmához. Ahhoz, hogy a source./ros/catkin_ws/devel/setup.bash parancs (amely beállítja a ROS_PACKAGE_PATH környezeti változót) minden egyes terminálablak megnyitása esetén végrehajtódjon hozzá kell adni a ~/.bashrc- tartalmához. 2. A ROS fájlrendszer felépítése (navigating the ROS filesystem) Packages: ROS csomag, a ROS rendszer alapegysége Manifest (package.xml): ROS csomag leíró, meta információkat tartalmaz a csomagról, legfontosabb feladata a Package függőségek leírása 4

A package.xml felépítésére: <package> <name>foo_core</name> <version>1.2.4</version> <description> This package provides foo capability. </description> <maintainer email="ivana@willowgarage.com">ivana Bildbotz</maintainer> <license>bsd</license> </package> Ahol, a - <name> - a csomag neve - <version> - a csomag verziószáma - <description> - lírás a csomagról, annak tartalmáról - <maintainer> - a szerző neve, aki a csomagot létrehozta - <license> - licensz, (GPL, BSD, ASL, stb) A ROS parancsok felépítése: - rospack = ros + pack(age) - roscd = ros + cd - rosls = ros + ls 2.1 rospack * rospack find [package_name] A package_name nevű csomagot keresi Pl.: rospack find roscpp (a roscpp nevű csomagot keresi) (ahol a roscpp nevű csomag található) YOUR_INSTALL_PATH/share/roscpp Pl. Ubuntu esetén: /opt/ros/hydro/share/roscpp 5

2.2 roscd * roscd [locationname[/subdir]]: a locationname/subdir nevű ROS jegyzékre ugrik Pl.: roscd roscpp 2.3 rosls * rosls [locationname[/subdir]]: A locationname/subdir jegyzék tartalmát listázza Pl.: rosls roscpp_tutorials cmake package.xml srv 3. ROS workspace létrehozása (create a ROS workspace) * mkdir -p ~/catkin_ws/src Létrehozza a catkin_ws/src jegyzéket * cd ~/catkin_ws/src * catkin_init_workspace Létrehoz egy üres ROS munkaterületet * cd ~/catkin_ws/ * catkin_make Létrehoz, lefordít egy ROS projektet A catkin_ws tartalma ez után: - build - devel - src * source devel/setup.bash ROS csomag felépítése ROS csomag, mely létrehozáskor tartalmazza: CMakeLists.txt: cmake-nek szól package.xml: csomag leíró Csomag általános felépítése: my_package/ CMakeLists.txt package.xml 6

Catkin workspace felépítése workspace_folder/ src/ CMakeLists.txt package_1/ CMakeLists.txt package.xml... package_n/ CMakeLists.txt package.xml -- WORKSPACE -- SOURCE SPACE -- 'Toplevel' CMake file, provided by catkin -- CMakeLists.txt file for package_1 -- Package manifest for package_1 -- CMakeLists.txt file for package_n -- Package manifest for package_n 4. Catkin csomag létrehozása (creating a catkin package) * cd ~/catkin_ws/src: jegyzékváltás A ROS projektek a catkin_ws/src nevezetű jegyzékben kell, hogy szerepeljenek. * catkin_create_pkg beginner_tutorials std_msgs rospy roscpp Létrehoz egy beginner_tutorials nevezetű catkin csomagot, mely tartalmazza a package.xml-t és a CMakeLists.txt-t. A parancs általános felépítése: catkin_create_pkg <package_name> [depend1] [depend2] [depend3] 5. ROS csomópontok (ROS nodes) Fogalmak: Node: futtatható ROS alkalmazás, mely képes más ROS alkalmazásokkal (node-okkal, komponensekkel) való kommunikációra, tud publikálni és olvasni a topic-ból és adott néven él a rendszerben. Node írása c++ (roscpp) vagy python-ban (rospy) lehetséges. Message: a node-ok üzenetek segítségével kommunikálnak, ez az üzenet tartalmazza a másik node számára elküldendő információt. Ezen üzenetek kerülnek a topic-ba, a ROS különböző típusú üzenteket alkalmaz. Topic: a csomópontok (node-ok) ide írják üzeneteiket, ezen keresztül kommunikálnak. Ha egy node üzentet akar küldeni egy másik node számára, akkor ezt a topic-on keresztül valósítja meg. Master: a ROS név szerviz szolgáltatása, mindig fut (a háttérben) rosout: ROS szabványos kimenete (stdout/stderr) roscore: ROS központi mag. o roscore = Master + rosout + parameter server 7

ROS mintaprogramok telepítése (ha szükséges, alapból a ROS rendszer része): * sudo apt-get install ros-<distro>-ros-tutorials Pl.: sudo apt-get install ros-hydro-ros-tutorials Parancsok: * rosnode list: aktív node-ok listázása Pl.: rosnode list /rosout * rosnode ping [ros_node] : a ros_node nevezetű node (komponens) elérhetőségét vizsgálja * rosnode kill [ros_node]: a ros_node nevezetű komponens futását megállítja * rosnode info [ros_node]: A ros_node-ról szolgáltat információkat Pl.: rosnode info /rosout ------------------------------------------------------------------------ Node [/rosout] Publications: * /rosout_agg [rosgraph_msgs/log] Subscriptions: * /rosout [unknown type] Services: * /rosout/set_logger_level * /rosout/get_loggers contacting node http://machine_name:54614/... Pid: 5092 5.1 rosrun Egy node futtatását lehetővé tévő parancs. A parancs általános felépítése: rosrun [package_name] [node_name] package_name: csomag neve node_name: node neve Pl.: rosrun turtlesim turtlesim_node 8

Eredménye (elindul a turtlesim_node nevű node): A teknős irányítása: * roscore (új terminál ablakban) : ROS rendszermag * rosrun turtlesim turtlesim_node (új terminál ablakban): maga a turtlesim_node program * rosrun turtlesim turtle_teleop_key (új terminál ablakban): a teknős irányítását lehetővé tevő turtle_teleop_key node Működése: a turtle_teleop_key nevű node billentyű lenomyást figyel, majd billentyű lenyomás hatására ír üzentet a topic-ba, mely üzenetet a turtlesim_node olvassa ésa lenyomott billentyűtől függően irányítja a teknőst. 6. Gráf megjelenítő plugin Telepítése (ha szükséges, alapból a ROS rendszer része): * sudo apt-get install ros-<distro>-rqt * sudo apt-get install ros-<distro>-rqt-common-plugins ahol a <distro> az adott ROS változat pl.: hydro Indítsuk el a roscore-t Majd a rosrun turtlesim turtlesim_node és a rosrun turtlesim turtle_teleop_key-t Ezt követően adjuk ki az alábbi parancsot: * rosrun rqt_graph rqt_graph 9

Az ábrán látható, hogy fut a turtlesim és a turtle_teleop nevű node, melyek közötti kommunikációt a turtle1 nevű topic valósítja meg. 7. Topic A topic a node-ok közötti üzenetváltásra/kommunikációra szolgál, az adott node ide írja üzenetét (publish) és innen olvassa (subscribe) azt. A topic-ban adott ROS üzenettípusok vándorolhatnak a ROS rendszer az üzenetek továbbítását TCP/IP és UDP felett valósítja meg. * rostopic -h A rostopic program argumentumait listázza. 7.1 Echo * rostopic echo [topic] A [topic] üzeneteit listázza. pl.: rostopic echo /turtle1/cmd_vel linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 --- linear: x: 2.0 y: 0.0 z: 0.0 angular: 10

x: 0.0 y: 0.0 z: 0.0 7.2 List * rostopic list -v Az éppen futó topic-okat és azok típusait (mind a published és mind a subscribed) listázza. Published topics: * /turtle1/color_sensor [turtlesim/color] 1 publisher * /turtle1/command_velocity [turtlesim/velocity] 1 publisher * /rosout [roslib/log] 2 publishers * /rosout_agg [roslib/log] 1 publisher * /turtle1/pose [turtlesim/pose] 1 publisher Subscribed topics: * /turtle1/command_velocity [turtlesim/velocity] 1 subscriber * /rosout [roslib/log] 1 subscriber 7.3 Üzenetek A node a topic-okon keresztül kommunikálnak, mely topic-okba üzeneteket tesznek, majd olvasnak. * rostopic type [topic] Az adott topic típusát listázza pl.: rostopic type /turtle1/cmd_vel geometry_msgs/twist * rosmsg show geometry_msgs/twist A geometry_msgs/twist üzenettípusait listázza, eredménye: geometry_msgs/vector3 linear float64 x float64 y float64 z geometry_msgs/vector3 angular float64 x float64 y float64 z 11

7.4 rostopic pub rostopic pub [topic] [msg_type] [args] [topic]: a topic neve [msg_type]: az üzenet typusa [args]: további argumentumok Segítségével lehetséges adott típusú üzenetet küldeni az adott topic-ba. Pl.: rostopic pub -1 /turtle1/cmd_vel geometry_msgs/twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' Mely hatására a /turtle1/cmd_vel topicba a [2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8] geometry_msgs/twist típusú üzenet fog kerülni megmozdul a teknős 7.5 rostopic hz rostopic hz [topic] A [topic] nevű topi-ról szolgáltat információkat, hogy milyen időközönként publikálnak bele/olvasnak belőle. pl.: rostopic hz /turtle1/pose subscribed to [/turtle1/pose] average rate: 59.354 min: 0.005s max: 0.027s std dev: 0.00284s window: 58 average rate: 59.459 min: 0.005s max: 0.027s std dev: 0.00271s window: 118 average rate: 59.539 min: 0.004s max: 0.030s std dev: 0.00339s window: 177 average rate: 59.492 min: 0.004s max: 0.030s std dev: 0.00380s window: 237 average rate: 59.463 min: 0.004s max: 0.030s std dev: 0.00380s window: 290 12

8. Szervízek és paraméterek 8.1 Szervízek (ROS Services) A node-ok közötti kérés-válasz típusú kommunikációt valósítja meg. A szervizek a csomagon belül az srv jegyzékben vannak definiálva, azon belül is egy srv kiterjesztésű fájlban. Szerviz hívása annak nevével lehetséges pl. sample_package1/srv/sample1.srv hívása sample_package1/sample1 formában lehetséges, a szervizek manipulálása a rosservice és a rossrv programmal lehetséges, amely segítségével információkat lehet listázni az adott szervizről, annak tartalmáról, típusáról, stb. rosservice list rosservice call rosservice type rosservice find rosservice uri aktív szervízek információit listázza adott szervízt hívja szerviz típusát listázza az adott típusú szervízt keresi ROSRPC uri-t listázza 8.1.1 rosservice list * rosservice list Az aktív ROS szervízeket listázza. /rosout/get_loggers /rosout/set_logger_level /rostopic_3719_1393664680316/get_loggers /rostopic_3719_1393664680316/set_logger_level /rostopic_3981_1393665629619/get_loggers /rostopic_3981_1393665629619/set_logger_level /teleop_turtle/get_loggers /teleop_turtle/set_logger_level 8.1.2 rosservice type * rosservice type [service] A [service] nevű szerviz típusát adja vissza. Pl.: rosservice type /rosout/get_loggers rosservice type /rosout/get_loggers 13

8.1.3 rosservice call * rosservice call [service] [args] A [service] nevű szolgáltatást hívja. pl.: rosservice call clear * rosservice type spawn rossrv show float32 x float32 y float32 theta string name --- string name * rosservice call spawn 2 2 0.2 "" Ahol a paraméterek jelentése (balról-jobbra 2 2 0.2): x y theta név Vagy egy másik pl.: rosservice call 3 3 0.2 "new_turtle" Hatására megjelenik egy újabb teknős a képernyőn: 14

8.1 Paraméterek (ROS Param) A paraméterek (paraméter szerver) segítségével lehetséges az aktív node-oknak, ROS alkalmazásoknak paramétereket (argumentumokat) átadni, illetve azokat lekérdezni. Ezek kezelésére a rosparam nevezetű program szolgál. rosparam set rosparam get rosparam load rosparam dump rosparam delete rosparam list paraméter beállítása, átadása paraméter lekérdezése paraméter betöltése fájlból paraméterek írása fájlba paraméterek törlése paraméterek listázása 8.1.1 rosparam list * rosparam list Az aktív node-ok paramétereit listázza. /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_aaronmr_laptop 60878 /rosversion /run_id Ahol a background paraméterek a turtlesim nevű node paraméterei. 8.1.2 rosparam get, rosparam set Kérdezzük le a background_b paraméter értékét: * rosparam get /background_b 255 (a háttérszín színkódja) Változtassuk meg a background_b paraméter értékét (150-re, azaz lilára): * rosparam set background_r 150 * rosservice call clear (változtatások végrehajtása, frissítés) * rosparam get / Az összes aktuális paraméter listázása. 15

8.1.2 rosparam dump, load * rosparam dump [file_name] * rosparam load [file_name] [namespace] Paraméterek fájlba írására és fájlból való olvasásár szolgál. Paraméterek fájlba írása pl: rosparam dump params.yaml Paraméterek betöltése fáljból pl: rosparam load params.yaml copy 9. MSG és SRV msg: egyszerű szöveges fájl, amely ROS üzenetekről tartalmaz információt, leírja a továbbítandó adat típusát, felépítését. Parancs: rosmsg srv: szervízt leíró fájl. Két részre bontható: request és response. header fájlok: speciális fájl a ROS-ban, Az msg és az srv kiterjesztésű fájloknak a csomagon belül az srv és msg jegyzékekben kell szerepelniük. Példa header fájl tartalmára (egy string-et és két msgs üzenettípust tartalmaz): Header header string child_frame_id geometry_msgs/posewithcovariance pose geometry_msgs/twistwithcovariance twist Az srv fájl két részből áll (request, response), melyet az alábbi módon szükséges elkülöníteni: int64 A int64 B --- int64 Sum Ahol A, B a request és Sum pedig a response. 16

9.1 MSG, rosmsg Egyszerű szöveges fájl, az alábbi típusokat tartalmazhatja: int8, int16, int32, int64 float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[c] MSG fájl létrehozásának lépései: 9.1.1 * cd ~/catkin_ws/src/beginner_tutorials * mkdir msg * echo "int64 num" > msg/num.msg Létrehoz a beginner_tutorilas nevű csomagban egy msg jegyzéket és abban egy Num.msg fájlt, melyben egy int64 típusú num nevű változó található. 9.1.2 Nyissuk meg a package.xml-t és adjuk hozzá az alábbi sorokat: <build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend> 9.1.3 Nyissuk meg a CMakeList.txt-t, keressük meg az alábbi sort és módosítsuk erre: find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) 9.1.4 Módosítsuk az alábbi sor tartalmát (CMakeList.txt): catkin_package(... CATKIN_DEPENDS message_runtime......) 9.1.5 Módosítsuk az alábbi kódrészletet(cmakelist.txt) : 17

Erről: # add_message_files( # FILES # Message1.msg # Message2.msg # ) Erre: add_message_files( FILES Num.msg ) 9.1.6 Az alábbi sort is adjuk hozzá (CMakeList.txt): generate_messages() 9.1.7 rosmsg Adott üzenet típusát listázza: Általános felépítés: rosmsg show [message type] Pl.: rosmsg show beginner_tutorials/num int64 num 9.2 SRV, rossrv SRV létrehozásának lépései: 9.2.1 * roscd beginner_tutorials * mkdir srv Létrehoz a beginner_tutorials nevű csomagban egy srv nevű jegyzéket. 9.2.2 * roscp rospy_tutorials AddTwoInts.srv srv/addtwoints.srv Átmásolja a rospy_tutorials AddTwoInts.srv t a mi srv jegyzékünkbe. 18

9.2.3 A CMakeList-txt-ben módosítsuk az alábbi sort: find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) 9.2.4 Szintén a CMakeLsit-txt-ben módosítsuk: Erről: # add_service_files( # FILES # Service1.srv # Service2.srv# ) Erre: add_service_files( FILES AddTwoInts.srv ) 9.2.5 rossrv Parancs általános felépítése: rossrv show <service type> amely a <service_type> szervizt listázza. Pl.: * rossrv show beginner_tutorials/addtwoints int64 a int64 b --- int64 sum Pl2.: * rossrv show AddTwoInts [beginner_tutorials/addtwoints]: int64 a int64 b --- int64 sum [rospy_tutorials/addtwoints]: int64 a int64 b 19

--- int64 sum Projekt újrafordítása: $ cd../.. $ catkin_make 10. Publikáló és olvasó node létrehozása, futtatása 10.1 Váltsunk a beginner_tutorilas csomagra: * cd ~/catkin_ws/src/beginner_tutorials 10.2 Ha nem létezne azon belül egy src nevű jegyzék, akkor hozzuk azt létre: * mkdir -p ~/catkin_ws/src/beginner_tutorials/src 10.3 Az src nevű jegyzéken belül hozzunk létre egy talker.cpp és egy listener.cpp nevű állományt. 10.4 A talker.cpp tartalma https://raw.github.com/ros/ros_tutorials/groovy-devel/roscpp_tutorials/talker/talker.cpp 10.5 A listener.cpp tartalma https://raw.github.com/ros/ros_tutorials/groovy-devel/roscpp_tutorials/listener/listener.cpp 20

10.6 CMakeList.txt tartalmának módosítása cmake_minimum_required(version 2.8.3) project(beginner_tutorials) ## Find catkin and any catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg) ## Declare ROS messages and services add_message_files(files Num.msg) add_service_files(files AddTwoInts.srv) ## Generate added messages and services generate_messages(dependencies std_msgs) ## Declare a catkin package catkin_package() ## Build talker and listener include_directories(include ${catkin_include_dirs}) add_executable(talker src/talker.cpp) target_link_libraries(talker ${catkin_libraries}) add_dependencies(talker beginner_tutorials_generate_messages_cpp) add_executable(listener src/listener.cpp) target_link_libraries(listener ${catkin_libraries}) add_dependencies(listener beginner_tutorials_generate_messages_cpp) 10.7 Projekt újrafodítása * cd catkin_ws * catkin_make Fontos: A catkin_make parancs a catkin_ws-en belül legyen kiadva! 10.8 Node-ok futtatása roscore indítása: * roscore talker nevű node futtatása: * rosrun beginner_tutorials talker listener nevű node futtatása: * rosrun beginner_tutorials listener 21

11. Szerviz (szerver és kliens) létrehozása 11.1 Váltsunk az a catkin_ws/src/beginner_tutorilas nevezetű ROS csomagra, jegyzékre: * cd ~/catkin_ws/src/beginner_tutorials 11.2 Hozzunk létre az src jegyzéken belül egy add_two_ints_server.cpp állományt. Pl.: touch add_two_ints_server.cpp 11.3 Az add_two_ints_server.cpp forráskódja: #include "ros/ros.h" #include "beginner_tutorials/addtwoints.h" bool add(beginner_tutorials::addtwoints::request &req, beginner_tutorials::addtwoints::response &res) { res.sum = req.a + req.b; ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b); ROS_INFO("sending back response: [%ld]", (long int)res.sum); return true; } int main(int argc, char **argv) { ros::init(argc, argv, "add_two_ints_server"); ros::nodehandle n; ros::serviceserver service = n.advertiseservice("add_two_ints", add); ROS_INFO("Ready to add two ints."); ros::spin(); return 0; } 22

11.4 Hozzunk létre az src jegyzéken belül egy add_two_ints_client.cpp állományt. Pl.: touch add_two_ints_client.cpp 11.5 Az add_two_ints_client.cpp forráskódja: #include "ros/ros.h" #include "beginner_tutorials/addtwoints.h" #include <cstdlib> int main(int argc, char **argv) { ros::init(argc, argv, "add_two_ints_client"); if (argc!= 3) { ROS_INFO("usage: add_two_ints_client X Y"); return 1; } ros::nodehandle n; ros::serviceclient client = n.serviceclient<beginner_tutorials::addtwoints>("add_two_ints"); beginner_tutorials::addtwoints srv; srv.request.a = atoll(argv[1]); srv.request.b = atoll(argv[2]); if (client.call(srv)) { ROS_INFO("Sum: %ld", (long int)srv.response.sum); } else { ROS_ERROR("Failed to call service add_two_ints"); return 1; } return 0; } 23

11.6 A CMakeList.txt tartalmának módisítása az alábbira: add_executable(add_two_ints_server src/add_two_ints_server.cpp) target_link_libraries(add_two_ints_server ${catkin_libraries}) add_dependencies(add_two_ints_server beginner_tutorials_gencpp) add_executable(add_two_ints_client src/add_two_ints_client.cpp) target_link_libraries(add_two_ints_client ${catkin_libraries}) add_dependencies(add_two_ints_client beginner_tutorials_gencpp) 11.7 Projekt újrafordítása: * cd ~/catkin_ws * catkin_make 11.8 roscore futtatása: * roscore 11.9 Szerver futtatása: rosrun beginner_tutorials add_two_ints_server Ready to add two ints. 11.10 Kliens futtatása: rosrun beginner_tutorials add_two_ints_client 1 3 Requesting 1+3 1 + 3 = 4 24

Felhasznált irodalom: http://wiki.ros.org/ros/tutorials Aaron Martinez, Enrique Fernández - Learning ROS for Robotics Programming 25