Lokace zařízení a hledání cest v prostoru

Podobné dokumenty
Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

Algoritmizace prostorových úloh

Základy umělé inteligence

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

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

"Agent Hledač" (3. přednáška)

METODICKÝ LIST 1. Název výukové aktivity (tématu): 2. Jméno autora: Ing. Petr Hořejší, Ph.D., Ing. Jana Hořejší 3. Anotace:

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

Grafové algoritmy. Programovací techniky

Prohledávání do šířky = algoritmus vlny

METODICKÝ LIST. Výklad: Seznámení se se stavebnicí, ukázky jiných projektů a možností stavebnice

Úvod do teorie grafů

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Robotický LEGO seminář na FEL ČVUT v Praze

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Grafové algoritmy. Programovací techniky

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Vzdálenost uzlů v neorientovaném grafu

Neinformované metody prohledávání stavového prostoru. Gerstner Laboratory Agent Technology Group, Czech Technical University in Prague

Studentská tvůrčí a odborná činnost STOČ 2015

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Metody síťové analýzy

Algoritmizace. 1. Úvod. Algoritmus

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Charakteristika základních konstruktů robota. Popis ovládacího prostředí robota. Další možnosti programování robota.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

6 Příkazy řízení toku

5 Orientované grafy, Toky v sítích

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

4EK311 Operační výzkum. 5. Teorie grafů

Charakteristika základních konstruktů robota. Popis ovládacího prostředí robota.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Úloha - rozpoznávání číslic

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

07 Základní pojmy teorie grafů

Algoritmizace prostorových úloh

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

SEMINÁŘ ROBOTIKA. LEGO Roboti a jejich programování (teoretická a praktická část) Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Usuzování za neurčitosti

2. úkol MI-PAA. Jan Jůna (junajan)

Výukový materiál zpracován v rámci projektu EU peníze školám

Algoritmy a datové struktury

TGH05 - aplikace DFS, průchod do šířky

Základní pojmy teorie grafů [Graph theory]

ROBOTICKÝ POPELÁŘ. Jan Dimitrov, Tomáš Kestřánek. VOŠ a SPŠE Františka Křižíka Na Příkopě 16, Praha 1

Algoritmizace řazení Bubble Sort

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Základy umělé inteligence

OPTIMALIZAČNÍ ÚLOHY. Modelový příklad problém obchodního cestujícího:

Základní datové struktury

Umělá inteligence I. Roman Barták, KTIML.

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

Dynamické datové struktury III.

1. Znalostní systémy a znalostní inženýrství - úvod. Znalostní systémy. úvodní úvahy a předpoklady. 26. září 2017

Umělá inteligence a rozpoznávání

TGH05 - aplikace DFS, průchod do šířky

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Algoritmy výpočetní geometrie

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

REGRESNÍ ANALÝZA V PROSTŘEDÍ MATLAB

FAQ časté otázky a odpovědi

ADT STROM Lukáš Foldýna

Dokumentace programu piskvorek

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Merkur perfekt Challenge Studijní materiály

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

popel, glum & nepil 16/28

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

Obsah: Problém osmi dam

Zpráva o průběhu přijímacího řízení na vysokých školách dle Vyhlášky MŠMT č. 343/2002 a její změně 276/2004 Sb.

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Datové typy a struktury

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

10. Složitost a výkon

Implementace LL(1) překladů

Obr. P1.1 Zadání úlohy v MS Excel

Úvod do informatiky. Miroslav Kolařík

63. ročník Matematické olympiády 2013/2014

Datové struktury 2: Rozptylovací tabulky

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Transkript:

Mendelova univerzita v Brně Provozně ekonomická fakulta Lokace zařízení a hledání cest v prostoru Bakalářská práce Vedoucí práce: Ing. Oldřich Trenz, Ph.D. Petr Meluzín Brno 2011

Zde bych rád poděkoval vedoucímu mé závěrečné práce Ing. Oldřichu Trenzovi Ph.D. za věcné připomínky při tvorbě bakalářské práce. Dále bych chtěl poděkovat Bc. Janu Kolomazníkovi, který svými rady a ochotou při problémech s instalací potřebného softwaru k programovaní mi byl nápomocný. Poděkování také patří celému týmu pracujícímu na soutěži Eurobot 2010.

Prohlašuji, že jsem tuto bakalářkou práci vypracoval samostatně a v seznamu literatury uvedl veškeré informační zdroje, které jsem použil pro její tvorbu. V Brně dne 3. ledna 2011

Abstract The bachelor s thesis is focused on methods of stace space searching. In the teoretical part, stace space, uniformed and informed methods of stace space passing through, their characteristics, advantages and disadvantages are defined. New information about the developmental environment, about the competition of Eurobot 2010 and a lego set called Mindstorms, from which the robot is built, is introduced. In the practical part the description of section of programme for passing through the space with defined starting conditions and its possible development in the future, is introduced. The thesis was developed for using aim the programme in the European competition Eurobot 2010, and with this target the thesis was ordered. Keywords Stace space, informed and uninformed methods for stace space searching, lego Mindstorms, Eurobot 2010. Abstrakt Bakalářská práce se zaobírá metodami hledání cest v prostoru. V teoretické části je definován pojem stavový prostor, jednotlivé neinformované i informované metody procházení stavového prostoru, jejich vlastnosti, výhody a nevýhody. Jsou uvedeny základní informace o vývojovém prostředí, soutěži Eurobot 2010 a stavebnici lego Mindstorms, ze které je sestaven robot procházející prostor. V praktické části je uveden popis programu, pro procházení prostorem s definovanými počátečními podmínkami a jeho možný vývoj do budoucna. Práce byla koncipována pro využití programu v celoevropské soutěži Eurobot 2010 a s tímto cílem byla bakalářská práce zadávána. Klíčová slova Stavový prostor, informované a neinformované metody procházení stavového prostoru, lego Mindstorms, Eurobot 2010.

Obsah 6 Obsah 1 Úvod a cíl práce 8 1.1 Úvod 8 1.2 Cíl práce 9 2 Teoretická východiska práce 10 2.1 Historie umělé inteligence 10 2.2 Stavový prostor 11 2.2.1 Reprezentace stavového prostoru pomocí orientovaného grafu 11 2.2.2 Reprezentace stavového prostoru pomocí mapy 12 2.3 Metody procházení stavového prostoru 12 2.4 Neinformované metody procházení stavového prostoru 13 2.4.1 Prohledávání do šířky (Breadth-first search) 13 2.4.2 Prohledávání do hloubky (Depth-first search) 14 2.4.3 Iterativní prohledávání do hloubky (Depth-first iterative deeping) 15 2.4.4 Obousměrné prohledávání (bidirectional breadth-first search) 15 2.4.5 Prohledávání do hloubky s omezením (Depth-limited search) 16 2.4.6 Prohledávání podle cen (Uniform-cost search) 16 2.5 Srovnání vlastností neinformovaných algoritmů 17 2.6 Informované metody procházení stavového prostoru 17 2.6.1 Gradientní algoritmus (Hill-climbing algorithm) 17 2.6.2 Algoritmus uspořádaného prohledávání (best-first algorithm) 18 2.6.3 Algoritmus A* (A* algorithm) 18 2.6.4 Simulované žíhání (Simulated annealing) 19 2.6.5 Hladové vyhledávání (Greedy search) 19 2.6.6 Paprskové vyhledávání (Beam search) 19 2.7 Soutěž Eurobot 2010 19 2.8 Lego Mindstorms NXT 20 2.8.1 Obnovitelná baterie 21 2.8.2 Síťový adaptér 21 2.8.3 Inteligentní NXT kostka 21 2.8.4 Interaktivní servomotor 22 2.8.5 Tlakový senzor 22 2.8.6 Světelný senzor 22 2.8.7 Senzor barvy 23 2.8.8 Zvukový senzor 23 2.8.9 Ultrazvukový senzor 23

Obsah 7 2.9 Vývojové prostředí 24 2.9.1 Java 24 2.9.2 Eclipse 24 2.9.3 LeJOS 24 3 Metodika řešení 26 4 Vlastní řešení 27 4.1 Popis konstrukce robota 27 4.2 Hrací plocha 27 4.2.1 Popis hrací plochy 27 4.2.2 Reprezentace hrací plochy mapou 29 4.3 Algoritmus hledání cesty 32 4.3.1 Implementace fronty 33 4.3.2 Metoda HledejCestu 33 4.3.3 Metoda VyhladCestu 34 4.3.4 Metoda VykresliCestu 35 4.4 Aplikace algoritmu pro jednotku NXT 36 4.4.1 Metoda VypocitejVzdalenost 36 4.4.2 Metoda UjedVzdalenost 36 4.4.3 Metoda VypocitejUhel 37 4.4.4 Metoda ZmenUhel 37 4.4.5 Metoda JedCestu 38 5 Diskuse 39 6 Závěr 40 7 Literatura 41 A Konstrukce robota 43 B Seznam obrázků 44 C Seznam tabulek 45

