OPERAČNÍ SYSTÉM ROS PROJEKT Z PŘEDMĚTU. Ing. Sergei Korchakov

Podobné dokumenty
Robot Operating System. Ing. Zdeněk Materna,

NÁVRH A REALIZACE NAVIGAČNÍHO SYSTÉMU PRO MOBILNÍ ROBOT BENDER II

MRBT. ROS Robot Operating System. Tomáš Florián

Aplikace. Hlásič SMS

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

PROGRAMOVATELNÉ AUTOMATY FATEK

Globální navigační satelitní systémy a jejich využití v praxi

4x standardní vstupy

Messenger. Novell 1.0 UMÍSTĚNÍ DOKUMENTACE K PROGRAMU NOVELL MESSENGER. STRUČ NÁ ÚVODNÍ PŘ ÍRUČ KA

Popis vývodů desek, jejich zapojování a spárování robota

Uživatelská příručka

PŘÍLOHY. PRESTO USB programátor

Uživatelská příručka

Návod k instalaci ovladače převodníku USB - serial

Inteligentní učebna a měřicí pracoviště

IPZ laboratoře. Analýza komunikace na sběrnici USB L305. Cvičící: Straka Martin, Šimek Václav, Kaštil Jan. Cvičení 2

OPS Paralelní systémy, seznam pojmů, klasifikace

NÁVOD K INSTALACI A OBSLUZE

Vlákna a internetové protokoly

PROGRAMOVÁNÍ ROBOTŮ LEGO MINDSTORM S VYUŽITÍM MATLABU

ROS, ultrazvukový dálkoměr SRF, mobilní robotika, Linux, Lego NXT, Raspberry Pi

Internet Information Services (IIS) 6.0

Uživatelský manuál A4000BDL

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

QAD CRM. Vladimír Bartoš. konzultant

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

Simluátor Trilobota. (projekt do předmětu ROB)

Instalace nvidia Optimus v Ubuntu 14.04

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

TW15 KONCOVÝ PRVEK MSKP. Popis výrobku Technická data Návod k obsluze. Technologie 2000 s.r.o., Jablonec nad Nisou

Instalační příručka Command WorkStation 5.6 se sadou Fiery Extended Applications 4.2

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

APS Key.Reader. Program pro komunikaci s moduly systému APS Key. Uživatelská příručka

INFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE

APS Administrator.GS

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

VDDMAIL by ESCAD, Corp. (Součást IWSE.NET Services by ESCAD, Corp.)

Komunikační protokol pro Fotometr 2008

Funkce, podmíněný příkaz if-else, příkaz cyklu for

PROSTŘEDKY AUTOMATICKÉHO ŘÍZENÍ Úloha č. 4 Hierarchická struktura řízení

Firmware USBasp pro modul AVRUSB. Milan Horkel. Parametr Hodnota Poznámka. Rozhraní USB Low Speed. Procesor ATmega8 ATmega88 Varianty překladu

IP kamera. Uživatelský manuál

Obsah ZÁKLADNÍ DESKA. O autorech 11 Úvod 13

Návod ke cvičení předmětu BPGA ControlLogix

VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ DATABÁZOVÉ SYSTÉMY ARCHITEKTURA DATABÁZOVÝCH SYSTÉMŮ. Ing. Lukáš OTTE, Ph.D.

Operační systémy. Cvičení 4: Programování v C pod Unixem

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Programování v Pythonu

Algoritmizace a programování

Dokumentace ke knihovně InsDevice

A4300BDL. Ref: JC

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Internet. Počítačová síť, adresy, domény a připojení. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

DUM č. 20 v sadě. 29. Inf-5 RoboLab a Lego Mindstorms

Uživatelská příručka

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Softwarové komponenty a Internet

Uživatelská příručka k síťovému projektoru

TMU. USB teploměr. teploměr s rozhraním USB. měření teplot od -55 C do +125 C. 26. května 2006 w w w. p a p o u c h. c o m

