ˇ ENI´ TECHNICKE´ V BRNEˇ VYSOKE´ UC BRNO UNIVERSITY OF TECHNOLOGY
ˇ NI´CH TECHNOLOGII´ FAKULTA INFORMAC ˇ ´ITAC ˇ OVE´ GRAFIKY A MULTIME´DII´ ´ STAV POC U FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
´ LENE´HO INTERAKTIVNI´ ROZHRANI´ PRO VZDA ROBOTA
´ PRA´CE DIPLOMOVA MASTER’S THESIS
AUTOR PRA´CE AUTHOR
BRNO 2012
´S ˇ LOKAJ Bc. TOMA
ˇ ENI´ TECHNICKE´ V BRNEˇ VYSOKE´ UC BRNO UNIVERSITY OF TECHNOLOGY
ˇ NI´CH TECHNOLOGII´ FAKULTA INFORMAC ˇ ´ITAC ˇ OVE´ GRAFIKY A MULTIME´DII´ ´ STAV POC U FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
´ LENE´HO INTERAKTIVNI´ ROZHRANI´ PRO VZDA ROBOTA INTERACTIVE INTERFACE FOR REMOTE ROBOT
´ PRA´CE DIPLOMOVA MASTER’S THESIS
AUTOR PRA´CE
´S ˇ LOKAJ Bc. TOMA
AUTHOR
VEDOUCI´ PRA´CE SUPERVISOR
BRNO 2012
ˇ PANEˇL, Ph.D. Ing. MICHAL S
Abstrakt Tato práce se zabývá problematikou interaktivních rozhraní pro ovládání vzdálených robotů, zkoumá některé existující vizualizační a simulační nástroje a robotické platformy. Také navrhuje a implementuje interaktivní prvky vhodné k reprezentaci detekovaných objektů, jako je obalové těleso či billboard. Dále vytváří interaktivní prvky sloužící k eliminaci některých problémů spojených se vzdáleným ovládáním robota, jako je například špatný odhad vzdáleností či orientace v prostředí. Interaktivní rozhraní je implementováno v prostředí Robot Operating System s využitím nabízených prostředků pro vizualizaci, komunikaci a řízení potřebných operací. Grafická primitiva jsou reprezentována interaktivními značkami, které uživateli nabízí kromě vizualizace také možnosti interakce. Pomocí těchto značek je také navržen jednoduchý nástroj umožňující ovládání pohybu robota.
Abstract This work deals with the interactive interface for remote controlled robots and examines some of the existing visualization and simulation tools and robotic platforms. It also designs and implements interactive elements suitable for representation of detected objects, such as bounding box or billboard, and proposes interactive elements to eliminate some of the problems associated with remote control of the robot, such as bad perception of distances and the orientation in the environment. The interactive interface is implemented in the Robot Operating System using offered means for visualization, communication and operations management. Graphics primitives are represented by Interactive Markers that, in addition to the visualization, offers also possibilities of interaction. With these markers, a simple tool for controlling the movement of the robot is designed.
Klíčová slova interaktivní rozhraní, robot, Care-O-bot, SRS, ROS, Robot Operating System, RViz, Interactive Markers
Keywords interactive interface, robot, Care-O-bot, SRS, ROS, Robot Operating System, RViz, Interactive Markers
Citace Tomáš Lokaj: Interaktivní rozhraní pro vzdáleného robota, diplomová práce, Brno, FIT VUT v Brně, 2012
Interaktivní rozhraní pro vzdáleného robota Prohlášení Prohlašuji, že jsem tuto diplomovou vypracoval samostatně pod vedením pana Ing. Michala Španěla, Ph.D. ....................... Tomáš Lokaj 15. května 2012
c Tomáš Lokaj, 2012.
Tato práce vznikla jako školní dílo na Vysokém učení technickém v Brně, Fakultě informačních technologií. Práce je chráněna autorským zákonem a její užití bez udělení oprávnění autorem je nezákonné, s výjimkou zákonem definovaných případů.
Obsah 1 Úvod
5
R 2 Care-O-bot a projekt SRS R 2.1 Care-O-bot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Projekt SRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 6 9
3 Rozhraní pro ovládání vzdáleného robota 3.1 Problémy spojené se vzdáleným ovládáním robota . . . . . . . . . . . . . . 3.2 Interakce člověka s robotem . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 11 14
4 ROS - Robot Operation System 4.1 Základní informace . . . . . . . 4.2 Simulace a možnosti vizualizace 4.3 Interaktivní prvky . . . . . . . 4.4 Další vybrané části ROSu . . .
. . . .
16 16 17 21 28
5 Návrh interaktivního rozhraní 5.1 Interaktivní primitiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Vizualizace vzdáleností . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Ovládání robota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30 31 34 35
6 Implementace interaktivního rozhraní 6.1 Popis implementace interaktivních primitiv 6.2 Implementace ROS služeb . . . . . . . . . . 6.3 Implementace vizualizace vzdáleností . . . . 6.4 Implementace ovládání robota . . . . . . . .
. . . .
36 36 42 45 47
7 Výsledky, ukázky použití a shrnutí 7.1 Ukázka modelové scény . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Ukázky využití interaktivních primitiv v dalších modulech projektu SRS . . 7.3 Shrnutí dosažených výsledků . . . . . . . . . . . . . . . . . . . . . . . . . .
49 49 51 51
8 Závěr
54
A Ukázky A.1 Další ukázky prvků interaktivního rozhraní . . . . . . . . . . . . . . . . . .
57 59
B Obsah CD
61
. . . .
. . . .
. . . .
1
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
C Manuál C.1 Kompilace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.2 Spuštění jednotlivých komponent a ukázek . . . . . . . . . . . . . . . . . . .
62 63 63
D Plakát
65
2
Seznam obrázků 2.1 2.2 2.3 2.4 2.5
R Care-O-bot 3 [15] . . . . . . . . . . . . . . . . R Rameno Care-O-bot 3 [11] . . . . . . . . . . . R Hardwarové komponenty Care-O-bot 3 [16] . . R Ukázka možného scénáře využití Care-O-bot 3 Řešení projektu SRS [12] . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
6 7 8 9 9
3.1 3.2 3.3 3.4
Ukázka omezeného zorného pole . . . . . . . . . . . . . . . . . . . Ukázka odhadu náklonu robota pomocí vodorovné kuchyňské linky Kamera připevněná k rameni robota [17] . . . . . . . . . . . . . . . Rozhraní pro ovládání robota používaná v projektu SRS . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
12 12 13 14
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17
Ukázka ROS grafu získaná pomocí programu rxgraph . . . Okno RViz . . . . . . . . . . . . . . . . . . . . . . . . . . . RViz - vlastnosti displeje . . . . . . . . . . . . . . . . . . . . R Ukázka simulace robota Care-O-bot 3 v programu Gazebo Značka typu Arrow [10] . . . . . . . . . . . . . . . . . . . . Značky typů Cube, Sphere a Cylinder [10] . . . . . . . . . . Značka typu Line Strip [10] . . . . . . . . . . . . . . . . . . Značka typu Line List [10] . . . . . . . . . . . . . . . . . . . Značka typu Cube List [10] . . . . . . . . . . . . . . . . . . Značka typu Sphere List [10] . . . . . . . . . . . . . . . . . Značka typu Triangle List [10] . . . . . . . . . . . . . . . . . Značka typu Points [10] . . . . . . . . . . . . . . . . . . . . Značka typu View-Oriented Text [10] . . . . . . . . . . . . . Značka typu Mesh Resource [10] . . . . . . . . . . . . . . . Příklad interaktivní značky [8] . . . . . . . . . . . . . . . . Příklad struktury interaktivní značky . . . . . . . . . . . . . Ukázka souřadných rámců u robota PR2 . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
16 18 19 21 22 23 23 24 24 24 25 25 25 26 27 28 28
5.1 5.2 5.3 5.4 5.5 5.6 5.7
Schéma propojení jednotlivých modulů pomocí služeb a topiců . . . . . . . Příklad jednoduchého obalového tělesa . . . . . . . . . . . . . . . . . . . . . Příklad billboardu reprezentujícího židli, který se natáčí za kamerou . . . . Ukázka možného využití neznámého tělesa k zábránění najetí na schodiště . Návrh zobrazení pozic pro uchopení objektů . . . . . . . . . . . . . . . . . . Návrh zobrazení roviny v point cloudu zobrazujícím část sedačky . . . . . . Ukázka robota v simulovaném prostředí s návrhem vizualizace vzdáleností nejbližších povrchů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Návrh vizualizace blízkých vzdáleností . . . . . . . . . . . . . . . . . . . . .
31 32 32 33 33 34
5.8
3
. . . . . . [4] . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . . . . .
. . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
35 35
6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10
. . . . . . . . . . . . . . . . . . . . . . . . . . . uzlu . . . . . . . . . . . . . . .
37 37 38 38 38 39 39 40 40
Ukázka modelové scény s interaktivními primitivy . . . . . . . . . . . . . . Ukázka modelové scény - detail detekovaného objektu . . . . . . . . . . . . Ukázka modelové scény - neznámý objekt symbolizující úzké dveře . . . . . Ukázka modelové scény - člověk pohybující se k pohovce . . . . . . . . . . . Ukázka využití primitiva typu objekt modulem pro semi-autonomní plánování trajektorie ramene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka využití interaktivních primitiv z modulu pro detekci rovin . . . . .
49 50 50 51
A.1 Ukázka detekce blízkých povrchů na barevném mračně bodů . . . . . . . . . A.2 Ukázka mléka detekovaného pomocí fake detectoru . . . . . . . . . . . . . A.3 Ukázka zobrazení samotného obalového tělesa a znázornění jeho rozměrů . .
59 60 60
6.11 6.12 6.13 6.14 7.1 7.2 7.3 7.4 7.5 7.6
Ukázka kontextového menu primitiv . . . . . . . . . . . . . . . . . . . Obalové těleso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka rozměrů obalového tělesa . . . . . . . . . . . . . . . . . . . . . Manipulace s obalovým tělesem pomocí interaktivních značek . . . . . Billboardy reprezentující židli a hlavu člověka . . . . . . . . . . . . . . Billboard zobrazující pohybujícího se člověka . . . . . . . . . . . . . . Neznámé těleso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objekt se zobrazením pozic pro jeho uchopení . . . . . . . . . . . . . . Ukázka roviny otagované pomocí kontextového menu jako zeď . . . . . Ukázka odebírání topiců se změnami interaktivních primitiv z test primitives uzlem test observers získáná programem rxgraph Euklidovská vzdálenost v trojrozměrném prostoru . . . . . . . . . . . Vizualizace nejbližších povrchů v RVizu . . . . . . . . . . . . . . . . . Vizualizace okruhů vzdáleností . . . . . . . . . . . . . . . . . . . . . . Ovládání robota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
41 44 46 47 48
52 53
Kapitola 1
Úvod V dnešní době se již zcela pravidelně setkáváme s roboty, kteří pomáhají lékařům při chirurgických zákrocích, prozkoumávají pro člověka nedostupná místa, jak na naší planetě, tak mimo ni, pomáhají vyhledávat přeživší při živelných katastrofách, zneškodňují bomby apod. Také se můžeme setkat s roboty do domácnosti, kteří vypomáhají například starším R a v rámci projektu SRS se tato práce věnuje lidem. Takovým robotem je i Care-O-bot tvorbě interaktivního rozhraní pro jeho vzdáleného operátora. Cílem je vytvoření takového interaktivního rozhraní, které bude vzdálenému operátorovi poskytovat dobrý přehled o prostředí, ve kterém se robot nachází, bude mu pomáhat k vytvoření lepší představy o vzdálenostech mezi objekty a jejich velikostech, bude zvýrazňovat důležité předměty a dávat operátorovi možnost s nimi interagovat. Důležitou součástí rozhraní budou interaktivní primitiva jako je obalové těleso či billboard. Právě ta budou reprezentovat nebo zvýrazňovat objekty ve scéně. Interaktivní rozhraní také bude poskytovat možnosti, jak s robotem pohybovat a uchopovat předměty. Interaktivní rozhraní bude implementováno v prostředí Robot Operating System a bude využívat jeho architekturu a prostředky pro vizualizaci, komunikaci a řízení potřebných operací. Vizuální stránku rozhraní bude zajišťovat program RViz a Interaktivní značky a využito bude také ROS zpráv a ROS služeb k vykonání potřebných akcí. R Kapitola 2 představí robota Care-O-bot a související projekt SRS, v kapitole 3 pak budou představeny známé problémy návrhu rozhraní pro ovládání vzdálených robotů. Kapitola 4 blíže představí Robot Operating System, v kapitole 5 bude navrženo interaktivní rozhraní pro ovládání vzdáleného robota, kapitola 6 popíše jeho implemetaci a v poslední kapitole 7 budou zobrazeny ukázky z hotového rozhraní, ukázány příklady modulů projektu SRS, ve kterých se některé části vytvořeného interaktivního rozhraní již používají, a uvedeno shrnutí dosažených výsledků.
5
Kapitola 2 R Care-O-bot a projekt SRS
R Tato kapitola seznamuje s robotem Care-O-bot a projektem SRS, jehož součástí je i vytvoření interaktivního rozhraní pro ovládání vzdáleného robota navrhovaného v této práci.
2.1
R Care-O-bot
R Care-O-bot (dále jen COB) je robot (obrázek 2.1) vyvíjený v institutu Fraunhofer IPA. Určen je pro starší osoby a osoby se sníženou pohyblivostí jako jejich každodenní pomocník. Má speciální antropomorfní, víceprsté chapadlo, které svým tvarem a funkcí připomíná lidskou ruku. Podobně také umí manipulovat s předměty. Jako interaktivní sluha je COB schopen bezpečně se pohybovat mezi lidmi, detekovat a uchopit typické objekty R v domácnosti a předat jim je. Aktuální verze je Care-O-bot 3.
R Obrázek 2.1: Care-O-bot 3 [15]
2.1.1
Flexibilní a autonomní navigace
Díky všesměrové pohybové platformě složené ze čtyř otáčivých kol se COB může pohybovat do jakéhokoliv směru a vypořádat se i s průjezdem úzkých průchodů. Je přitom schopen 6
samostatně plánovat a vybírat bezpečnou cestu k cíli a vyhnout se případným překážkám, dokonce i pohybujícím se objektům, například člověku [15].
2.1.2
Uchopování objektů a manipulace s nimi
COB má flexibilní rameno se sedmi stupni volnosti a již zmíněné tříprsté chapadlo od firmy Schunk (obrázek 2.5), které patří k nejdokonalejším systémům ve svém oboru. Díky tomu dokáže uchopit velké množství rozdílných předmětů, které se běžně nachází v domácnosti. V prstech chapadla jsou umístěny hmatové senzory, takže je schopen přizpůsobit sílu úchopu předmětu. Dlouhé rameno umožňuje uchopit předměty dokonce ze země nebo dosáhnout do vysoko zavěšených polic. Jeho sedmistupňová volnost mu také dodává schopnost vyhnout se při uchopování překážkám a položit předmět na podnos. Synchronizací pohybu ramene a pohybové platformy je robot dokonce schopen otevřít samostatně dveře, které mu stojí v cestě [15]. Pokud je třeba zadat robotovi nový úkol (uklidit, prostřít stůl apod.), je možné vést rameno ručně a tím ho programovat [11].
R Obrázek 2.2: Rameno Care-O-bot 3 [11]
2.1.3
Vnímání okolí
Své okolí robot rozpoznává pomocí několika senzorů, barevné stereokamery a laserových skenerů. Senzory slouží například k detekci, lokalizaci a sledování objektů pro manipulaci, překážek a lidí v 3D prostoru. Tyto senzory jsou namontovány na pozicovací jednotce, která je umožní nasměrovat do jakékoliv oblasti zájmu [4]. Obrázek 2.3 zobrazuje všechny R hardwarové komponenty robota Care-O-bot 3. COB je také schopen dodatečně se učit rozpoznávat nové objekty samostatně. Jeho 3D senzory sledují okolí v reálném čase a přispívají tak k bezpečnému vykonání všech operací [15].
2.1.4
Bezpečná interakce s člověkem
Primárním rozhraním pro základní komunikaci s člověkem je podnos umístěný na přední části robota. Ten je kromě přenášení předmětů určen také k ovládání prostřednictvím dotykové obrazovky, takže pomocí něj může uživatel zadat robotovi příkaz, aby například přivezl drink. Je-li detekována přítomnost osoby v okolí robota, je případný pohyb ramena okamžitě zastaven. V kombinaci s bezpečnostními senzory pro navigaci umožňuje tento koncept bezpečné nasazení robota ve veřejném prostředí [15].
7
R Obrázek 2.3: Hardwarové komponenty Care-O-bot 3 [16]
2.1.5
COB jako domácí pomocník
Technické nástroje dnes poskytují podporu a pomoc osobám v každodenním životě. Proto by robotický pomocník měl provádět alespoň následující úkony [3]. Pomoc v domácnosti • Provádět běžné úkoly jako je: – příprava nápojů, – prostírání stolu, – práce s mikrovlnou troubou, – jednoduchý úklid apod. • Podávat předměty (knihy, léky apod.). • Podporovat člověka při zvedání a držení objektů. • Kontrolovat technickou infrastrukturu domu: – topení, – klimatizaci, – osvětlení, – otevíraní oken a dveří, – nastavení alarmu apod. Pomoc při pohybu • Pomoc při vstávání z postele či ze židle. • Inteligentní asistence při chůzi. 8
Podpora při komunikaci a sociální integraci • Ovládání multimédií (televize, telefon, hudební přehrávač apod.). • Upomínky na plánované aktivity (čas pro léky, schůzka atd.). • Dohled nad zdravím osoby a přivolání pomoci. Obrázek 2.4 ilustruje jeden z možných scénářů, kdy robot načepuje vodu ze zásobníku, doveze ji uživateli a nakonec poslouží jako platforma pro zábavu [4].
R Obrázek 2.4: Ukázka možného scénáře využití Care-O-bot 3 [4]
2.2
Projekt SRS
Projekt SRS je zaměřen na vývoj dálkově ovládaných semi-autonomních robotických řešení v domácím prostředí pro podporu seniorů. Demonstruje inovativní, praktický a efektivní systém zvaný SRS robot“ pro individuální domácí péči. ”
Obrázek 2.5: Řešení projektu SRS [12] Řešení SRS jsou navržena tak, aby robot fungoval jako stín“ svého správce. Například ” starší člověk může mít robota, který zastupuje jeho děti či pečovatele a umožňuje jim tak na dálku mu poskytnout pomoc s běžnými úkony (uložit do postele, vyprat apod.) tak, jako by se sami vyskytovali v domě. To vše bude dosaženo pomocí následujících SRS inovací [12]: 9
1. Nový mechanismus pro vzdálené ovládání robota přes komunikační síť reálného světa. 2. Adaptivní autonomní mechanismus umožňující vysoce efektivní vykonávání úkolů pro dálkově ovládané roboty. 3. Nový samoučící se mechanismus umožňující robotovi poučit se ze svých zkušeností. 4. Bezpečnostně orientovaný rámec odvozený ze studií využitelnosti a studií přijatelnosti uživateli, který umožní robotovi být efektivně nasazen do domácí péče. Jedním z cílů tohoto projektu je také tvorba virtuálního 3D displeje, jehož součástí je i vytvoření interaktivního rozhraní popisovaného v této práci. Použité technologie a postupy jsou dány potřebami projektu a v průběhu jeho řešení se mohou měnit.
10
Kapitola 3
Rozhraní pro ovládání vzdáleného robota Dálkově ovládaní roboti se dnes používají v nejrůznějších situacích - průzkum planet, vojenské mise, podmořské operace, zneškodňování bomb, vyhledávání osob, chirurgické operace apod. Každá z těchto situací vyžaduje specifické ovládací rozhraní, ale všechny musí umožnit spolehlivé a bezpečné ovládání robota. Dálkové ovládání robota však přináší spoustu problémů a interakci člověka s ním je tomu třeba přizpůsobit. Přes vysoké pracovní zatížení uživatele, komunikační omezení a špatnou viditelnost, zůstává stále primárním prostředkem poskytování informací video [1].
3.1
Problémy spojené se vzdáleným ovládáním robota
Dálkové ovládání robota bývá velice náročné, protože je omezováno motorickými schopnostmi operátora a jeho schopností získat a udržet si přehled o situaci. Ve vzdáleném prostředí je také přirozené vnímání okolí odděleno od fyzického prostředí, což mimo jiné způsobuje špatné odhadování velikostí a vzdáleností objektů, a má nepříznivý dopad na povědomí o situaci a tím i na ovládání robota. Jednoduché úkoly mohou být obtížné vzhledem k nedostatku zpětné vazby pohybu robota a častému umístění kamery do výšky rozdílné od výšky očí. Operátoři často potřebují odhadnout velikosti okolních objektů či terénu k tomu, aby mohli rozhodnout, zda je možné bezpečně s robotem manévrovat [2].
3.1.1
Omezené zorné pole
Použití kamer k zaznamenání okolí robota způsobuje, že operátorovi může být zprostředkován pohled pouze na část prostředí. K získání přehledu srovnatelnému s přímým pozorováním jsou vyžadovány další úkony, např. manipulace s kamerami. V reálných situacích se operátoři často musí spolehnout pouze na takto omezené znalosti o robotově okolí a může například nastat situace, kdy se robot při pohybu zasekne o objekt, který není operátorem viditelný. Obrázek 3.1 ilustruje situaci, kdy robot stojí před oknem a operátor přes kameru vidí pouze prostor za oknem, čili neví, že se nemůže pohnout dopředu, protože by narazil do zdi. Omezené zorné pole také negativně ovlivňuje vzdálené vnímání a komplikuje mimo jiné detekci cíle či vlastního umístění ve virtuálním prostředí. Při řízení robotických vozidel mají řidiči problém také s odhadem rychlosti pohybu, času zbývajícího do kolize a s vnímáním pozic překážek a jiných objektů. 11
Obrázek 3.1: Ukázka omezeného zorného pole
3.1.2
Orientace
Ke správnému navigování robota ve vzdáleném prostředí potřebuje jeho operátor také dobrý smysl pro orientaci - jak globálně, tak lokálně. Operátor potřebuje vědět, kde se relativně vzhledem k robotovi nacházejí zájmové oblasti, a zároveň je třeba se správně vyhnout překážkám a dovézt robota do jeho cíle. Operátor potřebuje získat správnou představu o postavení a naklonění robota a zabránit tak jeho případnému převrácení. V tom mu může pomoci výskyt známých objektů, jako je např. horizont, budova či strom, ve vzdáleném prostředí. Chybí-li však tyto objekty a kamera má fixní pozici, operátoři často velice těžko odhadují postavení a naklonění robota a může tak dojít ke kolizi. Obrázek 3.2 znázorňuje ideální situaci, kdy operátor od polohy kuchyňské linky správně odhadne postavení robota a může tak zabránit jeho pádu.
Obrázek 3.2: Ukázka odhadu náklonu robota pomocí vodorovné kuchyňské linky
12
3.1.3
Zorný úhel kamery
Vnímání vzdáleného prostředí operátorem často závisí na obrázcích získaných z kamery, která je připevněná k robotovi. Roboti, kteří mají rameno, mohou mít další kameru umístěnou u chapadla (obrázek 3.3) a získat tím obraz scény egocentricky. Kameru lze také umístit na vrchní část robotova těla a získat tak exocentrický pohled. V závislosti na poloze kamery, která může či nemusí být v poloze odpovídající lidským očím, může být vnímání prostředí zkresleno pro člověka nepřirozeným úhlem pohledu.
Obrázek 3.3: Kamera připevněná k rameni robota [17]
3.1.4
Zhoršené vnímání hloubky
Použití monokulární kamery a její vliv na vzdálené vnímání hloubky je zkoumáno v různých kontextech. V podstatě vede projekce 3D informace na 2D displej ke kompresi či zploštělému hloubkovému vnímaní, což ovlivňuje operátorův odhad vzdáleností a velikostí objektů. Operátor se tedy musí spolehnout na podněty, jako jsou interpozice, světlo a stín, lineární perspektiva a stálá velikost objektů, aby mohl správně vnímat hloubku vzdálené scény. Stereoskopické displeje, které používají různé techniky k představení binokulárního obrazu uživateli, poskytují výhody oproti monokulárnímu displeji, kterými jsou rychlejší a mnohem přesnější vnímání vzdálené scény, rozšířená detekce svahů a prohlubní, rozšířené rozpoznání objektů, vizuální filtrace šumu, rychlejší učení a plnění některých úkolů s men13
šími chybami. Z výhod stereoskopických displejů obzvláště těží úkoly zahrnující balistický pohyb, rozpoznání neznámých scén, analýza třídimenzionálních komplexních scén a přesné umístění manipulátorů a nástrojů v takovýchto scénách.
3.1.5
Zhoršený video snímek
Komunikační kanál mezi lidskou obsluhou a robotem je nezbytný pro efektivní vnímání vzdáleného prostředí. Faktory, jako je vzdálenost, překážky, nebo elektronické rušení, mohou představovat výzvu pro zachování dostatečné síly signálu. V důsledku toho se kvalita video kanálu, na který se operátor spoléhá pro získání vzdáleného vnímání, může narušit a poškodit odhady vzdáleností a velikostí. Mezi běžné formy degradace obrazu, způsobené malou šířkou pásma, patří snížení frame rate, snížení rozlišení displeje a nižší úroveň stupňů šedi.
3.1.6
Časová prodleva
Časová prodleva se zde vztahuje na zpoždění mezi vstupní akcí a její viditelnou reakcí. Obvykle je způsobena přenosem informace přes komunikační síť. Studie o lidské výkonnosti ukazují, že lidé jsou obecně schopni detekovat zpoždění menší než 10-20 ms [2].
3.2
Interakce člověka s robotem
Interakce člověka s robotem je definována jako komunikační metoda mezi nimi, která se využívá k ovládání robota a získávání informací pomocí různých technik. Mimo tyto techniky se skládá také z intuitivních příkazů a reakcí, displeje zobrazujícího prostředí a architektury uživatelského rozhraní programu [7]. Jedna ze zmiňovaných technik se zakládá na vstupních zařízeních, pomocí nichž může člověk ovládat robota a dostávat od něj zpětnou vazbu. Základní vstupní mechanismus využívá klasické klávesnice a myši, ale existují i citlivější a složitější haptické systémy. Ty mohou být společně s přenosnými vstupními zařízeními vhodné pro ovládání mobilních a humanoidních robotů. V dnešní době je také bežné využívání chytrých telefonů a tabletů k těmto účelům, čehož využívá i projekt SRS (obrázek 3.4).
Obrázek 3.4: Rozhraní pro ovládání robota používaná v projektu SRS
14
Jiná technika má za cíl budovat současně 2D a 3D mapy a zobrazovat neznámá prostředí pomocí robotových senzorů a kamer, což umožňuje uživateli vzdáleně kontrolovat okolí robota. Další možností je komunikovat s robotem pomocí hlasu, gest, dotyků, emocí a síly.
3.2.1
Inteligentní uživatelské rozhraní
Podle [7] by inteligentní uživatelské rozhraní (IUR) mělo samostatně zobrazovat data získaná prostřednictvím senzorů a zpracovávat příkazy uživatele. Má-li robot nízkou úroveň autonomie, pak by IUR mělo nabízet uživateli jednoduché příkazy a zobrazení dat z vybraných senzorů. Naopak při vyšší úrovni autonomie by rozhraní mělo být komplexnější a názornější a uživatel by měl robota ovládat pomocí intuitivních příkazů.
15
Kapitola 4
ROS - Robot Operation System Tato kapitola se zabývá operačním systémem určeným pro roboty, tzv. Robot Operating System (dále jen ROS). Popisuje jeho možnosti simulace a vizualizace scény s robotem. Také jsou zde zmíněny některé interaktivní prvky a knihovny, které ROS nabízí.
4.1
Základní informace
ROS není operační systém v tradičním slova smyslu plánování a řízení procesů. Spíše nabízí komunikační vrstvy nad hostitelskými operačními systémy, ovladače zařízení, knihovny, možnosti vizualizace a simulace, správu balíčků apod. ROS je licencován pod BSD licencí 1 , což umožňuje jeho využití jak pro nekomerční, tak i pro komerční projekty [5].
4.1.1
Koncept
Základními koncepty implementace ROSu jsou tzv. uzly, zprávy, topic a služby. Obrázek 4.1 zobrazuje ukázku ROS grafu. Jsou zde vidět uzly but gui server, RViz a rosout, které publikují, či topic /but gui/update a /rosout. Grafy však bývají mnohem komplexnější, často obsahují cykly a vztahy one-to-many a many-to-many.
Obrázek 4.1: Ukázka ROS grafu získaná pomocí programu rxgraph
Uzly ROS je navržený tak, aby se systém skládal z několika uzlů (anglicky nodes) - modulů, které provádějí výpočty. Termín uzel vychází z vizualizace běhu ROSovských systémů, kdy jsou jednotlivé procesy zobrazeny právě jako propojené uzly grafu. 1
Berkeley Software Distribution - umožňuje volné šíření licencovaného obsahu, přičemž vyžaduje pouze uvedení autora a informace o licenci, spolu s upozorněním na zřeknutí se odpovědnosti za dílo.
16
Zprávy Uzly spolu komunikují předáváním zpráv. Zpráva (message) je silně typovaná datová struktura, která podporuje standardní datové typy (integer, float, boolean apod.), pole a konstanty. Zpráva se také může skládat z jiných zpráv (či pole zpráv). Topics Uzly zasílají zprávy tím, že je zveřejní na daný topic, a uzel, který má zájem o určitá data, se přihlásí k jeho odběru. Každý topic může mít více současných vydavatelů (publishers) a odběratelů (subscribers) a jeden uzel může publikovat nebo se přihlásit k odběru vícekrát. Obecně platí, že vydavatelé a odběratelé si sebe nejsou navzájem vědomi. Služby Služby (services) jsou definovány jako řetězec a dvojice zpráv - pro žádost a odpověď. Pouze jeden uzel může inzerovat službu konkrétního jména. Seznam inzerovaných služeb je možné kdykoliv zjistit pomocí příkazu rosservice list.
4.1.2
Organizace
Základní organizace systému ROS spočívá v dělení do tzv. balíků. Toto rozdělení je nutné, vzhledem k velkému rozsahu oblasti robotiky a umělé inteligence, ke spolupráci mezi výzkumnými skupinami při vytváření rozsáhlých systémů. Balík (package) je složka obsahující XML soubor, který definuje závislosti a popis. Může obsahovat libovolně složitou strukturu podadresářů a vytváří pak adresářový strom, kde balíky jsou jeho listy. Otevřený charakter balíků umožňuje velké změny jejich struktury či účelu. Některé mohou zabalovat již existující software (např. OpenCV2 ) a automatizovat jeho sestavení. Jiné zase vytvářejí uzly pro použití v ROS grafech, další poskytují knihovny a spustitelné soubory či skripty pro automatizaci a testování. Systém balíků je určen k rozdělení vývoje ROS systému na malé kousky, z nichž každý lze udržovat a vyvíjet podle vlastního plánu a vlastním týmem vývojářů. ROS obsahuje nástroj rospack k prohledávání stromu balíků, hledání závislostí a balíků podle jména. Je navržen pro podporu simultánního vývoje mezi více repozitáři s ROS balíky.
4.2
Simulace a možnosti vizualizace
Při návrhu a ladění softwaru pro robota je často důležité vizualizovat scénu kolem něj či simulovat a sledovat některé jeho stavy za běhu. ROS může využít dynamickou povahu propojení jednotlivých uzlů v grafu k proniknutí do jakéhokoliv proudu informací v systému. Oddělení vydavatelů a odběratelů umožňuje vytvoření univerzální vizualizace - jednoduchý program se přihlásí k odběru určitých dat a ty potom zobrazí. Nicméně ROS nabízí daleko silnější prostředek pro vizualizaci zvaný RViz. Součástí ROSu je také simulátor Gazebo. 2
Svobodná a otevřená multiplatformní knihovna pro manipulaci s obrazem zaměřená především na počítačové vidění a zpracování obrazu v reálném čase.
17
4.2.1
RViz
RViz je 3D vizualizační prostředí pro roboty používající ROS, umožňující vizualizovat samotného robota, stav jeho senzorů a další data [14].
Obrázek 4.2: Okno RViz Základem je 3D pohled, ve kterém se vizualizuje většina potřebných informací. Na levé straně je seznam displejů, který zobrazuje všechny načtené dipleje. Napravo je panel s pohledy, který umožňuje vybrat typ kamery a projekce (obrázek 4.2). Z panelu nástrojů lze vybrat aktuální nástroj a panel čas ukazuje uběhnutý simulační čas. Displej Displej vykresluje objekty do 3D prostoru a má určité vlastnosti, které jsou nastavitelné a upravují výsledné zobrazení. Příkladem může být samotný robot, mračno bodů apod. RViz také umožňuje vytváření vlastních displejů pomocí pluginů. Nový displej se přidává tlačítkem Add a je zobrazen v seznamu displejů, kde je možné jej přesouvat a mazat (tlačítko Remove). Každý přidaný displej musí mít svůj unikátní název, takže není možné mít zobrazeny například dvě mračna bodů pod stejným jménem, ale je vhodné každý z nich pojmenovat podle svého účelu. U každého displeje se také zobrazuje jeho stav, který dává vědět, jestli je vše v pořádku či není (stavy OK, Error, Warning a Disabled). Stav je indikován určitým podbarvením názvu dipleje a také vlastností Status (obrázek 4.3), která obsahuje vlastnosti specifické pro daný typ displeje. V ROSu jsou k dispozici tyto základní typy displejů: • Axes - zobrazí osy x, y a z, • Camera - vytvoří nové vykreslovací okno z pohledu kamery a překreslí ho obrázkem, • Grid - vykreslí 2D nebo 3D mřížku, • Grid Cells - kreslí buňky z mřížek, 18
Obrázek 4.3: RViz - vlastnosti displeje • Image - vytvoří nové vykreslovací okno z obrázku, • InteractiveMarker - zobrazí 3D objekty umožňující interakce s myší, • Laser Scan - vykresluje data z laserových skenerů, • Map - zobrazí mapu, • Markers - umožňuje zobrazení primitivních 3D objektů, • Path - zobrazí cestu robota, • Pose - kreslí pozici jako šipku nebo osu, • Pose Array - kreslí sadu šipek (jednu pro každou pozici v poli), • Point Cloud(2) - zobrazuje data z mračen bodů, • Polygon - kreslí obrys polygonu z čar, • Odometry - hromadí pozice odometrií v průběhu času, • Range - zobrazuje kužely představující rozsah měření ze sonarů nebo IR dálkových senzorů, • RobotModel - ukazuje vizuální reprezentaci robota ve správné pozici, • TF - zobrazuje hierarchii transformací. Pohledy V RVizu je možno nastavit různé typy kamer a projekcí jako pohledy: • Orbital Camera - točí se kolem těžiště (zobrazeno jako malý disk při pohybu kamery) a vždy na něj směřuje, • FPS (first-person) Camera - kamera z pohledu první osoby, která se točí tak, jako by se hýbalo hlavou,
19
• Top-down Orthographic - ortografický pohled, který se dívá dolů ve směru osy Z, takže vzdálenější objekty se nezmenšují. Je také možné vytvořit si pohledy vlastní, které se skládají z typu a pozice kamery a cílového rámce. Souřadné rámce V RVizu jsou dva souřadné rámce, které je potřeba znát. Pevný rámec (Fixed Frame) Pevný rámec se používá k označení světa“, čili většinou ” je nastaven na world nebo map. Je-li nastaven špatně, například na základnu robota, tak se všechny objekty, které robot detekoval, zobrazí před ním na relativní pozici vzhledem k němu. Cílový rámec (Target Frame) Cílový rámec je referenční rámec pro kamery. Pokud je například cílový rámec nastavený na map, bude se robot pohybovat po mapě. Je-li však nastavený na základnu robota, bude robot na místě a všechno ostatní se bude pohybovat kolem něj. Nástroje RViz má řadu nástrojů, které lze použít na panelu nástrojů: • Move Camera - základní nástroj, který při kliku a pohybu myši v 3D pohledu hýbe s kamerou, • Interact - zpřístupňuje interakci (například pomocí interaktivních značek ), • Select - umožňuje označení objektů zobrazených v 3D pohledu, • 2D Nav Goal - nastavuje cíl zaslaný na goal ROS topic, • 2D Pose Estimate - umožňuje nastavit počáteční pozici zaslání na initialpos ROS topic. Konfigurace RViz umožňuje vytvoření tzv. konfigurací. Každá z nich může být vhodná pro jiné účely, takže lze nastavit RViz tak, jak je potřeba, a uložit jeho konfiguraci. Ta může být později opětovně načtena a je možno hned pracovat se správně nastaveným programem. Konfigurace obsahuje displeje a jejich vlastnosti, vlastnosti nástrojů a typ kamery s nastavením počátečního pohledu. Pluginy Přidávání nových displejů je možno výtvářením pluginů, které lze načíst z uživatelského rozhraní. Vytváření pluginů bude blíže popsáno v podkapitole 6.3.1.
20
4.2.2
Gazebo
Gazebo je simulátor robotů ve venkovních prostředích. Dokáže simulovat skupinu robotů, senzory a objekty ve 3D světě. Vytváří jej mezinárodní tým vyzkumníků robotiky a je využíván v mnoha laboratořích po celém světe. Gazebo je součástí systému ROS a dá se využívat společně s RVizem k vizualizaci a simulaci robota (obrázek 4.4).
R Obrázek 4.4: Ukázka simulace robota Care-O-bot 3 v programu Gazebo
4.3
Interaktivní prvky
Jednou z důležitých částí vizualizace robota je také možnost interakce s ním, či s okolními objekty. Umožňuje pak zadávat robotovi příkazy, například pro manipulaci nebo pohyb. Také si operátor může interaktivně upravovat své uživatelské rozhraní - zpřesňovat pozice detekovaných objektů, přidávat je či odebírat apod. V ROSu existuje sada tzv. interaktivních značek, což jsou značky rozšířené o možnosti interakce.
4.3.1
Značky
Značky (markers) jsou různá 3D primitiva, která je možno publikovat na ROS topic a zobrazit např. v RVizu. Tabulka 4.1 popisuje jednotlivé vlastnosti značek. Následující obrázky a informace jsou převzaty z [10]. Typy značek Existuje mnoho typů značek, které je možné zobrazit. Jsou to buď klasické tvary jako kvádr či koule, nebo vlastní vytvořené modely či text.
21
Parametr ns id type action pose
scale color points colors lifetime frame locked text mesh resource mesh use embedded materials
Popis Jmenný prostor značky. Společně s id tvoří jedinečný identifikátor. Unikátní id v rámci jmenného prostoru. Typ značky (Arrow, Sphere apod.). ADD nebo DELETE - přidá/upraví nebo odebere objekt. Pozice a orientace značky. Pozice se zadává jako souřadnice x, y a z do pose.position, orientace je kvaterion v pose.orientation. Zadává měřítko značky v osách x, y a z. Hodnota 1 odpovídá velikosti 1 m. RGBA barva značky. Jen pro některé typy značek. Zadávají se souřadnice bodů. Také jen pro některé značky, specifikují se zde barvy jednotlivých segmentů. Časová hodnota, po které se značka automaticky odstraní. Při nezadání zůstává značka nastálo. Značka se při každém obnovení přetransformuje do aktuální pozice specifikovaného rámce. Text pro textovou značku. Cesta k souboru s definovaným objektem. Použití materiálu v mesh resource místo barvy.
Tabulka 4.1: Přehled vlastností značek Arrow Jedná se o klasickou šipku (obrázek 4.5), u které je možné nastavit její velikost, směr a barvu. Zadat se dá dvojím způsobem: • Pozicí a orientací – Pivot je na špičce ocasu. – Orientace směřuje podél osy x. • Počátečním a koncovým bodem – Pomocí pole points lze specifikovat počáteční a koncový bod šipky. – Bod na indexu 0 je pokládán za počáteční bod a bod na indexu 1 je koncový bod.
Obrázek 4.5: Značka typu Arrow [10]
22
Cube, Sphere, Cylinder (obrázek 4.6).
Tyto značky vykreslují klasické tvary typu kvádr, koule a válec
• Zadávají se pozicí středu a velikostí. • Pivot je ve středu daného objektu. • Nastavením různých velikostí v osách x a y nebo z lze dosáhnout jiných tvarů - např. kvádru, elipsy apod.
Obrázek 4.6: Značky typů Cube, Sphere a Cylinder [10]
Line Strip Nakreslí propojené čáry mezi každými dvěma po sobě následujícími body propojí se tedy body 0 a 1, 1 a 2, 2 a 3 apod. (obrázek 4.7). • Body se zadávají do vlastnosti points. • Šířka čar se zadává pomocí scale.x. • Pokud je třeba vybarvit každý segment jinou barvou, lze využít vlastnosti colors.
Obrázek 4.7: Značka typu Line Strip [10]
Line List Oproti Line Strip kreslí nepropojené čáry mezi každou dvojici bodů, tzn. mezi body 0 a 1, 2 a 3, 4 a 5 apod. (obrázek 4.8). • Vlastnosti jsou stejné jaku u Line Strip.
23
Obrázek 4.8: Značka typu Line List [10] Cube List
Jedná se o seznam krychlí se stejnými vlastnostmi (obrázek 4.9).
• Pozice jednotlivých krychlí se zadávají ve vlastnosti points. • Barvu každé krychle lze také nastavit ve vlastnosti colors.
Obrázek 4.9: Značka typu Cube List [10]
Sphere List Totéž jako Cube List, jen se pouze vykreslují koule a nelze použít vlastnosti colors (obrázek 4.10).
Obrázek 4.10: Značka typu Sphere List [10]
Triangle List U Triangle List se zobrazují trojúhelníky, které se vykreslují z každé trojice (obrázek 4.11). • Body trojúhelníku se zadavájí ve vlastnosti points. • Opět lze nastavit barvu každého trojúhelníku ve vlastnosti colors.
24
Obrázek 4.11: Značka typu Triangle List [10] Points
Vykresluje množinu bodů (obrázek 4.12).
• Body se zadávají do vlastnosti points. • Vlastnost scale.x určuje šířku bodu, scale.y určuje jeho výšku. • Vlastnost colors umožňuje opět nastavit barvy jednotlivých bodů.
Obrázek 4.12: Značka typu Points [10]
View-Oriented Text Pokud je třeba zobrazit text, lze použít tuto značku. Text se vykresluje vždy čelem ke kameře, takže je čitelný při jakémkoliv natočení (obrázek 4.13). • Jeho obsah se zadává do vlastnosti text. • Velikost písma se zadává jako scale.z.
Obrázek 4.13: Značka typu View-Oriented Text [10]
25
Mesh Resource Chceme-li zobrazit jakýkoliv jiný tvar, než je v základu nabízen, je možné použít tuto značku (obrázek 4.14). • Cesta k souboru obsahující model (případně i materiál) objektu se zadává do vlastnosti mesh resource. • RViz podporuje objekty ve formátu .stl3 , .mesh4 a .dae5 . • Vlastnost scale zde představuje relativní velikost k originální velikosti objektu, tzn. hodnota (0.5, 0.5, 0.5) zobrazí objekt v poloviční velikosti. • Objektu je možné zadat barvu vlastností color, ale také je možné použít materiál (texturu) objektu nastavením vlastnosti mesh use embedded materials na true.
Obrázek 4.14: Značka typu Mesh Resource [10]
4.3.2
Interaktivní značky
Interaktivní značky (Interactive Markers) jsou podobné obyčejným značkám, obsahují však navíc možnosti interakce s uživatelem. Lze s nimi tedy hýbat, rotovat je, klikat na ně a přistupovat k nastaveným vlastnostem či akcím pomocí kontextového menu. Obrázek 4.15 zobrazuje interaktivní značku, se kterou lze hýbat a rotovat. Interactive Marker Control Vizuální reprezentace interaktivních značek je tvořena z tzv. controls (obrázek 4.3.2). Ty obsahují několik obyčejných značek a každá z nich může mít vlastní funkci [9]. Definovány jsou pomocí zprávy visualization msgs/InterativeMarkerControl, která má následující parametry: • name - unikátní jméno, podle kterého se identifikují vykonané akce a provádí patřičné zpětné reakce, • orientation - definuje lokální souřadnicový rámec, ve kterém se rotuje a posouvá,
3 STL neboli Stereolithography - formát určený pro uložení těles reprezentovaných polygony, který je uložen buď v binárním nebo ASCII formátu. 4 Formát 3D enginu OGRE (Object-Oriented Graphics Rendering Engine). 5 Collada (COLLAborative Design Activity) - formát pro ukládání 3D objektů a animací využívající XML schéma.
26
Obrázek 4.15: Příklad interaktivní značky [8] • orientation mode - určuje, jak se mění orientace: – INHERIT - orientace je shodná s interaktivní značkou, – FIXED - orientace se nemění, – VIEW FACED - roviny y a z jsou natáčeny společně s kamerou, • interation mode - nastavuje možnou interakci: – NONE - žádná možná interakce, pouze vizualizace, – MENU - při pravém kliknutí se ukáže kontextové menu, – BUTTON - na objekt je možno kliknout i levým tlačítkem myši, – MOVE AXIS - posuv podél lokální x-ové osy, – MOVE PLANE - posuv v rovině y-z, – ROTATE AXIS - rotace okolo lokální x-ové osy, – MOVE ROTATE - kombinace MOVE PLANE a ROTATE AXIS, • always visible - je-li nastaven na true, zobrazují se obsažené značky i v neinteraktivním módu vizualizéru, • markers - seznam značek, které se zobrazují a je možno s nimi provádět akce specifikované v interaction mode (není-li žádná zadaná, použijí se implicitně definované značky), • independent marker orientation - pouze pro VIEW FACING mód - při nastavení na true se značky chovají tak, jako by byla orientace nastavena na INHERIT, • description - krátký popis značky.
27
Interactive Marker @ @ @ @
R @
?
Control
Control
A A A A AU
Cube
Arrow
Arrow
Control A A A A AU
Text
Obrázek 4.16: Příklad struktury interaktivní značky
Interactive Marker Server Interaktivní značky se vkládají do instance objektu InteractiveMarkerServer, který vytvoří potřebný uzel a poskytuje spojení s klienty (např. RViz). Stará se také o to, aby byly přeneseny všechny provedené změny a aby aplikace byla obeznámena s akcemi uživatele, které s interaktivními značkami provedl. Při každé změně interaktivní značky je nutné server aktualizovat funkcí applyChanges(), čímž se zašle zpráva všem připojeným klientům.
4.4 4.4.1
Další vybrané části ROSu Knihovna tf
Robotický systém má typicky mnoho 3D souřadných rámců, které se s přibývajícím časem mění - například rámec pro svět“, základnu robota, chapadlo, senzory a kamery apod. ” K synchronizaci a provádění potřebných transformací slouží právě knihovna tf. Obrázek 4.17 ilustruje souřadné rámce u robota PR2.
Obrázek 4.17: Ukázka souřadných rámců u robota PR2 Knihovna tf udržuje vztahy mezi souřadnými rámci ve stromové stuktuře a umožňuje uživateli transformovat body, vektory, mračna bodů atd. mezi dvěma rámci ve vybraném čase. Dokáže tedy odpovědět na otázky typu [18]: 28
• Jaká je pozice rámce chapadla robota vzhledem k pozici rámce zvoleného objektu? • Kde byl rámec hlavy robota vzhledem k rámci světa“ před pěti sekundami? ” • Jaká je současná pozice rámce základny robota v rámci světa“? ” Součástí tf je také řada nástrojů pro příkazovou řádku, která pomáhá při vytváření souřadných rámců: • view frames - vizualizuje strom transformací, • tf monitor - monitoruje transformace mezi rámci, • tf echo - vytiskne zvolenou transformaci na obrazovku, • roswtf - pomáhá nalézt problémy s tf, • static transform publisher - posílá statické transformace.
4.4.2
Knihovna OGRE
Ogre (Object-Oriented Graphics Rendering Engine) je 3D grafický engine využívající grafu scény napsaný v C++ a navržený tak, aby bylo pro vývojáře snadnější a intuitivnější produkování aplikací využivající hardwarovou akceleraci 3D grafiky. Knihovna poskytuje rozhraní založené na třídách z reálného světa, které abstrahují vlastnosti a detaily ze systémových knihoven jako je OpenGL a Direct3D [13].
29
Kapitola 5
Návrh interaktivního rozhraní Interaktivní rozhraní by mělo operátorovi poskytovat nezkreslený přehled o situaci v okolí robota, vykreslovat všechny důležité objekty a nabízet možnosti, jak s těmito objekty manipulovat, umožnit operátorovi scénu doplnit o své postřehy a také z tohoto rozhraní robota přímo ovládat. Kvalitní rozhraní by také mělo co nejlépe řešit některé problémy spojené se vzdáleným ovládáním robota, které byly zmíněny v kapitole 3, takže například pomoct operátorovi získat lepší povědomí o orientaci robota či o velikostech a vzdálenostech objektů, aby bylo ovládání robota bezpečné a efektivní a nedocházelo ke zbytečným a nebezpečným kolizím. Interaktivní rozhraní bude požadovat vytvoření specialních grafických interaktivních primitiv, která budou operátorovi poskytovat potřebné informace o objektech ve scéně a také mu přidávat možnosti interakce s nimi. Měly by být vytvořeny následující typy primitiv: • Obalové těleso - bude sloužit ke zvýraznení rozměrů tělesa, • Billboard - bude nahrazovat některé detekované objekty ve scéně, • Neznámé těleso - pomocí něj bude mít operátor možnost označit ve scéně například místa, kam se nemůže s robotem pohnout, kde se nachází překážky či nedosažitelné objekty, • Objekt - detekovaný objekt, jehož tvar je definovaný v databázi objektů systému ROS, • Rovina - ke zvýraznění desky stolu, zdí apod. Operátor potřebuje mít představu o vzdálenostech mezi objekty. Bude tedy potřeba vytvořit nástroje, které budou ilustrovat nejbližší vzdálenosti okolo robota a také detekovat a zobrazovat nejbližší objekty. Bude také vhodné mít k dispozici jednoduchý nástroj, se kterým by mohl operátor s robotem podle potřeby pohnout přímo pomocí interaktivních prvků rozhraní, takže by nemusel přepínat na zvláštní program pro ovládání robota či měnit vstupní zařízení. K efektivnímu využívání interaktivního rozhraní v prostředí systému ROS bude také třeba vytvořit sadu ROS služeb, které budou umožňovat následující akce: • přidávání primitiv do scény, • úpravy vlastností již existujících primitiv, 30
• odebírání primitiv ze scény, • zjišťování vzdáleností mezi objekty. Na obrázku 5.1 je znázorněno možné schéma jednotlivých modulů systému, které jsou propojeny pomocí definovaných služeb a topiců. Modul Service Server publikuje služby pro přidávání, odebírání a upravování vlastností primitiv. Ty se zde uchovávají a zároveň se vkládají do Interactive Marker Serveru, který pomocí topicu interaction primitives/update informuje vizualizační program RViz o jejich stavu a umožňuje tím jejich zobrazení. Primitiva zde přidávají moduly Plane Detector a Leg Detector pomocí služeb add plane a add billboard. Jsou zde také znázorněny dva moduly Observer 1 a Observer 2 reprezentující pozorovatele odebírající topicy, které informují o kliknutí v menu či pohybu objektu (v tomto případě člověka).
Obrázek 5.1: Schéma propojení jednotlivých modulů pomocí služeb a topiců
5.1
Interaktivní primitiva
Interaktivní primitiva jsou určená k doplnění vizualizované scény okolo robota v RVizu. Umožní zvýraznění detekovaných rovin a objektů, jejich manipulaci a zadání akcí k provedení robotem. Většina interakcí bude dostupná přes kontextové menu, které bude umožňovat také nastavení vlastností daného primitiva. Typy a vlastnosti primitiv vychází z požadavků projektu SRS. Interaktivní primitiva budou také mít prostředek, jak upozornit případné pozorovatele na změnu jejich vlastností, vyvolanou interakci apod. To mohou být jiné programy (uzly), které souvisí s prací s robotem a své chování upravují podle aktuálního stavu scény a interaktivního rozhraní.
5.1.1
Obalové těleso
Obalové těleso (Bounding Box ) je prostorová obálka detekovaného tělesa, která je tvořena nejmenším možným kvádrem, do kterého se objekt vejde (obrázek 5.2). Využívá se k zobrazení rozměrů objektu a také například k výpočtu kolizí. 31
Obrázek 5.2: Příklad jednoduchého obalového tělesa Veškerá možná interakce s obalovým tělesem bude dostupná přes kontextové menu pravým kliknutím myši. Bude tak možné přidat interaktivní značky, které umožní přesun či rotaci obalového tělesa. Ta se bude provádět tahem řídících značek (šipek či obručí) v požadovaném směru. Obalové těleso bude také opatřeno měřítkem velikosti objektu, aby operátor mohl mít lepší povědomí o reálné velikosti objektů ve scéně. Zobrazení měřítka a případně i zobrazení zadaného popisu obalového tělesa se opět bude provádět přes kontextové menu.
5.1.2
Billboard
Billboard reprezentuje reálný objekt, který byl detekován robotem a nelze přesně určit jeho tvar a rozměry, nebo se nenachází v databázi objektů systému ROS, aby mohl být ve scéně přesně zobrazen. Jedná se například o objekty typické pro domácnost, které mohou mít spoustu druhů a tvarů (stůl, židle), či dokonce pohybující se osoby. Tyto objekty nejsou určeny k interakci s robotem.
Obrázek 5.3: Příklad billboardu reprezentujícího židli, který se natáčí za kamerou Billboard se bude neutále natáčet s pohybem kamery tak, aby jeho plocha byla vždy kolmá ke směru kamery. Obrázek 5.3 zobrazuje návrh takového billboardu, který se natáčí za 32
kamerou. Billboard může také reprezentovat pohybující se objekt, proto bude mít možnost zobrazit i pohyb a rychlost daného objektu.
5.1.3
Neznámé těleso
Neznámé těleso bude sloužit operátorovi například jako zarážka do scény, když ví, že na dané místo se robotem nelze pohnout a ani tam používat žádné předměty (obrázek 5.4). Taky bude reprezentovat nedostupné a nebezpečné“ objekty, které nelze uchopit nebo by ” se k nim nemělo přibližovat.
Obrázek 5.4: Ukázka možného využití neznámého tělesa k zábránění najetí na schodiště Vlastnosti neznámého tělesa budou podobné vlastnostem obalového tělesa. Půjde s ním tedy pohybovat a rotovat, zobrazovat jeho rozměry a popisek. Navíc bude možné měnit jeho velikost a roztahovat jej ve scéně podle potřeby operátora.
5.1.4
Objekt
Primitiva typu objekt budou sloužit k reprezentaci a vizualizaci objektů detekovaných pomocí robotových senzorů. Objekty bude možné zobrazit jako reálný model skutečného tělesa, který je uložen v databázi objektů, nebo pouze jako obarvený tvar tělesa. S tělesem bude ve scéně opět možné hýbat, zobrazit si jeho rozměry či popisek.
Obrázek 5.5: Návrh zobrazení pozic pro uchopení objektů U objektů bude také možnost zobrazit tzv. pre-grasp“ pozice, do kterých lze navést ” robotovo rameno tak, aby bylo možno z této pozice objekt uchopit chapadlem. Tyto pozice 33
budou znázorněny jako bod poblíž objektu a šipka značící směr uchopení (obrázek 5.5). Také budou opatřeny číselnou identifikací. Přímou interakcí s nimi bude také možné zadat robotovi příkaz, aby vykonal přesun chapadla do této pozice.
5.1.5
Rovina
Rovina slouží k zobrazení rovin detekovaných v mračně bodů, jako je deska stolu, stěna, dvěře apod. (obrázek 6.9).
Obrázek 5.6: Návrh zobrazení roviny v point cloudu zobrazujícím část sedačky Rovině půjde pomocí kontextového menu přiřazovat identifikátor kategorie, do která spadá. Například tak půjde označit stěnu, desku stolu apod. Rovina jinak nebude mít další možnosti interakce.
5.2
Vizualizace vzdáleností
Pro vzdáleného operátora je důležité mít představu o vzdálenostech mezi objekty ve scéně, zvláště pak mezi těmito objekty a robotem samotným. Je tedy potřeba navrhnout nástroj, který bude vyhledávat pevné povrchy v okolí robota, přepočítávat jejich vzdálenost k nim a vše přehledně vizualizovat. Dále bude nutné vytvořit pomůcku, která pomůže operátorovi lépe odhadnout blízké vzdálenosti okolo zvolené části robota, například chapadla, aby operátor věděl, jak moc se může k danému objektu přiblížit či ne. Vizualizace vzdáleností bude převážně určena k tomu, aby zobrazovala nejbližší povrch od chapadla robota a umožnila tím operátorovi pohodlněji a bezpečněji dosáhnout ramenem určitého objektu a uchopit jej. Operátor tedy bude mít možnost vybrat si, od kterých částí robotova těla se budou zobrazovat nejbližší povrchy, bude je moci od sebe nějak odlišit (například barvou či tloušťkou čáry), a také si přímo nechat do scény vypsat jejich vzdálenost. Obrázek 5.7 zobrazuje robota v simulovaném prostředí programu Gazebo. Je zde vidět, že nejbližším povrchem k chapadlu je mirovlná trouba. To bude zobrazeno například žlutou čárou a vypsanou naměřenou vzdáleností. Bude-li operátor chtít vizualizovat nejbližší povrch i od dalších částí robota, například od hlavy, bude to v tomto případě hrana kuchyňské linky znázorněna zeleně. Blízké vzdálenosti okolo robotovy zvolené části bude vhodné zobrazit jako soustavu kružnic s definovanými rozestupy, tloušťkou a počtem tak, aby měl operátor možnost si je podle potřeby a situace upravit - u chapadla bude pravděpodobně chtít hustší soustavu
34
Obrázek 5.7: Ukázka robota v simulovaném prostředí s návrhem vizualizace vzdáleností nejbližších povrchů kružnic o menším poloměru, ale okolo robota bude stačit pár kružnic s většími vzdálenostmi mezi sebou (obrázek 6.13).
Obrázek 5.8: Návrh vizualizace blízkých vzdáleností
5.3
Ovládání robota
Pro pohodlné pohybování s robotem ve scéně bude vhodné integrovat ovládací prvky přímo do interaktivního rozhraní. Tyto prvky umožní pohybovat s robotem dopředu, dozadu, do stran a otáčet ho tak, aby jej operátor mohl přesunout do potřebné pozice. Také bude možno zvolit místo, do kterého se robot pokusí sám dostat. Ovládání robota nebude řešit žádné kolize s okolím, o to by se měl postarat sám robot.
35
Kapitola 6
Implementace interaktivního rozhraní Interaktivní rozhraní je implementováno v jazyce C++ s použitím nástrojů a knihoven poskytovaných systémem ROS.
6.1
Popis implementace interaktivních primitiv
Primitiva popsaná v kapitole 5 jsou implementována pomocí interaktivních značek jako objekty v jazyce C++. Základní objekt třídy Primitive poskytuje primitivům společné atributy (viz tabulka 6.1) a metody. Patří zde metody potřebné pro zadání a změnu hodnot všech atributů a také hlavní metoda insert(), která vytvoří grafickou reprezentaci zvoleného primitiva podle zadaných vlastností z interaktivních značek a vloží jej do určeného Interactive Marker Serveru. Atribut server frame id name description pose scale color
Popis ukazatel na Interactive Marker Server název pevného rámce název primitiva (jedinečný identifikátor) popis primitiva pozice a orientace primitiva velikost primitiva barva primitiva
Tabulka 6.1: Společné atributy primitiv zděděné ze třídy Primitive Jednotlivá primitiva pak mají své vlastní třídy, které dědí atributy a metody ze zmíněné třídy Primitive. Obsahují pak přizpůsobené metody pro vytvoření kontextového menu, grafické reprezentace a reakcí na interakci s nimi. Tyto třídy jsou: • BoundingBox, • Billboard, • UnknownObject, • Object, 36
• Plane. Jak již bylo zmíněno, grafická reprezentace primitiv je tvořena z interaktivních značek a to buď základního tvaru nebo pomocí definovaných modelů. Další interaktivní značky jako šipka či obruč umožňují s primitivem hýbat ve scéně či jej roztahovat do požadovaných rozměrů a tvaru. Důležitým prvkem je kontextové menu (obrázek 6.1), které umožňuje jednotlivé značky přepínat, upravovat jejich vlastnosti či provádět s primitivem jiné nastavené akce.
Obrázek 6.1: Ukázka kontextového menu primitiv
6.1.1
Obalové těleso
Obalové těleso je implementováno jako třída BoundingBox. Vizuální reprezentace se skládá z průhledné značky tvaru kvádru (typ Cube) a hran vykreslených pomocí značek typu Line List (obrázek 6.2).
Obrázek 6.2: Obalové těleso Rozměry tělesa ilustrují značky typu Line Strip a Text (obrázek 6.3). Pohyb a rotace s obalovým tělesem (obrázek 6.4) je možná pomocí základních řídících značek (šipky a obruče). Případný popisek je také zobrazen jako značka typu Text.
37
Obrázek 6.3: Ukázka rozměrů obalového tělesa
Obrázek 6.4: Manipulace s obalovým tělesem pomocí interaktivních značek
6.1.2
Billboard
Billboard je reprezentován třídou Billboard. Jelikož značky samy o sobě dovolují obarvení objektu pouze jednolitou barvou a billboard potřebuje nahrazovat detekovaný objekt pomocí obrázku, je jeho vizuální reprezentace (obrázek 6.5) značkou s otexturovaným modelem tvaru rovinné plochy vytvořeným v program Blender1 a exportovaným do formátu .mesh.
Obrázek 6.5: Billboardy reprezentující židli a hlavu člověka Billboardu je možné nastavit rychlost a směr pohybu, tudíž má navíc atributy direction a velocity, podle jejichž hodnot se pohyb vykresluje. Znázorněn je značkami typu Arrow a Text (obrázek 6.6). 1
Blender - open-source software pro modelování a vykreslování 3D počítačové grafiky a animací
38
Obrázek 6.6: Billboard zobrazující pohybujícího se člověka
6.1.3
Neznámé těleso
Neznámé těleso je reprezentováno třídou UknownObject a jeho vizualizace je opět tvořena značkou s definovaným objektem. Tento objekt je kvádr s vlastním materiálem (červený kříž) vytvořený pomocí programu Blender (obrázek 6.7). Zbývající vizualizované části (rozměry, řídící značky apod.) jsou shodné s obalovým tělesem.
Obrázek 6.7: Neznámé těleso
6.1.4
Objekt
Objekt (třída Object) nabývá svůj tvar podle nastaveného modelu. Tento model může být v podporovaném formátu zmíněném v kapitole 4.3.1. Ne všechny detekované objekty ale mají svůj model uložený v databázi objektů. Někdy detektor vrátí pouze tvar definovaný pomocí trojúhelníků, takže objekt může být také vizualizován jako značka typu Triangle List. Pozice pro uchopení objektu jsou značky typu Sphere a Arrow a každému objektu je 39
možno specifikovat 6 pozic, do kterých lze umístit chapadlo k uchopení objektu (obrázek 6.8). Nad pozicí se také zobrazuje její číslo a pomocí menu lze zadat robotovi příkaz, aby do ní přesunul své chapadlo a rameno. Kolem objektu je také vykresleno jaho obalové těleso.
Obrázek 6.8: Objekt se zobrazením pozic pro jeho uchopení
6.1.5
Rovina
Rovina je implementována pomocí třídy Plane a její vizuální reprezentace je dána značkou typu Cube s téměř nulovou výškou (obrázek 6.9).
Obrázek 6.9: Ukázka roviny otagované pomocí kontextového menu jako zeď
40
6.1.6
Publikování topicu se změnami vlastností a interakcí interaktivních primitiv
O publikování změn a interakcí interaktivních primitiv se stará objekt třídy UpdatePublisher, který pro každé primitivum poskytuje topicy publikující tyto změny. Jedná se o tyto typy topiců: • UPDATE POSE - změna pozice a orientace primitiva, • UPDATE SCALE - změna rozměrů primitiva, • MENU CLICKED - vybrání položky v menu, • MOVEMENT CHANGED - změna pohybu (pouze billboard), • TAG CHANGED - změna tagu (pouze rovina). Každé primitivum publikuje tyto změny na své vlastní update topicy, které obsahují název primitiva. Například tedy pro primitivum s názvem person billboard jsou publikovány tyto topicy: • person billboard/update/pose changed, • person billboard/update/scale changed, • person billboard/update/menu clicked, • person billboard/update/movement changed. Jak je možné pozorovatelem sledovat změny interaktivních primitiv je ukázáno v podkapitole A.0.3. Na obrázku 6.10 je ukázan graf odebírání topiců mezi dvěma uzly.
Obrázek 6.10: Ukázka odebírání topiců se změnami interaktivních primitiv z uzlu test primitives uzlem test observers získáná programem rxgraph
41
6.2
Implementace ROS služeb
Každá ROS služba musí mít definovanou svou strukturu a musí být publikována ROS uzlem.
6.2.1
Struktura služby
Struktura služby se definuje pomocí souboru s příponou .srv a ten by měl být uložen v podsložce srv v rámci balíku. Jedná se o textový soubor specifikující parametry požadavku a odpovědi a je založen na struktuře ROS zprávy (viz podkapitola 4.1.1). Požadavek a odpoveď jsou od sebe odděleny řetězcem ---. Například služba pro přidáni billboardu má strukturu následující (část pro odpověď je prázdná): string frame id string name string description uint8 type float64 velocity geometry msgs/Quaternion direction geometry msgs/Pose pose geometry msgs/Vector3 scale ---
6.2.2
# # # # # # # #
Fixed Frame Billboard name Billboard description Billboard type Billboard movement speed Billboard movement direction position and orientation of the Billboard scale of the Billboard
Publikování služby
Službu je třeba publikovat v některém uzlu a programově v C++ to lze udělat následovně: // ROS inicializace (poslední argument je název uzlu) ros::init(argc, argv, "but_gui_service_server"); // NodeHandle je hlavní přístupový bod ke komunikaci s ROS systémem ros::NodeHandle n; // Vytvoření a publikování služby add_bounding_box // addBoundingBox je funkce zpětného volání pro publikovanou službu ros::ServiceServer addBoundingBoxService = n.advertiseService("add_bounding_box", addBoundingBox);
6.2.3
Implementace služeb pro práci s primitivy
Tyto služby slouží pro přidání a odebrání primitiv ze scény a k získání či úpravě jejich vlastností. Publikovány jsou uzlem interaction primitives service server. Služby pro přidání primitiv do scény Pro každé primitivum je vytvořena služba pro jeho přidání do scény: • add bounding box, • add billboard, 42
• add unknown object, • add object, • add plane. Tyto služby mají následující společné základní parametry: • name - název primitiva • frame id - název pevného rámce • pose - pozice a orientace primitive • scale - rozměry primitiva • color - barva primitiva • description - popisek primitiva Další parametry jsou zavislé na typu primitiva a odpovídají atributům jednotlivých primitiv (např. direction a velocity u Billboardu). Služba pro odebrání primitiva ze scény Službě remove primitive stačí pouze parametr name k nalezení a odebrání primitiva ze scény. Služby pro změnu vlastností primitiv Ke změně určité vlastnosti daného primitiva je třeba zadat jeho název parametrem name a novou hodnotu vlastnosti, jejíž typ je závislý na volané službě (viz tabulka 6.2). Služba change color change description change pose change scale change direction change velocity set pregrasp position remove pregrasp position
Název parametru color description pose scale direction velocity pos id pose pos id
Typ hodnoty std msgs/ColorRGBA string geometry msgs/Pose geometry msgs/Vector3 geometry msgs/Quaternion float32 uint8 geometry msgs/Pose uint8
Tabulka 6.2: Atributy služeb pro změnu vlastností primitiv
Služba pro zjištění vlastností primitiv Zde je implementována pouze služba get update topic a má následující parametry: • string name - název primitiva • uint8 type - typ update topicu, který nás zajímá Návratová hodnota update topic je řetězec obsahují topic publikující změny interaktivního primitiva. 43
6.2.4
Implementace služby pro zjištění nebližšího bodu
Služba get closest point vypočítává pozici a vzdálenost nejbližšího bodu od zvolené části robota z dostupného point cloudu. Je publikována uzlem but service server a získání potřebných údajů využívá objektu třídy PointCloudTools. Třída PointCloudTools Objekt této třídy v sobě uchovává aktuální stav point cloudu detekovaného robotem. Ten získává odebíráním topicu /cam3d/depth/points. Poskytuje jednu veřejnou metodu getClosestPoint(string link), která provede výpočet nebližšího bodu a vzdálenosti od zadané části robota (parameter link) z aktuálního stavu point cloudu. Pozici nalezeného bodu vrací v souřadném systému zadané části robota. Výpočet nejbližšího bodu Před každý výpočtem je nutné transformovat pozici robotovy části do souřadného systému 3D kamery robota pomocí tf knihovny (viz podkapitola 4.4.1), aby bylo možné spočítat vzdálenost dvou bodů v prostoru. Poté je možné procházet všechny body point cloudu a najít ten nejbližší pomocí výpočtu Euklidovské vzdálenosti. Nakonec se zjištěný bod musí opět převést do původního souřadného systému určeného částí robota.
Obrázek 6.11: Euklidovská vzdálenost v trojrozměrném prostoru Euklidovská vzdálenost číslo δ(u, v) dané vztahem:
Euklidovská vzdálenost bodů u = (x1 , x2 ) a v = (y1 , y2 ) je
δ(u, v) =
p (x1 − y1 )2 + (x2 − y2 )2
(6.1)
Pravidlo δ se nazývá Euklidovská metrika a je-li definována pro všechny body z množiny R2 , nazýváme tuto množinu Euklidovským metrickým prostorem E2 . Analogicky se definuje euklidovská vzdálenost v Rn a pro body u = (x1 , x2 , . . . , xn ) a v = (y1 , y2 . . . . , yn ) může být vztah 6.1 upraven na [6]: p δ(u, v) = (x1 − y1 )2 + (x2 − y2 )2 + . . . + (xn − yn )2 (6.2) V našem případě potřebujeme vypočítat vzdálenost dvou bodů u = (x1 , y1 , z1 ) a v = (x2 , y2 , z2 ) v trojrozměrném prostoru (obrázek 6.11) a upravením vztahu 6.2 získáme vzorec: p δ(u, v) = (x1 − x2 )2 + (y1 − y2 )2 + (z1 − z2 )2 (6.3) 44
6.3
Implementace vizualizace vzdáleností
Nástroje pro vizualizaci vzdáleností nejbližších povrchů jsou implementovány jako plug-in pro RViz, který zajišťuje vykreslování a nastavení vlastností či počtu zobrazovaných vzdáleností. K získání pozice a vzdálenosti nejblišího bodu povrchu využívá vytvořené služby get closest point.
6.3.1
Vytvoření displeje jako plug-in pro RViz
Tvorba displeje pro RViz spočívá ve vytvoření třídy odvozené od rviz::Display a jejím umístění do ROS balíku společně s nastavením potřebných závislostí. Příkladem může být třída MyDisplay, která přetěžuje metody targetFrameChanged(), fixedFrameChanged(), onEnable() a onDisable(): class MyDisplay : public rviz::Display { public: // Konstruktor MyDisplay(const std::string & name, rviz::VisualizationManager * manager): Display(name, manager); // Destruktor MyDisplay(); // Přetížené metody reagující na změny rámců virtual void targetFrameChanged(); virtual void fixedFrameChanged(); // Přetížená metoda vyvolávající se při obnovení displeje virtual void update(float wall_dt, float ros_dt); protected: // Přetížené metody které se spouštějí společně s aktivací // nebo deaktivací displeje virtual void onEnable(); virtual void onDisable(); }; Dále je možno přetížením metody createProperties() vytvořit panel vlastností displeje. Jednoduchá textová položka se dá vytvořit následovně: StringPropertyWPtr distance_property = property_manager_->createProperty<StringProperty> ("Distance: ", property_prefix_, boost::bind(&MyDisplay::getDistance, this), boost::bind(&MyDisplay::setDistance, this, _1), parent_category_); Funkce setDistance je volána po změně hodnoty vlastnosti v panelu displeje, getDistance zase zajišťuje zobrazení aktuální hodnoty v panelu hodnot. V displejích pro vizualizaci vzdáleností jsou využity ještě tyto typy vlastností: 45
• TFFrameProperty, • ColorProperty, • IntProperty, • FloatProperty, • BoolProperty, • Vector3Property. Vykreslování do 3D scény se realizuje pomocí grafu scény enginu OGRE (viz podkapitola 4.4.2), který zajišťuje veškerou grafickou reprezentaci objektů ve scéně.
6.3.2
Vizualizace nejbližšího povrchu
U vizualizace nejbližšího povrchu můžeme nastavit tyto vlastnosti dipleje: • Link - část robota, od které chceme spočítat a zobrazit nejbližší povrch, • Color - barva zobrazené čáry a textu, • Alpha - průhlednost textu, • Line thickness - šířka vykreslené čáry, • Draw distance - je-li zaškrtnuto, do scény se vykreslí i text s údajem o vzdálenosti.
Obrázek 6.12: Vizualizace nejbližších povrchů v RVizu Obrázek 6.12 ukazuje vizualizaci nejbližších povrchů v RVizu v situaci, která je navržena na obrázku 5.7. Jako nebližší povrch od chapadla tedy byla skutečně nalezena mikrovlná trouba ve vzdálenosti 1.61 m a hrana kuchyňské linky je od hlavy vzdálena 1.89 m.
46
6.3.3
Vizualizace okruhu vzdáleností
U okruhu vzdáleností můžeme nastavit kromě klasických vlastností jako barva a tloušťka také počet kruhů, jejich vzdálenosti atd.: • Link - část robota, okolo které se vykreslí soustava kružnic ilustrujících vzdálenosti, • Orientation - natočení soustavy kružnic, • Color - barva kružnic a textu, • Levels - počet kružnic v soustavě, • Radius - vzdálenost jednotlivých kružnic od sebe, • Thickness - tlušťka kružnic, • Show distance - vykreslení textů se vzdálenostmi. Na obrázku 6.13 jsou vidět možnosti umístění indikátoru vzdáleností na různé části robotova těla, možnosti jejich natočení a změny dalších atributů.
Obrázek 6.13: Vizualizace okruhů vzdáleností
6.4
Implementace ovládání robota
Ovládání robota je implementováno v objektu třídy TeleopCOBMarker. K zadávání směru pohybu či otáčení slouží interaktivní značky (šipky a obruč), které lze v interaktivním módu programu RViz uchytit a posunout a získat tím pozici (natočení), kam se má robot pohnout (obrázek 6.14). Robot se dá ovládat pomocí těchto značek: • červená šipka - slouží k posunutí robota dopředu nebo dozadu, • zelená šipka - umožňuje robotovi pohyb do stran (úkroky), 47
Obrázek 6.14: Ovládání robota • modrá obruč - rotací s touto obručí lze s robotem otáčet na místě, • žlutý kruh - přesunutím žlutého kruhu na určité místo lze robota na toto místo přemístit tak, že se nejprve začne ma místě otáčet do daného směru, a teprve potom se začne pohybovat do zvoleného místa. Samotný pohyb robota je prováděn ve funkci zpětného volání, kterou zavolá manipulace s interaktivními značkami. V této funkci je spočteno, zda-li se má robot otáčet či pohybovat, a jeho pohyb je pak publikován na příslušný topic.
48
Kapitola 7
Výsledky, ukázky použití a shrnutí V této kapitole bude představena scéna ilustrující využití navržených nástrojů a interaktivních primitiv. Také zde budou zobrazeny ukázky z modulů, které již využívají primitiva navržená v této práci, a uvedeno shrhnutí dosažených výsledků.
7.1
Ukázka modelové scény
Na obrázku 7.1 je zobrazena modelová scéna, která využívá všechna navržená interaktivní primitiva. Můžeme zde vidět detekovaný objekt na kuchyňské lince zvýrazněný obalovým tělesem, nedostupnou oblast ilustrovanou neznámým objektem, pohybující se osobu vizualizovanou pomocí billboardu a také detekovanou rovinu. Ve scéně jsou mimo jiné zobrazeny i indikátory vzdáleností a interaktivní ovládání robota. Ze standardních nástrojů systému ROS je ve scéně zobrazen také map zobrazující mapu prostoru, ve kterém se robot nachází, a point cloud vykreslující výstupy detektorů robota.
Obrázek 7.1: Ukázka modelové scény s interaktivními primitivy
49
Přesuneme-li robota blíže k detekovanému objektu na kuchyňské lince, zjistíme, že se jedná o mléko a je v určité vzdálenosti od chapadla (např. cca 112 cm viz obrázek 7.2). Tato informace se hodí operátorovi pro plánovaní uchopení objektu stejně jako zobrazení pozic, do kterých lze chapadlo umístit. Můžeme zde také vidět ilustraci velikosti tohoto objektu, kterou představují žlutě zvýrazněné hrany obalového tělesa detekovaného objektu.
Obrázek 7.2: Ukázka modelové scény - detail detekovaného objektu Neznámý objekt zde symbolizuje úzké dveře, které by robot s nataženým ramenem nemohl bezpečně projet. Na obrázku 7.3 jsou tyto dveře vidět v mapě scény. Správným umístěním a roztažením neznámého tělesa lze také získat rozměry daného prostoru, v tomto případě dveří, které jsou cca 1 m široké a 2 m vysoké.
Obrázek 7.3: Ukázka modelové scény - neznámý objekt symbolizující úzké dveře
50
Na obrázku 7.4 je možné vidět člověka pohybujícího se rychlostí 0.9 m/s směrem k pohovce. Podle indikátorů vzdáleností je člověk v bezpečné vzdálenosti cca 250 cm od robota a pohovka je vzdálená cca 175 cm. Na pohovce je také detekována rovina.
Obrázek 7.4: Ukázka modelové scény - člověk pohybující se k pohovce
7.2
Ukázky využití interaktivních primitiv v dalších modulech projektu SRS
V rámci projektu SRS jsou již interaktivní primitiva využívaná některými moduly, kde zobrazují například detekované objekty či roviny.
7.2.1
Modul pro semi-autonomní plánováni trajektorie ramene
Interaktivní primitivum typu objekt je využíváno modulem pro semi-autonomní plánování trajektorie ramene1 , kde vizualizuje detekovaný objekt, jeho obalové těleso a pozice určené k uchopení (viz obrázek 7.5). Umožní tím operátorovi zjistit přesnou polohu, natočení a velikost uchopovaného objektu a také pozice, do kterých musí být rameno a chapadlo navedeno, aby mohlo dojít k uchopení předmětu robotem.
7.2.2
Modul pro detekci rovin
Obrázek 7.6 zobrazuje interaktivní primitiva typu rovina, která jsou detekovaná modulem pro detekci rovin.
7.3
Shrnutí dosažených výsledků
V rámci této práce byla vytvořena sada interaktivních primitiv a některá z nich, jak již bylo zmíněno v této kapitole, se používají či jsou součástí modulů vznikajících v rámci 1
http://www.ros.org/wiki/srs assisted arm navigation
51
Obrázek 7.5: Ukázka využití primitiva typu objekt modulem pro semi-autonomní plánování trajektorie ramene projektu SRS. Jedná se o primitiva typu objekt a rovina. Primitivum typu billboard bude v blízké době součástí modulu pro detekci postav, který bude detekovat pohybující se osoby a predikovat směr a rychlost jejich pohybu, kde bude tyto postavy vizualizovat a zobrazovat zjištěný pohyb. Jako další vylepšení těchto primitiv se nabízí např. rozšíření definice roviny pomocí zadaného polygonu či rozšíření interaktivních možností objektu tak, aby bylo možno jednoduše zadávat robotovi příkazy, co má s objektem udělat. Interaktivní ovládání robota je již také obsaženo v oficiálním balíčku R cob command tools2 , který je součástí repozitáře pro robota Care-O-bot v rámci systému ROS. V budoucnu bude rozšířeno o zobrazení predikovaných pozic robota při jeho pohybu tak, aby měl operátor lepší představu o tom, do kterého místa robot za daný čas dojede, a mohl tak včas změnit směr pohybu, jeho rychlost či zastavit. Vylepšením detekce blízkých povrchů může v budoucnu být její přizpůsobení k výpočtu a detekci objektů z celého známého okolí robota a ne jen z mračna bodů, které je aktuálně zobrazováno. Pro další vývoj interaktivního rozhraní budou také důležité poznatky a požadavky, které vzniknou v rámci projektu SRS.
2
http://ros.org/wiki/cob command tools
52
Obrázek 7.6: Ukázka využití interaktivních primitiv z modulu pro detekci rovin
53
Kapitola 8
Závěr Cílem této práce bylo zorientovat se v problematice ovládání vzdáleného robota, seznámit se se systémy a nástroji používanými pro vývoj, simulaci a provoz robota. Na základě těchto poznatků bylo dále potřeba navrhnout a vybrat metody a prostředky pro vytvoření interaktivního rozhraní pro ovládání vzdáleného robota. Je nutné také podotknout, že volba některých nástrojů a technik vycházela z požadavků projektu SRS. Jako hlavní vizualizační a interaktivní nástroj pro interaktivní rozhraní byl vybrán RViz ze systému ROS. Byla vytvořena sada interaktivních grafických primitiv umožňujících zobrazení a zvýraznění objektů detekovaných ve scéně a přidávajících k těmto objektům interakci. Samotná primitiva jsou tvořena z interaktivní značek poskytovaných rovněž platformou ROS. Byly také vytvořeny nástroje pro ilustraci vzdáleností objektů a jejich rozměrů ve scéně a pro ovládání pohybu robota. Uživatelské testy vytvořeného interaktivního rozhraní s uživateli jsou plánovány v rámci projektu SRS, proto nejsou v této práci vyhodnoceny. Cíl této práce se podařilo splnit a některé části vytvořeného interaktivního rozhraní se již R začleňují do fungujícího systému pracujícího s robotem Cate-O-bot 3, jako je například modul pro detekci rovin či modul pro semi-autonomní plánování trajektorie ramene. Také interaktivní ovládání robota je již součástí oficiálního repozitáře systému ROS. Do budoucna se však nabízí další možnosti vylepšení prvků interaktivního rozhraní, jako je například predikce pohybu robota při jeho ovládání či detekce blízkých povrchů z celého známého okolí. Další požadavky na vylepšení rozhraní vzniknou v rámci projektu SRS.
54
Literatura [1] Bruemer, D.; Few, D.; Boring, R.; aj.: Shared understanding for collaborative control. In IEEE Transactions on Systems, Man, and Cybernetics, Part A: Systems and Humans, ročník 35, 2005, ISSN 1083-4427, s. 494–504. [2] Chen, J.; Haas, E.; Barnes, M.: Human Performance Issues and User Interface Design for Teleoperated Robots. In IEEE Transactions on Systems, Man, and Cybernetics, Part C: Applications and Reviews, ročník 7, 2007, ISSN 1094-6977, s. 1231–1245. [3] Graf, B.; Hans, A.; Kubacki, J.; aj.: Robotic home assistant Care-O-bot II. In Second Joint EMBS/BMES Conference, ročník 3, 2002, ISBN 0-7803-7612-9, ISSN 1094-687X, s. 2343–2344. R [4] Graf, B.; Reiser, U.; Hagele, M.; aj.: Robotic Home Assistant Care-O-bot 3Product Vision and Innovation Platform. In IEEE Workshop on Advanced Robotics and its Social Impacts (ARSO), 2009, ISBN 978-1-4244-4393-2, s. 139–144.
[5] Quigley, M.; Gerkey, B.; Conley, K.; aj.: ROS: an open-source Robot Operating System. In ICRA Workshop on Open Source Software, 2009. [6] Sanchez, P.; Milson, R.; Slone, M.: Euclidean distance [online]. http://planetmath.org/?op=getobj;from=objects;id=1318, [cit. 2011-12-25], version 11. [7] Song, T.; Park, J.; Chung, S.; aj.: Intelligent user interface for Human-Robot Interaction. In 6th IEEE International Conference on Industrial Informatics, 2008, ISBN 978-1-4244-2170-1, ISSN 1935-4576. [8] WWW: Interactive Markers: Basic Controls [online]. http://www.ros.org/wiki/rviz/Tutorials/Interactive%20Markers%3A%20 Basic%20Controls, [cit. 2011-12-27]. [9] WWW: Interactive Markers: Getting Started [online]. http://www.ros.org/wiki/rviz/Tutorials/Interactive%20Markers%3A%20 Getting%20Started, [cit. 2011-12-27]. [10] WWW: Marker [online]. http://www.ros.org/wiki/rviz/DisplayTypes/Marker, [cit. 2011-12-27]. [11] WWW: Care-O-bot 3 [online]. http://www.mmspektrum.com/novinka/care-o-bot-3.html, [cit. 2011-12-28]. [12] WWW: SRS - Project Overview [online]. http://www.http://srs-project.eu/overview, [cit. 2011-12-28]. 55
[13] WWW: OGRE - Open Source 3D Graphics Engine [online]. http://www.ogre3d.org/about, [cit. 2012-01-12]. [14] WWW: rviz [online]. http://www.ros.org/wiki/rviz, [cit. 2012-03-01]. R [15] WWW: Care-O-bot Home - Fraunhofer IPA [online]. http://www.care-o-bot.de/, [cit. 2012-03-10].
[16] WWW: Robots Using ROS: Care-O-bot 3 (Fraunhofer IPA) - ROS robotics news [online]. http://www.ros.org/news/2010/03/robots-using-ros-care-o-bot-3-fraunhofer-ipa.html, [cit. 2012-03-15]. [17] WWW: Robotic Arm Hardware - CH.ORG I-II PROJECT [online]. http://larryo.org/work/robotics/robotics hardware.html, [cit. 2012-03-21]. [18] WWW: tf2 - ROS Wiki [online]. http://www.ros.org/wiki/tf2, [cit. 2012-03-21].
56
Příloha A
Ukázky Zde jsou uvedeny ukázky vytvoření a vložení primitiv v C++ nebo pomocí definovaných ROS služeb a přihlášení pozorovatele k odběru topiců se změnami. Také zde jsou ukázány další obrázky některých prvků interaktivního rozhraní.
A.0.1
Vložení objektu v C++
// Inicializace Interactive Marker Serveru na uzlu int_primitives InteractiveMarkerServerPtr server; server.reset(new InteractiveMarkerServer("int_primitives", "", false)); // Vytvoření objektu se jménem milk_object a~pevným rámcem /world Object * milkObject = new Object(server, "/world", "milk_object"); // Nastavení pozice a orientace objektu milkObject->setPose(p); // Nastavení rozměrů obalového tělesa milkObject->setBoundingBoxLWH(lwh) // Nastavení barvy tělesa milkObject->setColor(c) // Nastavení modelu objektu milkObject->setResource("package://cob_gazebo_objects/Media/models/milk.dae") // Objekt se vykreslí jako obarvený tvar (nepoužije se definovaný materiál // ale zadaná barva milkObject->setUseMaterial(false); // Vyvoření a vložení objektu do serveru milkObject->insert(); // Aplikování změn na serveru server->applyChanges();
A.0.2
Vložení billboardu pomocí služby
Využije se publikované služby add billboard
57
Pomocí příkazové řádky rosservice call /add_billboard ’{ frame_id: /world, name: billboard, type: 2, description: "Toto je billboard", velocity: 5.6, direction: { x: 1, y: 1, z: 0, w: 1}, scale: { x: 1, y: 2 }, pose: { position: { x: -1, y: 0, z: 0 } } }’ V Pythonu import roslib; roslib.load_manifest(’srs_interaction_primitives’); import rospy from std_msgs.msg import * from geometry_msgs.msg import * from srs_interaction_primitives.srv import AddBillboard rospy.wait_for_service(’add_billboard’) add_billboard_service = rospy.ServiceProxy(’add_billboard’, AddBillboard) direction = direction.x direction.y direction.z direction.w
Quaternion() = 1 = 1 = 0 = 1
scale = Vector3() scale.y = 1 scale.x = 0 pose = Pose() pose.position.x = -1.0 pose.position.y = 0.0 pose.position.z = 0.0 add_billboard_service(’/world’, ’billboard’, 2, ’Toto je billboard’, 5.6, direction, scale, pose)
A.0.3
Přihlášení pozorovatele k odběru topicu se změnami primitiv
K přihlášení pozorovatele k odebírání určitého topicu stačí vytvořit jednoduchý ROS uzel, který si přihlásí svůj odběr na příslušný topic, a určit funkci zpětného volání, která zpracuje příchozí data z topicu. Například uzel, který bude mít zájem být informován o výběru položek menu primitiva s názvem milk, může vypadata takto: // Funkce zpětného volání obstarávající příchozí topicy void menuCallback(const srs env model::MenuClickedConstPtr &update) { // Výpis názvu vybrané položky menu std::cout << update->menu title << std::endl; // Výpis stavu vybrané položky (zaškrtnutá, nezaškrtnutá apod.) 58
std::cout << update->state << std::endl; } int main(int argc, char** argv) { // ROS inicializace (poslední argument je název uzlu) ros::init(argc, argv, "observer"); // NodeHandle je hlavní přístupový bod ke komunikaci s ROS systémem ros::NodeHandle n; // Vytvoření odběratele na topic /milk/update/menu_clicked // menuCallback je funkce zpětného volání ros::Subscriber subscriber = n.subscribe<srs_env_model::MenuClicked> (’’/milk/update/menu_clicked’’, 20, menuCallback); // Cyklení uzlu ros::spin(); }
A.1
Další ukázky prvků interaktivního rozhraní
Obrázek A.1: Ukázka detekce blízkých povrchů na barevném mračně bodů
59
Obrázek A.2: Ukázka mléka detekovaného pomocí fake detectoru
Obrázek A.3: Ukázka zobrazení samotného obalového tělesa a znázornění jeho rozměrů
60
Příloha B
Obsah CD Obah jednotlivých složek na přiloženém CD: • dp - obsahuje elektronickou verzi této práce ve formátu PDF a její zdrojové soubory – src - zdrojové soubory této práce • src - zdrojové soubory vytvořených prvků interaktivního rozhraní – cob interactive teleop - interaktivní ovládání robota – srs interaction primitives - interaktivní primitiva – srs ui but - vizualizace vzdáleností • poster - plakát reprezentující tuto práci
61
Příloha C
Manuál C.0.1
Softwarové požadavky
• Operační systém Ubuntu • ROS Electric (http://www.ros.org/wiki/electric/Installation/Ubuntu) • Simulace COB 1. Instalace základních COB balíků: sudo apt-get install ros-electric-care-o-bot 2. Stažení skriptu a zdrojových kódů z gitu ipa320 sudo apt-get install git-core curl wget https://github.com/ipa320/setup/raw/master/create_overlay.sh -N --no-check-certificate chmod 755 create_overlay.sh ./create_overlay.sh cob_extern ./create_overlay.sh cob_common ./create_overlay.sh schunk_modular_robotics ./create_overlay.sh cob_driver ./create_overlay.sh cob_robots ./create_overlay.sh cob_environments ./create_overlay.sh cob_command_tools ./create_overlay.sh cob_simulation ./create_overlay.sh cob_navigation wget https://github.com/ipa320/setup/raw/master/githelper -N --no-check-certificate chmod 755 githelper ./githelper merge 3. Přidání složky git/care-o-bot do proměnné ROS PACKAGE PATH 4. Kompilace COB balíků rosmake cob_bringup_sim cob_simulation cob_robots cob_navigation cob_command_tools
62
C.1
Kompilace
1. Přidání složky src se zdrojovými kódy rozhraní do proměnné ROS PACKAGE PATH 2. Kompilace balíků s interaktivním rozhraním rosmake cob_interactive_teleop srs_interaction_primitives srs_ui_but
C.2 C.2.1
Spuštění jednotlivých komponent a ukázek Interaction Primitives Service Server
Server uchovávající primitiva a poskytující služby pro jejich přidávání, odebírání a změny Spuštění jádra systému ROS roscore Spuštění serveru rosrun srs_interaction_primitives but_interaction_primitives_service_server Spuštění RVizu rosrun rviz rviz Nastavení RVizu 1. Fixed Frame nastavit např. na /world 2. Přidat Interactive Marker Display 3. Nastavit jeho Update Topic na /but interaction primitives/update Nyní je možno přidávat primitiva pomocí definovaných služeb.
C.2.2
COB Interactive Teleop
R Interaktivní ovládání robota Care-O-Bot .
Spuštění ukázky roslaunch cob_interactive_teleop cob_interactive_teleop_test.launch RViz je nutno přepnout do Interact módu a zapnout displej 04. Interactive Markers.
C.2.3
Vizualizace vzdáleností
Vizualizace vzdáleností okolo robota a měření nejbližšího povrchu.
63
Spuštění ukázky roslaunch srs_ui_but distance_visualizer_test.launch Možná bude nutné načíst plugin but gui přes menu Plugins/Manage.
C.2.4
Spuštění modelové scény
Modelová scéna z kapitoly 7. roslaunch srs_ui_but example_visualization.launch RViz je nutno přepnout do Interact módu a zapnout displeje 08. Interactive Markers a 09. Interactive Markers.
64
Příloha D
Plakát
65