Úvod a cíl práce 8 1 Úvod a cíl práce 1.1 Úvod S rozvíjejícími se počítačovými technologiemi a vědními disciplínami roste i vývoj v minulosti poměrně krátce známého oboru umělé inteligence. Člověk je schopen efektivně zpracovávat ne zcela přesné informace, které jsou nazývány neurčitými neboli vágními. Tato schopnost lidského organismu projevit uvažování a lidský intelekt se v posledních desetiletích stává předmětem zájmů vědního oboru nazývaného umělá inteligence. Dílčí oblasti umělé inteligence se zabývají řešením složitých problémů a v budoucnosti se zdají být velmi nadějné. Mezi dílčí oblasti, které spadají do oboru umělé inteligence řadíme fuzzy modely, které jsou v dnešní době již poměrně dobře prozkoumány a v praxi hojně využívány, neuronové sítě napodobující procesy probíhající v lidském mozku a nervové soustavě. Tyto sítě obsahují schopnost vlastního učení. Další oblast představují genetické algoritmy, označované také jako evoluční algoritmy, využívající poznatky z oboru biologie. Uplatňují se při řešení složitějších problému, kde neexistuje exaktní algoritmus. Principy umělé inteligence se využívají i u metod procházení stavového prostoru o němž tato práce pojednává. Procházení stavovým prostorem v dnešní době používá řada počítačových her, kdy pomocí kliknutí myší na pozici se objekt přesune s vyhnutím všech překážek na požadované místo. Určité stavy na cestě si lze představit jako vrcholy grafu a akce potřebné k přechodu z jednoho stavu do druhého jako hrany. Poté je možné problém popsat s využitím orientovaného grafu. Aby se objekt přesunul z počátečního do cílového stavu je třeba pomocí metod prohledávání grafu nalézt pro daný problém co nejoptimálnější trasu. Existují algoritmy, které následující problémy řeší. Algoritmus je obecně návod či postup, kterým lze vyřešit daný problém. Graf neboli stavový prostor může být značně velký a prohledávání celého prostoru může trvat dlouhou dobu a je velmi neefektivní. Prohledávání prostoru lze omezit díky určitým znalostem o řešeném problému. Znalosti jsou často užitečné při hledání řešení, často jej však nezaručují. Tyto znalosti nazýváme heuristickými. Heuristiky využijeme tam, kde neexistuje přesný postup řešení. Algoritmy s lepší heuristickou funkcí obecně postupují k cíly přímočařeji, neprohledávají zbytečné části prostoru a k cíli dospějí dříve. Tyto algoritmy obsahují určitou dávku inteligence. Umělá inteligence je jakýmsi napodobením chování člověka, jehož definice je těžko popsatelná. Metody procházení stavového prostoru (grafu), které mají určitou inteligenci dosáhnou cíle rychleji než metody bez inteligence. Podle toho zda algoritmy využijí heuristiku nebo ne se dělí na informované a neinformované.

Úvod a cíl práce 9 1.2 Cíl práce Cílem této práce je návrh algoritmu pro hledání cest v prostoru v souladu s nadefinovanými počátečními podmínkami a tvorba obslužného programu realizující algoritmus pro jednotku Mindstorms NXT a soutěž Eurobot 2010.

Teoretická východiska práce 10 2 Teoretická východiska práce 2.1 Historie umělé inteligence Začátek historie umělé inteligence se datuje rokem 1956, nicméně už v roce 1950 A. Touring formuloval proslavený test a vyvrátil argumenty pro inteligentní stroje. Ve stejném roce J. V. Neumann vyjádřil tvrzení, že počítače v krátké době dosáhnou či dokonce překonají intelektuální schopnosti člověka. Obě tvrzení přispěly k tomu, že veřejnost začala pohlížet na počítače nejen jako na stroje a kalkulačky pracující mechanicky, ale začali v nich spatřovat určitou dávku inteligentního chování. (Mařík V., 1993) Roku 1956 byla uspořádána Johnem McCarthym konference, na kterou byly pozváni významní odborníci z oborů matematiky, biologie, elektrotechniky, lingvistiky, neurologie, psychologie a fyziologie. Cílem významné konference bylo prodiskutovat myšlenku tvrdící, že jakýkoli příznak inteligence lze popsat do podoby srozumitelné pro počítač. Byl definován společný zájem nesoucí název umělá inteligence. Na konferenci byl představen první program využívající technik umělé inteligence Logic Theorist, další vývoj týmu v blízké době vytvořil program napodobující lidské myšlení GPS. Bylo předpovězeno, že v roce 1970 bude počítač velmistrem v šachu, odhalí nové matematické teorémy, porozumí přirozenému jazyku a bude schopen komponovat hudbu. (Mařík V., 1993) V 50. letech F. Rosenblatt vynalezl perceptron, model napodobující lidskou buňku neuron. Model položil základ rozpoznávání a zařazování objektů do tříd. V letech 1982-1984 odstartovala díky pracím J. J. Hopfielda, D. E. Rumelharta a T. Kohonena éra neuronových sítí. Odstranili počáteční problémy a začíná boom v oblasti neuronových sítí. J. McCarthy vyvinul první jazyk určený pro umělou inteligenci LISP. (Mařík V., 1993) S přibývajícím léty začínalo být zřetelné, že dosažení cílů předpovídaných na konferenci nebude dosaženo. Přesto docházelo k vývoji, roku 1967 navrhl Colmerauer jazyk PROLOG, který se dodnes používá. Mezi roky 1971 a 1972 byly prezentovány systémy myšlenkově navazující na GPS, a to STRIPS a PLANNER, přesto že nenalezly široké uplatnění jsou považovány za významné z hlediska vývoje. (Mařík V., 1993) Ukázalo se, že rozhodující pro vysokou efektivitu systémů umělé inteligence jsou použité znalosti. Je kladen důraz na získávání znalostí o systému a jejich využívání. Vznikají tak systémy obsahující určité expertní znalosti, označovány jako expertní systémy. Expertní systémy simulují rozhodování znalostních expertů, díky zakódovaným expertním znalostem o systému bázi dat. Kvalita expertního systému je dána kvalitou bázových dat. Prvními používanými expertními systémy byli MYCIN a PROSPECTOR. V 80. letech dochází k prudkému rozšíření expertních systémů, díky kterým dochází k ušetření značných finančních částek v oblasti průmyslu. (Mařík V., 1993)

Teoretická východiska práce 11 2.2 Stavový prostor Pokud řešený problém rozdělíme do několika stavů, kde jeden stav označíme za počáteční a některé stavy za cílové s možností mezi jednotlivými stavy procházet, hovoříme o stavovém prostoru. Stavový prostor může nabývat různých velikostí, v určitých případech lze dosáhnout nekonečného počtu stavů. Navíc cílové stavy nemusí být vždy známy, existuje pouze představa jak by měli vypadat. Pro procházení a nalezení optimální cesty prostorem se používají různé algoritmy, jejímž úkolem je nalézt nejkratší cestu v grafu. Ne vždy je vhodné aplikovat stejný algoritmus. Průchod stavovým prostorem lze výrazně zkrátit, definujeme-li tzv. metaznalosti. Metaznalosti jsou pravidla, které pomáhají řešit úlohu, tvoří řídící strategii. Zavedením těchto pravidel dosáhneme výrazného zrychlení nalezení řešení. Algoritmus je třeba zvolit podle konkrétního problému, hardwarových a časových možností. Stavový prostor může být reprezentován dvěma způsoby a to buď orientovaným grafem nebo mapou. (Mařík V., 1993) 2.2.1 Reprezentace stavového prostoru pomocí orientovaného grafu Podle Ryjáčka Z. lze orientovaný graf definovat jako dvojici (V,E), kde V je množina vrcholů a E (V V) je množina hran. V orientovaném grafu se nacházejí pouze jednosměrné hrany, každá hrana má počáteční a cílový uzel. Je možné, že počáteční a koncový uzel je shodný, v grafu se tedy mohou vyskytovat smyčky. Stavový prostor si lze představit jako orientovaný graf, kde uzly jsou tvořeny stavy a hrany tvoří akce pro přechod mezi stavy. Průchod grafem řešíme pomocí metod procházení grafu jež jsou popsány níže. Nalezením optimální cesty v grafu tedy nalezneme zároveň i optimální cestu pro průchod stavového prostoru. Terminologie používaná v teorii grafů: Uzel A je nazýván uzlem kořenovým Uzly S, T, M, N, O, U, Q, R, které nemají svého následníka (syna) se označují listy Uzel F je bezprostředním následníkem uzlu B Uzel A je bezprostředním předchůdcem uzlu C Uzly A, D, I, P jsou předchůdci uzlu U Uzel N je následníkem uzlů A, C, G Uzel A se nachází v hloubce 0, uzly B, C, D v hloubce 1 atd.

Teoretická východiska práce 12 Obr. 1 Graf stavového prostoru (Pěchouček M., 2007) 2.2.2 Reprezentace stavového prostoru pomocí mapy Stavový prostor lze také znázornit mapou. Mapa je dvourozměrné pole M N, kde každé políčko v mapě má svoje souřadnice vzhledem k počátku a toto políčko reprezentuje určitý stav. Aby bylo možné nalézt cestu v poli, je třeba určit souřadnice počátečního a cílového bodu. Cestou pak je posloupnost bodů od počátečního k cílovému bodu, bez toho aniž by byly souřadnice jakéhokoli bodu použity v cestě dvakrát. Úkolem algoritmů pro hledání cesty v mapě, je nalézt nejkratší cestu z počátku do cíle s přihlédnutím na body jež mohou reprezentovat překážku. 2.3 Metody procházení stavového prostoru Metody procházení stavového prostoru se dělí na metody neinformované a informované. Neinformované metody nemají k dispozici žádné informace o stavovém prostoru, které by zajistily rychlejší průchod. Tyto metody jsou odkázány na procházení všech stavů dokud není nalezeno cílové řešení. Kdežto informované metody mají určitou znalost stavového prostoru, která umožní odhadnout jak daleko se nacházíme od cílového stavu. Tento odhad je tvořen heuristickou funkcí h(x), kterou do systému vloží člověk. Rychlost nalezení cílového řešení potom záleží na kvalitě heuristické funkce. Čím je heuristická funkce kvalitnější, tím dříve je možné dosáhnout cílového stavu. Konkrétní metody se od sebe liší časovou složitostí, kvalitou dosaženého řešení a paměťovými nároky. Časová složitost je čas potřebný k dosažení cílového řešení, někdy též udávaný v počtu dosažených stavů. Dalším kritériem hodnocení je množství využití operační paměti při běhu programu. Zde můžeme být limitování hardwarovými prostředky a využitím operační paměti jinými aplikacemi. Kvalitou řešení se myslí schopnost nalézt řešení, pokud řešení existuje, pokud je možných řešení více, zda je nalezené řešení nejlepší ze všech možných.