KP KP KP DIAGNOSTIKA KOTLŮ KP

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Instalace Debianu pomocí debootstrap

4.2. Odhlásit se Šifrování hesla Sepnutí výstupních relé Antipassback Zobrazení všech dat...

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

Záznam dat Úvod Záznam dat zahrnuje tři základní funkce: Záznam dat v prostředí třídy Záznam dat s MINDSTORMS NXT

Programovací software ConfigTool. Základní obsluha a postup připojení k zařízení přes USB a GPRS. Verze 2.00

FN485 Gateway 2 Galvanically Isolated V1.0 Instalační návod

Vzdálená správa v cloudu až pro 250 počítačů

Témata profilové maturitní zkoušky

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Obor SOČ: 18. Informatika. Školní sdílení PC obrazovek. School sharing PC screens

B Series Waterproof Model. IP Kamera. Uživatelský manuál

Specifikace Bridge TEM

Komunikace s automaty MICROPEL. správa systému lokální a vzdálený přístup do systému vizualizace, umístění souborů vizualizace

Aplikace BSMS. Uživatelská příručka - 1 -

Uživatelský modul. DF1 Ethernet

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

STRUČNÝ NÁVOD K POUŽITÍ

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ MEIV Souborná činnost na složitých elektronických zařízeních zaměřená na servisní a profesní působení studenta

Technická dokumentace TRBOcontrol

11. Přehled prog. jazyků

APS 400 ipanel. Online informační a ovládací panel pro systém APS 400. Uživatelská příručka

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Robot Pošťák. Platforma Unibot. Projekt do předmětu ROBOTIKA

Raspberry Pi - security system

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

Motorola Phone Tools. Začínáme

Návod ke cvičení předmětu BPGA SLC 500

Konfigurátor Duo. Manuál pro konfiguraci systémů DUO Standard / Basic. Obsah + vybraná nastavení: - 1 -

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Analýza Systém Správce

1 Uživatelská dokumentace

CCTV Tester Uživatelský manuál ver Požadavky na systém

Connection Manager - Uživatelská příručka

InTouch Příklady architektur

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Co je uvnitř - senzory a přístrojová technika v NXT robotech. Pavel Ripka katedra měření ČVUT

TRUST USB2 EASY FILE TRANSFER CABLE. Instrukce při prvním použití 1. Instalace ovladače (4.2) 2. Připojení kabelu (4.3)

Transkript:

OPERAČNÍ SYSTÉM ROS PROJEKT Z PŘEDMĚTU MRBT AUTOŘI PRÁCE VEDOUCÍ PRÁCE Ing. Irina Trukhina Ing. Sergei Korchakov Ing. Tomáš Florián Brno, 2013

Zadání projektu Seznamte se s operačním systémem ROS [1]. Vyberte vhodnou HW platformu, na kterou ROS naistalujte a navrhněte řídicí software, kterým bude řídit vybraný (po konzultaci s vedoucím) podvozek robotu. Podle možností napište program pro řízení podvozku robotu. Úvod Při rozpracování robota je nutné vytvořit následující věci: - architekturu, - komunikační protokol, - převod množin dat do společného systému koordinát, - drivery řídícího zařízení, - navigační systém apod. Ačkoli můžeme použit různé hotové knihovny pro tyto účely, pak to musíme sloučit do jediného systému, co vyžaduje relativně mnoho času a práce. Abychom mohli rychle a snadno spojit různé moduly do systému potřebujeme nějaký operační systém. Pro roboty to může byt ROS robotic operatin sistem. ROS je v podstatě framework pro robotické platformy, který umožňuje sestavení řídícího SW z jednotlivých modulů. ROS se instaluje na operační systém Ubuntu Linux a používá jeho možnosti. Zdrojový kód ROS je volně přístupný pro používání, úpravy a studium. Pro ROS jsou realizovány drivery všelijakého zařízení, které používají stejné zásady komunikace: - joysticků, - GNSS, - kamer, - mikrokontrolérů apod. Kromě toho ROS obsahuje knihovny a aplikace pro roboty: - logovací systém, - aplikace pro vizualizaci dat, - převod koordinát, - rozpoznávání objektů apod. Při programování robota pomocí ROS je možné používat hotové moduly a knihovny a soustředit se pouze na vypracování řídicích funkcí. Heslo ROS je don't revinvent the wheel. ROS se snaží sebrat a dat do hromady hotové řešení pro různé roboty, aby každý uživatel mohl to použit a také se podělit o své aplikace. A proto ROS podporuje spoustu různých robotů, například: - PR2, - TurtleBot, - PR1, - HERB, - STAIR I и II, - irobot Create, - Lego Mindstorms NXT apod. Pomocí ROS se dá realizovat velkou úlohu pomocí sady malých programů uzlů (Node), které budou komunikovat prostřednictvím tzv. témat (Topic). Uzly si navzájem posílají zprávy. Celá aplikace vypadá jako graf (viz.obr.1). Obr.1. Grafová struktura ROS aplikace

