1 České vysoké učení technické v Praze Fakulta informačních technologií Katedra softwarového inženýrství Bakalářská práce Robot NAO jako rozhraní do i...
České vysoké učení technické v Praze Fakulta informačních technologií Katedra softwarového inženýrství
Bakalářská práce
Robot NAO jako rozhraní do internetových zdrojů informací Eliška Kuběnová
Vedoucí práce: Ing. Miroslav Skrbek, Ph.D.
12. května 2014
Poděkování Ráda bych poděkovala vedoucímu své práce, Ing. Miroslavu Skrbkovi, Ph.D., za jeho ochotu, trpělivost, cenné rady a dlouhá odpoledne při práci na této bakalářské práci. Také bych ráda poděkovala studentům, kteří byli ochotni se zúčastnit testování – jmenovitě jsou to slečna Eva Mayerová, pánové Vratislav Svoboda, Vojtěch Růžička a Ondřej Brém. V neposlední řadě bych ráda poděkovala svému příteli a své rodině nejen za jejich podporu, ale i za to, že kolem mě chodili po špičkách ve chvílích, kdy jsem to nejvíc potřebovala.
Prohlášení Prohlašuji, že jsem předloženou práci vypracoval(a) samostatně a že jsem uvedl(a) veškeré použité informační zdroje v souladu s Metodickým pokynem o etické přípravě vysokoškolských závěrečných prací. Beru na vědomí, že se na moji práci vztahují práva a povinnosti vyplývající ze zákona č. 121/2000 Sb., autorského zákona, ve znění pozdějších předpisů. V souladu s ust. § 46 odst. 6 tohoto zákona tímto uděluji nevýhradní oprávnění (licenci) k užití této mojí práce, a to včetně všech počítačových programů, jež jsou její součástí či přílohou a veškeré jejich dokumentace (dále souhrnně jen „Dílo“), a to všem osobám, které si přejí Dílo užít. Tyto osoby jsou oprávněny Dílo užít jakýmkoli způsobem, který nesnižuje hodnotu Díla, avšak pouze k nevýdělečným účelům. Toto oprávnění je časově, teritoriálně i množstevně neomezené.
V Praze dne 12. května 2014
.....................
České vysoké učení technické v Praze Fakulta informačních technologií c 2014 Eliška Kuběnová. Všechna práva vyhrazena.
Tato práce vznikla jako školní dílo na Českém vysokém učení technickém v Praze, Fakultě informačních technologií. Práce je chráněna právními předpisy a mezinárodními úmluvami o právu autorském a právech souvisejících s právem autorským. K jejímu užití, s výjimkou bezúplatných zákonných licencí, je nezbytný souhlas autora.
Odkaz na tuto práci Kuběnová, Eliška. Robot NAO jako rozhraní do internetových zdrojů informací. Bakalářská práce. Praha: České vysoké učení technické v Praze, Fakulta informačních technologií, 2014.
Abstrakt Tato práce se zaměřuje na prezentaci informací robotem NAO. Přestože je mnoho způsobů získávání dat z Internetu, zde se robot NAO stává rozhraním či moderním prostředníkem mezi zdroji informací na Internetu a koncovým uživatelem. Mimo základních informací o robotovi a rešerše možných poskytovatelů dat obsahuje práce ukázkovou demo aplikaci a průběh jejího návrhu. Tato aplikace je schopná získávat data z Internetu, třídit je a připravovat jejich výslednou podobu pro prezentaci robotem NAO, se kterým vzdáleně komunikuje. Stejně tak je aplikace jednoduchým způsobem schopná přizpůsobit tato data v závislosti na uživateli. Prezentace je navržena tak, že jí dominuje především hlasový výstup robota, který je pro větší přirozenost doprovázen vytvořenou gestikulací. V závěru práce byla tato aplikace otestována několika uživateli. Klíčová slova NAO robot, JNAOqi, Choregraphe, zdroje informací, webové služby, RSS kanály
ix
Abstract This work deals with information presentation by robot NAO. Although there are many ways of getting the data from the Internet, robot NAO becomes to be an interface or modern intermediary between Internet data sources and the end user. Apart from basic information about robot and research of webservices and other data channels, there is included a demo application with its design process. The application is able to retrieve data from the Internet, sort it and prepare it to suitable form for robot NAO. It remotely communicates with robot. There is also a simple way to adapt the data according to the user. The presentation is designed to be mostly made up of robot speech accompanied by created gestures. In the end, this application was tested by several users for usibility. Keywords NAO robot, JNAOqi, Choregraphe, information sources, webservices, RSS feeds
x
Obsah Úvod
1
1 Cíle práce
3
2 Robot NAO 2.1 Důležité součásti . . . 2.2 Pohyb . . . . . . . . . 2.3 Obraz a zvuk . . . . . 2.4 Senzory . . . . . . . . 2.5 Připojení . . . . . . . 2.6 Technologie robota . . 2.7 Prostředí Choregraphe
Navržené schéma komunikace . . . . . . . . . . . . . . . . Diagram procesu vyhledávání v mapách . . . . . . . . . . Diagram procesu čtení televizního programu . . . . . . . . Diagram procesu čtení zpravodajství z RSS kanálu . . . . Diagram procesu čtení časopisových článku z RSS kanálu
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
21 23 24 25 26
5.1 5.2 5.3 5.4
Schéma komunikace Java aplikace s moduly Schéma aplikace . . . . . . . . . . . . . . . Flow diagram úvodního chování robota . . Ukázka Random boxu . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
27 29 35 36
xiii
robota . . . . . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
1
Úvod Každý den hledáme nějaké ty zkratky, abychom si usnadnili práci, která nás čeká. Většinu činností si usnadňujeme tak automaticky, že už nás nad nimi ani nenapadne přemýšlet. Moderní doba je k tomu přímo stvořená a technologií, které jsou nám k dispozici, je nespočet. A právě mezi takové technologie patří i robotika. Někdo se s roboty možná setkává v práci, většina z nás určitě v kuchyni. Ale to samozřejmě není ten druh robotů, o kterých se nyní budeme bavit. Pro případný výzkum jsou vedle velkých a drahých robotů k dispozici i ti menší. Jedním z nich je právě robot NAO. Projekt tohoto robota byl spuštěn francouzskou firmou Aldebaran Robotics již v roce 2005. Od té doby se usilovně pracuje nejen na rozšíření jeho funkčnosti, ale i rozšíření robota mezi lidi po celém světě. Největší využití, jak by se dalo předpokládat, nachází tento robot v akademickém prostředí. Užívá se však také ve vědeckých výzkumech s autistickými dětmi či s osobami, které potřebují osobní asistenci. Kdo by přece doma nechtěl malého roztomilého společníka, který s ním bude komunikovat? Cílem Aldebaran Robotics je dostat robota do domácností v rozsahu zhruba pěti let. Do rámce „robot NAO jako společník do domácnosti“ je tak situována i tato práce. Jde o ukázku toho, jak by to doma s takovým pomocníkem mohlo fungovat.
et
Intern
Titulky dnešních zpráv...
Obrázek 0.1: Schéma komunikace 1
Úvod Tato práce si klade za cíl přiblížení myšlenky, že robot NAO bude vyhledávat informace a prezentovat je způsobem, který bude jeho majiteli příjemný. Zaměřuje se na samotné propojení robota s informacemi na Internetu (schéma na obrázku 0.1). Informací na internetu je však spousta, je tedy vhodné vybrat ty, které budou pro robota snadno zpracovatelné, a navrhnout jejich rozumnou prezentaci. Kapitola 1 představuje základní cíle této práce. Upřesňuje tak, co je její náplní. Seznámení s robotem NAO a s jeho technickými a funkčními možnostmi je k nalezení v kapitole 2. Tato kapitola obsahuje i představení grafického vývojového prostředí Choregraphe od firmy Aldebaran Robotics. Následující kapitola 3 shrnuje principy webových služeb a RSS kanálů, z nichž je možné informace čerpat. Obsahuje také zhodnocení jednotlivých zdrojů. V kapitole 4 jsou pak k nalezení navržené principy realizace aplikace a průchody jednotlivými procesy. Kapitola 5 se pak zabývá konkrétní realizací této aplikace, popisem jednotlivých tříd a jejich metod. Tuto práci uzavírá kapitola 6, která se zaměřuje na způsob a výsledky testování použitelnosti uživateli.
2
Kapitola
Cíle práce Cíle této práce lze shrnout do několika bodů: • seznámit se s robotem NAO, jeho technickými parametry, funkčními možnostmi a vývojovými prostředky • najít webové služby či zdroje informací na Internetu, ze kterých je možné čerpat • zhodnotit nalezené zdroje z hlediska dostupnosti, jejich rozhraní a jejich zpracovatelnosti programem • navrhnout způsob prezentace a pohyby robota • realizovat ukázkovou demo aplikaci, která bude schopná připravit informace do vhodné podoby a za pomoci robota je prezentovat
3
1
Kapitola
Robot NAO Robot NAO, jak bylo zmíněno v úvodu, je projektem francouzské firmy Aldebaran Robotics. Za vším takříkajíc stojí zakladatel, a nyní i výkonný ředitel této firmy, Bruno Maisonnier, který přišel s novou ideou humanoidních robotů. V roce 2005 začalo jen několik málo nadšenců realizovat tento projekt a pracovalo na vydání prototypu, který by se objevil na trhu. V roce 2008 byl NAO vybrán jako nástupce robotického psa AIBO v soutěži RoboCup Soccer League (obrázek 2.1). V roce 2010 pak ohromil svým tancem na světové výstavě Expo 2010 v Šanghaji (obrázek 2.2). Krůček po krůčku se tak blíží k tomu, aby poskytli interaktivní humanoidní roboty, kteří budou cenově dostupní, na pomoc lidem [1].
Obrázek 2.1: RoboCup (převzato ze stránek RoboCup Dutch Open [2])
Obrázek 2.2: Expo 2010 (převzato ze zpravodajského portálu Business Insider [3])
Robot NAO je asi 58 cm vysoký plně programovatelný humanoidní robot. Byl vytvořen tak, aby mohl skutečně být každodenním společníkem. Robot dokáže mluvit, odpovídat na otázky, rozpoznávat obličeje, přehrávat hudbu, zvedat objekty a reagovat na své okolí [1]. Představme si tedy tohoto robota trochu blíž. 5
2
2. Robot NAO
2.1
Důležité součásti
Technické informace jsou čerpány z dokumentace [4] a datasheetu [5]. Robot NAO má • 25 stupňů volnosti – elektrické motory, díky kterým je schopen komplexního pohybu • zabudovanou síť senzorů – 2 kamery, 4 mikrofony, sonar pro měření vzdálenosti, 2 infračervené zářiče a přijímače, inerciální desku, 9 dotekových senzorů a 8 tlakových senzorů • komunikační zařízení – syntetizátor hlasu, LED světla a dva reproduktory • 1.6 GHz procesor Intel Atom umístěný v hlavě • druhý procesor umístěný v torzu • baterii, která umožňuje více než hodinu samostatné činnosti robota
2.2
Pohyb
K pohybu NAO využívá jednoduchý model inverzního kyvadla, díky němuž dokáže balancovat ve vzpřímené poloze. Při chůzi mu nedělá žádný problém změna povrchu, po kterém chodí. Pohybový modul je založen na inverzní kinematice, která je běžně užívána v robotice. Principiálně jde o to, že chceme-li změnit polohu zakončení robotického ramene (například natažení ruky humanoidniho robota), musíme pohnout několika klouby v tomto robotickém rameni (například loktem, ramenem či dokonce kyčlemi). NAO robot má v sobě zabudován i manažer pádu, který robota chrání při nepředvídaném chování. Jeho hlavní funkcí je kontrolovat polohu centra těla, a zjistit tak vychýlení z podporovaného polygonu. Ten je určen na základě pozice nohy či noh dotýkajících se země. Když je zaznamenán pád, všechny pohybové úkony robota jsou zastaveny, jeho ruce zaujmou ochranou pozici a všechny jeho klouby povolí.
2.3
Obraz a zvuk
Pro zaznamenání obrazu má robot NAO k dispozici dvě kamery (náčrt 2.3) se snímkovací frekvencí 30 fps. První, která se nachází na čele, snímá úroveň 6
2.4. Senzory jeho očí a druhá, umístěná v jeho ústech, slouží ke snímání bezprostředního okolí. NAO také obsahuje sadu algoritmů pro detekci a rozpoznávání tváří a objektů, a je tedy schopen rozpoznat, kdo na něj mluví.
Obrázek 2.3: umístění kamer a jejich detekční úhly (převzato z oficiální dokumentace Aldebaran Robotics [4]) Pro sledování zvuků, rozpoznávání hlasu či převodu textu na řeč využívá čtyři mikrofony. Dva jsou umístěny v jeho uších, jeden na čele a jeden v týle. K rozpoznání směru, odkud zvuk přichází, je využito metody známé jako TDOA (Time Difference of Arrival). Principiálně je tato metoda založena na tom, že různá pozice mikrofonů zaznamená zvukovou vlnu v nepatrně odlišných časech. Tento časový rozdíl pak může být speciálně zpracován k určení aktuální pozice zdroje zvuku. Dále je NAO robot vybaven stereo systémem tvořeným dvěma reproduktory ve svých uších, díky nimž dokáže produkovat zvuk. Zde ale nastává zajímavý problém. V uších jsou umístěny jak reproduktory, tak i mikrofony, jak již bylo zmíněno v předchozím odstavci. Pokud tedy robot vydává nějaký zvuk, není schopen jiný zvuk zaznamenat. Tak nějak řečeno se jedná o designovou chybu.
2.4
Senzory
Vedle kamer a mikrofonů má NAO také dotekové senzory umístěné ve třech sekcích na hlavě (náčrt 2.4) a na obou pažích nebo tlačítko na hrudi, sloužící například i pro zapnutí a vypnutí. K detekci překážek na cestě v momentě nárazu slouží čtyři nárazníčky, které se nacházejí po dvou na špičkách chodidel. Tyto senzory lze využít k uvolnění tuhosti motorů při animaci v prostředí Choregraphe (sekce 2.7). 7
2. Robot NAO
middle tactile
rear tactile
front tactile
Obrázek 2.4: umístění dotykových senzorů (pohled ze zadní strany hlavy, převzato z oficiální dokumentace Aldebaran robotics [4])
K lepší orientaci v prostředí a výpočtu vzdáleností od překážek však NAO využívá především sonaru. Dvojice vysílačů a přijímačů ultrazvukových vln se nacházejí v horní části hrudníku. Takovéto měření vzdálenosti je v rozsahu od 25–255 cm. Předměty, které jsou k robotovi blíž, sice dokáže zaznamenat, ale nedokáže určit jejich vzdálenost. Ke kontrole pozic jednotlivých motorů v kloubech slouží 36 senzorů založených na principu Hallova jevu. FSR senzory na chodidlech meří změny odporu v závislosti na použitém tlaku, což nám například dokáže říct, zda má robot chodidlo na zemi. Inerciální jednotka, tvořená ze dvou gyrometrů, jednoho akcelerometru a vlastním procesorem, zajišťuje rovnováhu robota. Výstupní data umožňují odhad rychlosti torza či jeho vybočení a naklánění. Pro popis algoritmu výpočtu úhlu je možno nahlédnout do dokumentace [4].
2.5
Připojení
V současnosti NAO podporuje Wi-Fi připojení k internetu a Ethernet s těmi nejrozšířenějšími síťovými protokoly komunikace. Jelikož je kompatibilní se standardem IEE 802.11 g Wi-Fi a je možné ho používat jak ve WPA tak WEP síti, je možné ho připojit k většině domácích a kancelářských sítí. NAO se navíc dokáže připojit k ostatním objektům v okolí pomocí infračervených vysílačů umístěných v jeho očích, stejně jako dokáže rozpoznat odkud záření přichází. Může tak přímo komunikovat s ostatními NAO nebo jakýmkoliv jiným zařízením podporujícím infračervené záření. Díky tomu může například zapnout televizi nebo být ovládán pomocí dálkového ovladače. 8
2.6. Technologie robota
2.6 2.6.1
Technologie robota NAOqi Framework
Framework NAOqi byl vytvořen vývojáři firmy Aldebaran Robotics přímo pro tohoto robota. Je to hlavní software, který běží na robotovi, řídí ho a využívá se k jeho dalšímu programování. Framework umožňuje komunikaci mezi jednotlivými moduly a splňuje vše potřebné pro moderní robotiku. Umožňuje paralelismus, synchronizaci a obsluhu událostí. Tento framework: • je cross-platform – je možné vyvíjet na operačních systémech Windows, Linux a Mac • je cross-language – obsahuje identické API pro všechny programovací jazyky, které NAO robot zná • poskytuje introspection – základ API robota, schopnost monitorovat jednotlivé funkce (robot zná všechny dostupné funkce API) NAOqi proces NAOqi, který běží na robotovi, je zprostředkovatelem. Po spuštění načte soubor autoload.ini, ve kterém je definováno, které knihovny se mají načíst. Pomocí těchto dynamických knihoven jsou tvořeny jednotlivé moduly. Každý modul je objekt, který má své API a své metody. Jejich načítání tvoří stromovou strukturu (obrázek 2.5). Broker
Modules
Methods insertData(...)
Network Access
NAOqi
ALMemory
getData(...) raiseEvent(...)
...
...
Obrázek 2.5: Strom načítání modulů (překresleno podle dokumentace [4])
2.7
Prostředí Choregraphe
Choregraphe je grafická aplikace od společnosti Aldebaran Robotics zaměřená na vytváření animací a chování, které je možné testovat jak na simulovaném robotu, tak na tom skutečném. Toto vývojové prostředí (obrázek 2.6) tak umožňuje i začátečníkům tvořit složitější a komplexní chování bez napsání jediného řádku kódu. Pro zkušenější jsou tu připraveny i skripty v jazyku Python, díky nimž je možné vytvářet novou funkčnost jednotlivých boxů. 9
2. Robot NAO
Obrázek 2.6: Pracovní prostředí aplikace Choregraphe
2.7.1
Seznámení s prostředím
Knihovna předpřipravených boxů Tato knihovna se nachází klasicky na levé straně pracovní plochy a zastává funkci browseru mezi jednotlivými boxy. Pro použítí stačí daný box tažením přesunout (drag & drop) do pracovní plochy. Jednotlivé boxy lze propojit tažením z daného vstupu do výstupu (či naopak). Pracovní plocha Na této ploše je v projektu umístěno několik boxů, které společně tvoří tzv. flow diagram. Hned nad pracovní plochou je vidět, jak hluboko jste v diagramu zanořeni (obrázek 2.7).
Obrázek 2.7: Ukázka flow diagramu chování.
10
2.7. Prostředí Choregraphe Náhled robota Obvykle v pravé části vidíte náhled simulovaného robota. Po připojení ke konkrétnímu NAO se v této části zobrazí on. Po kliknutí na konkrétní část těla robota v tomto náhledu se vám otevře panel Motion (obrázek 2.8). Zde je možné pomocí jednoduchých posuvníků měnit pozice jednotlivých kloubů robota, a tyto změny jsou přímo přenášeny na robota.
Obrázek 2.8: Ukázka panelu motion pro nohu robota
Timeline Pro animaci robota slouží panel Timeline (obrázek 2.9), který představuje časovou osu chování. Na tu je pomocí možnosti store joints zaznamenat aktuální polohu kloubů robota. Robot pak mezi jednotlivými kroky sám vy-
Obrázek 2.9: Ukázka panelu timeline počítává, jak se do této pozice dostat. U složitějších úkonů je však nutné udělat několik mezikroků. Timeline panel v kombinaci s animačním módem umožňuje pohyby například i nahrávat. Pohyby na této časové ose je možné vyexportovat do Pythonu či C++, do Javy zde tato možnost chybí. 11
2. Robot NAO Manažer chování Manažer chování obvykle není zobrazen v původním rozložení programu. V nabídce View v horní liště si ho můžete aktivovat. Manažer chování slouží k přehledu toho, jaká chování jsou nahraná přímo na robotovi. Umožňuje také jejich snadné nahrávání na robota či jejich stahování z robota do počítače. Pro další informace o prostředí Choregraphe je možno nahlédnout do dokumentace [4].
12
Kapitola
Zdroje informací na Internetu O tom, že je Internet jedním z nejpoužívanějších zdrojů informací, dnes už pravděpodobně nikdo nezapochybuje. Mnoho lidí si zvyklo každodenně využívat jeho rozsáhlé služby. A nejen s tím by jim NAO mohl pomoci. Jaké informace jsou ale na Internetu vlastně k dispozici? Nejprve je dobré uvést si základní strukturu a principy, na kterých jsou webové služby postaveny. Následně se pak zaměřme pouze na webové služby v českém jazyce s ohledem na to, co běžný uživatel může reálně používat.
3.1 3.1.1
Webové služby Architektura
Podle webu w3schools.com [6] je webová služba součástí webové aplikace a je to softwarový systém určený pro podporu interakce počítač-počítač přes počítačovou síť. Jelikož jsou webové služby založeny na nezávislých standardech, umožňují jednoduchou komunikaci mezi aplikacemi. Jejich strukturu je možné si prohlédnout na následujícím obrázku (diagram 3.1). Jedna strana se chová jako poskytovatel služby (server, provider), druhá jako její spotřebitel (klient, requester). Každá webová aplikace by měla mít k dispozici specifikaci veřejného rozhraní a způsob komunikace popsaný pomocí WSDL (Web Services Description Language). WSDL, jazyk založený na XML, je určený právě pro popis webových služeb jako koncových bodů počítačové sítě. SOAP (Simple Object Access Protocol) [7] pak slouží k výměně strukturovaných dat nejčastěji přes HTTP (Hypertext Transfer Protocol). Zpráva SOAP je ve formátu XML a obsahuje kořenový element Envelope. V něm jsou obvykle vnořeny klasicky tři elementy – Header, Body a Fault. Header (hlavička) je nepovinná a slouží obvykle k přenosu informací pro zpracování zprávy. Body je povinné a obsahuje dané volání či odpověď. Fault obsahuje 13
3
3. Zdroje informací na Internetu
Broker UDDI
SO AP
L
W
SD
SD L
W
Requester
publish
AP SO
find
SOAP
Provider
bind
Obrázek 3.1: architektura webové služby využívající SOAP
chyby a stav odpovědi. Základní struktura SOAP zprávy je tedy následující (převzato z [6]): <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> ... <soap:Body> ... <soap:Fault> ...
UDDI je na platformě nezávislý framework pro popis služeb, jejich objevování a integraci pomocí Internetu [6]. Slouží k ukládání informací o webových službách ve formátu WSDL a komunikuje pomocí SOAP. Výhodou je volný přístup k tomuto registru, takže kdokoliv může svoje služby zadávat či vyhledávat. Kromě SOAP je v dnešní době k dispozici také REST (Representational State Transfer). REST je zjednodušený model webových aplikací a je určen převážně pro bezstavové komunikace [8]. Klient se může nacházet v přechodu mezi stavy aplikace, což je od odeslání požadavku až do jeho vyřízení, nebo může odpočívat (at rest), když aplikace komunikuje s uživatelem, ale server nepotřebuje [9]. Ke komunikaci je využíván HTTP, a jeho CRUD operace tak odpovídají HTTP metodám (GET, POST, PUT, DELETE). Reprezentace dat pak může mít různý formát, nejčastější je pravděpodobně XML či JSON.
14
3.1. Webové služby Příklad REST webové služby (převzato z [9]): /** * @Route("/api/users/{name}", * defaults={name="", "_format"="html"}, * requirements={"_format"="html|xml|json"}, * name="_api_users") * @Template() */ public function getUsers($name, $format) { // ... pocitam $result, at uz to je cokoliv ... if ($format == ’json’) { return new Response( json_encode(array(’users’ => $result))); }
3.1.2
Výsledky hledání
Na Internetu jsem bohužel nenašla žádný ucelený seznam českých webových služeb, ze kterého by se dalo vycházet. Je tedy potřeba se dívat jednotlivě po konkrétních zdrojích či problematikách. 3.1.2.1
Jízdní řády
Přestože se dá na webu najít nespočet jízdních řádů, většoma z nich odkazuje na portál IDOS [10]. Důvodem je, že IDOS je jedním z výstupů Celostátního informačního systému o jízdních řádech, který vede společnost CHAPS spol. s.r.o. z pověření Ministerstva dopravy České republiky (MDČR). MDČR má monopol na jízdní řády, a proto jejich strojově čitelná data nejsou veřejná. Jízdní řády tedy do ukázky implementace není možné použít. 3.1.2.2
TV program
PRESS DATA Tato společnost [11] nabízí zpracování kompletního TV programu pro tištěná i elektronická média. Veškerá data je schopna poskytnout ve formátu XML. Z jejích stránek odhaduji, že je tato služba placená, ale je možné zdarma nahlédnutí dema. Pro ukázku se tedy nehodí. Česká televize Česká televize má přímo na svých stránkách k dispozici všechny informace o jimi poskytovaném programu ve formátu XML [12]. Přestože pro použití služby je na webových stránkách potřeba registrace (zdarma), pro implementační ukázku nám postačí testovací uživatel. Blíže bude popsáno v kapitole 5. 15
3. Zdroje informací na Internetu 3.1.2.3
Počasí
in-pocasi.cz Web in-pocasi.cz [13] nabízí data o počasí ve formátu XML. Podle množství dat, které chcete na svém webu použít, si ale připlatíte. meteocentrum.cz Meteocetrum [14] nabízí aktuální počasí a předpověď na tři dny pomocí vygenerování kódu přímo na stránku. V sekci zdarma se ale objevuje zmínka, že v případě zájmu o XML data je možné kontaktovat administrátora webu. Tato možnost není vyzkoušená. Počasí je tedy na většině webů spíše placenou službou. Jelikož ale na webu již exituje pro robota NAO několik řešení této problematiky, nebude toto v ukázce implementace dále řešeno. 3.1.2.4
Google API
Google Maps Web API Tato služba poskytuje geografická data pro různé aplikace zabývající se mapami. Volba výstupního formátu je zcela na klientovi – služba nabízí výstup ve formátu XML či JSON. Directions API, která vypočítává cestu mezi dvěma místy za použití HTTP požadavku, byla vybrána do implementační ukázky. Bude tedy rozebrána později v kapitole 5. Distance Matrix API poskytuje informace o vzdálenosti a časové náročnosti cesty mezi danými destinacemi. Tato informace se vypočítává z doporučené cesty, jejíž popis ale tato API neposkytuje. Elevation API vyhodnocuje změny nadmořské výšky mezi dvěma či více body. Tato API je často používaná pro aplikace zaměřené na turistiku či cyklistiku. Geocoding API slouží k převodu konkrétních adres na souřadnice zeměpisné sítě, čímž umožňuje označit na mapě daný bod, a Time Zone API pak poskytuje informace o časovém pásmu či časovém posunu pro určitou lokaci. Posledním z těchto rozhraní je Places API, jehož úkolem je získávat informace o zajímavých místech. Dokumentace jednotlivých aplikací jsou dostupné z [15]. Google Calendar API Toto rozhraní umožňuje vytváření, editaci a mazání nových událostí v Google kalendáři. Umožňuje jak hromadění dat z veřejných kalendářů, tak přístup k osobnímu kalendáři, jenž je svázán s daným účtem. Výstupním formátem je v tomto případě JSON. K přístupu k této API je možno použít přímo přístup REST či použít některou z knihoven. Dokumentace je dostupná z [16].
3.2
RSS kanály
RSS je odnož XML a proto musí odpovídat i jeho specifikaci. Tento formát je určen převážně pro stránky, které často mění svůj obsah, a proto jsou ideální pro sledování novinek či aktualizací. Navíc umožňují distribuovat obsah z jedné 16
3.2. RSS kanály webové stránky na tisíce dalších stránek, které na tento obsah odkazují. Jelikož RSS slouží ke sdílení obsahu stránek, je i striktně dána jeho struktura [17].
3.2.1
Struktura dokumentu
Na nejvyšší úrovni stojí element , jehož povinným atributem je jeho verze. Tomuto prvku je podřízen jediný element , který obsahuje metadata o tomto kanálu a jeho obsah. Element má tři povinné potomky: • , který obsahuje název kanálu • , který obsahuje hypertextovou adresu kanálu • <description> popisující tento kanál Tento element má samozřejmě i nespočet nepovinných potomků. Pro jejich kompletní seznam nahlédněte do specifikace [17]. Jedním z jeho důležitých potomků je element item, který se v tomto elementu nachází zpravidla hned několik. představuje článek nebo příběh, který je předáván mezi jednotlivými weby. Typicky mívá tři potomky, a těmi jsou title, link a description. Pokud je obsahem elementu description synapse článku či příběhu, vede element link vždy na celý obsah tohoto článku. Přesto však item může být samostatnou jednotkou. Pak se link zpravidla neuvádí. Ukázka RSS dokumentu (převzato z [18]): W3Schools Home Page http://www.w3schools.com <description>Free web building tutorials RSS Tutorial http://www.w3schools.com/rss <description>New RSS tutorial on W3Schools XML Tutorial http://www.w3schools.com/xml <description>New XML tutorial on W3Schools
17
3. Zdroje informací na Internetu
3.2.2
Čtení RSS kanálu
Ke čtení RSS kanálů slouží tzv. RSS čtečky. Může se jednat o samostatný program, webovou aplikaci či službu nebo plugin do jiného programu. V dnešní době má v sobě vestavěnou čtečku i většina webových prohlížečů. Webové stránky, které obsahují RSS kanály jsou typicky označeny ikonkou na obrázku 3.2.
Obrázek 3.2: ikona označující RSS kanál [19]
3.2.3
Výsledky hledání a jejich zhodnocení
Co se týče vyhledávání RSS kanálů, bylo vyhledávání poněkud snazší než u webových služeb. Při hodnocení relevance a důležitosti takovýchto stránek je možné přihlédnout k pageranku daného webu. PageRank je metoda společnosti Google, která zjišťuje „důležitost“ stránek [20]. Zjednodušeně řečeno – pokud stránka A odkazuje na stránku B, tak A považuje B za důležitou. PageRank také uvažuje důležitost odkazů ukazujících na stránku A. Pokud na stránku A odkazují důležité odkazy, odkazy vedoucí z ní (např. ke stránce B) budou mít také větší váhu. S-rank je metoda společnosti Seznam.cz. Počítá se zejména z odkazové sítě algoritmem, který zohledňuje jednak odkazy, které na stránku míří, ale i to, kam ze stránky odkazy vedou. Přesný výpočet S-ranku však není veřejný [21]. Alexa Traffic Rank bere v potaz postavení stránky na webu vůči ostatním v uplynulých třech měsících. Do výpočtu se zahrnuje odhadovaný průměr návštěvníků za den a odhadovaný počet jimi zobrazených stránek. Často navštěvované stránky mají ve výsledku rank nižsí než ty méně navštěvované [22]. 3.2.3.1
Zpravodajství
Jak jsem již zmínila v úvodu podkapitoly 3.2, RSS kanály jsou ideální pro sdílení obsahu stránek, které se neustále mění, což aktuální zpravodajství určitě je. Proto najdete nepřeberné množství zpravodajských serverů, které RSS kanál poskytují. 18
3.2. RSS kanály Novinky.cz Tento portál poskytuje seznam [23] zpravodajských rubrik pro celou Českou republiku rozdělený do jednotlivých krajů a okresů. Stejně tak je možné odebírat jakoukoliv jejich rubriku či konkrétní sekce rubrik – příslušná ikonka se nachází v zápatí jednotlivých stránek. Každý obsahuje elementy , <description>, , přestože tento element je vždy prázdný, nepovinný element , který jednoznačně identifikuje konkrétní item, a pomáhá tak při shromažďování dat agregátorům rozlišit, zda je tento příspěvek nový či nikoliv [17] a element . Před ukončením jsou pak ještě dva elementy ve jmeném prostoru szn [24], které pravděpodobně slouží přímo portálu pro jejich potřeby. Jsou to elementy <szn:image> a <szn:upDate>. Hodnotu S-ranku portálu Novinky.cz zřejmě není potřeba sdělovat, jelikož se nachází pod stránkami společnosti Seznam. Google PageRank má hodnotu vyšší než 50 % a Alexa mu dává hodnotu, která je menší než 1000, což je cílem mnoha webových vývojářů. Lze tedy říct, že tento portál je důležitý [25]. Český rozhlas Tento portál poskytuje, stejně jako předchozí zmíněný, kompletní seznam kanálů v pravé části svých stránek [26]. Zde se ve struktuře souboru nenachází téměř nic nového, přesto se tu objevuje element <enclosure>, který popisuje libovolný mediální objekt, jehož URL a typ jsou předány v atributu tohoto elementu. Z hodnot [25] vyplývá, že ve srovnání s Novinky.cz, nemůže konkurovat v hodnotách S-ranku či Alexy, Google PageRank má však o 10 procent vyšší. iDNES.cz I na tomto portálu je možné zobrazit plný seznam rubrik, které odebírání RSS kanálů nabízejí [27]. Jelikož je tento portál z hlediska své důležitosti hodnocen nejlépe (Google PageRank: 7/10, Alexa: 759, S-rank: 10/10 [25]), byl zvolen do ukázky implementace. Blíže tedy bude popsán v kapitole 5. 3.2.3.2
Časopisy
Stejně jako zpravodajské portály, patří i portály časopisů a týdeníků k těm, které svůj obsah mění relativně často. Respekt Respekt je mnohokrát oceňovaný moderní názorový časopis, který si drží nejen vysoký novinářský standard, ale i stále vysokou oblibu čtenářů [28]. Seznam dostupných RSS kanálů je k dispozici na jejich stránkách [29]. Struktura RSS dokumentu je klasická, není třeba ji tedy znovu rozebírat. Reflex Reflex je český týdeník věnující se převážně společenským, politickým a kulturním tématům [30]. Jeho internetová podoba se vyskytla v žebříčku deseti nejlepších mediálních zdrojů soutěže Křišťálová lupa v roce 2010. 19
3. Zdroje informací na Internetu Přestože oba výše zmíněné časopisy jsou oblíbenými a kvalitními zdroji, rozhodla jsem se z osobních preferencí vybrat do ukázky implementace druhý zmiňovaný – tedy Reflex. Blíže tedy bude popsán v kapitole 5. 3.2.3.3
Další zdroje
RSS kanálů je v dnešní době na webu opravdu spousta. Stačí jen trošku hledat. Tady je ještě několik málo příkladů: • recepty a články o vaření [31] • dopravní informace a omezení – pro Českou republiku [32] – Dopravního podniku hlavního města Prahy [33] – České dráhy [34]
• letenky a informace o nich [35] • Česká televize (ČT24 [36], ČT sport [37]) a další . . .
20
Kapitola
Analýza a návrh Ze zadání této práce a jejích cílů vyplývá, že výsledný systém má robota NAO využívat jako prostředníka mezi zdroji informací na Internetu a uživatelem. Komunikace mezi tímto uživatelem a robotem bude vytvořena na základě robotovy schopnosti rozproznávat řeč. Jednotlivými, předem určenými, hlasovými příkazy tak bude možné robota přimět, aby vyhledal příslušná data na Internetu. Vyhledávání se uskuteční pomocí dostupné webové služby či RSS kanálu. Aplikace následně zpracuje odpověď do podoby, kterou robot bude prezentovat. Celkový princip komunikace zobrazuje schéma 4.1.
et
Intern
webové služby
pamatuji si, co se uživateli líbí
RSS
síťo kom vá unik ace
Zprávy
vá hlaso ace nik komu
Obrázek 4.1: Navržené schéma komunikace
Navržená prezentace by pak neměla být pouhým čtením těchto informací. Pro prezentaci má robot k dispozici hned několik prostředků. V tomto případě využije především svůj hlas. Díky jeho schopnosti pohybu je možné tuto prezentaci obohatit pomocí gestikulace. Z dlouhodobého hlediska by bylo dobré, kdyby robot uměl pronést některé věci samovolně a kdyby se uměl učit na základě jednotlivých reakcí uživatele. Z výše uvedeného je tak možné zformulovat několik základních případů užití a jednotlivých požadavků na aplikaci uvedených v části 4.1. 21
4
4. Analýza a návrh
4.1
Případy užití a požadavky
Aktérem, který figuruje v jednotlivých případech užití, je v tomto projektu jediný uživatel, který má robota doma, a tudíž jeho služeb využívá. Hlavní případy užití jsou následující: • vyhledání cesty v mapách • výčet z vybraného televizního programu • čtení článků z různých zdrojů Z výše zmíněných bodů plynou i požadavky na tento projekt. Robot by měl být schopný: • získat od uživatele informace potřebné k vyhledávání Robot tak pomocí dotazování a rozpoznávání řeči bude schopen určit parametry potřebné pro HTTP požadavek či nalezení konkrétního RSS kanálu. Tyto parametry budou aplikaci k dispozici. • provést pomocí webové služby dané vyhledávání Jelikož Java neběží přímo na robotovi, bude se o tuto akci starat především aplikace. • upravit odpověď služby do podoby vhodné pro prezentaci a práci s ní Aplikace se postará o získání důležitých informací z jednotlivých odpovědí. Na základě některých z nich pak určí, co vlastně robot bude prezentovat. • pomocí gest a hlasu prezentovat výsledky Robot bude pomocí vytvořené sady gest a chování prezentovat výsledky uživateli.
22
4.2. Akce robota
4.2
Akce robota
Na základě rešerše jednotlivých zdrojů v kapitole 3 byly vybrány čtyři zdroje. Ty budou využity pro návrh průchodu celou aplikací. Pro vizualizaci klíčových stavů aplikace, v závislosti na jednotlivých zdrojích, jsou použity vývojové diagramy.
4.2.1
Vyhledávání v mapách
Prvním z vybraných zdrojů je služba Google Direction API. Pro vyhledávání cesty v mapách se robot musí dotázat na místa, mezi kterými je daná cesta vypočítávána. Následně se odešle požadavek HTTP na službu map. Pokud je cesta nalezena, robot jednotlivé kroky cesty prezentuje. Vizualizaci návrhu procesu je možné vidět na obrázku 4.2.
Dotazování na místa
Vyhledávání cesty Vše v pořádku? ano
ne
Opakovat?
Krok cesty
ano ne
Přerušit? ne ano
Opakovat? ano ne
Obrázek 4.2: Diagram popisující proces vyhledávání v mapách
23
4. Analýza a návrh
4.2.2
Televizní program
Dalším z vybraných zdrojů je program jednotlivých kanálů České televize. Na počátku navrženého procesu je nutné od uživatele zjistit, pro jaký televizní kanál má být program vyhledán. Následně se odešle požadavek na konkrétní službu. V případě úspěchu vyhledávání si uživatel může zvolit, zda požaduje pročíst celý program nebo pouze pořady v hlavním vysílacím čase. Následně už robot pročítá vybrané pořady. Vizualizaci navrženého procesu je možné vidět na obrázku 4.3.
Výběr televizního kanálu Hlavní vysílací čas? ano
Čtení vybraných pořadů
ne
Čtení celého programu
Přerušit?
Přerušit? ne ano
Opakovat?
ne ano
Opakovat? ano
ano ne
ne
Obrázek 4.3: Diagram popisující proces vyhledávání v mapách
4.2.3
Zpravodajství
Dalším zdrojem informací, který byl vybrán, je zpravodajský server iDNES.cz. Pro získání jeho kompletního zpravodajství využijeme RSS kanál. Zprávy z daných rubrik budou zkompletovány. Následně uživatel vybrere, jaké zprávy ho v danou chvíli zajímají.
24
4.2. Akce robota Byly navrženy následující dvě možnosti, ze kterých uživatel může volit: • vybrat konkrétní rubriku, ze které budou zprávy čteny Uživatel zvolí pomocí klíčového slova konkrétní rubriku, z níž budou zprávy vybrány. • zvolit náhodný výběr ze všech rubrik RSS kanál nabízí velké množství zpráv, v náhodném výběru tedy bude prezentována jen jejich malá část. Výběr těchto zpráv je navržen na principu uživatelovy oblíbenosti dané rubriky. Na základě toho je pak z konkrétní rubriky vybírán určitý počet zpráv. Vizualizaci tohoto procesu je možné vidět na diagramu 4.4.
Naplnění seznamu zpráv ze zdroje RSS kanálu Vybrána konkrétní rubrika? ano
Čtení titulků a obsahů zpráv konkrétní rubriky
Přerušit?
ne
Náhodně vybraná rubrika
Určení počtu zpráv dle oblíbenosti
ne ano
Opakovat?
Čtení titulků a obsahů zpráv konkrétní rubriky
ano ne
ne
Vybráno ze všech rubrik? ano
Opakovat? ano ne
Obrázek 4.4: Diagram procesu čtení zpravodajství z RSS kanálu
25
4. Analýza a návrh
4.2.4
Články v časopisu
Jako poslední byl ze zdrojů vybrán časopis Reflex. Pro čtení článku z časopisu bude využit jeho RSS kanál. Nejprve je tedy nutné získat informace z daného RSS kanálu, následně už jen pročítat požadované články. Vizualizaci procesu je možné vidět na diagramu 4.5. Naplnění seznamu článků ze zdroje RSS kanálu
Čtení titulků a obsahů článků
Přerušit? ne ano
Opakovat? ano ne
Obrázek 4.5: Diagram procesu čtení časopisových článku z RSS kanálu
26
Kapitola
Realizace Možnosti realizace úzce souvisejí s technologiemi spojenými s robotem. K práci s robotem jsou primárně určeny dva programovací jazyky. Těmi jsou Python a C++. Neznalost Pythonu tento jazyk z možností vyloučila. K realizaci byl nakonec vybrán jazyk Java. Tento jazyk je, stejně jako C++, objektově založený. Přesto však poskytuje příjemnější práci, okamžité ošetření výjimek a typovou kontrolu. Java také nabízí jednodušší práci s datovými prostředky. Při práci s robotem v jazyku Java však plynou některá omezení (více v sekci 5.1). Instalační a uživatelská příručka je k dispozici v příloze B.
5.1
Java SDK
Přestože Java nikdy nebyla prioritou pro Aldebaran Robotics a jejich projekt robota NAO, usilovně se pracuje na jejím začlenění do softwaru, který běží na robotovi. Důvodem je velká komunita, která se Javou zabývá, a také programování pro platformu Android, které z Javy vychází. JNAOqi je open source projekt, který umožňuje volat libovolné metody modulů NAOqi přímo z Javy pomocí ALProxy objektů. V Javě však není možná práce s událostmi či tvorba vlastních modulů. Z toho důvodu Java
NAOqi Wi-Fi aplikace Java SDK
Obrázek 5.1: Schéma komunikace Java aplikace s moduly robota 27
5
5. Realizace neběží přímo na robotovi, nýbrž jsou mu příkazy posílány vzdáleně přes síť přímo z počítače (schéma na obrázku 5.1).
Proxy ALProxy objekt je zastupujícím objektem. Díky němu je možné volat metody modulu, jenž daný objekt zastupuje. Přestože JNAOqi poskytuje celou řadu ALProxy objektů, zmíněny zde budou pouze ty, jež byly použity při realizaci.
ALTextToSpeechProxy Tento objekt zastupuje modul ALTextToSpeech, který robotovi umožňuje mluvit díky syntetizátoru a reproduktorům. K převodu textu na řeč stačí zavolat metodu say(String StringToSay). Parametr StringToSay představuje text, který má být převeden.
ALSpeechRecognitionProxy Tento objekt zastupuje modul ALSpeechRecognition, který robotovi umožňuje rozpoznávat řeč – respektive předdefinovaná slova a fráze hned v několika jazycích. Mezi tyto jazyky patří v dnešní době i čeština. Modul potřebuje nejprve přednastavit slovníček pojmů. Slouží k tomu setWordListAsVocabulary(String[] vocabulary), jejímž parametrem je pole řetězců představujících jednotlivé pojmy. Následně modul nastaví hodnotu true/false ke klíčovému slovu SpeechDetected. Tato hodota indikuje, zda reproduktor právě zaznamenává nějaký zvuk. Pokud reproduktor zaznamenal slovo, je ve slovníku pojmů vyhledán pojem, který zaznamenanému slovu nejlépe odpovídá. Poté je takovéto slovo zapsáno do seznamu s klíčovým slovem WordRecognized i s pravděpodobností shody s nejpodobnějším pojmem.
ALFrameManagerProxy ALFrameManagerProxy je speciální ALProxy objekt, který usnadňuje práci s voláním chování, jež bylo vytvořeno v prostředí Choregraphe (sekce 2.7). Ke spouštění slouží jeho metoda newBehaviorFromFile (String xmlFilePath, String behName). Parametr xmlFilePath vyjadřuje cestu k souboru chování (behavior.xar), který je aktuálně uložen v robotovi. Tato metoda vrací unikátní identifikující řetězec. Chování lze přehrát pomocí metody playBehavior(String id), jejíž parametrem je právě unikátní identifikátor řetězce. Chování lze zastavit metodou exitBehavior(String id). K ujištění o dokončení celého chování před vykonáním dalšího slouží metoda completeBehavior(String id). Jelikož je tato metoda blokující, musí být pro další běh programu chování regulérně ukončeno v programu Choregraphe. 28
5.2. Aplikace
5.2
Aplikace
Aplikace je rozdělena do dvou částí (schéma na obrázku 5.2). Jednou z nich je balíček tříd nao, který obsahuje veškeré funkční třídy aplikace. Ze tříd jsou posílány příkazy robotovi pomocí jednotlivých proxy objektů. Tou druhou jsou pak jednotlivá chování, která tvoří prezentační část aplikace a jsou uložená přímo na robotovi.
PC (Java) Package nao aplikace
playBehavior(...)
chování A
playBehavior(...)
chování B
playBehavior(...)
chování C
Obrázek 5.2: Schéma aplikace
5.2.1 5.2.1.1
Package nao Získávání dat z Internetu
O získávání dat z Internetu se stará třída ParserDoc, která má přetíženou metodu getParserDocument. Jejím parametrem je URL adresa zdroje datového typu String nebo URL object. Ke zpracování využívá tato třída balíček javax.xml.parsers, a získává tak z XML zdroje instanci třídy DOM Document. Nejprve je potřeba získat instanci factory, která nám poskytne document builder. Instanci document builderu pak snadno využijeme k parsování XML zdroje [38]. Ukázka kódu: DocumentBuilderFactory docBuilderFactory; docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder; docBuilder = docBuilderFactory.newDocumentBuilder(); document = docBuilder.parse(url); document.getDocumentElement().normalize();
DOM Document je složen z jednolivých uzlů (Node). Metoda normalize() upravuje skladbu stromu tohoto dokumentu tak, aby odpovídala skutečné struktuře XML. Slučuje tedy sousedící textové uzly a odstraňuje ty prázdné. 29
5. Realizace 5.2.1.2
Způsob parsování dokumentu
DOM Document má stromovou strukturu, kde každý uzel obsahuje právě jednu komponentu z XML dokumentu. Nejčastější jsou uzly typu element a typu text. Pomocí funkcí rozhraní Node lze procházet hierarchií celého dokumentu. Pomocí metody getDocumentElement() lze získat přímý přístup ke všem potomkům tohoto elementu. Tento element obvykle představuje kořenový element celého dokumentu. Pro uložení potomků slouží NodeList, který vrací metoda getChildNodes(). K vyhledání konkrétního elementu pak slouží metoda getElementsByTagName(). 5.2.1.3
Třídy pro zpracování jednotlivých zdrojů
Třída GMaps Třída GMaps obsluhuje získávání dat z webové služby Google Maps Directions API. Pomocí třídy ParserDoc je získán dokument z URL adresy zdroje. Přístup k této službě je zajištěn pomocí HTTP požadavku. Adresa je ve tvaru http://maps.googleapis.com/maps/api/directions/output?parameters, kde output představuje požadovaný výstupní formát (zde je to xml) a parameters představuje možné parametry pro vyhledávání [39]. Povinnými parametry pro tuto službu jsou: • origin – počátek hledané cesty • destination – cíl hledané cesty • sensor – hodnota true/false vyjadřuje, zda má zařízení, které provádí vyhledávání pro určení aktuální pozice Dalším z použitých parametrů je parametr language, který určuje jazyk, ve kterém je odpověď vrácena. Struktura XML odpovědi je následující (zmíněny jsou klíčové elementy): • kořenový element • jeho potomek <status>, který obsahuje textový element OK (vše proběhlo v pořádku) nebo NOT_FOUND (některé z míst nebylo nalezeno) • za podmínky, že vše proběhlo v pořádku, je tu element , další přímý potomek kořenového elementu, který obsahuje stromovou strukturu elementů souvisejících s cestou • element , potomek elementu , obsahující několik potomků <step>, které vyjadřují jednotlivé kroky cesty
30
5.2. Aplikace • element <step> s následující strukturou: <step> ... ... ... ... ... ...
kde: je element doby trvání, je číselná hodnota vypočtená dle doby a obsahuje délku trvání s jednotkou času, popisuje směr cesty, číslo silnice a jiné informace a obsahuje HTML tagy pro zobrazení na webu, je element vzdálenosti, je číselná hodnota vypočtená dle vzdálenosti a obsahuje informaci o vzdálenosti s jednotkou délky. Metoda start(String origin, String destination), kde origin odpovídá počátku cesty a destination jejímu cíli, se stará o veškerou práci s dokumentem odpovědi. Z elementu , respektive jeho textového elementu, jsou nejprve vyparsovány všechny HTML tagy, které není třeba robotem přečítat. Následně jsou vyparsovány informace o zpoplatněných silnicích a přebytečné informace o směru některých rychlostních silnic a dálnic. Robotem jsou pak přečteny pouze důležitější silnice. Vyhodnocení důležitosti je založeno na době strávené tímto krokem cesty – tedy hodnotou prvního potomka elementu . Třída TVProgram Třída TVProgram obsluhuje informace z XML služby České televize. Její kompletní strukturu XML je možné najít na webových stránkách [12]. Obecný předpis URL pro tuto službu je http://www.ceskatelevize.cz/services/ programme/xml/shedule.php?user=[login]&date=[dd.mm.rrrr]&channel = [ct1|ct2|ct24|ct4|ct5|ct6]. V této práci nám pro ukázku bude stačit testovací uživatel user=test. Jednou z podmínek poskytování této služby je, že jeden program je možné si vyžádat pouze jednou za minutu. Pokud je tedy zažádáno vícekrát, nebo 31
5. Realizace se pokazí něco dalšího, je kořenovým elementem <errors> s popisem chyby. Pokud vše proběhne v pořádku, struktura odpovědi je následující (uvedeny klíčové elementy pro tuto práci): • kořenový element <program> • několik potomků <porad>, které představují jednotlivé pořady, se strukturou: <porad> ... ... ... ... ... ... <noticka> ... ...
kde: je element obsahující vysílací čas programu, obsahuje název programu a <noticka> obsahuje popis programu a další informace, jestliže jsou dostupné. Třída TVProgram obsahuje třídu Show, která slouží k ukládání informací o jednotlivých pořadech. Každý objekt Show si drží informace time o jeho vysílacím čase, title s jeho názvem a description, jestliže je k dispozici, obsahující popis a bližší informace o konkrétním pořadu. Jednotlivé Show jsou ukládány do seznamu shows typu ArrayList. K získání informací ze zdroje slouží metody start(String program), kde program je určení konkrétního kanálu České televize. Do URL je pomocí Date přidáno aktuální datum. K parsování stromové struktury dokumentu slouží metoda getShowsFromDoc(Document doc), jejímž parametrem doc je dokument získaný z URL zdroje. Z popisku každého pořadu jsou díky metodě getSimpleDescription(int cast, String description) vyparsovány iniciály křestných jmen herců a účinkujících. Parametr cast představuje počáteční pozici řetězce, který bude parsován, parametr description pak celý popisek pořadu, ze kterého se bude parsovat. Třída RSS_reflex Třída RSS_reflex umožňuje získat články z portálu časopisu Reflex. Struktura RSS kanálu dodržuje předepisovanou konvenci. 32
5.2. Aplikace Zde je struktura elementu : titulek článku odkaz na celý článek <description> popis článku či jeho obsahu rubrika, do které článek patří datum, kdy byl článek publikován odkaz na diskuzi k~článku unikátní označení článku
Třída RSS_reflex obsahuje třídu Article, která slouží k ukládání informací o jednotlivých článcích. Pro každý objekt Article je držena informace o jeho názvu title, jeho popisek description, odkaz na celý článek link a jeho datum publikování dateOfPublication. Tyto objekty jsou pak ukládány do seznamu articleList typu ArrayList. K získání informací ze zdroje je tu metoda startRSS(). K získávání jednotlivých článků slouží metoda getArticlesFromDoc(Document doc), kde doc je dokument, který obsahuje stromovou strukturu kanálu. Pro každý element je volána metoda getContent(Element element, String tagName), kde název potomka elementu , jehož obsah chceme získat, představuje parametr tagName. Třída RSS_idnes Třída RSS_idnes získává zpravodajství z portálu iDNES.cz. Struktura RSS kanálu také dodržuje předepisovanou konvenci a struktura elemenentu je shodná jako u kanálu časopisu Reflex zmíněného výše. Třída RSS_idnes obsahuje třídu Section, která představuje strukturu k ukládání jednotlivých rubrik. Každý objekt Section má svůj název title, odkaz na svůj RSS kanál url a seznam zpráv newsList typu ArrayList. Další třídou obsaženou v RSS_idnes je třída News, která slouží k ukládání jednotlivých zpráv. Pro každý objekt News je držena informace o jeho názvu title, jeho popisek description, odkaz na celý článek link a jeho datum publikování dateOfPublication. K získání informací ze zdroje slouží metoda startRSS(), ve které jsou nastaveny informace o jednotlivých rubrikách. Pro přechod k parsování zpráv slouží metoda parseRSS(Section section), kde section je rubrika, do které budou parsované zprávy patřit. Metodou, která slouží k získání konkrétních informací o jednotlivých objektech News, je getNewsFromDoc(Document doc, ArrayList myNewsList), kde doc je právě parsovaný dokument získaný z URL zdroje a myNewsList je seznam, do kterého budou parsované 33
5. Realizace zprávy ukládány. Z této metody je pro každý element volána metoda getContent(Element element, String tagName), kde tagName je název potomka elementu , jehož obsah chceme získat. 5.2.1.4
Uchování uživatelských dat
Jelikož by do této práce měla být zahrnuta i preference uživatele u jednotlivých rubrik, je oblíbenost počítána na základě počtu přerušení během četby zpráv. K tomuto účelu je využit soubor memory.properties. Každý záznam v tomto souboru má formát keyname=value. K práci s tímto souborem je vytvořena třída myMemory. Třída myMemory Třída myMemory slouží k obsluze a práci s Java Properties File. Při prvním spuštění projektu je nutné takový soubor vytvořit. K tomu slouží metoda createProperty(Properties prop), kde prop je instance třídy Properties balíku java.util. K naplnění souboru memory.properties rubrikami, jež jsou použity, je tu metoda setDefault(Properties prop). Z této metody je pro každou rubriku volána metoda addToMemory(Properties prop, String keyname, String value), která se stará o samotný zápis do souboru. K získání hodnoty oblíbenosti nebo spíše neoblíbenosti pro konkrétní rubriku je tu metoda getValue(Properties prop, String keyname). Pokud dojde k přerušení zpravodajství v konkrétní rubrice, je třeba navýšit hodnotu v souboru, slouží k tomu metoda increaseValue(Properties prop, String keyname). 5.2.1.5
Hlavní třída NAO
Třída NAO slouží k obsluze celého projektu. Tato třída jako jediná obsahuje metodu main. Metoda speechRecognition(String [] vocabulary) obsluhuje část rozpoznání řeči. Využívá k tomu ALSpeechRecognitionProxy. Pokud je zaznamenán příkaz (slovo) a má dostatečnou pravděpodobnost, že se podobá některému slovu z předem definovaného slovníku vocabulary, je rozpoznané slovo metodou vráceno. K obsluze hlavní smyčky programu (tedy výběru získání daných informací) slouží metoda mainLoop(), která se stará o přesměrování do jednotlivých metod obsluhující třídy zmíněné v sekci 5.2.1.3 a jejich prezentaci robotem. Jsou to metody startGMaps(), startTVProgram(), startRSS_idnes a startRSS_reflex. Na konci každé této metody je volána metoda next(), která obsluhuje dotaz robota, zda má pokračovat v nějaké akci.
34
5.2. Aplikace
5.2.2
Chování robota (Choregraphe Behaviors)
K prezentaci robota bylo vytvořeno v prostředí Choregraphe hned několik chování, která se z hlavního programu spouští. Nyní budou zmíněna ta klíčová. Úvodní chování Komunikace s robotem započne ve chvíli, kdy ho pohladíte po hlavě. Jak můžete vidět na diagramu 5.3, klíčovým je prostřední sensor na hlavě robota. Pokud robot nezaznamená dotek, bude se vykonávat neukončená větev s boxem Reminder. Ten obsahuje pozastavení na určitou časovou dobu, po které je náhodně vybrána reakce k připomenutí robotovy nečinnosti.
Obrázek 5.3: Flow diagram úvodního chování
Random box Box Random byl vytvořen, aby obsluhoval náhodný výběr výstupu. Na obrázku 5.4 je ukázán zjednodušený princip tohoto boxu. Do skriptu Random boxu je třeba k metodě onInput_onStart(self) doplnit kód umožňující náhodný výběr mezi jednotlivými výstupy v jazyce Python. K tomu slouží funkce randrange. Pro dva výstupy je kód následující: def onInput_onStart(self): gesture = random.randrange(1, 3) if (gesture == 1): self.output1() elif (gesture == 2): self.output2()
35
5. Realizace
Obrázek 5.4: Flow diagram s ukázkou Random boxu
V realizaci tohoto projektu je princip Random boxu vytvořen kvůli náhodnému výběru jednotlivých pohybů ze dvou sad vytvořených gest. K tvorbě gestikulace byl využit animační mód robota a panely Motion jednotlivých částí těla simulovaného robota v kombinaci s Timeline (představeno v kapitole 2.7.1).
36
Kapitola
Testování Testování funkčnosti probíhalo po celou dobu tvorby aplikace přímo na robotovi NAO. Cílem tohoto testování bylo vyzkoušet si různé možnosti robota a co nejvíce omezit výskyt neočekávaných situací v běhu programu. Na základě tohoto testování tak vznikla pilotní verze této aplikace, kterou čekalo otestování reálnými uživateli.
Test použitelnosti Jelikož je ale tento projekt zaměřen především na uživatele, byl proveden test použitelnosti. Byli pozváni čtyři studenti (dále uživatelé), kteří robota a interakci s ním testovali. Pro každého uživatele byl připraven scénář, který ho provedl činnostmi projektu. Před začátkem byli všichni seznámeni s klíčovými slovy svých scénářů a možnostmi, jak robota vyzvat ke konkrétním akcím.
Scénáře průchodu a vyhodnocení testu použitelnosti Kompletní soupis jednotlivých scénářů průchodu je dostupný v příloze C. Při testování scénářů se žádné závažné problémy nevyskytly. Překvapivě zavádějícím se ale stal robotův dotaz „Potřebuješ něco dalšího?“. Zde naprosto všichni uživatelé předpokládali, že mají zadat přímo příkaz namísto očekávaného potvrzení ano/ne. Vyhodnocení testování probíhalo pomocí dotazníků a následného doptávání se k odpovědím. Výsledkem bylo zjištění, že většině uživatelů úplně nevyhovoval způsob, jakým s robotem musejí komunikovat. Jeho přerušování a žádání pomocí doteku jim přišlo zbytečné, když je to robot, který umí reagovat na hlas. V souvislosti s tímto padl i názor, že robot má být pomocníkem v domácnosti – co když tedy častý kontakt není možný? Robot si z tohoto testování odnesl na závěr školní známku 2 za celkovou komunikaci (jednotlivé známky: 2, 2, 1, 2). 37
6
6. Testování
Návrhy na zlepšení • Při testování se občas stalo, že robot vyhodnotil uživatelův příkaz špatně (rozpoznání řeči a pravděpodobnost podobnosti slova). Bylo tedy navrženo, aby robot nějakým způsobem zopakoval, co vlastně vyhledává, aby případně uživatel mohl jeho chybné kroky zastavit. • Dalším z návrhů bylo zkusit omezit množství doteků při interakci s robotem.
Zpětná vazba k připomínkám Na základě vyhodnocení testu použitelnosti bylo opraveno následující: • Byly přidány slovní interpretace k vyhledávání, aby měl uživatel představu, jaké vyhledávání právě probíhá. • Do hlavní třídy NAO byla přidána metoda actionRecognition(String[] vocabulary), která nahrazuje snímání doteku pro přerušení jednotlivých činností robota. Díky této metodě je robot schopný po přečtení části výstupu služby naslouchat uživateli, který může přerušit robota pomocí klíčového slova, nebo ho požádat, aby mu k dané věci pověděl víc.
38
Závěr Jedním z cílů nejen této bakalářské práce, ale i cílem mým osobním, bylo seznámení se s robotem NAO. Věřím, že dlouhá odpoledne strávená při práci s ním mě k tomuto cíli posunula o velký krok dál. Osvojila jsem si základní funkční principy robota, způsoby komunikace s ním a vývojové prostředky s ním spojené. Naučila jsem se pracovat s grafickým prostředím programu Choregraphe, ve kterém jsem tvořila jednotlivá chování robota. Osvojila jsem si základní principy fungování flow diagramů a jednotlivých předpřipravených boxů s jejich skripty. Také jsem se naučila pracovat s animačním módem a vlastnostmi panelu Timeline, což umožnilo pohodlnější práci při tvorbě pohybů robota. V tomto prostředí jsem vytvořila především dvě sady pohybů, z nichž se náhodným výběrem skládá gestikulace robota. Při mém průzkumu dostupných zdrojů informací, jako jsou webové služby a RSS kanály, mi absence jakéhokoliv komplexnějšího seznamu poskytovaných českých služeb značně ztížila samotné vyhledávání. Přesto jsem vyhledala více než 30 takovýchto zdrojů. V práci jsem následně část z nich popsala v rámci jednotlivých kategoriích vyhledávání a zhodnotila jsem je na základě jejich relevance a kvality. Díky tomu jsem čtyři zdroje vybrala pro ukázkovou aplikaci. Na základě rešerše nalezených zdrojů jsem navrhla základní funkční požadavky a vývojové diagramy průchodu jednotlivými částmi aplikace. Dále jsem navrhla scénář komunikace a interakce mezi uživatelem a robotem, který jsem přizpůsobila konkrétním webovým službám. Pro realizaci jsem navrhla a vytvořila několik chování v prostředí Choregraphe, která zahrnují hlasové výstupy, pohyby, gestikulaci či reakci na dotyk uživatele na senzorech robota. Tato chování jsou samostatnými celky, a je tedy možná jejich znovupoužitelnost v dalších projektech. Přestože Java není přítomna přímo na robotovi a programování v ní je tedy v tomto ohledu stále ještě novinkou, zvládla jsem naprogramovat ukázkovou demo aplikaci, která je spuštěna vzdáleně na počítači. Aplikace z Internetu získává potřebné informace z dostupných zdrojů, následně tato data třídí a upravuje je do vhodné podoby. Pomocí zástupujících objektů (proxy) dokáže přistupovat k jednotlivým modulům robota, komunikovat s nimi a zasílat připravená data robotovi k prezentaci. Aplikace také spouští, kombinuje a řídí 39
Závěr jednotlivá chování robota. Ke zvýšení interakce s uživatelem jsem připravila náhodné hlasové výstupy robota, které jsou za chodu ovládány aplikací. Tyto výstupy jsou aktivní především během přímé komunikace s uživatelem. Přesto jsem vytvořila i několik hlasových výstupů pro případ delší nečinnosti robota, které slouží k připomenutí jeho přítomnosti. Vytvořila jsem i jednoduchý systém pro uchování reakcí uživatele. Díky tomu se povedlo prezentovaná data, respektive chování robota, přizpůsobit danému uživateli. Pro aplikaci jsem následně připravila test použitelnosti, na který jsem pozvala čtyři studenty jako testovací uživatele. Vytvořila jsem jednotlivé scénáře, které pokrývaly jednotlivé průchody aplikací. Všichni komunikovali s robotem poprvé, a přesto jim to nečinilo žádné větší problémy. Z testování vyplynulo několik připomínek k této aplikaci, které jsem následně zapracovala do svého řešení. NAO robot má do budoucna určitě nadějné vyhlídky a v rámci bakalářské práce rozhodně nelze vymezit hranice tohoto tématu. V blízké době by do aplikace mohly přibýt další webové zdroje informací, vybírání zajímavostí ze světa pro chvíle nečinnosti robota a další vylepšení jeho interakce s člověkem. Je zde tedy stále mnoho prostoru pro pokračování. Robot jako společník může umět přece téměř cokoliv.
Literatura [12] Česká televize: TV Program – XML [online]. [cit. 2014-04-29]. Dostupné z: http://www.ceskatelevize.cz/xml/tv-program/ [13] InMeteo, s.r.o.: Počasí na web | In-počasí [online]. [cit. 2014-04-29]. Dostupné z: http://www.in-pocasi.cz/pocasi-na-web/ [14] meteocentrum.cz: Nabídka služeb – Meteocentrum.cz [online]. [cit. 201404-29]. Dostupné z: http://meteocentrum.cz/sluzby/ [15] Google, Inc.: Google Maps API Web Services – Google Developers [online]. [cit. 2014-04-29]. Dostupné z: https://developers.google.com/maps/ documentation/webservices/ [16] Google, Inc.: Google Calendar API – Google Apps Platform – Google Developers [online]. [cit. 2014-04-29]. Dostupné z: https:// developers.google.com/google-apps/calendar/?hl=cs [17] World Wide Web Consortium: RSS 2.0 specification [online]. [cit. 201404-30]. Dostupné z: http://validator.w3.org/feed/docs/rss2.html [18] Refsnes Data: RSS tutorial [online]. [cit. 2014-04-30]. Dostupné z: http: //www.w3schools.com/rss/default.asp [19] Webovky & MZK & KISK FF MU: RSS kanály :: Webovky.knihovna.cz [online]. [cit. 2014-04-30]. Dostupné z: http://webovky.knihovna.cz/ tipy-triky/uzitecne-tipy/rss-kanaly/ [20] Ridings Ch., Shishingin M.: PageRank Uncovered [online]. [cit. 2014-0430]. Dostupné z: http://www.voelspriet2.nl/PageRank.pdf [21] Seznam.cz, a.s.: Algoritmus | Seznam Nápověda [online]. [cit. 2014-04-30]. Dostupné z: http://napoveda.seznam.cz/cz/fulltext-hledani-vinternetu/hledani-fulltext-algoritmus-vyhledavani-razenivysledku-faq-dotazy/ [22] Alexa Internet, Inc.: Alexa Internet – About Us [online]. [cit. 2014-04-30]. Dostupné z: http://www.alexa.com/about [23] Seznam.cz, a.s.: Seznam RSS kanálů | Seznam Nápověda [online]. [cit. 2014-04-30]. Dostupné z: http://napoveda.seznam.cz/cz/seznam-rsskanalu.html [24] Refsnes Data: XML Namespaces [online]. [cit. 2014-04-30]. Dostupné z: http://www.w3schools.com/xml/xml_namespaces.asp [25] Klír, J.: PageRank, S-Rank, Alexa, Compete, JyxoRank Checker – pagerank.jklir.net [online]. [cit. 2014-04-30]. Dostupné z: http:// pagerank.jklir.net/ranky/ 42
Literatura [26] Český rozhlas: Český rozhlas [online]. [cit. 2014-04-30]. Dostupné z: http: //www.rozhlas.cz/portal/rss/ [27] MAFRA, a.s.: iDNES.cz – RSS [online]. [cit. 2014-04-30]. Dostupné z: http://vice.idnes.cz/rss.aspx [28] Respekt Publishing a.s.: Časopis Respekt [online]. [cit. 2014-04-31]. Dostupné z: http://respekt.ihned.cz [29] Respekt Publishing a.s.: Časopis Respekt [online]. [cit. 2014-04-31]. Dostupné z: http://respekt.ihned.cz/rss/ [30] Ringier Axel Springer CZ a.s.: Reflex.cz [online]. [cit. 2014-04-31]. Dostupné z: http://www.reflex.cz/ [31] Centrum Holdings: Zdroje RSS – Vaření.cz [online]. [cit. 2014-04-31]. Dostupné z: http://www.vareni.cz/zdroje-rss/ [32] Ředitelství silnic a dálnic ČR: RSS – Dopravní info[online]. [cit. 2014-0431]. Dostupné z: http://dopravniinfo.cz/rss [33] Dopravní podnik hlavního města Prahy, a.s.: dpp.cz > RSS kanál Dopravního podniku hl. m. Prahy, akciové společnosti [online]. [cit. 2014-04-31]. Dostupné z: http://www.dpp.cz/rss-kanal/ [34] České dráhy, a.s.: České dráhy, a.s. | RSS kanály [online]. [cit. 2014-0431]. Dostupné z: http://www.cd.cz/infoservis/-3538/ [35] RSS kanály :: Letenkomat.cz [online]. [cit. 2014-04-31]. Dostupné z: http: //www.letenkomat.cz/rss/ [36] Česká televize: RSS — ČT24 — Česká televize [online]. [cit. 2014-04-31]. Dostupné z: http://www.ceskatelevize.cz/ct24/rss/ [37] Česká televize: RSS — ČT sport — Česká televize [online]. [cit. 2014-0431]. Dostupné z: http://www.ceskatelevize.cz/sport/rss/ [38] Oracle: Reading XML Data into a DOM (The JavaTM Tutorials > Java API for XML Processing (JAXP) > Document Object Model) [online]. [cit. 2014-04-31]. Dostupné z: http://docs.oracle.com/javase/ tutorial/jaxp/dom/readingXML.html [39] Google, Inc.: The Google Directions API - Google Maps API Web Services — Google Developers [online]. [cit. 2014-04-31]. Dostupné z: https:// developers.google.com/maps/documentation/directions/
43
Příloha
Seznam použitých zkratek API Application Programming Interface CRUD Create, Read, Update and Delete DOM Document Object Model FSR Force Sensitive Resistors HTML HyperText Markup Language HTTP Hypertext Transfer Protocol JSON JavaScript Object Notation REST Representational State Transfer RSS Really Simple Syndication SDK Software Development Kit SOAP Simple Object Access Protocol TDOA Time Difference of Arrival UDDI Universal Description, Discovery and Integration URL Uniform Resource Locator WEP Wired Equivalent Privacy WPA Wi-Fi Protected Access WSDL Web Services Description Language XML Extensible Markup Language
45
A
Příloha
Instalační a uživatelská příručka B.1 B.1.1
Instalace Předpoklady
Nativní knihovna byla vytvořena pro verzi OpenJDK6. Měla by být kompatibilní s jakoukoliv pozdější verzí JVM. Na Windows je však k dispozici pouze 32bitová verze.
B.1.2
Java SDK
Na stránkách https://community.aldebaran-robotics.com/ je možné si založit účet. V sekci Resources > Software si dle vaší platformy stáhněte příslušnou verzi JNAOqi. Stažený archiv rozbalte na svém počítači. Struktura SDK Příklady použití sdk je možné najít v adresáři doc/examples. V archivu lib/jnaoqi.jar jsou obsaženy veškeré com.aldebaran.proxy třídy. Jejich dokumentovaný kód naleznete v adresáři src/java/com/aldebaran/proxy. Sdílená nativní knihovna ve složce lib (na Linuxu libjnaoqi.so) musí být nalezena při spuštění vašeho kódu v Javě.
B.2
Nastavení projektu v NetBeansIDE
Postup nastavení projektu: • vytvořte si nový projekt v Java • nastavte vlastnosti vašeho projektu v sekci Libraries přidejte JAR archiv jnaoqi.jar
47
B
B. Instalační a uživatelská příručka
v sekci Run nastavte cestu k nativní knihovně do VM Options vepište -Djava.library.path="cesta_k_sdk/lib" např. -Djava.library.path="/home/jnaoqi-1.14.5-linux64/lib" • do příslušného souboru pak stačí importovat com.aldebaran.proxy
B.3
Spuštění souboru v NetBeansIDE
Již existující balík si můžete do projektu vložit jako celek pomocí úpravy vlastností vašeho projektu • Properties > Sources > Add Folder... Projekt lze spustit • možností Run > Run Main Project • možností Run > Run File
B.4
Další pokyny
Robota o něco požádáte, pokud ho pohladíte po hlavě. Důležitý je pak prostřední dotykový senzor na hlavě. 48
B.4. Další pokyny Klíčovými slovy pro činnost jsou: • ZPRÁVY • PROGRAM • MAPY • REFLEX Pokud robot předpokládá kladnou či zápornou odpověď, používejte prosím pouze možnost „ano“ či možnost „ne“. Synonyma těchto slov nejsou v ukázce zahrnuta. Pro mapy je možné nastavit soupisku měst v metodě startGMaps() třídy NAO. V ukázce práce jsou uvedena tato města: • Praha, Brno, Ostrava, Olomouc, Most, Plzeň, Pardubice, Jihlava, Zlín, Opava, Třebíč, Liberec, Havířov a Kladno. Pro televizní program jsou nastaveny všechny dostupné možnosti. Klíčová slova pro televizní kanály jsou: • ČT 1 = jednička, ČT 2 = dvojka, ČT 4 = sport, ČT 24 = dvacetčtyřka, ČT :D = déčko a ČT art = art. Pro zprávy lze v metodě addAllSections() třídy RSS_idnes přidat příslušné rubriky a jejich zdroje. Pro každou přidanou rubriku je třeba nastavit klíčové slovo pro rozpoznání rubriky v metodě startRSS_idnes() třídy NAO. V ukázce jsou uvedeny rubriky: • zprávy, ekonomika, sport, auto, kultura, bulvár Pro reflex žádná další klíčová slova použita nejsou. Pokud chcete, aby robot přerušil právě vykonávanou činnost, použijte příkaz stop ve chvíli, kdy nemluví. Pro obsah článků, zpráv či popis pořadů použijte klíčové slovo více. U vyhledávání v mapách možnost pro více informací není. Je zde však možnost změna, která vám umožní změnit počátek a cíl vyhledáváné cesty.
49
Příloha
Testovací scénáře průchodu Scénář č. 1 • Přišel jsi do práce v pražské kanceláři a zjistil jsi, že tě čeká pracovní cesta. Doneslo se k tobě, že se bude konat v Brně. Požádej robota o pomoc. • Tvé klíčové slovo je: MAPY • Jen co robot začal, vzpomněl sis, že to nebylo Brno, ale Zlín. Zkus robota přimět ke změně vyhledávání. Poté, co robot dokončí vyhledávání v mapách, ho požádej o další činnost. • Dneska k ránu jsi zahlédl něco zajímavého v televizi a říkáš si, že by ti název pořadu mohl něco napovědět. • Tvé klíčové slovo je: PROGRAM • Zvol si libovolný program České televize: ČT 1 = jednička, ČT 2 = dvojka, ČT 4 = sport ČT 24 = dvacetčtyřka, ČT :D = déčko a ČT art = art • Poslechni si pár jeho zpráv, zkus ho přimět, aby ti pověděl něco víc k některému z pořádů. Zkus robota falešně přerušit (tedy přinuť ho po přerušení opět pokračovat). Po pár zprávách akci ukonči. • Nic dalšího od robota nepotřebuješ.
51
C
C. Testovací scénáře průchodu Scénář č. 2 • Cestou do práce sis nestihl vyzvednout noviny. Ekonomiku opravdu nesnášíš, ale potřebuješ se dozvědět, o čem se to v tramvaji ti dva za tebou tak živě bavili. Požádej robota, aby ti nějaké zprávy z této rubriky přečetl – stačí 2 nebo 3. Vyzkoušet přečtění detailu interakcí se senzory na hlavě. • Tvé klíčové slovo je: ZPRÁVY • Požadovaná rubrika: EKONOMIKA • Pokračuj ke své mnohem oblíbenější rubrice. • Požadovaná rubrika: SPORT • I v této rubrice si vyzkoušej požádat robota o přečtění detailu nějaké zprávy, zkus robota falešně přerušit (tedy po přerušení ho přiměj opět pokračovat). Dle uvážení akci ukonči. • Sport a ekonomika tě ale ani tak neuspokojili. Říkáš si, že bys potřeboval něco ze zcela jiného soudku. Vzpomínáš si, že jsi kvůli své drahé polovičce nedočetl ranní článek v časopise. Požádej robota o náhled do časopisu. • Tvé klíčové slovo je: REFLEX • Nech robota pročíst několik zpráv, vyzkoušej si akce jako v předchozích příkladech. • Nic dalšího od robota nepotřebuješ. Scénář č. 3 • Sedíš s robotem v kuchyni u kafe a říkáš si, co dobrého by dnes večer mohlo být v televizi. Požádej robota o program v hlavním vysílacím čase libovolného programu České televize. • Tvé klíčové slovo je: PROGRAM • Zvol si libovolný program České televize: ČT 1 = jednička, ČT 2 = dvojka, ČT 4 = sport ČT 24 = dvacetčtyřka, ČT :D = déčko a ČT art = art • Činnost robota přeruš dle potřeby, vyzkoušej ale, aby ti pověděl o nějakém programu něco víc. Po přerušení ho zkus zmást a požádej ho, aby ti našel ten samý program České televize. • Ukonči vyhledávání v TV programu. • Zkus robota zmást a požádej ho o činnost, kterou v sobě nemá zabudovanou. • Jestli tě robot požádá o opravu, vyzkoušej si v mapách vyhledat cestu z Plzně do Olomouce. • Tvé klíčové slovo je: MAPY • Činnost ukonči dle uvážení nebo nech robota domluvit. Nic dalšího od něj nepotřebuješ. 52
Scénář č. 4 • Před cestou za svojí daleko bydlící rodinou si chceš nechat jen v rychlosti povědět, co je nového ve světě. Požádej robota o náhodný výběr (tedy nechceš konkrétní rubriku). • Tvé klíčové slovo je: ZPRÁVY • Vyzkoušej si interakci s robotem, přiměj ho, aby ti přečetl nějaké podrobnosti k vybraných zprávám. • Po krátkém zpravodajství už ti ale nezbývá nic jiného, než si ověřit cestu, kterou pojedete. • Tvé klíčové slovo je: MAPY • Vyhledej cestu z Prahy do Jihlavy. Nakonec se ale rozhodneš, že se zajedete podívat ještě do Pardubic. Proto požádej robota o změnu. Nová cesta bude z Prahy do Pardubic. • Nejsi ale zrovna rozhodný člověk, a proto chceš cestu změnit znovu. Při dotazu robota si to ale rozmyslíš a požaduješ, aby svoji činnost dokončil. • Nakonec činnost nechej doběhnout nebo ji přeruš. Hledání v mapách již potřebovat nebudeš. Robota požádej o ukončení činnosti. • Tvé klíčové slovo je: KONEC
53
Příloha
Obsah přiloženého CD
readme.txt...................................stručný popis obsahu CD javadoc............................................dokumentace kódu src behaviors .......................... projekty prostředí Choregraphe impl...................................zdrojové kódy implementace thesis ...................... zdrojová forma práce ve formátu LATEX NAO.zip.................................projekt prostředí NetBeans text ....................................................... text práce BP_Kuběnová_Eliška_2014.pdf..........text práce ve formátu PDF 55