Teoretická východiska práce 13 2.4 Neinformované metody procházení stavového prostoru Neinformované metody jak bylo výše uvedeno nemají žádnou znalost stavového prostředí, což spočívá v procházení velkého množství stavů, a s tím spojená stoupající časová i prostorová složitost. Proto neinformované algoritmy nenaleznou uplatnění při složitějších řešeních a využívají se pouze u jednoduchých úloh. 2.4.1 Prohledávání do šířky (Breadth-first search) U prohledávání do šířky, se od uzlu, označeného za počáteční prohledávají všichni jeho sousedé, kteří jsou následně uloženi do fronty. Z fronty se vybere první uzel, u kterého se opět prohledají sousedé jako u počátečního, mimo ty, kteří již byli prozkoumáni. Tento postup se opakuje dokud fronta není prázdná. (Algoritmy.net, 2008) U popisů algoritmů se vyskytují pojmy OPEN a CLOSED. Pojmem OPEN se rozumí seznam neexpandovaných uzlů, pojmem CLOSED seznam expandovaných uzlů. Algoritmus lze popsat následujícím způsobem: 1. Zapiš počáteční stav do seznamu OPEN, seznam CLOSED je prázdný. Jeli počáteční stav současně stavem cílovým, ukonči vyhledávání. 2. Pokud je seznam OPEN prázdný, řešení neexistuje, ukonči vyhledávání. 3. Vymaž první stav (označíme jej i) v seznamu OPEN a zapiš tento stav do seznamu CLOSED. 4. Expanduj stav i. Pokud tento stav nemá následovníky nebo všichni následovníci byli již expandováni (tj. jsou v seznamu CLOSED), pokračuj krokem č. 2. 5. Zapiš všechny následovníky stavu i, kteří nejsou v seznamu CLOSED, na konec seznamu OPEN. 6. Pokud některý z následovníků stavu i je cílovým stavem, řešení bylo nalezeno, ukonči vyhledávání. Jinak pokračuj krokem č. 2. (Mařík V., 1993) Jestliže existuje cesta k cíly, musí být algoritmem nalezena a to vždy ta nejkratší. Nevýhodou je však expandování neúměrného množství uzlů, než dosáhneme cíle a s tím je spojená vysoká paměťová náročnost. Algoritmus prohledávání do šířky má asymptotickou časovou složitost O( U + H ), kde U je počet uzlů a H počet hran.

Teoretická východiska práce 14 Obr. 2 Prohledávání do šířky (Pěchouček M., 2007) 2.4.2 Prohledávání do hloubky (Depth-first search) Během prohledávání se mění stavy uzlů. Na začátku jsou všechny uzly označeny jako nové, jestliže do uzlu vstoupíme, změní se označení na otevřený. Jestliže přes uzel provede návrat je označen za zavřený. Algoritmus se vždy nachází v nějakém vrcholu, který nazveme aktuální. Algoritmus vybere hranu vedoucí z aktuálního vrcholu a je-li následný vrchol označen za nový, prohledávání pokračuje do hloubky k dalšímu uzlu, který se stane aktuálním. Do starého aktuálního uzlu se algoritmus vrátí až po prohledání nového aktuálního uzlu. Pokud hrana vede k jinému vrcholu než novému, tato hrana se přeskočí. Nevyskytují-li se již v grafu žádné nové vrcholy, je aktuální uzel označen za zavřený a algoritmus provede návrat do uzlu ze, kterého přišel. Algoritmus lze popsat následujícím způsobem: 1. Zapiš počáteční stav do seznamu OPEN, seznam CLOSED je prázdný. Je-li počáteční stav současně stavem cílovým, ukonči vyhledávání. 2. Pokud je seznam OPEN prázdný, řešení neexistuje, ukonči vyhledávání. 3. Vymaž první stav (označíme jej i) v seznamu OPEN a zapiš tento stav do seznamu CLOSED. 4. Expanduj stav i. Pokud tento stav nemá následovníky nebo všichni následovníci byli již expandováni (tj. jsou v seznamu CLOSED), pokračuj krokem č. 2. 5. Zapiš všechny následovníky stavu i, kteří nejsou v seznamu CLOSED, na začátek seznamu OPEN. ukonči vyhledávání. Jinak pokračuj krokem č. 2. (Mařík V., 1993)

Teoretická východiska práce 15 Výhodou algoritmu prohledávání do hloubky je menší paměťová složitost, oproti prohledávání do šířky. Výhoda spočívá v uchovávání pouze uzlů od expandovaného k počátečnímu. Časová složitost je rovna O( U + H ), kde U je počet uzlů a H počet hran. Za nevýhody jsou považovány neoptimalita řešení, to znamená, že nemusí být nalezena vždy nejkratší cesta. Při existenci nekončené větve nedojde k nalezení cíle. Obr. 3 Prohledávání do hloubky (Pěchouček M., 2007) 2.4.3 Iterativní prohledávání do hloubky (Depth-first iterative deeping) Algoritmus iterativního vyhledávání kombinuje výhody vyhledávání do hloubky a do šířky. Je nejvýhodnější variantou mezi neinformovanými algoritmy pro vyhledávání ve velkých stavových prostorech s neznámou hloubkou. Algoritmus začíná vyhledávat stejně jako algoritmus vyhledávání do hloubky s tím, že v každé iteraci roste hloubka prohledávání o jedničku a první nalezené řešení je automaticky označeno za optimální. Výhodami tohoto algoritmu je optimálnost, úplnost a nízké paměťové nároky. Za nevýhodu lze označit neznalost jak určit limit prohledávání, při zadání příliš malé hloubky, do které má algoritmus vyhledávat, nedospějeme k cíly. Naopak, jestliže je zadána moc velká hloubka, bude docházet i k prohledávání slepých listů, což povede ke zpomalování chodu algoritmu. 2.4.4 Obousměrné prohledávání (bidirectional breadth-first search) Obousměrné prohledávání je prohledávání do šířky, které začíná jak z počátečního tak i z cílové uzlu. Jestliže dojde k situaci, kdy v obou směrech je

Teoretická východiska práce 16 nalezen totožný stav, je nalezena cesta. Dojde-li ke stavu, že v jednom ze směrů se nenacházejí žádná políčka pro prohledávání, cesta neexistuje. Obousměrné prohledávání je vylepšený algoritmus prohledávání do šířky. Doba nalezení řešení je výrazně zkrácena, roste však nárok na operační paměť. 2.4.5 Prohledávání do hloubky s omezením (Depth-limited search) Je algoritmus hledání do hloubky s omezenou hloubkou zanoření. Při dosažení maximální hloubky se algoritmus vrací o úroveň výš a pokračuje ve vyhledávání, dokud opět nenarazí na maximální možné zanoření. U každého uzlu se evidují vyzkoušené a nevyzkoušené stavy. Narazí-li algoritmus na cestu, která nevede k cíly, vrací se zpět do uzlu vyšší úrovně a zkouší nalézt jinou cestu. Při špatně zvolené cestě, se může až po dlouhé době ukázat, že nevede k cíly. Další nevýhodou je, že algoritmus si nepamatuje již prošlé cesty. Může dojít k situaci, kdy algoritmus vstoupí podruhé do slepé větve z jiného uzlu. Problémem je, že předem nevíme, jakou maximální hloubku nastavit. Řešení je však nalezeno vždy, pokud se nachází v dané hloubce zanoření. Algoritmus lze popsat následujícím způsobem: 1. Zapiš počáteční stav do seznamu OPEN, seznam CLOSED je prázdný. Jeli počáteční stav současně stavem cílovým, ukonči vyhledávání. 2. Pokud je seznam OPEN prázdný, řešení neexistuje, ukonči vyhledávání. 3. Vymaž první stav (označíme jej i) v seznamu OPEN a zapiš tento stav do seznamu CLOSED. 4. Pokud se hloubka uzlu i rovná maximální přípustné hloubce, pokračuj krokem č.2. 5. Expanduj stav i. Pokud tento stav nemá následovníky nebo všichni následovníci byli již expandováni (tj. jsou v seznamu CLOSED), pokračuj krokem č. 2. 6. Zapiš všechny následovníky stavu i, kteří nejsou v seznamu CLOSED, na začátek seznamu OPEN. 7. Pokud některý z následovníků stavu i je cílovým stavem, řešení bylo nalezeno, ukonči vyhledávání. Jinak pokračuj krokem č. 2. (Mařík V., 1993) 2.4.6 Prohledávání podle cen (Uniform-cost search) Jednotlivé uzly jsou ohodnoceny cenami. Cena c(m,n) vyjadřuje náklady na přechod z uzlu n do m. Nákladová funkce má potom tvar g(m)=g(n)+c(n,m), kde m je následníkem n. Expanduje se vždy ten uzel, do kterého vede nejlevnější cesta (nejméně ohodnocená hrana). Při jednotkově ohodnocených hranách, algoritmus degraduje na pouhé vyhledávání do šířky. Algoritmus vždy nalezne optimální řešení, existuje-li. Je vhodné jej využít při řešení problému obchodního cestujícího.