Taková distribuovaná struktura aplikace umožňuje, aby nad programem nezávisle pracovalo několik lidí. V současné době ROS podporuje Python, C++, Lisp. Má experimentální knihovny v jazycích Java a Lua. 1. ROS (robotic operatin sistem) 1.1. Souborový systém ROS Souborový systém ROS obsahuje další entity: - Package (Balík) je hlavní entita ROS, může obsahovat knihovny, nástroje, spustitelné soubory apod. - Manifest (manifest.xml) je soubor, který popisuje balík. Hlavní cíl manifestu je určování závislostí mezi balíky. - Stack je sada balíků, která tvoří další úroveň knihovny. Je primárním mechanismem ROS pro šíření softwaru. - Stack manifest (stack.xml) je soubor, který obsahuje informace o stacku. 1.2. ROS, koncepce grafu Komunikační graf je P2P síť ROS uzlů. Graf obsahuje uzly (nodes), Master, Parameter server, zprávy (messages), servisy (servises), témata (topics) a bags. 1.2.1. Uzly ROS Uzly ROS jsou v podstatě spustitelné soubory. Uzly ROS používají klientské knihovny ROS, aby se navzájem komunikovaly. Uzly můžou publikovat zprávy do určitého tématu a také přijímat zprávy z určitých témat. Také můžou poskytovat nebo používat služby (Service). Klientské knihovny ROS umožňují realizaci uzlů ROS v různých jazycích: - Rospy - klientská knihovna pro Python, - Roscpp - klientská knihovna pro C++. Roscore je sada uzlů a programů, které definují ROS systém a umožňují vykonávání ROS aplikací. Aby si uzly ROS aplikací mohly navzájem komunikovat, nejdřív potřebujeme spustit roscore. $ roscore Rosnode vizualizuje informace o všech spouštěných uzlech. Příkaz rosnode list udává seznam spouštěných uzlu. $ rosnode list V ROS je vždycky spuštěn uzel rosout, který sbírá a zapisuje do logovacího souboru ladící informace uzlů. Příkaz rosnode info vrátí informaci o určitém uzlu. $ rosnode info /rosout Rosrun umožňuje spouštění ROS uzlu (bez ukázaní absolutní cesty): $ rosrun [package_name] [node_name] Kde package_name je jméno balíku (Packet), kterému patří uzel, a node_name je jméno uzlu. 1.2.2. Master Master umožňuje komunikace mezi jednotlivými uzly a poskytuje informace o jejich rozmístění. Jakmile se uzel dozví o rozmístění jiného uzlu, se kterým chce komunikovat, vytváří se P2P síť. Uzly používají primou komunikaci, Master pouze poskytuje nutné informace (jako DNS server). 1.2.3. Parameter server Parameter server se používá uzly pro ukládaní parametru. Je částí Masteru.

