Mendelova univerzita v Brně Provozně ekonomická fakulta
Navigace robota v bludišti Bakalářská práce
Vedoucí práce: Ing. Jana Weinlichová
Ladislav Malár
Brno, 2010
Je mou milou povinností zde poděkovat zejména vedení firmy Lego za jejich snahu a kreativitu při vytváření stavebnice Lego Mindstorm. Dále pak bych chtěl velice poděkovat svému vedoucímu práce, kterou byla paní Ing. Jana Weinlichová za odborné vedení, poskytování rad a pomoci po celou dobu tvorby této bakalářské práce. V neposlední řadě bych chtěl zejména poděkovat všem se kterými jsem se během psaní závěrečné práce setkal, a kteří mi velice pomohli vždy, když jsem potřeboval poradit.
Prohlašuji, že jsem na bakalářské práci pracoval samostatně a použitou literaturu jsem citoval. V případě publikace výsledků, je-li to uvolněno na základě licenční smlouvy, budu uveden jako spoluautor.
V Brně 25. května 2010
....................................................
4
Abstract Thesis deals with designing of algorithm that enables robot Lego Minstorm to find optimal way in the maze. In theoretical part readers get closely familiarized with history of products manufactured by Lego company. Then follows the detail information of programming language Java, in which complete algorithm shall be implemented. Theoretical part also deals with robot design possibilities, individual properties of sensors that are at robot’s disposal and provides optimal proposal of overall design of the maze. Practical part is divided into two chapters. The first chapter shows the maze proposal, in which the robot shall move and with the robot overall design. The second chapter of thesis practical part describes algorithm solution controlling robot movement. Keywords: NXT, RCX, Lego Mindstorms, Java, robot, maze, Eclipse, leJOS, navigation
Abstrakt Práce se zaobírá tvorbu algoritmu, pomocí kterého bude robot Lego Mindstorm schopen nalézt cestu bludištěm. Teoretická část je zaměřena na seznámení s historií výrobků firmy Lego. Dále následují podrobnější informace o programovacím jazyku Java, ve kterém bude celý algoritmus vypracován. Jsou zde také řešeny konstrukční možnosti robota, jednotlivé vlastnosti senzorů, které má k dispozici a optimální návrh celkové konstrukce bludiště. Praktická část je rozdělena na dvě kapitoly. První řeší návrh bludiště, ve kterém se bude robot pohybovat a celkovou konstrukci robota. V druhé kapitole praktické části je popsáno řešení algoritmu, ovládajícího pohyb robota. Klíčová slova: NXT, RCX, Lego Mindstorms, Java, robot, bludiště, Eclipse, leJOS, navigace
5
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 7 8
2 Firma Lego a Lego Mindstorms 9 2.1 Inteligentní cihla RCX . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 Inteligentní cihla NXT . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Prostředky použité pro tvorbu algoritmu 3.1 Programovací jazyk Java . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 leJOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 12 13 14
4 Senzory 4.1 Optický senzor (Light sensor) . 4.2 Dotykový senzor (Touch sensor) 4.3 Ultrazvukový senzor (Ultrasonic 4.4 Zvukový senzor (Sound sensor) 4.5 Barevný senzor (Color sensor) .
15 15 16 17 17 18
. . . . . . . . . sensor) . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 Stanovení požadavků 19 5.1 Požadavky na konstrukci robota . . . . . . . . . . . . . . . . . . . . . 19 5.2 Požadavky na konstrukci bludiště . . . . . . . . . . . . . . . . . . . . 20 5.3 Požadavky na řídící algoritmus . . . . . . . . . . . . . . . . . . . . . 20 6 Konstrukční část 6.1 Výběr senzorů . . . . . . . . . . . . . . . 6.2 Konstrukce robota Lego Mindstorms . . 6.2.1 Sestavení podvozku robota . . . . 6.2.2 Uchycení Lego NXT cihly . . . . 6.2.3 Uchycení ultrazvukového senzoru 6.2.4 Uchycení optického senzoru . . . 6.3 Konstrukce bludiště . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
21 21 22 22 23 24 24 25
7 Tvorba a implementace algoritmu 27 7.1 Implementační třída Zasobnik.nxj . . . . . . . . . . . . . . . . . . . . 27 7.2 Implementační třída Run.nxj . . . . . . . . . . . . . . . . . . . . . . . 28 7.3 Implementační třída Labyrint.nxj . . . . . . . . . . . . . . . . . . . . 33 8 Možné rozšíření a možnosti využití
35
9 Závěr
36
OBSAH
6
10 Použité zdroje a literatura
37
Přílohy
39
A Přiložené CD
40
1
ÚVOD A CÍL PRÁCE
1 1.1
7
Úvod a cíl práce Úvod
Již dlouhý čas se zajímám o informace vztahující se k problematice robotiky, která je v dnešní době velice žádaným vědním oborem. Robotika jako věda se zaměřuje na tvorbu zařízení, které mají za úkol vykonávat předem stanoveným způsobem činnosti, na jejichž provedení by sám člověk nestačil.[14] Právě touha rozšířit si své dosavadní vědomosti a seznámit se tak blíže s touto problematikou mne vedla k vypracování této bakalářské práce. Práce je zaměřena na menší seznámení s historií firmy Lego a jejího projektu s názvem „Lego Mindstormsÿ, jenž se zasloužil o vytvoření technologie multifunkčních cihel RCX a NXT. Tyto přístroje se staly po svém uvedení na trh revolučním zařízením v oblasti robotiky a manipulačních systémů a umožňují uživateli využít poměrně mnoho funkcí spojených s řízením robotů. Hlavním úkolem řešeným v této práci je vhodné navržení řídícího algoritmu, pomocí něhož nalezne robot cestu k cílovému bodu v prostoru bludiště. Samotný algoritmus bude tvořen v programovacím jazyku Java, jenž je jedním z nejvyužívanějších jazyků v oblasti řízení robotů. Proto je nutné se blíže seznámit s jeho vývojem a se všemi nástroji, které budou použity při vytváření. Celá práce je zozdělena do několika kapitol. V těchto kapitolách jsou řešeny jednotlivé postupu vedoucí kpožadovanému výsledku. Nicméně před přistoupením k samotnému řešení jednotlivých oblastí je potřeba stanovit si požadavky, kterých je nutné docílit nebo se jim alespoň co nejvíce přiblížit. K vyhledávání nejvhodnější cesty bludištěm budou využity dostupné senzory, které jsou dodávány společně s lego stavebnicí na výrobu robota. Důležitým úsekem této kapitoly je bližší seznámení s funkcemi jednotlivých čidel, pro usnadnění rozhodnutí jaký ze senzorů bude nejlepší požít při řešení problému s vyhledáváním. Následujícím okruhem, na který je tato závěrečná práce zaměřena je oblast řešení výběru senzoru jenž bude použit. Také se zde blíže zaměříme na samotnou strukturu celkové podoby robota s náhledem na konstrukční postupy, jenž jsem použil při jeho stavbě a dále pak vhodné připevnění využívaných senzorů. Jako posledním bodem týkající se této oblasti je seznámení se s návrhem konstrukčního provedení bludiště, ve kterém se lego robot bude pohybovat. Jak již bylo dříve řečeno práce je zaměřena na tvorbu vhodného algoritmu pro vyhledávání cesty v bludišti. Za tímto účelem je nutné seznámit se blíže s jednotlivými metodami, které mi pomohou dovést celý program ke zdárnému konci a splnění tak stanovených podmínek, jenž byly na algoritmus kladeny. V poslední kapitola této práce je věnována stanovení možností případného rozšíření robota a s velkou škálou jeho možností využití v praxi.
1.2
1.2
Cíl práce
8
Cíl práce
Cílem této bakalářské práce je navržení a implementace řídícího algoritmu pro průchod robota bludištěm za použití senzoru, v programovacím jazyce Java. Pro ověření správného chodu algoritmu bude využit robot od firmy Lego, jenž se bude pohybovat v předem sestaveném bludišti.
2
FIRMA LEGO A LEGO MINDSTORMS
2
9
Firma Lego a Lego Mindstorms
V roce 1932 Ole Kirk Christiansen, mistr tesař a truhlář, založil truhlářskou firmu v obci Billund v Dánsku, na výrobu štaflí, žehlicích prken a dřevěných hraček. Dřevěné hračky se staly Olekovým nejúspěšnějším produktem. Roku 1934 byla firma pojmenována názvem LEGO, složené ze dvou slov LEg a GOdt (dobře si hrát). V roce 1960 se po požáru firemního skladiště na dřevěné hračky se firma definitivně vydává pouze jedním směrem a to výrobou hraček plastových.[10] Postupem času jak se firma vyvíjela, přišli s návrhem programovatelných robotických stavebnic třídy Lego Mindstorms. Lego Mindstorms pochází z programovatelných senzorových bloků používaných v řadě výukových pomůcek. Stavebnice Lego Mindstorms má své prapočátky u první programovatelné cihly vytvořené v laboratoři MIT. Tato cihlička byla programována v jazyku Brick Logo a první vizuální programovací prostředí pro ni vytvořila University of Colorado v roce 1994. Tato cihlička muže být naprogramována i jiným softwarem či programovacím jazykem.[18] V současné době jsou tyto stavebnice velice užívanou pomůckou v řadě vzdělávacích institucí.
2.1
Inteligentní cihla RCX
V počátku generace Lego Minstroms bylo vytvořeno multifunkční zařízení, které neslo jméno „RCXÿ. Toto zařízení bylo implementováno v podobě tzv. cihly. Srdcem této cihličky je osmibytový mikropočítač Hitachi H8/3292. Má 16 KB paměti ROM a 32 KB paměti RAM (firmware a programy).[4] RCX se stala ihned po svém uvedení na trh revolučním zařízením v oblasti robotiky. Cihla je programována tím, že si stáhne program (psaný v jednom z několika dostupných programovacích jazyků) z Windows nebo macintoshového počítače do své RAM paměti přes lego infračervené (IR) rozhraní. Po stažení programu dochází k jeho automatickému spuštění a uživateli je tak umožněn vizuální pohled na správnost napsaného programu. V případě nalezení nesprávného naprogramování lze tento program případně modifikovat.[18] V případě IR se nejedná o klasické IrDA, ale o IR speciálně vytvořené firmou lego využívající jíného protokolu než u klasického IrDA. Dvě nebo několik RCX cihel mohou komunikovat navzájem přes IR rozhraní a provádět tak operace, na které jedna cihla nestačí a potřebuje k jejich zvládnutí propojení s cihlou jinou. Kromě infračerveného portu, můžeme na konstrukci cihly najít tři vstupní porty pro připojení senzorů a dále pak výstupní porty pro motory. Na přední straně cihly se nachází LCD displej, který umožňuje zobrazovat bateriovou úroveň dále pak stavy vstupně-výstupních portů, pro daný vybraný nebo běžící program, a jiné potřebné informace jako je například výpis hodnot získaných z daného senzoru.
2.2
10
Inteligentní cihla NXT
Obr. 1: Lego RCX cihla
2.2
Inteligentní cihla NXT
Postupem času přišla firma Lego s návrhem modifikace cihly RCX. Touto modifikací se stala inteligentní cihla, doplněna o několik prvků, které RCX postrádala. Tato výsledná modifikace dostala název „NXTÿ. Cihla umožňuje zpracovávat vstupy až ze čtyř senzorů a řízení až tří motorů, přes RJ12 kabely. Tato cihla má monochromatický LCD displej s rozlišením 100x64 pixelů a čtyři tlačítka, které lze použít k navigaci uživatelského rozhraní pomocí hierarchického menu. Obsahuje také reproduktor, který je schopen přehrát zvukové soubory se vzorkováním až 8 kHz. Celá cihla má dvě možnosti napájení a to buď pomocí šesti AA baterií nebo pomocí dobíjecí 1500mAh baterie Li-Ion. Komunikace s osobním počítačem je pak zajišťována pomocí zařízení Bluetooth popřípadě pomocí USB kabelu.[18]
2.2
11
Inteligentní cihla NXT
Technické specifikace • • • • • • • • • • •
32-bitová ARM7 mikro řídící jednotka 256 Kbytes FLASH, 64 Kbytes RAM 8-bitová AVR mikro řídící jednotka 4 Kbytes FLASH, 512 Byte RAM Bluetooth bezdrátová komunikace (Bluetooth třída II kompatibilní V2.0) USB plně rychlostní port (12 Mbitů/s) 4 vstupní porty, 6sti drátová kabelová digitální platforma (jeden port obsahuje IEC 61158 typ 4/EN 50 170 kompatibilní rozšířený port pro budoucí použití) 3 výstupní porty, 6sti drátová kabelová digitální platforma LCD grafický displej 100 x 64 pixelů Reproduktor se zvukovou kvalitou 8 kHz. Zvukový kanál s 8-bitovým rozlišením a 2-16 KHz ukázková frekvence. Napájení: 6 AA baterií
Obr. 2: Lego NXT cihla
3
PROSTŘEDKY POUŽITÉ PRO TVORBU ALGORITMU
3 3.1
12
Prostředky použité pro tvorbu algoritmu Programovací jazyk Java
Jedná se o programovací jazyk původně vyvinutý Jamesem Goslingem ve společnosti Sun Microsystems (který je nyní dceřinou společností Oracle Corporation), který byl spuštěn v roce 1995 jako základní součást Sun Microsystems. Java jako jazyk je odvozen z velké části ze syntaxe jazyka C a C++, ale má jednodušší objektový model a méně nízko-úrovňových zařízení.[17] Java aplikace jsou obvykle sestaveny do souborů tříd, které mohou běžet na jakémkoliv virtuálním zařízení (JVM) bez ohledu na druh počítačové architektury. Jedná se o velice jednoduchý jazyk, jehož základní syntaxe je člověk, který do určité míry umí programovat, zvládnout během několika hodin. Pak už se může soustředit na poznání a pochopení funkce klíčových knihoven a na jejich co nejefektivnější využití.[13] Prostřednictvím tohoto programovacího jazyka je schopnost naprogramování aplikací různých rozměrů od aplikací pro obrovské projekty rozprostřené do řady vzájemně komunikujících počítačů až po drobné programy, které jsou nahrávány na čipové karty, mobilní telefony a v neposlední řadě pro desktopové aplikace. Jedním z klíčových záměrů autorů Javy bylo vytvořit nejenom programovací jazyk, ale rovnou celou platformu (= prostředí, ve kterém běží programy). Tuto platformu realizuje virtuální stroj spolu se základní knihovnou nejpoužívanějších funkcí.[13] Firma Sun Microsystems nabízí dvě různé verze platformy jazyku Java. Jednodušší z nich je platforma s názvem „JREÿ (Java Runtime Environment = běhové prostředí Javy), která poskytuje vše potřebné pro správný běh programů. Druhou z nabízených platforem je „SDKÿ (Software Development Kit = sada nástrojů pro vývoj softwaru), označovaná někdy také jako „JDKÿ (Java Development Kit). Jedná se ve své podstatě o JRE jenž je doplněné o základní vývojové nástroje jako je překladač, generátor dokumentace, ladící program a další. Díky těmto nástrojům poskytuje platforma vše co je potřebné pro vývoj požadovaných programů.
3.2
3.2
Eclipse
13
Eclipse
Eclipse je komunita, jež byla založena v roce 2001 firmou IBM a jejichž projekty jsou zaměřeny na budování otevřené vývojové platformy tvořící rozšiřitelné rámce, nástroje a runtime pro vytváření, implementaci a správu software v rámci životního cyklu. Eclipse Foundation je nezisková organizace, která je správcem komunity Eclipse a pomáhá vytvářet jak komunity, tak i ekosystém doplňkových produktů a služeb.[2] Celá platforma je tvořena sadou mnoha různých frameworků, naprogramovaných v jazyce JAVA, které společně tvoří špičkové a technologicky velice vyspělé zázemí, potřebné pro vyvíjení softwarových projektů.[5] V současné době jde o nepopulárnější integrované vývojové prostředí v rámci Java projektů. Je využíváno ve všech oblastech, ve kterých je nutné užít programovacího jazyka. Platforma Eclipse je sama o sobě jakousi univerzální nástrojovou platformou jedná se o IDE (integrované vývojové prostředí) pro cokoli a přitom pro nic konkrétního. Díky tomu může řešit problematiku jakéhokoli zdrojového typu (Java soubory, C soubory, Word soubory, HTML soubory, JSP soubory, atd.), obecným způsobem, ale neví, jak udělat vše, co je specifické pro konkrétní typ souboru. [3] Z toho důvodu je nutné využívat tzv. pluginy, jenž jsou schopny tuto platformu naučit jak má různé zdrojové soubory analyzovat a zcela tak využít jejich možnosti zpracování. V základní verzi obsahuje Eclipse pouze integrované prostředky pro vývoj standardní Javy, ale neobsahuje nástroj pro vizuální návrh grafických uživatelských rozhraní desktopových aplikací nebo aplikační server všechna taková rozšíření je potřeba dodat formou již zmíněných pluginů. Tyto pluginy také umožňují vývojové prostředí rozšířit například o návrh UML, či zápis HTML nebo XML.[16] Díky zmíněným pluginům je možné nejen vytvářet programy v jazyce Java, ale také i v C/C++, XML, HTML, PHP, vytvářet vlastní UML. Tyto pluginy jsou neustále vyvíjeny a zahrnují stále více možností využití.
3.3
3.3
leJOS
14
leJOS
Jedná se o náhradní firmware pro programovatelné cihly společnosti Lego Mindstorms. V současné době podporuje lego RCX cihly a leJOS NXJ podporuje cihly NXT. LeJOS také poskytuje rozsáhlé knihovny tříd, které podporují různé zajímavé funkce, jako je například navigace a chování robota.[12] Podobně jako je tomu u platformy Java i leJOS NXJ je jen softwarová platforma, jenž běží na nad ostatními na hardwaru založenými platformy, ale především nad cihlou Lego NXT. Platforma leJOS má dvě složky: • LeJOS JVM • NXJ Application Programming Interface (API) LeJOS JVM je malý Java Virtual Machine (virtuální stroj) napsaný pro cihly NXT v roce 2006. Je napsán v kódu C, jenž je na platformě nezávislý styl. Tato nezávislost umožňuje jej snadno portovat i na další zařízení. Je využívají jej cihly Lego RCX, Nintendo Game Boy Advance a nyní cihla Lego NXT. NXJ API je malá kolekce tříd (365), které poskytují mnoho užitečných funkcí jako jsou vstupní / výstupní podpory, základní třídy Java, navigace, přístup k senzorům NXT atd. Třídy, které spolu souvisí tvoří knihovny jenž nazýváme balíčky.[1] LeJOS umožňuje jak Bluetooth bezdrátovou komunikaci přes sériový port protokolu, stejně jako komunikace přes USB připojení. Dále představuje podporu pro vytváření pole, rekurze, synchronizace, výjimek, dynamických datových struktur a standardních datových typů. [15] Pro programování NXT cihly v jazyce Java je tento firmware velice výhodným řešením v rámci programování v jiném softwaru než je firmou dodávána.
4
15
SENZORY
4
Senzory
Součástí stavebnice, kterou firma Lego dodává spolu se součástmi na výrobu robota je také základní sada elektronických senzorů, které umožňují robotu orientaci v prostoru. Nalezneme zde dva dotykové senzory, senzor optický, barevný a jako posledním senzorem je senzor ultrazvukový. Každý ze senzorů má své specifické vlastnosti a princip, na kterém pracují. Při řešení průchodu robota bludištěm bylo nutné rozmyslet si jaký senzor použít, aby bylo dosaženo přesné orientace v bludišti. K této sadě je s výhodou možné dokoupit několik doplňujících senzorů pro vylepšení orientace. Při návrhu konstrukce robota jsem řešil vhodné vybrání senzoru pro průchod celým bludištěm. Pro výběr samotného senzoru bylo nejdříve nutné zjistit jednotlivé způsoby snímání informaci každého ze senzorů.
4.1
Optický senzor (Light sensor)
Obr. 3: Optický senzor
Hlavní funkcí tohoto senzoru je zprostředkovat robotu schopnost vidění. Senzor barev je schopen provést tři různé funkce v jedné. Senzor barev umožní robotu rozlišovat světlé a tmavé barvy. Dokáže rozpoznat 6 různých barev, rozlišit intenzitu světla v místnosti a změřit intenzitu světla barevných povrchů. Senzor barev lze také využít jako barevnou lampu.[8] Je velmi přesný a citlivý. Čte intenzitu světla z okolního prostředí, stejně jako odraz od infračerveného vysílače. Zdrojem světla je LED, kterou lze popřípadě vypnout pro přesné čtení okolního světla.[11]
4.2
4.2
Dotykový senzor (Touch sensor)
16
Dotykový senzor (Touch sensor)
Obr. 4: Dotykový senzor
Jedná se o jednou z nejrozšířenějších skupin snímačů. Charakteristickým znakem těchto snímačů je to, že mohou být v pracovním procesu zatíženy dynamicky nebo staticky. Dotykové snímače pracují na základě měření sil, přičemž změna velikosti síly je indukována prostřednictvím deformace citlivého prvku nebo pohybem citlivé části prvku. Nejjednoduššími dotykovými snímači jsou kontaktní spínače, které mají dvě pracovní polohy: zapnuto nebo vypnuto. Dotykové snímače je možno využít i k plnění mnohem složitějších úkolů, jako je například rozpoznávání trojrozměrných objektů.[6] Jinak řečeno dotykový senzor poskytuje robotovi schopnost hmatu a také zaznamená stisknutí a následné uvolnění spínače.[9]
Obr. 5: Vlastnosti dotykového senzoru
4.3
4.3
Ultrazvukový senzor (Ultrasonic sensor)
17
Ultrazvukový senzor (Ultrasonic sensor)
Obr. 6: Ultrazvukový senzor
Pomocí ultrazvukového senzoru dostává lego robot schopnost vidět. Umožňuje robotům nacházet předměty, jenž se nachází v jeho okolí. Lze ho též využít k tomu, aby se robot dokázal spolehlivě vyhnout jakékoli překážce, která se nachází před senzorem. Dále pak pomocí něho lze zjistit a změřit vzdálenost překážky popřípadě zaregistrovat pohyb. Ultrazvukový senzor měří vzdálenost v centimetrech nebo palcích, jež se následně zobrazí na displeji NXT. Dokáže změřit vzdálenosti od 0 do 255 cm s přesností +/- 3 cm. Je založen na stejném vědeckém principu, jako je tomu u netopýrů. Ta spočívá v měření vzdálenosti na základě výpočtu doby, během níž dorazí k předmětu ultrazvuková vlna a vráti se zpět k čidlu (podobně jako ozvěna). Předměty vyrobené z měkkých materiálů a zaoblených tvarů (např. míče) nebo předměty, které jsou příliš tenké nebo malé, hledá senzor obtížněji.[8] Toto čidlo plní nejlépe svoji funkci při odražení ultrazvukové vlny od předmětů vyrobených z tvrdého materiálu.
4.4
Zvukový senzor (Sound sensor)
Nedílnou součástí většiny aplikací virtuální reality jsou zdroje zvuku, protože právě ty pomáhají utvořit žádoucí dojem prostorovosti celého virtuálního světa. Tento zvukový snímač reaguje na určité zvuky, které mohou vyvolat reakci robota. Robot může například na tlesknutí aktivovat a vykonat zadané úlohy například rozjet se, zastavit se. Tento snímač slouží robotu jako jeho uši, aby mu umožnil slyšet a reagovat na zvuk [7].
4.5
18
Barevný senzor (Color sensor)
Obr. 7: Zvukový senzor • umožňuje záznam akustického tlaku • zaznamenává úroveň zvuku (0-100) ve frekvenčním rozsahu slyšitelnosti lidského ucha (dBA) • zaznamenává úroveň zvuku (0-100) bez ohledu na frekvenci (dB)
4.5
Barevný senzor (Color sensor)
Dokáže rozpoznat širokou škálu více než 15 cílových barev a tak může robot NXT reagovat na každou barvu. Senzor barev umožňuje pomocí jediné bílé LED (Light Emitting Diode) osvětlení cíle, analýzu barevné složky světla odraženého od povrchu a vypočítat hodnotu odražené barvy. Hodnota barvy je vypočítana senzorem přibližně 100 krát za sekundu.[11]
Obr. 8: Barevný senzor
5
STANOVENÍ POŽADAVKŮ
5
19
Stanovení požadavků
5.1
Požadavky na konstrukci robota
S využitím velké škály možností různých druhů implementací na tvorbu robota, jsem si pro svoji práci vybral implementaci od firmy Lego s názvem „Lego Minstormsÿ. Tato firma vytvořila takový druh stavebnice, který umožňuje vytvořit téměř jakoukoli podobu robota s doplněním o senzory, které nalezneme uvnitř stavebnice v rámci základního vybavení. Stavebnice byla vybrána z toho důvodu, že je možné kombinovat jednotlivé soupravy mezi sebou, umožňuje mnoho možností tvorby konstrukce robota a je velice jednoduchá na používání. V mém případě bylo nutné navrhnout konstrukci robota tak, aby byl schopen bezproblémového pohybu v celém rozsahu bludiště. Dále pak stanovení pevného umístění mnou vybraných senzorů takovým způsobem, aby bylo možné plně využít jejich schopností. Při stanovování požadavků jsem postupoval od základních požadavků na konstrukci až po ty složitější. • Celková konstrukce robota musí být navržena takovým způsobem aby byla zajištěna stabilita a vydržela případný náraz. • Rozměry robota musí být navrženy tak aby byl umožněn robotu bezproblémový průchod celým bludištěm. • Robot se bude pohybovat na třech kolech z nichž dvě jsou standardní kola, která jsou součástí stavebnice. • Třetí kolo bude menší a umístěno v zadní části robota. Tím vznikne schopnost robota otáčet se po vlastní ose. • Vybraný senzor popřípadě senzory musí být vhodně umístěny, aby bylo možné plně využít jejich schopností. • Uchycení NXT cihličky musí být zajištěno takovým způsobem, aby byl umožněn bezproblémový přístup k jednotlivým řídícím komponentům. • Robot musí mít co nejmenší rozměry z důvodu velikosti bludiště.
5.3
5.2
Požadavky na řídící algoritmus
20
Požadavky na konstrukci bludiště
V této části práce bylo nutno specifikovat a navrhnout bludiště, ve kterém se bude robot pohybovat. Bylo nutné stanovit pevné rozměry cest v bludišti z důvodu vhodného sestavení popřípadě upravení pevné konstrukce robota. Celá tvorba návrhu bludiště byla sestavena v programu AutoCad, jenž je velice využívaným nástrojem pro tvorbu technických konstrukčních návrhů. Bylo potřebné stejně jako v případě návrhu na konstrukci robota stanovit jednotlivé požadavky, které musí bludiště splňovat. • Velikost celkové plochy bludiště musí být stanovena takovým způsobem, aby byla k dispozici pro robota dostatečná plocha na které bude schopen se bezproblémově se otočit. • Vybrání takového materiálu na konstrukci, jenž mi umožní snadné sestavení. • Výška přepážek bludiště musí být tak velká, aby bylo zvolenému senzoru umožněno plně provádět svoji funkci. • Šířka cest v bludišti závisí na celkových rozměrech robota a stanovena musí být tak, aby umožňovala robotu vhodný průchod. • Celé bludiště musí být navrženo způsobem, který umožňuje snadnou manipulaci.
5.3
Požadavky na řídící algoritmus
Základní stavebním kamenem této závěrečné práce je stanovení pravidel, na kterých bude záviset vývoj řídícího algoritmu. Tyto pravidla je nutné stanovit takovým způsobem, aby obsahovala splnění všech požadavku kladených na algoritmus. Dále je nutné zvolit si platformu, ve které bude program vypracováván. • • • •
Celý algoritmus musí být přehledný se snadnou orientací. Musí být snadno modifikovatelný pro případ případného vylepšení. Program musí být schopen umožnit robotu orientaci v okolí. Po dosažení cílového bodu musí program provést ukončení svého běhu.
6
KONSTRUKČNÍ ČÁST
6 6.1
21
Konstrukční část Výběr senzorů
Při výběru senzorů bylo nejdůležitější navržení principu, podle kterého dojde ke zjištění nejvhodnější trasy bludištěm. Základní myšlenkou bylo zvolit takový druh čidla, jenž by umožnilo robotu prozkoumat své okolí, zmezilo možnosti vzniku případného naražení robota do překážky a v neposlední řadě zastavilo postup robota při dosažení cílového bodu. Díky informacím uvedným v kapitole „Senzoryÿ o funkčních principech jednotlivých čidel byl pro řešení vyhledávání cesty v bludišti zvolen ultrazvukový senzor. Toto čidlo se díky svým funkčním možnostem při řešení snímání okolí postará o zjištění tras, kudy se má robot možnost vydat a při výskytu překážky před sebou v předem stanovené vzdálenosti postup robota zastavit, aby se předešlo nechtěnému nárazu do překážky. Bohužel toto řešení způsobí, že se robot po dosažení cílového bodu otočí a bude pokračovat ve vyhledávání celého bludiště ve zpětném směru. Kvůli tomu je nutné užít funkci jiného z nabízených senzorů. Z pohledu funkčnosti jednotlivých čidel se zdálo být nejvhodnější variantou aplikace barevného čidla. Nicméně použít tento senzor nebylo možné z důvodu jeho využití při řešení jiné práce zabývající se robotikou v rámci soutěže „Eurorobotÿ. Proto jsem se rozhodl použít optický senzor, který nám jisté míře splní požadovanou funkci. Při dosažení cílového bodu optické čidlo zjistí jinou intenzitu světla odraženou od podstavy bludiště a ukončí tak běh celého programu. Tohoto zjištění docílíme díky umístění tmavě šedého papíru do míst, kde se cílový bod nachází.
6.2
Konstrukce robota Lego Mindstorms
6.2
22
Konstrukce robota Lego Mindstorms
Výslednou konstrukci robota bylo nutné důkladně stanovit a co nejlépe se jí přiblížit. Při tvorbě konstrukce jsem vycházel z návrhů konstrukcí, jež jsou k dispozici na internetu nebo jsou dodávány spolu s díly na sestaveni robota v rámci uživatelské příručky. Nicméně některé z těchto jednotlivých návrhů zcela nevyhovovaly podmínkám pro můj druh použití. Tento poznatek vedl k tomu, že jsem byl nucen část konstrukce v jistém smyslu obměnit. Robot se podařilo sestavit o rozměrech 25x20x15 cm. Samotný postup sestavování byl dále rozdělen na několik částí, jenž jsou zdokumentovány a vyfoceny v následující pasáži. 6.2.1
Sestavení podvozku robota
V tomto úseku sestavování bylo nutné sestrojit konstrukci podvozku robota takovým způsobem, aby se stal stabilním a nedocházelo tak při otáčení nebo pojezdu k rezonanci nebo dokonce k převrácení celého robota. První verzi podvozku jsem vytvářel zcela podle svého úsudku. Vycházel jsem z návodu, jenž byl součástí uživatelské příručky dodávané společně se stavebnicí. Robot sestavený podle návodu se mi zdál být vysoký a obával jsem se případu, že ultrazvukové čidlo nebude plnit správně svoji funkci. Proto jsem při sestavování snížil podvozek a také konstrukci vyvažovacího kolečka. Podvozek se podařilo sestavit a byl i stabilní, ale bohužel se v tomto úseku objevil problém. Ten byl zapříčiněn tím, že oblast nacházející se v prostoru mezi hlavními kolečky byla nakloněna směrem k podlaze a při jízdě robota docházelo ke tření podvozku o podstavu. Tento problém mne vrátil zpět na začátek a já se nakonec rozhodl vytvořit podvozek zcela podle návodu. Naštěstí přepážky v bludišti byly dosti velké a ultrazvukový senzor nebyl nijak omezen. Po sestavení robota a připevnění senzoru jsem provedl zkoušku uvnitř bludiště. Ta proběhla bez problému a správná funkčnost čidla byla ověřena. Výsledná podoba podvozku je uvedena níže.
Obr. 9: Podvozek Lego robota
6.2
Konstrukce robota Lego Mindstorms
6.2.2
23
Uchycení Lego NXT cihly
V uživatelské příručce byl obsažen návod na uchycení NXT cihly, který se mi nezdál být moc vhodný, jelikož při jízdě robota docházelo k její rezonanci a také bylo nutné celou cihlu nepatrně sklopit. Z toho důvodu jsem tento návrh trochu obměnil. Původní uchycení jsem více naklonil k podvozku a spojil s jeho spodní částí, čímž se mi naskytla šance umístit NXT do takové polohy, která umožňuje lepší přístup k ní. Poté jsem připojil k tomuto uchycení po obou stranách díly ve tvaru „Iÿ a v jejich vrchní oblasti spojil. Tímto řešením vznikla možnost připojit horní část cihly s místem propoje těchto dvou dílů. Bohužel stále při jízdě docházelo k rezonanci cihly robot se stával nestabilním. Proto bylo nutné celé sestavené uchycení nějakým způsobem připevnit, aby tento problém nenastával. Vložením dalšího spojovacího dílu mezi předchozí propojení. Dále pak v prostřední části tohoto spojení vyvedením dílu a uchycení jej k podvozku robota jsem dosáhl zamezení nežádoucího pohybu celé cihly dopředu či dozadu při chodu robota.
Obr. 10: Uchycení inteligentní NXT cihly
6.2
Konstrukce robota Lego Mindstorms
6.2.3
24
Uchycení ultrazvukového senzoru
Při řešení vhodného umístění ultrazvukového senzoru bylo nutné umístit jej tak, aby nedošlo k zamezení jeho funkčnosti v rámci velikosti přepážek v bludišti. Z toho důvodu jsem jako místo pro uchycení zvolil přední část robota. Po zjištění umístění senzoru přišlo na řadu vyřešení problému jak senzor uchytit. Tento problém se podařilo vyřešit velice rychle a to spojením dvou dílů ve tvaru „Lÿ a připevněním na obě strany senzoru. Poté již stačilo upevnit čidlo ke konstrukci robota.
Obr. 11: Uchycení ultrazvukového senzoru
6.2.4
Uchycení optického senzoru
Pro zajištění správné funkce optického senzoru bylo nutné umístit jej co nejkolměji k podstavě bludiště. Za tímto účelem byl senzor umístěn na boční stranu celé stavby robota pomocí jednoho dílu ve tvaru roztaženého „Lÿ a poté připojen k cihle NXT.
Obr. 12: Uchycení barevného senzoru
6.3
6.3
25
Konstrukce bludiště
Konstrukce bludiště
Návrh konstrukční části bludiště jsem si stanovil jako jeden z hlavních úkolů, které jsem při výrobě řešil. Nejdříve bylo nutné zvolit vhodný materiál, ze kterého bude bludiště sestaveno. Při řešení problému jaký materiál zvolit pro podstavu celého bludiště se naskytly dvě možnosti realizace. První z možností bylo využití sololitové desky, jenž je levná, lehká a velice pevná. Nicméně skýtá i několik nevýhod jako je schopnost odlupování okrajů desky při opracovávání a tendence zvlnění. Jako druhým materiálem, který bylo možno využít jako podstavu bludiště byl tvrzený sádrokarton, jenž je využívaný ve stavebnictví jako izolace budov. Výhodou tohoto materiálu je pevná konstrukce, lehká na přenášení, bezproblémové připevnění překážek, cenová dostupnost a jako poslední z výhod je dodávání v podobě bloků o stejných rozměrech 135x65cm. Po posouzení vlastností obou materiálů byl vybrán jako nejvhodnější možnost tvrzený sádrokarton. Po vybrání materiálu na podstavu následovalo zvolení takového druhu přepážek, které by umožňovaly bezproblémovou funkci ultrazvukového senzoru. Dřevo jsem si zvolil z toho důvodu, že je možné jej jakkoli upravovat, lze do něj natlouct popřípadě navrtat šroubky, hřebíky nebo nějaký druh kolíků. V mém případě jsem přistoupil k volbě natlučení hřebíků do dřevěné destičky obdélníkového tvaru o rozměrech 30x1x7 cm.
Obr. 13: Schéma výsledného bludiště
6.3
26
Konstrukce bludiště
Pro samotný návrh rozměrů a vzhledu bludiště jsem využil program pro technické konstruování AutoCad 2000. Rozměry bludiště bylo nutno stanovit takovým způsobem, jenž by umožnil robotu pohybovat se prostorem bludiště bez toho, aby došlo k případnému tření robota o jeho konstrukci. Díky informaci o změřených rozměrech robota jsem již byl schopen nakreslit výslednou podobu bludiště. Plán jsem rozdělil na 16 stejně velkých dílů o rozměrech 31x31 cm a poté do něj vykreslil překážky na předem určená místa. V konečném podání se podařilo vytvořit bludiště o rozměrech 125x125 cm, jehož vnitřní cesty jsou široké 30 cm což úplně postačí k průchodu robota.
Obr. 14: Výsledná podoba bludiště
7
TVORBA A IMPLEMENTACE ALGORITMU
7
27
Tvorba a implementace algoritmu
Ještě než přistoupíme k samotnému řešení řídícího algoritmu je nutné nastavit programovací jazyk Eclipse tak, aby bylo možné nahrát celý program do inteligentní Lego NXT cihly. Tento problém vyřešilo přidání implementace firmwarové náhrady s názvem „leJOSÿ do programovacího jazyka. Při tvorbě metody na vyhledávání cesty v bludišti řešen problém jak jej navrhnout aby splňoval všechny stanovené body na vytvoření. Největším problémem bylo stanovení metody, pomocí které bude prováděn průzkum okolí a vytvoření jednotlivých prvků pro určení směru jízdy robota. V celé implementaci byla použita již předefinovaná metoda s názvem ”Pilot” jenž plní funkci přesné navigace robota, tak aby nedocházelo k nechtěnému výkyvu ze směru jízdy robota a tím zamezení správného vyhledání cesty bludištěm. Dále pak zde byl využit princip zásobníku (Lifo), do kterého jsou postupně vkládány jednotlivé prvky nesoucí informaci o tom kudy se má robot při průchodu vydat. Celá implementace programu byla rozdělena do tří tříd, jenž se každá zaobírá jinou problematikou řešení vyhledávání cesty v bludišti.
7.1
Implementační třída Zasobnik.nxj
Tato implementační třída slouží k vytvoření konstruktoru jednotlivých prvků. Tyto prvky budou při otáčení robota kolem své osy naplňovány hodnotami, jenž budou představovat možnosti směrů, kterými má robot možnost cestovat. Bez tohoto konstruktoru by došlo ke špatnému chodu programu a robot by přestal ihned pracovat. public
Labyrint(int zapad, int jih, int vychod, int sever){
this.sever this.zapad this.jih this.vychod this.dalsi }
= = = = =
sever; zapad; jih; vychod; null;
// nastavení proměnných, // které budou přejímat vložené hodnoty // pro následné vytvoření prvku.
7.2
7.2
Implementační třída Run.nxj
28
Implementační třída Run.nxj
Nejdůležitější metodou, která byla implementována v rámci této bakalářské práce je metoda s názvem „okolíÿ. Tato metoda je založena na principu průzkumu okolí v bludišti. Když jsem se rozmýšlel na jakém principu by tato metoda měla pracovat narazil jsem na jednu překážku. Touto překážkou byl problém zajištění správného naplnění proměnných hodnotu pro následné vytvoření prvku tak, aby nedocházelo k jejímu přepsání při následujícím pootočení. Tento problém mi zabral nejvíce času. Nicméně se nakonec podařil vyřešit přidělením jednoznačného identifikátoru „pocÿ pro každý směr jízdy robota. Jakmile dojde ke spuštění programu zavolá se tato metoda a robot provede pootočení o 180 stupňů. Poté je vyslán signál z ultrazvukového senzoru. Jestliže senzor zjistí, že se ve vzdálenosti větší než předepsaná hodnota 20 cm nenachází překážka provede metoda naplnění proměnných a,b,c,d hodnotou. Po tomto procesu je spuštěn konstruktor na vytvoření prvku a jednotlivé proměnné jsou konstruktoru předány. Po té se provede přidání vzniklého prvku navrchol zásobníku a robot se pootočí o 90 stupňů doprava. Tím je vyřešeno určení kudy má robot možnost jet pouze v jednom směru. Proto byla do metody přidána podmínka, která způsobí opakování předchozí operace až do doby kdy se nerovná čtyřem. Tím se zajistí případné vytvoření prvku pro každý možný směr jízdy robota. public void okoli(){ Labyrint.poc = 0; Labyrint.kolo = 0; pilot.rotate(-180); while (Labyrint.kolo != 4){ // podmínka zajištující případné vytvoření prvku // pro každý směr jízdy if (sonic.getDistance()>20 & Labyrint.poc == 0){ // Zjištění zda je před robotem volný prostor a // kontrola počtu aby nedocházelo k přepisování Labyrint.a = 1; //naplnění hodnot Labyrint.b = 0; Labyrint.c = 0; Labyrint.d = 0; Labyrint.poc++; Labyrint p1=new Labyrint(Labyrint.a,Labyrint.b,Labyrint.c,Labyrint.d); // Vytvoření prvku
7.2
Implementační třída Run.nxj
k.add(p1); pilot.rotate(-90);
29
// Přidání prvku do zásobníku
}else{ if
(sonic.getDistance()>20 & Labyrint.poc == 1){
Labyrint.a = 0; Labyrint.b = 1; Labyrint.c = 0; Labyrint.d = 0; Labyrint.poc++; Labyrint p2=new Labyrint(Labyrint.a,Labyrint.b,Labyrint.c,Labyrint.d); k.add(p2); pilot.rotate(-90); }else{ if
(sonic.getDistance()>20 & Labyrint.poc == 2){
Labyrint.a = 0; Labyrint.b = 0; Labyrint.c = 1; Labyrint.d = 0; Labyrint.poc++; Labyrint p3=new Labyrint(Labyrint.a,Labyrint.b,Labyrint.c,Labyrint.d); k.add(p3); pilot.rotate(-90); }else{ if
(sonic.getDistance()>20 & Labyrint.poc == 3){
Labyrint.a = 0; Labyrint.b = 0; Labyrint.c = 0; Labyrint.d = 1; Labyrint.poc++; Labyrint p4=new Labyrint(Labyrint.a,Labyrint.b,Labyrint.c,Labyrint.d); k.add(p4); pilot.rotate(-90);
7.2
Implementační třída Run.nxj
30
}else{ pilot.rotate(-90); Labyrint.poc++; }}}} Labyrint.kolo++; }}
// Přičtení hodnoty, jenž udává otočení robota o~360%
7.2
31
Implementační třída Run.nxj
Další metodou nacházející se v této třídě je metoda, jež má za úkol celkové řízení robota. Její princip je velice jednoduchý. Je založen na přebírání hodnot z jednotlivých prvků umístěných na vrcholu zásobníku. Hodnoty jsou přebírány bezprostředně po proběhnutí metody na snímání okolí. Na základě získaných hodnot dojde k porovnání s hodnotami požadovanými. Jestliže dojde ke shodě metoda provede pootočení robota do směru, kterým se má vydat a poté provádí jízdu v před do doby, kdy se před senzorem neobjeví překážka ve vzdálenosti menší než je mnou zvolená a to 15 centimetrů. Poté je spuštěna metoda na odebrání prvku ze zásobníku a celý proces vyhledávání je opětovně spuštěn počínaje metodou s názvem „okolíÿ.
public void smer(){ if (Labyrint.a == 1 & Labyrint.b == 0 & Labyrint.c == 0 & Labyrint.d == 0){ // zjištění zda se hodnoty shodují s hodnotami uloženými v prvku. LCD.drawString("Na sever", 1, 0);
// vypsání směru jízdy
while(sonic.getDistance()>15){ // Provádí se pohyb robota do doby, kdy povolená hodnota ultrazvukového // senzoru není menší než limitní hodnota zadaná. pilot.travel(-3); // pohyb robota o~3x360 } Button.waitForPress(Labyrint.p); }else{ if(Labyrint.a == 0 & Labyrint.b == 1 & Labyrint.c == 0 & Labyrint.d == 0){ pilot.rotate(-90);
// provede pootočení robota o~90
while(sonic.getDistance()>15){ pilot.travel(-3); } LCD.drawString("Na východ", 1, 0); Button.waitForPress(Labyrint.p); }else{ if (Labyrint.a == 0 & Labyrint.b == 0 & Labyrint.c == 1 & Labyrint.d == 0){ pilot.rotate(-180);
7.2
Implementační třída Run.nxj
32
while(sonic.getDistance()>15){ pilot.travel(-3); } LCD.drawString("Na jih", 1, 0); Button.waitForPress(Labyrint.p); }else{ if(Labyrint.a == 0 & Labyrint.b == 0 & Labyrint.c == 0 & Labyrint.d == 1){ LCD.drawString("Na západ", 1, 0); pilot.rotate(92); while(sonic.getDistance()>15){ pilot.travel(-3); } Button.waitForPress(Labyrint.p); }}}} Button.waitForPress(Labyrint.p); }
7.3
7.3
Implementační třída Labyrint.nxj
33
Implementační třída Labyrint.nxj
Tato třída je zaměřena na vkládání a vybírání jednotlivých prvků ze zásobníku. Jsou zde obsaženy dvě metody, jejichž funkce je popsána v následující části. První z metod slouží k vložení prvku do zásobníku. Funkce této metody je velice prostá. Jestliže nastane stav kdy řídící část programu zavolá tuto metodu spustí se průzkum celého zásobníku. V případě zjištění, že je zásobník prázdný provede se vložení prvku. A naopak při zjištění, že zásobník není prázdný provede metoda přidání prvku před prvek již v zásobníku uložený a vypíše na displej NXT cihly informaci o vložení prvku do zásobníku.
public void add(Labyrint n){ Button.waitForPress(Labyrint.p); if(this.vrchol==null) { // zjistí, zda je zásobník prázdný this.vrchol=n;
// přidá prvek na vrchol zásobníku
}else{ n.setDalsi(this.vrchol); // jestli že zasobník není prázdný provede se vložení // prvku za prvek, jenž je na vrcholu zásobníku. this.vrchol=n; } LCD.drawString("Prvek pridan",1, 0); // vypíše nám na Lcd dispej informaci o~přidání prvku. LCD.drawInt(pocet, 5, 5); }
7.3
Implementační třída Labyrint.nxj
34
Druhou z metod, jež jsou v této třídě implementovány je metoda na odebírání prvku ze zásobníku. Tato metoda pracuje na principu zjišťování jeho plnosti. Jestliže metoda zjistí, že je v zásobníku uložen prvek provede jeho odebrání. V případě opačného zjištění je hodnota vrcholu zásobníku nastavena na nulovou.
public Labyrint put(){ Labyrint pom; if(this.vrchol!=null){
// zjistíme zda je zásobník prázdný nebo ne.
pom=this.vrchol; // provede se vložení prvku na vrchní pozici // v zásobníku do pomocné proměnné. this.vrchol=pom.getDalsi(); // provede odebrání prvku LCD.drawString("prvek odebran", 0,6); // vypíše nám na Lcd displej lego robota informaci o~odebrání prvku Button.waitForPress(Labyrint.p); return pom; } else return null; // jestliže je zásobník prázdný // je nastaven na nulovou hodnotu. }
8
8
MOŽNÉ ROZŠÍŘENÍ A MOŽNOSTI VYUŽITÍ
35
Možné rozšíření a možnosti využití
Tvorba řídícího algoritmu, vybrání vhodného senzoru a sestavení konstrukce robota v rámci této závěrečné práce byla zaměřena na jednoduché vyhledávání cesty mnou navrženým pro robota dříve neprozkoumaným prostorem. Naprogramovaný algoritmus je založen na principu naplňování a poté odebírání ze zásobníku prvky, jenž nesou informaci o směru jízdy, kterou má možnost robot podstoupit. Celý problém se mi podařilo vyřešit za použití jednoho ultrazvukového a optického senzoru. Nicméně jedná se pouze o jedno z mnoha řešení implementací průchodu bludištěm a umožňuje velkou škálu rozšíření. Jednou z rozšiřujících možností může být přidání kompas senzoru, který by svými funkčními vlastnostmi přispěl robotu k lepší orientaci v prostoru díky zjišťování intenzity magnetického pole země. Dále pak je možné připojit k robotu dotykové čidlo a servomotor za účelem případného nalezení a následnému sebrání předmětu v prostoru. Popřípadě doplnit robota o videokameru pro vizuální zobrazení prostředí. Schopnost uplatnění tohoto lego robota spočívá v možnostech jeho využití v rámci prohledávání neprozkoumané oblasti, jenž je člověku přístupná i nepřístupná. Je možné jej využít při průzkumu terénu, ve kterém se nacházejí nějaké překážky za účelem dosažení požadovaného bodu. Dále pak je možné jej využít v rámci výuky jako názornou ukázku možného řešení vyhledávání cesty v prostoru.
9
9
ZÁVĚR
36
Závěr
Hlavním cílem, jež byl v této bakalářské práci řešen bylo vytvoření řídícího algoritmu, pomocí kterého by byl robot schopen vyhledat cestu sestaveným bludištěm. Za tímto účelem jsem využil platformu programovacího jazyka Java s názvem „Eclipseÿ. Jelikož jsem se s programováním v tomto jazyku ještě nikdy nesetkal pouze jen s jazykem C++ bylo pro mne zjištění, že vytváření programů v platformě Eclipse je v mnoha ohledech podobné jako je tomu u jazyka C++ velice přívětivé. Pro vyzkoušení vytvořeného programu jsem si vybral robota od společnosti Lego. Jedná se o druh, který nese název „Mindstorm NXTÿ. Tento typ robota má pro svoje sestavení velikou škálu možností. V mém případě jsem využil přiloženého návrhu od firmy lego. Nicméně tento návrh zcela nevyhovoval kladeným požadavkům. Kvůli tomu došlo k jeho obměně takový způsobem, jenž je pro vyzkoušení programu dostačující. Při řešení problému s navigací robota v bludišti jsem nejdříve použil pouze ultrazvukový senzor, který plnil funkci vyhledávání okolí a zabraňuje případnému naražení robota do přepážky. Robot prošel bez problémů celým bludištěm, avšak při dosažení cílového bodu se robot vydal zpět na začátek. Proto byl ke konstrukci robota přidán ještě jeden senzor a to senzor optický, pomocí něhož bylo docíleno stavu ukončení programu při dosažení cílového bodu. Tato práce byla pro mne velice přínosnou zkušeností jak v oblasti robotiky, tak i po stránce programovací. Potenciál robotiky je značný a stále se vyvíjí. Pevně doufám, že tato práce bude přínosem pro všechny studenty zajímající se o robotiku a o problematiku prozkoumáváni prostoru.
10
10
POUŽITÉ ZDROJE A LITERATURA
37
Použité zdroje a literatura
[1] DEVINE, Thomas. LeJOS NXJ Problem Solving with Robots [PRSOCO601] [online]. 20.2.2008 [cit. 2010-05-10]. Dostupné z WWW:
. [2] Eclipse [online]. 22.2 2010 [cit. 2010-04-25]. What is Eclipse and the Eclipse Foundation?. Dostupné z WWW: . [3] Eclipse [online]. 2010 [cit. 2010-05-5]. Eclipse Platform Overview. Dostupné z WWW:. [4] Educhem [online]. 2010 [cit. 2010-05-3]. Dostupné z WWW: [5] FReeZ’s Weblog [online]. 2007 [cit. 2010-05-7]. Eclipse Platform. Dostupné z WWW: . [6] CHVÁLA, Břetislav, NEDBAL, Josef, DUNAY, Gejza. AUTOMATIZACE.[s.l.]:[s.n.], 1989. 608 s. [7] KRATOCHVÍL, Lukáš.Ovládání modelu robota: bakalářská práce. [online]. Brno: Mendelova univerzita v Brně, Provozně ekonomická fakulta, 2009. 40l., 3l. přil. Vedoucí bakalářské práce Dr. Ing. Radovan Kukla. [8] LEGO MINDSTORMS Uživatelská příručka [online].[s.l.]:[s.n.], 2009 [cit. 201005-05]. Dostupné z WWW: . [9] Lego Mindstorms [online]. 2010 [cit. 2010-05-04]. Sensors. Dostupné z WWW: . [10] Lego.com [online]. 2010 [cit.2010-05-05]. Lego, 2010 [cit. 2010-05-04]. Dostupné z WWW: . [11] Lego Education [online]. 2010 [cit. 2010-05-4]. NXT Light Sensor. Dostupné z WWW: . [12] OLIVEIRA, Gerardo, et al. Environment Mapping using the Lego Mindstorms NXT and leJOS NXJ [online].[s.l.]:[s.n.], 2007 [cit. 2010-05-07]. Dostupné z WWW: . [13] PECINOVSKÝ, Rudolf . Myslíme objektově v jazyku Jav a [online].[s.l.]:[s.n.], 2004 [cit. 2010-05-09]. Dostupné z WWW: . [14] Robotika [online]. 12.2. 2008 [cit. 2010-05-15]. Robotika. Dostupné z WWW: .
10
POUŽITÉ ZDROJE A LITERATURA
38
[15] W. LEW, Michael; B. HORTON, Thomas; S. SHERRIFF, Mark. Using LEGO MINDSTORMS NXT and LEJOS in an Advanced Software Engineering Course [online].[s.l.]:[s.n.], 2009 [cit. 2010-05-4]. Dostupné z WWW: . [16] Wikipedia [online]. 2010 [cit. 2010-05-7]. Eclipse (software). Dostupné z WWW: . [17] Wikipedia [online]. 13.1.2001, 8.4.2010 [cit. 2010-04-15]. Java (programming language). Dostupné z WWW: . [18] Wikipedia [online]. 17.7.2006, 13.3.2010 [cit. 2010-04-25]. Lego Mindstorms NXT. Dostupné z WWW: .
Přílohy
A
A
PŘILOŽENÉ CD
40
Přiložené CD
Na CD je k dispozici výsledná podoba vypracovávaného algoritmu, dále pak video ukazůjící jak Lego robot pomocí řešeného algoritmu postupoval při vyhledávání cesty v bludišti.