Teoretická východiska práce 17 2.5 Srovnání vlastností neinformovaných algoritmů Algoritmy jsou porovnávány podle čtyř kritérií. Prvním kritériem je časová složitost, neboli čas potřebný k vyřešení úlohy. Druhým kritériem je množství využívání operační paměti při chodu programu. Úplnost nebo neúplnost je dalším kritériem. Jestliže je algoritmus úplný, znamená to, že nalezne řešení. Posledním kritériem je optimalita. Daný algoritmus je optimální, nalezne-li nejkratší cestu grafem. b faktor větvení d hloubka cíle m maximální hloubka větve/délka cesty l použití maximální přípustné hloubky C cena optimálního řešení Tab. 1 Srovnání vlastností neinformovaných algoritmů (Horák A., 2006) Algoritmus / Kritérium Hledání do šířky Hledání do hloubky Iterativní hledání Obousměrné hledání Hledání podle ceny Hledání s omezenou hloubkou Čas b d+1 b m b d b d/2 b 1+(C/ε) b l Paměť b d+1 bm bd b d/2 b 1+(C/ε) bl Optimalita ano ne ano ano ano ne Úplnost ano ne ano ano ano ne 2.6 Informované metody procházení stavového prostoru Informované metody používají pro prohledávání stavového prostoru často výběr nejvhodnějšího vrcholu pomocí heuristiky. Heuristika je způsob jak postupovat při řešení konkrétní situace. Tento postup není hromadný, platí jen pro konkrétní problémy. K rozhodnutí, který uzel expandovat se používá hodnotící funkce, přitom platí že čím jsou heuristické vlastnosti kvalitnější, tím efektnější bude prohledávání. 2.6.1 Gradientní algoritmus (Hill-climbing algorithm) Gradientní algoritmus je nejjednodušší z informovaných metod procházení stavového prostoru. Algoritmus může začít prohledávání ze jakéhokoli uzlu v grafu. Nejprve vygeneruje všechny sousedy aktuálního uzlu a ohodnotí je, poté pomocí hodnotící funkce rozhodne, který sousední uzel má nejlepší ohodnocení a ten expanduje. Tento postup se neustále opakuje, dochází tak k přechodu na uzly se stále lepším ohodnocením. Existují-li dva uzly se stejným ohodnocením, dojde k výběru pomocí náhodné funkce. Algoritmus se ukončí, narazí-li na uzel s horší hodnotící funkcí, cíl nebo nemá-li žádné následníky. Výhodou gradientních algoritmů je jejich rychlost, nevýhodou je však možnost uvíznutí v lokálním ex-

Teoretická východiska práce 18 trému a nenalezení globálního maxima, tedy cílového řešení. Může se vyskytnout i stav zacyklení. U gradientního algoritmu nedochází k uchovávání informací o dříve navštívených uzlech, uchovává se pouze informace o rozvíjeném uzlu. Jsou tedy vhodné u úloh, kde nás zajímá pouze výsledek. 2.6.2 Algoritmus uspořádaného prohledávání (best-first search algorithm) Je gradientní algoritmus rozšířený o paměť. V paměti se neuchovávají pouze jména uzlů, ale i hodnotící funkce a jméno rodičovského uzlu. Expandují se uzly s nejlepší hodnotící funkcí. Zápis v paměti je následující: <jméno uzlu, hodnota f, rodičovský uzel>. Algoritmus lze popsat následujícím způsobem: 1. Počáteční stav zapiš do seznamu OPEN, seznam CLOSED je prázdný. 2. Pokud je seznam OPEN prázdný, řešení neexistuje, ukonči prohledávání. 3. Ze seznamu OPEN vyber stav i s nejmenší hodnotou f(i). V případě většího počtu stavů se stejnou minimální hodnotou f(i) prověř, zda některý z těchto stavů není stavem cílovým, v takovém případě jej vyber; jinak vyber mezi stavy se stejnou minimální hodnotou f(i) libovolně. 4. Vymaž stav i ze seznamu OPEN a zařaď jej do seznamu CLOSED. 5. Je-li stav i cílovým stavem, řešení je nalezeno, ukonči prohledávání. 6. Expanduj stav i; pro každého následovníka j stavu i vypočítej hodnotu f(j). Pokud stav j není ani v seznamu OPEN ani v seznamu CLOSED, zařaď jej do seznamu OPEN. Pokud je stav j již v seznamu OPEN nebo CLOSED, avšak s ohodnocením větším než právě vypočtené f(j) změň jeho ohodnocení na f(j), změň jméno rodičovského uzlu v zápisu uzlu a zařaď ho do seznamu OPEN. 7. Pokračuj krokem č. 2. (Mařík V., 1993) Výsledek prohledávání značně závisí na kvalitě heuristické funkce, která je rovna hodnotící funkci. Nalezení cíle není zaručeno, může se stát, že se ocitneme mimo řešení. Výhodou algoritmu uspořádaného prohledávání je rychlost u jednodušších úloh. 2.6.3 Algoritmus A* (A* algorithm) Hledání funguje podobně jako hledání do šířky, jsou však doplněny dva významné faktory. Prvním faktorem jsou náklady, které musíme vynaložit na cestu mezi dvěma uzly označované g(i). Druhým faktorem je heuristika h(i), odhadující vzdálenost z libovolného uzlu do cíle. Funkci lze potom znázornit jako f(i)=g(i)+h(i) a je možné ji chápat jako cenu přechodu z počátečního stavu do stavu cílového. Náklady na přechod mezi jednotlivými uzly nemusí být vyjádřeny jenom vzdáleností, náklady mohou tvořit čas potřebný na přepravu pokud hledáme nejrychlejší trasu, terén, po dálnici se určitě dostaneme do cíle dříve,

Teoretická východiska práce 19 než po okresních cestách atd. Skutečné hodnoty h(i) a g(i) však v praxi často neznáme, jsou proto nahrazovány jejími odhady h*(i) a g*(i). Tento odhad je jakousi heuristickou znalostí, jaká je šance nalézt řešení. Hodnotící funkce má potom tvar f*(i)=g*(i)+h*(i). Čím lepší je hodnotící funkce, tím dosáhneme rychleji výsledku. Algoritmus nejprve prověřuje uzly s nejnižšími náklady. Začíná se tedy prohledávání uzlů, které jsou pravděpodobně ve směru k cíly. Podmínkou funkčnosti algoritmu A* je, že odhadované náklady nesmějí přesáhnout skutečné náklady, jinak by nalezená cesta nebyla tou nejkratší. Výhody A* algoritmu představují v možnosti libovolně ohodnocovat pole a získávat tak různá zvýhodnění a znevýhodnění, cesta je vždy nalezena a to ta nejkratší. Pokud řešení neexistuje, dojde k prohledání celého grafu, což může trvat značně dlouho. Změní-li se prostředí musí dojít k přeplánování trasy. 2.6.4 Simulované žíhání (Simulated annealing) Algoritmus simulovaného žíhání, řeší problém gradientního algoritmu a to uvíznutí v lokálním extrému. V metodě se tomu snažíme zabránit tím, že na začátku provádíme velké změny a díky tomu se dostaneme z lokálního extrému. Algoritmus je simulací žíhání oceli. Čím větší je teplota, tím větší je třeba provádět změny a naopak. 2.6.5 Hladové vyhledávání (Greedy search) Hladový algoritmus pracuje na principu vyhledávání lokálního maxima či minima, podle toho zda se jedná o úlohu maximalizační nebo minimalizační z uspořádané množiny prvků. Bere v potaz pouze heuristickou funkci, která určuje odhadované náklady na cestu do cíle. Algoritmus není ani optimální, ani úplný. 2.6.6 Paprskové vyhledávání (Beam search) U paprskového vyhledávání je omezeno množství uzlů v seznamu OPEN, do seznamu se zapisují pouze ty expandované uzly, které mají lepší hodnotící funkci než aktuální uzly v seznam, ty jsou poté vymazány. V seznamu OPEN jsou tedy obsaženy pouze uzly s nejlepší hodnotící funkcí, tím dojde k značné redukci uchovávaných uzlů. 2.7 Soutěž Eurobot 2010 Eurobot je amatérská celosvětová soutěž, pro studentské a nezávislé týmy, zájmové skupiny a všechny nadšence robotiky. Hlavním mottem soutěže je hra v přátelském a sportovním duchu, snaha o výměnu myšlenek, technických zkušeností, nápadů a znalostí. V soutěži spolu soupeří vždy dva týmy. Každý tým musí být složen minimálně ze dvou účastníků, jejichž věk nesmí přesáhnout 30let. Týmy mohou mít své poradce a konzultanty, kteří se do počtu nepočítají.

Teoretická východiska práce 20 Soutěž Eurobot se koná v celé Evropě, země ve kterých se do soutěže přihlásilo více než tři týmy musí uspořádat národní kolo. Z národní soutěže postupují do celosvětového finále tři týmy. (Eurobot, 2009) Tématem soutěže Eurobot 2010 je sbírání ovoce, zeleniny a obilovin. Cílem robota je posbírat co největší množství herních prvků a zavést je do cílového koše. V zápase proti sobě soupeří vždy dva roboti, na sesbírání a dovezení prvků do koše je stanoven limit 90 vteřin. Herní prvky jsou rozmístěny různě na hrací ploše, přitom platí, že prvky, které jsou nejobtížněji dosažitelné jsou ohodnoceny nejvíce body. Herní prvky tvoří rajčata, kukuřice a pomeranče. Body herních prvků umístěných v cílových koších se sčítají a tým, který dosáhl největšího součtu prvků se stává vítězem. (Eurobot, 2009) Obr. 4 Herní plocha pro soutěž Eurobot 2010 (Eurobot, 2009) 2.8 Lego Mindstorms NXT Mindstorms NXT je robotická stavebnice vyvinutá společností Lego. Je vhodná pro školní a výukové účely a nováčky, kteří se o robotiku začínají zajímat. Stavebnice obsahuje servomotory, senzory, sadu vodičů, síťový adaptér, obnovitelnou baterii, soupravu technických a doplňkových dílů. Hlavní součástí stavebnice je však inteligentní programovatelná NXT kostka. Níže uvedu krátký popis jednotlivých součástí stavebnice.