1.2.4. Zprávy Zpráva je jednoduchá struktura dat s určitými typy položek. Obyčejná zpráva se popisuje pomocí msg souboru. Je to jednoduchý textový soubor, který určuje strukturu zprávy, a nachází se v složce msg balíku. ROS Client Library realizuje generátory zprav, které spojují.msg soubory se spustitelnými soubory. Aby to udělaly je nutné definovat tento.msg soubor v CMakeLists.txt: add_message_files(files MsgFileName.msg) generate_messages(dependencies std_msgs) ## Generate added messages and services 1.2.5. Servisy Částo uzly používají zprávy typů požadavek a odpověď, které poskytuje ROS servisy. Zprávy požadavek/odpověď se definují pomocí.srv souboru, který se spojuje se spustitelným souborem pomocí ROS Client Library. Srv soubor má být definován v CMakeLists.txt: add_service_files(files SrvFileName.srv) Rosservice je servisní program, který poskytuje informace o servisech, které existují v systému: rosservice args print service arguments rosservice call call the service with the provided args rosservice find find services by service type rosservice info print information about service rosservice list list active services rosservice type print service type rosservice uri print service ROSRPC uri 1.2.6. Témata ROS Témata ROS jsou jako sběrnice, pomocí kterých se uzly vyměňují zprávami. Zprávy jsou anonymní. Témata využívají principu jednosměrné komunikace. Uzly, které chtějí vzdáleně volat procedury a čekat na jejich odpověď, mají používat místo témat servisy (Servises). Rqt_graph tvoří dynamický graf, který popisuje, co se děje v systému, respektive současně existující uzly a tématy (viz.obr.1). Je částí balíku rqt. $ rosrun rqt_graph rqt_graph Rostopic je servisní program, který poskytuje informace o tématech, které jsou vytvořeny v systému: rostopic bw display bandwidth used by topic rostopic echo print messages to screen rostopic find find topics by type rostopic hz display publishing rate of topic rostopic info print information about active topic rostopic list print information about active topics rostopic pub publish data to topic rostopic type print topic type 1.2.7. Bags Bag je typ souboru v ROS, který sbírá data od ROS zprav. S.bag souborem se dá pracovat pomocí aplikace rqt_bag. 1.3. Instalace ROS groovy Přidat vhodný repozitář do seznamu, například pro 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' Nainstalovat si ROS $ sudo apt-get install ros-groovy-desktop-full

1.4. Vytváření ROS workspase ROS workspase catkin_ws lze vytvořit za pomocí následujících příkazů: $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace $ cd ~/catkin_ws/ $ catkin_make $ source devel/setup.bash Samostatné aplikace mají být rozmístěny ve složce catkin_ws/src. 1.5. Vytváření ROS balíku Nový ROS balík se vytváří pomocí příkazu catkin_create_pkg ve složce catkin_ws/src: $ catkin_create_pkg pkg_name std_msgs rospy roscpp Zkompilovat balíky, které jsou v složce catkin_ws, lze pomocí příkazu $ catkin_make 1.6. Msg soubor Soubor.msg má být vytvořen ve složce catkin_ws/msg. Soubor obsahuje popis všech položek zprávy a s typy, například: string first_name string last_name uint8 age uint32 score Pak je nutné definovat.msg soubor v CMakeLists.txt: add_message_files(files MsgFileName.msg) generate_messages(dependencies std_msgs) ## Generate added messages and services Zkontrolovat, že ROS vidí.msg soubor lze pomocí příkazu $ rosmsg show <message type> 1.7. Srv soubor Soubor.srv má být vytvářen ve složce catkin_ws/srv. Soubor obsahuje popis všech položek zprávy a s typy pro požadavek a odpověď. Do řádku, který obsahuje ---, se definují položky požadavku, po tomto řádku se definují položky odpovědi. Například: int64 a int64 b --- int64 sum Pak je nutné definovat.srv soubor v CMakeLists.txt: add_service_files(files SrvFileName.srv) generate_messages(dependencies std_msgs) ##Generate added messages and services Zkontrolovat, že ROS vidí.srv soubor lze pomocí příkazu $ rossrv show <service type>