Teoretická východiska práce 21 Obr. 5 Stavebnice lego Mindstorms NXT (Eduxe, 2009) 2.8.1 Obnovitelná baterie Lithiová baterie s možností opakovaného nabíjení, slouží jako zdroj energie pro inteligentní NXT kostku. Je-li baterie plně nabita rozsvítí se zelená LED dioda, baterii lze nabíjet i umístěnou v kostce. Obr. 6 Obnovitelná baterie (Eduxe, 2009) 2.8.2 Síťový adaptér Síťový adaptér slouží k dobíjení lithiové baterie. Obr. 7 Síťový adaptér (Eduxe, 2009) 2.8.3 Inteligentní NXT kostka Programovatelnou NXT kostku je možné propojit s počítačem pomocí bluetooth nebo USB portu. Jádrem kostky jsou 32 bitový a 8 bitový mikroprocesor. Dále

Teoretická východiska práce 22 obsahuje 4 vstupní a 3 výstupní porty, maticový displej a tlačítka pro ovládání a testování programů. Zdrojem mohou být obnovitelná baterie nebo 6 AA tužkových baterií. Obr. 8 Inteligentní NXT kostka (Eduxe, 2009) 2.8.4 Interaktivní servomotor Servomotor s vestavěný rotačním senzorem pro měření rychlosti a vzdálenosti. Lze řídit s přesností 1 stupeň. Motory je možné synchronizovat. Obr. 9 Interaktivní servomotor (Eduxe, 2009) 2.8.5 Tlakový senzor Indikuje stlačení, případně stlačení a následné uvolnění. Obr. 10 Tlakový senzor (Eduxe, 2009) 2.8.6 Světelný senzor Zaznamenává světlo, tmu a úroveň světla. Lze pomoci něj snímat i odrazivost.

Teoretická východiska práce 23 Obr. 11 Světelný senzor (Eduxe, 2009) 2.8.7 Senzor barvy Barevný senzor umí rozpoznat šest druhů barev, obsahuje všechny funkce světelného senzoru a vyzařuje světlo červené, modré a zelené barvy. Obr. 12 Senzor barvy (Eduxe, 2009) 2.8.8 Zvukový senzor Měří úroveň hladiny zvuku v db a dba. Obr. 13 Zvukový senzor (Eduxe, 2009) 2.8.9 Ultrazvukový senzor Detekuje objekty a měří jejich vzdálenost v centimetrech nebo palcích.

Teoretická východiska práce 24 Obr. 14 Ultrazvukový senzor (Eduxe, 2009) Všechny výše uvedené senzory a servomotory je nutné s inteligentní NXT kostkou spojit pomocí sady vodičů, které jsou také součástí stavebnice. Kabely slouží pro přenos řídících signálů mezi kostkou a periferiemi. Bez propojení nemohou periferie vykonávat svoji funkci. 2.9 Vývojové prostředí 2.9.1 Java Java je objektově orientovaný programovací jazyk, vyvinutý firmou Sun Microsystems v roce 1995. Je jedním z nejrozšířenějších programovacích jazyků na celém světe a díky své přenositelnosti je používán jak na desktopových počítačích, tak i na čipových kartách, mobilních telefonech a rozsáhlých distribuovaných systémech pracujících na řadě počítačů na celém světě. Java vychází z programovacího jazyku C++, ke kterému má syntakticky nejblíže. Java má dva druhy platform neboli prostředí pro běh programu. První platformou je JRE (Java Runtime Environment), která obsahuje interpret Javy a standardní knihovny. Druhým prostředím je JDK (Java Development Kit), který rozšiřuje JRE platformu o překladač a další vývojové nástroje pro zjednodušenou práci programátora. (Studentský informační server, 2000) 2.9.2 Eclipse Eclipse je vývojové prostředí(ide) pro programování v jazyce Java. Návrh této platformy umožňuje rozšíření seznamu podporovaných programovacích jazyků pomocí tzv. pluginů. V základním Eclipse jsou obsaženy pouze prostředky pro vývoj standardní Javy. Nainstalováním pluginů lze Eclipse rozšířit i o podporu programovacích jazyků C++, XML, HTML, PHP nebo UML. Výhodou Eclipse je možnost nainstalování pluginů až v případě potřeby, čímž se značně zrychluje chod aplikace. 2.9.3 LeJOS Firmware LeJOS vyvinul v roce 1999 Španěl José Solorzano. Název byl odvozen ze zkratky JOS (java operating system) a z operačního systému pro RCX kostky legos, vznikl název lejos. Aby bylo možné programovat inteligentní kostky, které jsou součástí stavebnic lego Mindstorms, v jazyce Java, je nutné nainstalo-

Teoretická východiska práce 25 vat firmware lejos. LeJOS zahrnuje virtuální stroj Java, který umožňuje psát zdrojový kód pro NXT kostky jazykem Java. Obsahuje speciální knihovny s třídy jejichž názvy odpovídají určitým možnostem, které mohou být u robota využity. LeJOS nabízí možnost programovat objektovým jazykem(java), vytvářet vícerozměrná pole, vyjímky, rekurze, synchronizaci a další prostředky usnadňující práci programátora. V současné době podporuje lego RCX cihly a lejos NXJ cihly NXT. (NXJ technology, 1997)

Metodika řešení 26 3 Metodika řešení Prvním krokem při řešení zadané úlohy je vybrat vývojový nástroj, ve kterém bude daná úloha implementována. Na výběr je několik možností z nichž jsem zvolil vývojové prostředí Eclipse. Výběrem nástroje Eclipse je dán i programovací jazyk pro tvorbu algoritmů, tímto jazykem je Java. Další fází je zhotovení konstrukce robota, na kterém se uskuteční veškeré testování a pro kterého bude algoritmus určen. Jelikož je robot konstruován pro celoevropskou soutěž Eurobot 2010, musí konstrukce splňovat přísná kritéria zadaná organizátory soutěže. Nedodržení těchto pravidel znamená vyloučení ze soutěže. Algoritmus pro hledání cesty v prostředí s definovanými počátečními podmínkami, vytvořím tak, aby využíval znalostí naprogramované rastrové mapy představující herní plochu. Tato mapa bude představovat znalost (heuristiku) poskytnutou algoritmu člověkem. Tvorba algoritmu je ovlivněna pravidly soutěže Eurobot 2010, je tedy nutné počítat s mnoha omezeními jako např. časový limit pro průjezd herní plochou, umístění startovacích ploch na hřišti atd. Navržený algoritmus bude aplikován na jednotku NXT stavebnice lego Mindstorms, ze které je rovněž sestavena konstrukce robota. Čtenář bude v práci seznámen s principy, výhodami a nevýhodami známých algoritmů, které je možné využít pro hledání cesty ve stavovém prostoru, pojmy stavový prostor a s tím související nalezení nejkratší cesty v grafu, základními komponenty stavebnice lego Mindstorms, soutěží Eurobot 2010 a vývojovými prostředími použité pro tvorbu. Dosažené výsledky budou zhodnoceny a naznačeny budoucí možné směry vývoje.

Vlastní řešení 27 4 Vlastní řešení 4.1 Popis konstrukce robota Robot je sestaven ze stavebnice lego Mindstorms, kterou škola zakoupila pro výukové účely a byla zapůjčena našemu týmu pro vývoj robota. V krátkosti popíšu konstrukci robota, ale lepší představu o tom, jak robot vypadá si uděláte z přiloženého obrázku. Robot se po hrací ploše pohybuje pomocí pásu poháněných servomotory. V přední části je umístěna radlice a dvě ramena, jedno zabezpečuje vyjetí sebraného rajčete při otočném manévru a druhé sbírá pomeranče umístěné na stromech. V horní části umístěný zásobník na pomeranče lze pomocí servomotoru vyklopit nasbírané ovoce do kontejneru, určeného jako cílový bod. Základnu a těžiště robota tvoří dvě NXT kostky zpevňující podvozek umístěné vedle sebe těsně nad pásy. Aby mohlo docházet k reakcím na okolní události je robot osazen ultrazvukovými senzory umístěnými vepředu a na bocích a barevným senzorem zabudovaným v podvozku snímajícím podkladovou barvu plochy. Dále robot obsahuje dotykový senzor, jímž je řešeno startovací a vypínací tlačítko, zásobník na baterky, které jsou zdrojem energie pro výklopný servomotor. Obr. 15 Konstrukce robota 4.2 Hrací plocha 4.2.1 Popis hrací plochy Hrací plocha navržená pro soutěž Eurobot 2010 obsahuje dvě startovní pole, modré a žluté barvy. Tyto pole umístěné v rozích hřiště přestavují startovní po-

Vlastní řešení 28 zice dvou robotů vzájemně spolu soupeřících. Mezi startovními poli se nachází vyvýšená plocha, na které jsou umístěny nejhůře dosažitelné a zároveň nejvíce obodované hrací prvky(pomeranče). Ve zbytku hrací plochy jsou rozmístěny ostatní herní prvky a to kukuřice, rajčata a překážky omezující pohyb robota. Pozice rajčat, kukuřic i překážek na hrací ploše je pevně stanovena. Umístění kukuřičných klasů a překážek na jednotlivých pozicích však není předem dáno, ale náhodně se losuje před začátkem zápasu. Důvodem je nemožnost připravit si průjezd hrací plochou dopředu, neboť překážky na rozdíl od klasů jsou k hrací ploše přišroubovány a nelze je sbírat. Pro lepší představu hrací plochy přikládám obrázek.