2. irobot Create Pro seznámení s ROS byl použit robot irobot Create (viz.obr.2) Obr.2. irobot Create Tento robot je podporován ROS a existuje hotové drivery pro řízení robota. Driver pro irobot Create patří do sbírky softwaru brown-ros-pkg a jmenuje se irobot_create_2_1 [2]. Driver je napsán v jazyce Python a spouští se následujícím příkazem: $ rosrun irobot_create_2_1 driver.py Robot je připojen do počítače přes USB kabel a převodník COM-USB, a je nutné to sdílet driveru. Dělá se to pomocí příkazu: $ rosparam set /brown/irobot_create_2_1/port /dev/ttyusb0 Je nutné přidat uživatele do skupiny, která vlastní port. Pro balík irobot_create_2_1 je definován SensorPacket.msg, který popisuje strukturu dat, jež se přijímají od robota. Také jsou definována sada servisů, které komunikují s robotem [3]. Driver irobot Create podporuje téma /cmd_vel. To znamená, že data zapsáná do tohoto tématu budou zpracovány robotem. Informace o tématu lze zjistit pomocí příkazu: $ rostopic info cmd_vel Tímto zjistíme, že pomocí tohoto tématu se předávají zprávy geometry_msgs/twist.msg. Twist.msg se skládá z šesti položek: - linear.x - translační rychlost po ose x - linear.y - translační rychlost po ose y - linear.z - translační rychlost po ose z - angular.x - rotační rychlost kolem osy x - angular.y - rotační rychlost kolem osy y - angular.z - rotační rychlost kolem osy z Pomocí parametrů linear.x a angular.z můžeme řídit irobot Create, co použijeme při vytváření serveru. Měli jsme špatnou první zkušenost při připojení irobot Create k počítači. Po přípojení robot začínal komunikovat s driverem, hrál hudbu a poslouchal příkazy, ale po několika sekundách se restartoval a komunikace se rušila. Při tom driver začínal posílat zprávy bad data. Pro přípojení byly použity USB port na straně počítače, a sériový port / Mini-DIN konektor na straně robota. Také irobot Create může komunikovat přes Cargo Bay konektor, ke kterému se připojuje Comand Modul (zelený na obr.2.). Comand modul se řídí pomocí Atmel AVR ATMega168 a umožňuje vykonávat programy bez přípojení k počítači. Ačkoliv Comand Modul byl vypnut, při nastartování robota nějak ovlivňoval komunikace a řízeni robota z PC. Když Comand Modul byl úplně odpojen, robot začal fungovat správně.

3. Návrh řídicího softwaru Řídící software se bude skládat z tří uzlů: - driver robota balík irobot_create_2_1 - server, který bude komunikovat s driverem - klient, který bude komunikovat se serverem pomoci servisu. Bude odesílat do serveru hodnoty parametrů, určené uživatelem. Klient bude komunikovat se serverem pomocí servisu. Zpráva požadavek/odpověď je definována v irobotmover.srv (obr.3). Klient bude posílat serveru translační a rotační rychlosti typů float32 a čas, během kterého se robot bude hýbat s těmito rychlostmi. float32 x float32 z int32 t --- string answer Obr.3. Obsah souboru irobotmover.srv Server bude komunikovat s driverem pomocí témat cmd_vel a sensorpacket (obr. 4). Do tématu cmd_vel server bude posílat data a z tématu sensorpacket bude číst současný stav robotu. Obr. 4. Graf témat a uzlů Zpráva, která se posílá přes téma sensorpacket, je v balíku irobot_create_2_1 ve složce msg (obr.5). Z teto zprávy budeme používat jen informace o stavu nárazníku: bumbleft a bumpright. Takže klient bude posílat serveru hodnoty dvou rychlostí a čas jízdy a čekat na stručnou odpověď ok. Server bude přesměrovat data z klientu do driveru a dostávat od driveru zprávu o současném stavu robota. Jestli server zjistí, že je aktivní bumbleft nebo bumpright, pošle ros zprávu do logovacího souboru pomocí rospy.loginfo a zastaví robota. Header header bool wheeldropcaster bool wheeldropleft bool wheeldropright bool bumpleft bool bumpright bool wall

bool cliffleft bool clifffronleft bool clifffrontright bool cliffright bool virtualwall uint8 infraredbyte bool advance bool play int16 distance int16 angle uint8 chargingstate uint16 voltage int16 current int8 batterytemperature uint16 batterycharge uint16 batterycapacity uint16 wallsignal uint16 cliffleftsignal uint16 clifffrontleftsignal uint16 clifffrontrightsignal uint16 cliffrightsignal bool homebase bool internalcharger uint8 songnumber uint8 songplaying Obr.5. Obsah souboru SensorPacket.msg Dále je uveden zdrojový kód klientu scripts/irobot_mover_bump_client.py: #!/usr/bin/env python import roslib; roslib.load_manifest('irobot_mover') import sys import rospy from irobot_mover.srv import irobotmover def irobot_mover_bump_client(x, z, t): rospy.wait_for_service('irobot_mover_bump') try: irobot_mover_bump = rospy.serviceproxy('irobot_mover_bump', irobotmover) resp1 = irobot_mover_bump(x, z, t) return resp1.answer except rospy.serviceexception, e: print "Service call failed: %s"%e def usage(): return "%s [x, z, t]"%sys.argv[0] if name == " main ": if len(sys.argv) == 4: x = float(sys.argv[1]) z = float(sys.argv[2]) t = float(sys.argv[3]) else: print usage() sys.exit(1) print "Translational speed: %f m/s, rotational speed %f m/s, time %s s"%(x, z, t) print "Result",(irobot_mover_bump_client(x, z, t)) Klient se volá se třemi parametry, které přeposílá do serveru. Po přijetí odpovědí o serveru program klientu se skončí. Spouštění klientu: $ rosrun irobot_mover irobot_mover_bump_client.py 0.0 0.4 3

Dále je uveden zdrojový kód serveru scripts/irobot_mover_bump_client.py: #!/usr/bin/env python import roslib; roslib.load_manifest('irobot_create_2_1') import rospy from irobot_create_2_1.msg import SensorPacket from geometry_msgs.msg import Twist from irobot_mover.srv import * def handle_irobot_mover_bump(req): global pub, twist, port pub = rospy.publisher('cmd_vel', Twist) twist = Twist() port = rospy.get_param('/brown/irobot_create_2_1/port', "/dev/ttyusb0") print "Send %f, %f, %s"%(req.x, req.z, req.t) if (req.x > 0): rospy.loginfo("moving the robot forward") x = min(req.x, 0.3) twist.linear.x = x # jet s rychlostí x m/s if (req.x < 0): rospy.loginfo("moving the robot backward") x = max(req.x, -0.3) twist.linear.x = x if (req.z > 0): rospy.loginfo("turning the robot left") y = min(req.z, 1) twist.angular.z = y # točit se rychlostí y m/s if (req.z < 0): rospy.loginfo("turning the robot right") y = max(req.z, -1) twist.angular.z = y if(req.z!= 0 or req.x!= 0): pub.publish(twist) rospy.sleep(req.t); rospy.loginfo("stopping!") twist = Twist() pub.publish(twist) return irobotmoverresponse("ok") def callback(data): global pub, twist, port if(data.bumpright or data.bumpleft): rospy.loginfo("bump!") twist = Twist() twist.linear.x = -0.1 pub.publish(twist) # jet opáčným směrem rospy.sleep(0.5); twist = Twist() pub.publish(twist) # zastávit se def irobot_mover_bump_server(): rospy.init_node('irobot_mover_bump_server') rospy.subscriber('sensorpacket', SensorPacket, callback) s = rospy.service('irobot_mover_bump', irobotmover, handle_irobot_mover_bump) print "Ready to send data" rospy.spin() if name == " main ": irobot_mover_bump_server() Server irobot_mover_bump_server.py publikuje zprávy do tématu cmd_vel (vlákno handle_irobot_mover_bump), které posléze zpracovává driver, a čte z tématu sensorpacket současný stav robotu a kontroluje signály bumpright a bumpleft (vlákno callback). Jestli se robot na něco narazil, potom pošle zprávu do logovacího systému ROS a odjede 10 centimetrů směrem zpátky. Aby uživatel nepokazil robota nastavením velkých rychlostí, program omezuje translační rychlosti na 0.3 m/s, a rotační rychlostí na 1m/s. Spouštění serveru: $ rosrun irobot_mover irobot_mover_server.py