Vlastní řešení 29 Obr. 16 Pohled na hrací plochu shora (Eurobot, 2009) Obr. 17 Rozměry hrací plochy (Eurobot, 2009) 4.2.2 Reprezentace hrací plochy mapou K napodobení hrací plochy jsem vytvořil rastrovou mapu. Je to vlastně matice M N prvků, kde pozice jednotlivých hracích prvků na ploše je v mapě dáno souřadnicemi. Mapa je naprogramována v měřítku 1:3, to znamená, že jeden bod

Vlastní řešení 30 mapy odpovídá třem centimetrům skutečného rozměru hřiště. Jelikož rozměry herního pole nejsou přesnými násobky či děliteli třemi, museli být rozměry zaokrouhlovány, což způsobí mírné odchylky. 4.2.2.1 Metoda VytvorMapu Metoda VytvorMapu nejprve vytvoří matici odpovídající rozměrům herního pole v měřítku 1:3, tedy 100 70 bodů a naplní ji nulami. Dalším krokem je zanesení bodů do pole, představující středy překážek. Zde je nutné dodat, že tým podílející se na vývoji robota pro soutěž Eurobot se shodl na tom, že i kukuřičné klasy(herní prvky) budou pro našeho robota tvořit překážky, neboť konstrukce robota nebyla přizpůsobena sběru těchto klasů. Do mapy bylo tedy zapotřebí zadat 18 středů překážek. Aby nebylo nutné zadávat všechny středy překážek ručně zadáváním souřadnic, rozdělil jsem si překážky na ploše do dvou obdélníků. První obdélník vložil do mapy pomocí for cyklu 6 středů překážek a druhý 8 středů překážek. Nyní zbývaly ke vložení pouze 4 středy, dva umístěné u modré startovní plochy a dva u žluté startovní plochy, které byly zadány ručně příslušnými souřadnicemi. Jako překážku je nutné také považovat boční stěnu vyvýšené plochy a vyvýšenou plochu, na které se nacházejí přišroubované válce představující stromy s pomeranči. Přes tyto prostory na mapě také nelze přejíždět, proto je nutné je vnést do mapy jako překážky. To je učiněno opět dvěma for cykly. Tělo metody VytvorMapu obsahuje i metody UpravPrekazky, OcislujMapu, UpravNaPolomer a HledejCestu jež budou popsány níže. 4.2.2.2 Metoda UpravPrekazky Hlavním úkolem metody je zobrazit v mapě velikost překážky, tak aby odpovídala skutečným rozměrům. Toho docílíme tak, že kolem středů překážek, zaneseme do mapy dalších 8 bodů střed překážky obklopujících. Protože průměr překážky je 5 cm, bude těchto 8 bodů dostačujících. Proměnná prekokol je globální proměnná, ve které je uloženo číslo označující překážku, neboť matice je integerového typu. static void UpravPrekazky(int [][] mapa){ for (int x=1;x<=100;x++){ for (int y=1;y<=70;y++){ if (mapa[x][y] == prekstrd){ mapa[x-1][y+1]=prekokol; mapa[x][y+1]=prekokol; mapa[x+1][y+1]=prekokol; mapa[x-1][y]=prekokol; mapa[x+1][y]=prekokol; mapa[x-1][y-1]=prekokol; mapa[x][y-1]=prekokol;

Vlastní řešení 31 mapa[x+1][y-1]=prekokol; 4.2.2.3 Metoda UpravNaPolomer Metoda UpravNaPolomer se stará o to, aby roboti o různých rozměrech nenaráželi do překážky při průjezdu kolem ní. Vstupními argumenty metody jsou jednak mapa, která má být metodou upravena a poloměr robota. Poloměr robota musí být zadán v centimetrech. Skutečný poloměr je upraven tak, aby odpovídal měřítku mapy. Metoda kolem všech překážek vytvoří zónu, která je podle zadaného poloměru robota různě veliká a to, protože při hledání cesty je cesta označena jedním bodem na mapě. Jinak řečeno jeden bod představuje celého robota, proto je nutné vytvořit tuto zónu, která umožní bezpečný průjezd robota kolem překážky podle jeho rozměrů. Zónu je potřeba vytvořit jak kolem překážek na hrací ploše a vyvýšené plochy, tak i kolem bočních stěn hracího pole. Čím větší bude poloměr robota, tím větší bude i velikost zóny. Níže uvedu ukázku kódu, který vytvoří zónu kolem překážek na hrací ploše. static void UpravNaPolomer(int [][] mapa,int polomer){ polomer=math.round(polomer/3); for (int x=1; x<=100; x++){ for (int y=1; y<=70; y++){ if (mapa[x][y] == prekokol mapa[x][y] == stena) { for (int a=x+polomer;a>=x-polomer && a<=100;a--){ for (int b=y+polomer;b>=y-polomer && b<=70;b--){ if (mapa[a][b]!=prekstrd && mapa[a][b]!=prekokol && mapa[a][b]!=stena)mapa[a][b] = strdrob; 4.2.2.4 Metoda OcislujMapu Metoda očísluje dosud všechna neobsazená pole, tedy body které nezabírají ani překážky ani zóny zabraňující nárazu. Parametry jsou funkci předány mapa, souřadnice x a y. Tyto souřadnice zároveň určují cílový bod pro hledání cesty v mapě, neboť mapa je číslována od tohoto bodu vzestupně a při hledání cesty se

Vlastní řešení 32 snažíme dojít na bod s minimální hodnotou. To znamená, že čím vzdálenější bude bod od tohoto cílového bodu, tím bude mít větší hodnotu. Bod zadaný parametry obsahuje tedy hodnotu nula. Cílový bod rozdělí obdélníkové pole na čtyři kvadranty. Nejprve jsou očíslovány jednotlivé osy, směřující z cílového bodu a rozdělující obdélník do kvadrantů. Číslování je provedeno tak, že každý vzdálenější bod od bodu cílového o jeden bod na mapě obsahuje hodnotu o jednotku větší, než bod předcházející. Okolní body jsou tedy číslovány od jedničky až po určitou hodnotu dokud nenarazí na konec pole. Máme tedy očíslovány čtyři osy, dále pomocí čtyř for cyklů jsou očíslovány zbylé čtyři kvadranty. Jednotlivé kvadranty se číslují tak, že hodnota každého bodu v kvadrantu je dána prostým součtem hodnot os x a y. Tímto způsobem očíslovaná mapa představuje heuristiku, neboli znalost hrací plochy vytvořenou člověkem a prohledávacímu algoritmu dodanou z vnějšího prostředí. Hodnoty jednotlivých bodů označují vzdálenost od cíle, při použití vyhledávacího algoritmu s touto znalostí dosáhneme výrazného zrychlení vyhledávání cesty v mapě. Uvedu zde příklad očíslování jedné osy a jednoho kvadrantu. //dolní osa for (int a=y-1;a>0;a--){ mapa[x][a]=y-a; //pravá horní část for (int a=0;x+a<=100;a++){ for (int b=0;y+b<=70;b++){ if (mapa[x+a][y+b]<prekstrd) { mapa[x+a][y+b]=mapa[x+a][y]+mapa[x][y+b]; 4.3 Algoritmus hledání cesty Algoritmus pro hledání cesty, bylo zapotřebí naprogramovat, tak aby bylo možné využít znalostí očíslované mapy. Mapu si lze také představit jako neorientovaný graf, kde body v mapě představují uzly a hranou spojené uzly jsou pouze tehdy jsou-li v mapě sousedy. V neorientovaném grafu lze nalézt nejkratší cestu metodami prohledávání grafu. Pro lepší pochopení problému a aplikovatelnost očíslované mapy jsem vytvořil vlastní algoritmus pro hledání nejkratší cesty v grafu. Tento algoritmus se však podobá gradientímu algoritmu a vychází z jeho principů. Navržený algoritmus pro hledání cesty:

Vlastní řešení 33 1. Vlož počáteční uzel do seznamu OPEN. 2. Jestliže hodnota počátečního uzlu je rovna nule tzn. cílovému bodu, ukonči prohledávání, počáteční i cílový uzel jsou totožné. 3. Dokud hodnota počátečního uzlu je větší jak nula, odeber prvky ze seznamu OPEN přidej počáteční uzel do seznamu CLOSED, expanduj počáteční uzel a pokračuj dalšími body. Jestliže hodnota počátečního uzlu je rovna nule cesta je nalezena. 4. Expandované uzly přidej do seznamu OPEN. 5. Nalezni z expandovaných uzlů uzel s minimální hodnotou. 6. Jestliže nalezená minimální hodnota je menší než hodnota počátečního uzlu, zapiš souřadnice tohoto uzlu do pole souřadnic udávajících cestu. 7. Zapiš do počátečního uzlu minimální hodnotu. Pokračuj bodem č. 3. 8. Jestli není splněn bod č. 6, zvyš hodnotu aktuálního uzlu (zamezení uvíznutí v lokálním minimu). Pokračuj bodem č. 3. Očíslovaná mapa představuje jakousi znalost daného hřiště tzv. heuristiku, dodanou algoritmu člověkem. Díky heuristice se algoritmu výrazně zkrátí doba a náročnost prohledávání. Hodnota libovolného bodu v mapě představuje vzdálenost od cíle, s touto znalostí se značně omezí prohledávaný prostor. Algoritmus vždy přechází na bod v mapě (uzel), jehož hodnota (vzdálenost od cíle) je minimální. Zamezí se tak prohledávání slepých větví stromu, které nevedou k cíly. Přecházíme tedy vždy na uzel, který je pravděpodobně ve směru k cílovému uzlu a postupujeme tak k cíly přímočařeji. Navržený algoritmus hledání cesty implementuje metoda HledejCestu. 4.3.1 Implementace fronty Implementace fronty je rozdělena do tříd Fronta a Prvek. Třída Prvek definuje základní operace pro manipulaci s daty. Obsahuje metody zmenhodnotu, která zajistí změnu proměnné hodnota objektu prvek, vrathodnotu díky níž lze získávat číslo proměnné hodnota. Dalšími metodami jsou metody vratdalsi a posunnadalsi, zajišťující vrácení následujícího prvku a přesun na další prvek. Ve třídě Fronta existují vždy dva ukazatele na první a poslední prvek fronty, je-li fronta prázdná neukazují na žádný prvek, obsahují hodnotu null. Základní operace pro práci s frontou tvoří metody pridej a odeber, zajišťující přidání a odebrání prvku z fronty. Poslední metodou třídy Fronta je metoda testující prázdnost fronty, vrací hodnotu true při prázdném seznamu. 4.3.2 Metoda HledejCestu Jako parametry metody HledejCestu je nutné zadat mapu, ve které má být nejkratší cesta hledána a souřadnice počátečního uzlu. Na začátku jsou deklarovány lokální proměnné, včetně pole do, kterého se ukládají souřadnice cesty. Dále jsou vytvořeny fronty OPEN a CLOSED, do nichž se zapisují uzly. Nyní může

Vlastní řešení 34 začít samotné vyhledávání. Do proměnné min uložíme hodnotu počátečního uzlu. Počáteční uzel metodou pridej vložíme do seznamu OPEN. Testujeme jestli hodnota počátečního uzlu je rovna nule. Jestli ano, nemá význam dále pokračovat ve vyhledávání neboť počáteční uzel se shoduje s uzlem cílovým, je tedy prohledávání ukončeno. Nerovná-li se hodnota počátečního uzlu hodnotě nula můžeme dále pokračovat ve vyhledávání. Dokud hodnota počátečního uzlu je větší než hodnota cílového uzlu, tedy hodnotě nula, odebereme metodou odeber prvky ze seznamu OPEN a počáteční uzel přidáme do seznamu CLOSED. Vytvoříme 8 prvků seznamu, do nichž přiřadíme hodnoty sousedů počátečního uzlu, neboli expandujeme počáteční uzel. Všechny expandované prvky vložíme do seznamu OPEN. Ze všech expandovaných uzlů hledáme ten uzel, který nabývá minimální hodnoty. Jestliže tato minimální hodnota je menší než hodnota počátečního uzlu, zapíšeme souřadnice bodu s minimální hodnotou do pole se souřadnicemi a minimální hodnotu přiřadíme do počátečního uzlu. Dále pokračujeme další expanzí a dalším vyhledáváním minima atd. Jestliže však hodnota počátečního uzlu je menší než hodnota v proměnné min, vyskytl se nepříjemný moment a to uvíznutí v lokálním minimu. Uvíznutí v lokálním minimu znamená, že hodnoty všech sousedů počátečního uzlu mají větší hodnotu než uzel počáteční. Vyskytl se tedy moment, kdy není možné přejít na uzel s hodnotou menší než je hodnota počátečního uzlu, v cestě tedy nelze výše uvedeným způsobem pokračovat. Program skončí běhovou chybou neboť dojde k vyčerpání kapacity pole kam zapisujeme souřadnice, protože dochází k neustálému přeskakování z jednoho bodu na druhý a program se zacyklý. Nastane-li výše zmíněná situace, zvýšíme hodnotu aktuálního uzlu a to provádíme tak dlouho, dokud nedojde k objetí překážky u níž se lokální minimum vyskytlo. Tento jev způsobí zápis nepotřebných souřadnic do pole se souřadnicemi cesty. Řešením je použití metody VyhladCestu, která bude popsána níže. Celý algoritmus hledání cesty končí nalezením hodnoty cílového uzlu, tedy hodnoty nula. 4.3.3 Metoda VyhladCestu Jak už bylo dříve zmíněno metoda VyhladCestu řeší nepříjemné ukládání souřadnic, které nepotřebujeme k vyhledání cesty a zacyklovává tak cestu v okolí lokálního minima. V těle metody je vytvořeno nové pole, kam již nejsou ukládány souřadnice v oblasti zacyklení, ale pouze body na cestě, kterými je nutno projet. Parametrem metody je předáno pole souřadnic a mapa. Do nového pole jsou z parametrem předaného pole zkopírovány počáteční souřadnice. Poté se postupně prochází parametrem předané pole, jsou čteny souřadnice x a y a testuje se pomocí metody TestujPrekazku, zda-li mezi právě přečtenými souřadnicemi a počátečními souřadnici se nenachází překážka. Nachází-li se mezi testovanými body překážka, zapíší se souřadnice bodu do nového pole. Vyhledávání pokračuje stejným způsobem dále, ale už pouze od posledního bodu zapsaného do nového pole. Takto pokračujeme dokud neprojdeme celé pole. Na konci jsou v novém

Vlastní řešení 35 poli zapsány pouze záchytné body, kterým má robot projet místo souřadnic celé cesty. Metoda VyhladCestu používá také metody VykresliCestu a TestujPrekazku. static void VyhladCestu(int[] souradnice, int[][] mapa) { int[] SourCesty = new int[700]; int x = souradnice[1]; int y = souradnice[2]; int j=1; SourCesty[j] = x;j++; SourCesty[j] = y;j++; for (int i = 3; souradnice[i]!= 0; i = i + 2) { if (TestujPrekazku(mapa, x, y, souradnice[i], souradnice[i + 1])) { SourCesty[j] = souradnice[i - 2]; SourCesty[j + 1] = souradnice[i - 1]; j = j + 2; x = souradnice[i - 2]; y = souradnice[i - 1]; for (int p=1;p<=100;p++){ for (int q=1;q<=70;q++){ if (mapa[p][q]==0){ SourCesty[j]=p;j++;SourCesty[j]=q;j++; VykresliCestu(mapa,SourCesty); JedCestu(SourCesty,270); 4.3.4 Metoda VykresliCestu Postupně prochází pole se souřadnicemi cesty a vypisuje body do mapy. static void VykresliCestu(int [][] mapa,int []souradnice){ int i=1; int x=souradnice[i];i++; int y=souradnice[i];i++;; while (x!=0 && y!=0){ mapa[x][y]=55555; x=souradnice[i];i++;

Vlastní řešení 36 y=souradnice[i];i++; 4.4 Aplikace algoritmu pro jednotku NXT Navržený algoritmus hledání cesty bylo nutné aplikovat na sestaveného robota, tak, aby plnil úlohu na hrací ploše. S využitím programovacího jazyku LeJOS jsem naprogramoval metody VypocitejVzdalenost, UjedVzdalenost, Vypocitej- Uhel, ZmenUhel a JedCestu. Tyto metody zabezpečují přesun robota z počátečního do cílového bodu. Při programování výše uvedených metod bylo často využíváno matematických znalostí s oboru analytické geometrie, neboť mapa představuje rovinu, kde každý bod je dán souřadnicemi x a y. V metodách jsou využívány vzorce pro výpočet proměnných z této předmětné oblasti. 4.4.1 Metoda VypocitejVzdalenost Vstupními parametry metody jsou souřadnice dvou bodů. Podle vzorce z analytické geometrie pro výpočet vzdálenosti dvou bodů v rovině metoda vrátí vzdálenost mezi těmito body. static long VypocitejVzdalenost(int x1,int y1, int x2, int y2){ long vzdalenost; int rozdil1; int rozdil2; if (x1>x2){ rozdil1=x1-x2; rozdil2=y1-y2; else{ rozdil1=x2-x1; rozdil2=y2-y1; vzdálenost= (int) Math.round(Math.sqrt((rozdil1*rozdil1)+ (rozdil2*rozdil2))); return(vzdalenost); 4.4.2 Metoda UjedVzdalenost Metoda UjedVzdalenost zajistí popojetí robota o vzdálenost předanou v parametru metody. Vzdálenost je však zadána v měřítku mapy, je proto nutné vzdálenost upravit tak, aby odpovídala skutečným rozměrům na hrací ploše. Úkolem třídy TachoPilot je posun robota o zadanou vzdálenost. Parametry třídy

Vlastní řešení 37 TachoPilot jsou průměr kol, vzdálenost mezi středy kol a motory vykonávající pohyb. static void UjedVzdalenost(long vzdal){ vzdal=vzdal*30; TachoPilot tacho = new TachoPilot (33,160,Motor.A,Motor.C); tacho.travel(vzdal); 4.4.3 Metoda VypocitejUhel Metoda vypočítá absolutní úhel vzhledem k počátku souřadnic z předaných parametrů. Cílový bod se nachází vzhledem k počátečnímu bodu v jednom ze čtyř kvadrantů. Jelikož cíl může ležet ve kterémkoli kvadrantu, úhly musí být vypočítány pro všechny možnosti. Velikost úhlu je počítána podle Pythagorovi věty v pravoúhlém trojúhelníku. Jelikož jde o pravoúhlý trojúhelník a dva vrcholy jsou předány parametry, třetí vrchol lze automaticky dopočítat. Známe-li velikost přepony a odvěsen lze snadno vypočítat goniometrickými funkcemi úhly v trojúhelníku. 4.4.4 Metoda ZmenUhel Parametry jsou metodě předány aktuální úhel natočení robota, souřadnice počátečního a cílového bodu. Metodou VypocitejUhel vypočítá úhel natočení vzhledem k počátku, od kterého následně odečte aktuální úhel natočení a získá relativní úhel. Aby docházelo vždy k otáčení o co nejmenší úhel, je testováno zda-li úhel o který se má robot natočit není větší než 180. Je-li podmínka splněna relativní úhel se přepočítá tak, aby se robot otáčel v záporném směru o menší úhel. Třída Tachopilot zajistí pootočení robota o požadovaný úhel. Metoda vrací hodnotu aktuálního úhlu natočení. static long ZmenUhel(long uhel, int x1, int y1, int x2, int y2){ long u=vypocitejuhel(x1,y1,x2,y2); long relativuhel=u-uhel; TachoPilot tacho = new TachoPilot (33,160,Motor.A,Motor.C); if (Math.abs(relativUhel)>180){ if (relativuhel<0){ relativuhel=relativuhel+360; else{ relativuhel=relativuhel-360;

Vlastní řešení 38 tacho.rotate((float)relativuhel); return(u); 4.4.5 Metoda JedCestu Zajistí průjezd celé trasy od počátečního až k cílovému bodu. Postupně jsou čteny souřadnice z pole vyhlazené cesty a volány metody změny úhlu natočení robota a ujetí vzdálenosti. Na začátku je nastaven úhel natočení robota ve startovní pozici. static void JedCestu(int [] souradnice,int startuhel){ //aktualni uhel natoceni long uhel=startuhel; int i=1; int a,b; long ujetavzdalenost; int x=souradnice[i];i++; int y=souradnice[i]; for (i=3;souradnice[i]!=0;i=i+2){ a=souradnice[i]; b=souradnice[i+1]; uhel=zmensmer(uhel,x,y,a,b); ujetavzdalenost = VypocitejVzdalenost (x,y,a,b); UjedVzdalenost(ujetaVzdalenost); x=a; y=b;

Diskuse 39 5 Diskuse Hned v úvodu praktické části práce se vyskytl problém v podobě instalace vývojového softwaru, jehož instalace nebyla tak snadná jak jsem očekával. Využil jsem proto odborných rad pana Kolomazníka, který mi poskytl návod jak při instalaci postupovat. Po pár nezdařených pokusech se mi nakonec podařilo software úspěšně nainstalovat. Při vývoji konstrukce robota bylo testováno mnoho verzí. První verzí byl podvozek se čtyřmi koly. Ten byl, ale hned po otestování jednoduchého programu zavrhnut kvůli smykování a třepání se robota při otáčení, navíc díky smyku otáčení ztrácelo přesnost. Druhou verzí podvozku byly dvě poháněná přední kola s jedním otočným zadním kolem. Tento podvozek byl však znatelně nestabilní s nevydržel by vetší zátěž robota. Třetím a zároveň i posledním konceptem podvozku byl podvozek s pásy. Vykazoval ze všech konceptů největší pevnost, což bylo pro cíl zásadní i když přesnost otáčení také nebyla úplně přesná. I přes četné změny v konstrukcích robota a mnoha verzích, jimiž prošel bylo nakonec dosáhnuto uspokojující konstrukce. Na vývoji konstrukce robota se podílel celý vývojový tým pro soutěž Eurobot 2010. Chování robota nebylo vždy takové jaké jsem očekával. Největší problémy způsobovala nepřesnost otáčení, kdy se robot neotočil o požadovaný úhel. Tudíž došlo buď k přetáčení nebo podtáčení. Tento problém by snadno vyřešilo použití kompasu při navigaci. Ten jsem však nemohl použít z důvodů rušení, které způsobovala železná konstrukce učebny. Následným pokusem o zpřesnění otáčení bylo použití gyroskopu, u něhož se však taky vyskytl problém a to díky mírnému třepání se robota za jízdy a rozlaďování úhlu gyroskopu. Výsledným řešením a jako jediným řešení se ukázalo zpevnění konstrukce, hlavně podvozku robota tak, abych odchylky při otáčení minimalizoval.

Závěr 40 6 Závěr Dospěl jsem k názoru, že stavebnice lego Mindstorms není příliš vhodná pro sestavování robota pro soutěže jako je Eurobot. Stavebnice totiž není dostatečně robustní a často dochází k uvolňování spojů mezi součástkami a tím následné vzniklé nepřesnosti v ovládání. Ať už je to vybočování z přímého směru nebo výše zmíněnými nepřesnostmi při otáčení. Chyba se přitom při zvyšující se rychlostí motorů akumuluje a dochází k nepřesnostem ještě větším. Pro výukové účely je naopak stavebnice vhodná svojí jednoduchostí a nemožnostem vzniku rozsáhlých škod. Všem programátorům a konstruktérům pracujícím se stavebnicí lego Mindstorms bych doporučil dbát na sestavení pevné konstrukce podvozku robota. Jelikož je stavebnice vyrobena z plastu, dochází k netěsnostem mezi spoji a tím ke ztrátě přesnosti robotem vykonávaných činností. K nepřesnému chování robota dochází i při vysokém těžišti a špatně zvolené konstrukci robota. Inteligentní NXT kostku je vhodné umístit na dostupné místo, které nebude bránit ve výhledu na LCD displej, či manipulaci s ovládacími tlačítky. Kostka musí být i snadno vyjímatelná, vzhledem k nutnosti nabíjení baterií, nebo připojení USB kabelu. Jako vylepšení úlohy do budoucna bych doporučil použití ať už kompasu, který jsem s výše uvedených důvodů nemohl použít, nebo gyroskopu. Použitím těchto komponent odpadnou problémy s nepřesnostmi v jízdě a otáčení, jelikož robot si bude neustále kontrolovat úhel natočení. Vybočí-li robot ze směru dojde k automatickému vyrovnání na požadovaný směr. Vhodné je i postavení podvozku robota z kovových částí, které nejsou součástí stavebnice lego Mindstorms. Myslím, že i přesto, že pro mě byla stavebnice a způsob programování novinkou, výsledný model robota a jeho vlastnosti nebyly špatné, což dokazuje i umístění na devátém místě na soutěži Eurobot 2010.

Literatura 41 7 Literatura Algoritmy.net [online]. 2008 [cit. 2010-11-20]. Prohledávání do šířky. Dostupné z WWW: <www.algoritmy.net>. BRACKEEN, D.; BARKER, B.; VALHESUWÉ, LAURENCE. Vývoj her v jazyku Java. Přeložil: Voráček Karel, Praha: Grada Publishing, a. s., 2004. 712 s. ISBN 80-247-0874-4. Eduxe [online]. 2009 [cit. 2010-12-30]. LEGO mindstorms education. Dostupné z WWW: <http://www.eduxe.cz/legomenu/nxt_menu.htm>. Eurobot [online]. 2009 [cit. 2010-10-12]. Dostupné z WWW:<http://www.eurobot.cz/eurobot2010.php>. HORÁK, A., Prohledávání stavového prostoru [PDF dokument]. Brno: Masarykova univerzita, 2006 [cit. 2010-11-20]. Dostupné z WWW: <http://nlp.fi.muni.cz/uui/uui03.pdf>. MAŘÍK, V.; ŠTĚPÁNKOVÁ, O; LAŽANSKÝ, J., a kolektiv. Umělá inteligence 1. Praha: Academia, 1993. 264 s. ISBN 80-200-0496-3. MIKULECKÝ, P; PONCE, D. Základy umělé inteligence. Studijní text na KAI FŘIT VŠP Hradec Králové, 1996. 16 s. NOVÁK, P. Mobilní roboty: pohony, senzory, řízení. 1. vyd. Praha: BEN - technická literatura, 2005. 243 s. ISBN 80-7300-141-1. NXJ technology [online]. 1997 [cit. 2010-11-20]. LEJOS Java for Lego Mindstorms. Dostupné z WWW: <http://lejos.sourceforge.net/nxj.php>. PAVLIŠ, M. Algoritmy pro hledání cesty. Brno, 2007. 57 s. Bakalářská práce. Vysoké učení technické v Brně. PĚCHOUČEK, M. Neinformované metody prohledávání stavového prostoru. [PDF dokument]. 15.2.2007 [cit. 12.10.2010]. Dostupný z: <http://labe.felk.cvut.cz/~tkrajnik/kui2/data/k333/1.pdf>. Prohledávání stavového prostoru. In Wikipedia: the free encyclopedia [online]. St. Petersburg (Florida): Wikipedia Foundation, 16.8.2007, last modified on 12.9.2010 [cit. 2010-11-24]. Dostupné z WWW: <http://cs.wikipedia.org/wiki/prohledávání_stavového_prostoru>. Purkynka.tk [online]. 2006 [cit. 2010-11-20]. Fronta, zásobník. Dostupné z WWW: < http://iss.unas.cz/prg/prg11.pdf>. RYJÁČEK, Z. Orientované grafy [PDF dokument]. Plzeň: Západočeská univerzita v Plzni, [cit.2010-11-20]. Dostupné z WWW: <http://www.cam.zcu.cz/~ryjacek/students/dma/skripta/8.pdf> Studentský informační server [online]. 2000 [cit. 2010-10-13]. Dostupné z WWW: <http://v1.dione.zcu.cz/java/>. WINKLER, Z.; DLOUHÝ, M. Robotika.cz. [online]. 2008. Dostupné z WWW: <http://robotika.cz/>.

Přílohy 42 Přílohy

Konstrukce robota 43 A Konstrukce robota Obr. 18 Konstrukce robota a herní prvky Obr. 19 Konstrukce robota a herní prvky