4. Použití existujícího řídicího softwaru Pro řízení irobot Create existuje spousta softwaru. Zajímavé je řešení ze sbírky softwaru brown-ros-pkg, které se nazývá teleop_twist_keyboard: $ rosrun teleop_twist_keyboard teleop_twist_keyboard.py Toto řešení umožňuje řídit robota pomocí klávesnice a je dost jednoduché. S driverem komunikuje také přes téma cmd_vel (obr.5). Řídicí klávese se popisuje při spouštění aplikace. Zdrojový kód je na stránkách Brown University Repository for ROS Packages [4]. Závěr Obr. 5. Graf témat a uzlů pro aplikaci teleop_twist_keyboard Cílem tohoto projektu bylo seznámení s frameworkem ROS. Měli jsme nainstalovat ROS a pomocí něho naladit komunikace s robotem. Žádné problémy s instalaci ROS ani Ubuntu jsme neměli, dělá se to podle návodu z internetových stránek. Také si nebylo problémem najít driver irobot Create a stanovit, jak s tím komunikovat z uživatelského programu. ROS se instaluje na operační systém Ubuntu, a proto vhodnou HW platformou je libovolní notebook či počítač. Navržený program pro ovládání robotu se skládá z klientu a serveru. Zdá se, že pro ovládání robota by stačil jen jeden klient, jak je to v teleop_twist_keyboard, ale chtěli jsme zkusit komunikaci uzlů pomocí servisu. Ve svém programu jsme použili takové komunikační nástroje ROS jako témata a servisy. Testový program děla všechno: přijímá zprávy z témat, publikuje zprávy do témat, posílá zprávy přes servis a čeká na odpověď servisu. Řídící software je napsán v jazyce Python. Je to kvůli tomu, že jsme dobře prozkoumali driver irobot_create_2_1, který je také napsán v jazyce Python, a pomocí tohoto příkladu velmi rychle dokázali vytvořit vlastní program. Kromě toho Python je dynamicky interpretovaný jazyk, a aplikace psáné v jazyce Python nevyžadují pravidelného překompilování, co zkracuje dobu vývoje softwaru. Pomocí ROS se dá opravdu rychle a pohodlně vytvořit řídící program pro robota, zvlášť existují-li hotové drivery. Kódy driverů jsou volně přístupné, co umožňuje je upravovat podle svých požadavků. Velkou výhodou je komunikace uzlů přes témata a servisy, neboť lze programovat moduly v různých jazycích a pak je snadno dat dohromady. Literatura 1. Сommunity site for hosting ROS-related software. Ros.org [online]. [cit. 2013-05-03]. Dostupné z: http://www.ros.org/wiki 2. Brown University Repository for ROS Packages. Brown-ros-pkg [online]. [cit. 2013-05-03]. Dostupné z: http://brown-ros-pkg.googlecode.com/svn/trunk/distribution/brown_drivers 3. Irobot_create_2_1. Ros.org [online]. [cit. 2013-05-03]. Dostupné z: http://ros.org/wiki/irobot_create_2_1 4. Teleop_twist_keyboard.py. Brown-ros-pkg [online]. [cit. 2013-05-03]. Dostupné z: https://code.google.com/p/brown-rospkg/source/browse/trunk/experimental/teleop_twist_keyboard/bin/teleop_twist_keyboard.py?r =959