Průchod robota labyrintem pomocí dotykového senzoru



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

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA PEDAGOGICKÁ KATEDRA TECHNICKÉ VÝCHOVY

Cílem této kapitoly je seznámit s parametry a moduly stavebnice NXT. Obr. 1: Brick s moduly [3]

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

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

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

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

METODICKÝ LIST K TECHNICKÉMU KROUŽKU:

Využití stavebnice Lego při výuce

Robot Lego Mindstorms NXT doplněný o kamerku a software v jazyce C#

Gymnázium, Praha 6, Arabská 14. Loydova patnáctka. Dokumentace ročníkového projektu. Předmět: Programování Vyučující: Ing. Tomáš Obdržálek Třída: 1.

Název projektu: Život s počítačem. Číslo projektu: OPVK.CZ.1.07/1.2.32/

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

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

Implementace A* algoritmu na konkrétní problém orientace v prostoru budov

Mobilní robotika. doplňující podklady. Ing. Vít Ondroušek, Ph.D. Ing. Jan Kolomazník, Ph.D.

Teoretické minimum z PJV

Úloha č. 2: Měření voltampérových charakteristik elektrických prvků pomocí multifunkční karty

Projekty pro výuku programování v jazyce Java

Zadávací dokumentace

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

MAKER WORKS TECHNOLOGY INC Technická podpora:

Návod na použití prezentační techniky

Principy objektově orientovaného programování

Záznamník teploty ZT, ZT1ext Návod k použití

Elektronická kapacitní dekáda - BASIC

PC Controlling of MINDSTORMS NXT robot

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

Metodické pokyny k materiálu č. 38 Mobilní robot III - Závodní auto - Dálkové ovládání 1 (STAVBA)

Manuál práce s dataloggerem Xplorer GLX

PROSTŘEDKY AUTOMATICKÉHO ŘÍZENÍ Úloha č. 3 Dálková správa s využitím WIFI technologie

5 Rekurze a zásobník. Rekurzivní volání metody

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

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Programování v Javě I. Leden 2008

Laboratorní zdroj - 6. část

Metodická příručka pro učitele. InspIS SET modul školní testování

Stav: červen TRACK-Guide

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

Externí filtrová kola pro kamery G2, G3 a G4

ExperimentalCar Rozšířeny kurz provozních měření na experimentálním vozidle

EVIDENČNÍ FORMULÁŘ. FTVS-UK evidence VaV výsledků nepodléhající řízení o zápisu u ÚPV v Praze

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

ÚKOLOVÝ LIST. Aktivita projektu Obloha na dlani - Laboratoř vědomostí ROBOT NA PÁSOVÉM PODVOZKU

1 Podrobná specifikace Yunifly Datasheet

Číslicový otáčkoměr TD 5.1 AS

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

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

Určeno pro studenty kombinované formy FS, předmětu Elektrotechnika II. Vítězslav Stýskala, Jan Dudek únor Sylabus tématu

Windows. snadno a rychle

BOS Lokalizace osob. ČVUT v Praze + IMA. Verze 2.0.0

Programování v Javě I. Únor 2009

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

MATLAB a Simulink R2015b

Obsah. 1. Upozornění. 2. Všeobecný popis

Práce s velkými sestavami

Pohon na Točnu Návod k Použití (software v. 8)

AIRCAST MP4 pøehrávaè Uživatelská pøíruèka


Světlo. Kalibrace světelného senzoru. Tematický celek: Světlo. Úkol:

MONITORING A ANALÝZA KVALITY ELEKTŘINY

Učivo: Detailnější zopakování používání některých částí uživatelského rozhraní LEGO MINDSTORMS NXT Paleta programování

Obsah. Část I Začínáme s jazykem AppleScript

Robotický manipulátor

Česky. Návod k použití

Analyzátor, minimalizátor kombinačních logických obvodů

enos dat rnici inicializaci adresování adresu enosu zprávy start bit átek zprávy paritními bity Ukon ení zprávy stop bitu ijíma potvrzuje p

Elektronicky řízené šroubovací systémy. Předprogramovaná inteligence. Technika, která spojuje

Konfigurátor idům. Manuál pro konfiguraci systémů Melody, Duo+ Rychlý obsah: - 1 -

Návod na obsluhu SendPíp1 verse V0.2 (PŘEDBĚŽNÝ NÁVOD).

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

JETT-6000C DECHOVÝ ANALYZÁTOR OBSAHU ALKOHOLU V KRVI.

CS WAVE Virtuální pracovní stůl svařování Malá verze Manuál uživatele

1. Zobrazení typu telefonního přístroje. 3. Protokol LLDP Link Layer Discover Protocol. 4. Inicializace síťového připojení

R-5602 DYNBAL_V1 - SOFTWARE PRO VYHODNOCENÍ DYNAMICKÉ NEVÝVAHY V JEDNÉ ROVINĚ ING. JAN CAGÁŇ ING. JINDŘICH ROSA

8. Posloupnosti, vektory a matice

erotor Návod k obsluze erotor erotor ovládací terminál elektronické sirény

Přídavný modul čtečky ClearReader +

BDVR 04. Uživatelský návod Popis ovládacích prvků

Postřehová hra. Zadání projektu. 1 Moje cíle

3D Vizualizace muzea vojenské výzbroje

Návod na obsluhu Pípáku3 verse V3.15 (PŘEDBĚŽNÝ NÁVOD).

Servisní návod [CZ] VMS 08. Øídící jednotka pro pøesné mìøení spotøeby nápojù. Verze: 1.4 Datum: Vypracoval: Vilímek

imagine explore learn

Hudební přehrávač. mivvy record M5 UŽIVATELSKÝ MANUÁL

PREPROCESOR POKRAČOVÁNÍ

DIGITALIC MP4 pøehrávaè s DVB-T Uživatelská pøíruèka

Monitorovací panel pro operační sály

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

KONSTRUKCE MOSTU S MOŽNOSTÍ POČÍTAČOVÉHO MĚŘENÍ STAVU NAPĚTÍ TENZOMETRY

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

C.A.T3+ a Genny3 NÁVOD K OBSLUZE. C.A.T³ přijímač - popis

Měřící a senzorová technika Návrh měření odporových tenzometrů

Obsluha měřicích zařízení kontaktní metody

Uživatelská příručka - diagnostický systém

Principy operačních systémů. Lekce 7: Souborový systém

Transkript:

Mendelova zemědělská a lesnická univerzita v Brně Provozně ekonomická fakulta Průchod robota labyrintem pomocí dotykového senzoru Bakalářská práce Vedoucí práce: Ing. Jana Weinlichová Andrea Kosová Brno 2010

Ráda bych poděkovala své vedoucí této bakalářské práce Ing. Janě Weinlichové za hodnotné rady a čas, který mi věnovala.

Prohlašuji, že jsem tuto bakalářskou práci vypracovávala samostatně pod dohledem vedoucí bakalářské práce, za použití zdrojů a informací, které jsou uvedeny v použité literatuře. V Brně, dne 24. května 2010....................................................

4 Abstract Kosová, A. Moving of a robot through the maze by using a touch sensor. Bachelor thesis. Brno, 2010. The goal of this bachelor thesis is a mechanical construction of a robot with touch sensor, creation of a maze the robot will walk in and design of a algorithm the robot will use while passing through the maze. The thesis consists of two parts. Theoretical part deals with citations from the literature on the topic of robot applications, mobile robot design, programming tools and parts in the Lego Mindstorms. The practical part covers construction of the robot s body, its programming in the Java language and creation of the maze the robot goes through. At the close I sum up information presented findings. Abstrakt Kosová, A. Průchod robota labyrintem pomocí dotykového senzoru. Bakalářská práce. Brno, 2010. Předmětem bakalářské práce je sestavení mechanické konstrukce robota s dotykovým senzorem, vytvoření labyrintu, kterým robot prochází a návrh algoritmu pro průchod robota zmíněným labyrintem. Bakalářská práce se skládá ze dvou částí. Teoretická část se zabývá citacemi z literatury na téma aplikace robota, konstrukce mobilního robota, součástky a programovací nástroje v Lego Mindstorms. Praktická část je zaměřena na sestavení samotné konstrukce robota, včetně jeho naprogramování v jazyce Java a vytvoření labyrintu, kterým robot prochází. V závěru práce se věnuji shrnutí a zkompletování informací zjištěných poznatků.

OBSAH 5 Obsah 1 Úvod 6 2 Cíl a metodika práce 7 3 Reprezentace grafů 8 4 Aplikace robota 9 4.1 Definice robota.............................. 9 4.2 Dělení robotů............................... 9 4.2.1 Dělení robotů dle funkce..................... 9 4.2.2 Dělení robotů dle pohybu.................... 9 4.3 Dělení robotiky.............................. 9 4.4 Mobilní robotika............................. 10 4.4.1 Typy mobilních robotů...................... 10 5 Konstrukce mobilního robota 11 5.1 Typy kol.................................. 11 5.1.1 Diferenciální podvozek...................... 11 5.1.2 Synchronní podvozek....................... 11 5.1.3 Trojkolový podvozek s řízeným předním kolem......... 12 5.1.4 Ackermanův podvozek...................... 12 5.2 Typy senzorů............................... 12 5.2.1 Tlakový senzor NXT....................... 12 5.2.2 Světelný senzor NXT....................... 12 5.2.3 Ultrazvukový senzor NXT.................... 13 5.2.4 Zvukový senzor NXT....................... 13 5.3 Typy motorů............................... 14 5.3.1 Střídavé motory(ac motors)................... 14 5.3.2 Stejnosměrné motory(dc motors)................ 14 5.3.3 Krokové motory.......................... 14 5.3.4 Servomotory............................ 14 6 Součástky v Lego Mindstorms 15 6.1 Obnovitelná baterie............................ 15 6.2 Síťový adaptér............................... 15 6.3 Inteligentní LEGO NXT kostka..................... 15 6.4 Interaktivní servomotor NXT...................... 16 6.5 Bluetooth externí............................. 16 7 Programovací nástroje v Lego Mindstorms 17 7.1 Lejos.................................... 17 7.2 Java.................................... 17

OBSAH 6 7.2.1 Vývojové prostředí Eclipse.................... 17 8 Návrh mechanické konstrukce robota 18 9 Návrh labyrintu 21 9.1 Typy Labyrintu.............................. 22 10 Výběr a implementace v programu 23 10.1 Program lego mindstorms........................ 23 10.2 Implementace v jazyku java....................... 24 11 Složení programu 25 11.1 Třída RoboteksKompasem........................ 25 11.1.1 Metoda zmenauhlu........................ 26 11.2 Třída Labyrint.............................. 26 11.2.1 Metoda presun.......................... 26 11.2.2 Metoda presunanecisto..................... 27 11.2.3 Metoda zapisprekazku...................... 27 11.2.4 Metoda zapisnastevu....................... 27 11.2.5 Metoda vrathodnotu....................... 27 12 Rozhraní Behavior 28 12.1 Popis jednotlivých metod v rozhraní behavior............. 28 12.1.1 Void takecontrol()........................ 28 12.1.2 Void suppress().......................... 28 12.1.3 Void action()........................... 28 12.2 Třída JizdaRovne............................. 28 12.3 Třída NarazDoZdi............................ 29 12.4 Třída MaSeOtocit............................. 29 12.5 Třída MaZatocitVlevo.......................... 29 12.6 Třída MaZatocitVpravo......................... 30 12.6.1 Třída Pilot............................ 30 12.7 Zvuk.................................... 30 12.7.1 Nahrávání a modifikace zvuku.................. 30 12.7.2 Náhodný výběr zvuku při nárazu................ 31 13 Možnosti rozšíření 32 14 Závěr 33 15 Literatura 34

1 ÚVOD 7 1 Úvod Téma robotiky je zmiňováno již několik let, avšak s jejím největším rozmachem a rozvojem se setkáváme teprve v posledních letech. O robotiku je v současné době velký zájem, a to v mnoha oborech. Velký rozvoj robotiky zaznamenáváme v lékařství, kde se hojně využívá při pomoci s operacemi, kde je nutná velká přesnost, kterou lékař nemůže bez pomoci robota zvládnout a tak snižuje možné lidské pochybení a zvyšuje úroveň lékařství. (Šolc F; Žalud L, 2002) Dalšími obory, kde se roboti využívají je např. v průmyslu, biologii, kybernetice, umělé inteligenci, matematice, fyzice a také psychologii. S rozšířením robotiky se zvyšuje množství a kvalita literatury, která se robotikou zabývá, a to nejen literaturou psanou v anglickém jazyce, ale již také v jazyce českém. To umožňuje další rozvoj a vzdělanost lidí v tomto oboru. Mezi lidmi začíná přibývat nadšenců, kteří mají robotiku jako svůj koníček a jednoduché formy robotů si skládají i doma. Velký ohlas má nyní firma Lego Mindstorms, která propaguje stavebnici lego pro snadné sestavení robota. Jak již z podstaty nabídky firmy vyplývá, je propagace prováděna formou hry a toto zaujalo mnoho nadšenců, mezi kterými jsou i děti ze základních škol. K dispozici je také program NXT, v kterém je umožněno snadné programování. Firma neustále zdokonaluje nabídku a rozšířila své produkty o nové součástky, které umožňují robotu chodit.

2 CÍL A METODIKA PRÁCE 8 2 Cíl a metodika práce Cílem bakalářské je průchod robota labyrintem pomocí dotykového senzoru. S tím souvisí sestavení mechanické konstrukce robota s dotykovým senzorem a vytvoření labyrintu, kterým robot prochází. Robot bude po vyhodnocení dosavadních zkušeností a znalostí naprogramovaný v programovacím jazyce Java. Práce bude rozšířena o kompas senzor, který byl nezbytně nutný pro správné fungování robota a jeho průchod labyrintem, a byl tedy splněn cíl bakalářské práce. Labyrint, kterým robot bude procházet, bude sestaven také na základě proporcí robota, a to především jeho velikosti, aby mu umožnil dostatečný prostor pro průchod. Z metodického hlediska je bakalářská práce rozdělena do dvou částí. První část je tvořena částí teoretickou, která čerpá z informací a zdrojů získaných v odborné literatuře a internetu. Obsahuje např. definici robota, druhy robotů, mechanickou konstrukci robotů atd. Teoretická část obsahuje informace, z kterých se vychází pro sestavení praktické části, která navazuje na část teoretickou. V praktické části je popsáno samotné sestavování robota, možnosti jeho sestavení, popis labyrintu, kterým robot prochází, algoritmy pro pohyb a chování robota labyrintem. Obsahuje také fotografie robota a labyrintu.

3 REPREZENTACE GRAFŮ 9 3 Reprezentace grafů Graf je soustava bodů (uzly nebo vrcholy), z nichž některé dvojice jsou propojeny (těmto spojnicím se říká hrany). Existuje nesmírně mnoho různých věcí z reálného světa, pro něž může být graf matematickým modelem. Jako příklad lze uvést silniční nebo železniční síť, kde vrcholy představují města a hrany cesty mezi nimi. Vrcholy mohou také představovat stav nějakého procesu (např. určité postavení v šachové hře), hrana představuje možnost přechodu od jednoho stavu ke druhému. (Prokop Jiří, 2009) Pro reprezentaci grafů jsou velmi vhodné již poznané datové struktury, jako jsou pole, seznamy a stromy. Dva způsoby jsou však dominantní: prezentace pomocí dvourozměrného pole a tzv. slovníku uzlů. Graf lze znázornit pomocí dvourozměrného pole, za předpokladu, že řádky označují počáteční uzly hran grafu a sloupce jejich uzly koncové. Po takové dohodě lze graf znázornit ve tvaru tabulky na obrázku 1. (Wróblewski Piotr, 2004) Obr. 1: Znázornění grafu pomocí pole.

4 APLIKACE ROBOTA 10 4 Aplikace robota 4.1 Definice robota Robotika je obor, který se zabývá studiem a konstrukcí robotů a jim podobných zařízení. Dosud však neexistuje ustálená definice jak oboru, tak pojmu robot. Všeobecně je robot chápán jako stroj, který vykonává podobné činnosti jako člověk, především však činnosti pohybové a manipulační. Většinou musí takový stroj získávat informace o prostředí ve kterém se pohybuje a musí být schopen toto prostředí fyzikálně, především mechanicky ovlivňovat.(robotika, 2008) Mezi další definice robota lze zahrnout: Robot je mechanická nebo virtuální umělá hybná síla. Obvykle se jedná o systém, který na základě svého vzhledu nebo pohybu vytváří dojem, že má svůj vlastní účel nebo působnost (Když se řekne... Robot, 2008) Robot je stroj, který muže být naprogramován k vykonávání různých činností(robotika, 2008) 4.2 Dělení robotů 4.2.1 Dělení robotů dle funkce průmyslový se používají ve všech výrobních technologiích (manipulace s materiálem, obsluha strojů...) servisní je využíván v domácnostech, v jaderným průmyslu, zdravotnictví, stavebnictví, vojenské a policejní úlohy, likvidace požárů, práce v nebezpečném prostředí, monitoring, údržba, destrukce, čištění, hygiena, transport, manipulace, identifikace, vyhledávání, sběr informací, pomocné úkony (Robotika, 2008) 4.2.2 Dělení robotů dle pohybu stacionární: nemohou se pohybovat z místa na místo(například průmyslový robot) mobilní : na rozdíl od stacionárních robotů se mobilní roboty vyznačují tím, že se mohou přemísťovat z místa na místo (Šolc, F.; Žalud, L., 2002) U mobilní robotiky je nutno se pozastavit, a dopodrobna popsat, protože má velký význam v této bakalářské práci, která se týká mobilní robotiky. 4.3 Dělení robotiky Dle citace Šolc, F.; Žalud, L., 2002 se v dnešní době robotika používá téměř všude. Můžeme ji využít u teoretické robotiky jako je biologie, psychologie, etologie, matematika a také fyzika. Dále u experimentální robotiky, která je často využívána

4.4 Mobilní robotika 11 v kybernetice, umělé inteligenci, inženýrské disciplíny. Samozřejmě je známa i průmyslová robotika, která navrhuje, staví a používá průmyslové roboty. S tím je spojena různá aplikovaná robotika, jejichž cílem je návrh různého inteligentního stroje pro průmysl. 4.4 Mobilní robotika Mobilní roboty se rozdělují na dva základní typy: autonomní a dálkově ovládané stroje. Autonomním robotem se myslí zařízení, které na základě instrukcí samostatně vykoná nějakou úlohu. Obvykle se předpokládá, že robot k plnění zadaného úkolu používá prvků tzv. umělé inteligence, tzn. je například schopen se orientovat v neznámém nebo pozměněném prostředí, vyhýbat se překážkám, apod. (Šolc F; Žalud L, 2002) Dálkově ovládané stroje, neboli řízené stroje, jsou zpravidla roboti bez inteligence nebo také vyšších algoritmů řízení a rozhodování. Tito roboti pracují čistě podle povelů operátora. Umělá inteligence je prozatím velmi vzdálená lidské inteligenci podle zastánců operátorsky řízených strojů a není ani příslib dostatečně rychlého nárůstu kvality umělé inteligence. Podrobněji napsané nalezneme v skriptech VUT Šolc F; Žalud L, 2002. 4.4.1 Typy mobilních robotů Mobilní roboty je možno rozdělit podle toho v jakém prostředí se pohybují na roboty operující: na souši ve vodě ve vzduchu ve vesmírném prostoru Jsou pochopitelně možné i kombinace - např. tzv. obojživelné stroje, tj. vozidla schopná pohybu na souši i ve vodě. Vzhledem k tomu, že naprostá většina ve světě i u nás používaných robotů se pohybuje pouze po souši, bude pozornost věnována pouze jim.(robotika Šolc F; Žalud L, 2002) Roboti, kteří se pohybují po souši lze dále rozdělit na platformy kolové, pásové a kráčející. Všechny tyto platformy využívá Lego mindstorms.

5 KONSTRUKCE MOBILNÍHO ROBOTA 12 5 Konstrukce mobilního robota Robot se může skládat z různých součástek, jako je např. motor, který se dělí na více druhů. Mezi další součástky patří senzory neboli čidla. Senzor je snímač měřené veličiny, který v měřicím systému zprostředkuje vazbu mezi objektem měření a dalšími členy měřicího řetězce, které zpracovávají měřicí signál. Senzor snímá přímo nebo nepřímo měřenou veličinu a převádí ji do informačního parametru informačního signálu. Senzor je prvním členem měřicího řetězce. Senzor nemá měřenou veličinu ovlivňovat.(smutný Pavel, 2010) Dále jsou významné kolové platformy mobilních robotů - mezi mobilními roboty představují ty s koly v roli aktuátorů naprosto většinu.(šolc, F.; Žalud, L., 2002) Není jednoduché rozdělit jednotlivé typy kolových podvozků do jednotlivých skupin. Lze se zaměřit na typy, které se jeví často používané a nejpopulárnější. Budou zde uvedeny jen podvozky s koly. 5.1 Typy kol Dle Šolc, F.; Žalud, L., 2002 kola se dělí na aktivní nebo pasivní - tedy hnaná a vlečná či tlačená. Dá se zaměřit u vlastností kol na počet stupňů volnosti jejich pohybu. Kola, která se běžně používají mohou mít jeden nebo dva stupně volnosti, ale kola s jedním stupněm volnosti se mohou otáčet pouze kolem jedné osy. Tato osa je paralelní s povrchem, po kterém se kolo pohybuje. Kolo se dvěma stupni volnosti se pohybuje kolem dvou os paralelních s povrchem - v tomto případě jde o pohyb, který je znám např. z počítačové myší. 5.1.1 Diferenciální podvozek Tento typ podvozku se řadí k nejjednodušším a nejpoužívanějším podvozkům pro mobilní roboty. Nejvíce se využívá u malých a také levných strojů, například pro použití uvnitř budov. (Šolc, F.; Žalud, L., 2002) Vyznačuje se tím, že mají nezávisle poháněná dvě kola a vpředu (popř.vzadu) volně otočné nepoháněné směrové kolo(kárník Ladislav, 2002) Robot s diferenciálním podvozkem je schopen se otočit na místě. 5.1.2 Synchronní podvozek U tohoto podvozku má každé kolo dva stupně volnosti. Typická konfigurace tohoto podvozku obsahuje tři kola uspořádaná do tvaru rovnostranného trojúhelníku. Tvar robotu bývá vždy na stejnou stranu.(šolc, F.; Žalud, L., 2002)

5.2 Typy senzorů 13 5.1.3 Trojkolový podvozek s řízeným předním kolem Má jedno poháněné kolo a dvě kola řiditelná nebo dvě poháněná a jedno řiditelné. (Kárník Ladislav, 2002) 5.1.4 Ackermanův podvozek Dle Šolc, F.; Žalud, L., 2002 tento typ je používán u automobilů. V robotice jsou hnaná pouze zadní kola a přední kola jsou natáčena každá jiným úhlem. 5.2 Typy senzorů Firma Lego Mindstorms dodává senzory. Jedná se o senzory, které jsou popsány níže. 5.2.1 Tlakový senzor NXT Použitím s NXT kostkou indikuje tlakový senzor stlačení, eventuálně stlačení a uvolnění. Senzor může být použit jako čítač stlačení či uvolnění senzorového tlačítka. Jednoduše dotykový senzor je vypínač: Může být zapnutý anebo vypnutý.(lego Mindstorms Education, 2010) Obr. 2: Tlakový senzor. Obr. 3: Princip dotykového senzoru. 5.2.2 Světelný senzor NXT Světelný senzor je jedním ze dvou senzorů, které robotu umožňují vidění. Světelný senzor umožňuje robotu rozlišit světlo a také tmu. Dokáže poznat intenzitu světla v místnosti a změřit intenzitu světla barevných povrchů.(lego Mindstorms Education, 2010)

5.2 Typy senzorů 14 Obr. 4: Princip světelného senzoru. Obr. 5: Světelný senzor. 5.2.3 Ultrazvukový senzor NXT Tento senzor umožňuje robotu vidět, hledat předměty, vyhýbat se překážkám, měřit vzdálenost a zaznamenávat pohyb. Ultrazvukový senzor využívá stejných vědeckých principů jako netopýři: měří vzdálenost na základě výpočtu doby, během níž dorazí k předmětu zvuková vlna a znovu se vrátí - stejně jako ozvěna. (LEGO Mindstorms education [PDF], 2006) Obr. 6: Ultrazvukovy senzor. 5.2.4 Zvukový senzor NXT Zvukový senzor detekuje intenzitu zvuku v decibelech (db) od jemných a tichých zvuků až po zvuky hlasité.(lego Mindstorms education [PDF], 2006) Obr. 7: Zvukový senzor.

5.3 Typy motorů 15 5.3 Typy motorů V níže uvedené části jsou popsané druhy motorů, které se můžou objevit u robotů. Za druhy motorů v kybernetice se používají především elektromotory. 5.3.1 Střídavé motory(ac motors) Střídavé (AC)servomotory mají konstrukci motoru s použitím nových magnetických materiálů (neodyn-železo-bór), které dovolují až 5-násobné momentové přetížení a jsou proto vhodné pro dynamicky náročné úlohy. (Servomotory, 2010) 5.3.2 Stejnosměrné motory(dc motors) Jsou patrně nejjednodušší na použití, neboť jsou pevně umístěné permanentní magnety (stator) a volně se otáčející elektromagnety (rotor). Problém napájení pohyblivých elektromotorů je řešen pomocí tzv. komutátoru. Stejnosměrné motory jsou nejčastěji používané v malých a středně velkých robotických systémech. (Šolc, F.; Žalud, L., 2002) 5.3.3 Krokové motory Základní princip krokového motoru je úplně jednoduchý. Proud procházející cívkou statoru vytvoří magnetické pole, které přitáhne opačný pól magnetu rotoru. (Řezáč Kamil, 2002) Nevýhod je několik: motory jsou obecně podstatně pomalejší (mnohdy však jde naopak o výhodu) a mají mnohem nevýhodnější poměr točivý moment/rozměry. Naopak výhodou je, že umožňují zabrždění osy. Tyto motory však bývají často používané u malých a lehkých robotů s diferenciálním podvozkem.(šolc, F.; Žalud, L., 2002) 5.3.4 Servomotory Servomotor zkráceně Servo je motor pro pohony (většinou elektrické, ale existují také hydraulické, pneumatické či dokonce parní serva), u kterých lze na rozdíl od běžného motoru nastavit přesnou polohu natočení osy. Ovládají se jím například posuvy u CNC strojů, nastavení čtecí hlavičky u pevného disku.(servomotor, 2009) Dle Šolc, F.; Žalud, L., 2002 má servomotor velkou popularitu v oblasti malých a levných robotů tzv. modelářská serva.

6 SOUČÁSTKY V LEGO MINDSTORMS 16 6 Součástky v Lego Mindstorms Stavebnice Lego Mindstorms obsahuje inteligentní NXT LEGO kostku s bluetooth technologií včetně dobíjecí baterie, tři interaktivní servo motory, tři lampy, USB kabel, 7 kabelů k senzorům a motorům, 3 kabely s redukcí k použití lamp, senzorů a motorů z počítačového řízení RoboLab a 431 stavebních LEGO dílů. Dále dva tlakové senzory, senzor světelný, zvukový a ultrazvukový. Tyto senzory jsme popsaly v předchozí sekci. 6.1 Obnovitelná baterie Vysoce výkonná lithiová baterie o kapacitě 1400 mah k napájení inteligentní Lego NXT kostky. Baterie má A/C konektor k připojení síťového adaptéru. Proces dobíjení trvá 4h a je indikován červenou LED diodou. Dobíjení je možné provádět přímo v NXT kostce.(lego Mindstorms Education, 2010) Obr. 8: Obnovitelná baterie. 6.2 Síťový adaptér Je vhodný k dobíjení lithiové baterie(lego Mindstorms Education, 2010) Obr. 9: Síťový adaptér 6.3 Inteligentní LEGO NXT kostka Programovatelná 32-bit kostka s Bluetooth bezdrátovou komunikací anebo možností připojení k 2.0 USP portu. Výbavou je maticový display(60 x 100 px), 4 vstupní

6.4 Interaktivní servomotor NXT 17 a 3 výstupní porty na 6 vodičové digitální platformě a 8KHz speaker. Pomocí čtyř tlačítek lze kostku a připojená zařízení testovat a omezeně řídit. NXT kostka je vybavena dvěma mikroprocesory. Prvním je 32 bit ARM7 mikroprocesor a druhým 8-bit mikroprocesor.(lego Mindstorms Education, 2010) Obr. 10: Inteligentni LEGO NXT kostka. 6.4 Interaktivní servomotor NXT Servo motor s vestavěným rotačním senzorem pro měření rychlosti, vzdálenosti a zpětnou vazbu k NXT. Řízení motoru lze provádět s přesností na jeden stupeň. Na stejnou rychlost otáčení je možné naprogramovat i více motorů. K připojení motoru je potřeba kabel, který je součástí základní soupravy. (LEGO Mindstorms Education, 2010) Obr. 11: Servomotor. 6.5 Bluetooth externí Externí USB Bluetooth adapter pro bezkontaktní komunikaci mezi PC anebo Mac počítačem a NXT inteligentní kostkou. Použití adapteru vyžaduje operační systém Microsoft Windows XP (Service Pack 2) anebo Apple MacOS X (10.3.9 a 10.4).(LEGO Mindstorms Education, 2010) Obr. 12: Externí Bluetooth.

7 PROGRAMOVACÍ NÁSTROJE V LEGO MINDSTORMS 18 7 Programovací nástroje v Lego Mindstorms Mindstorms NXT-G programovací jazyk dostal jméno z programovacího jazyka využívaného programem LabVIEW, vyvinutého firmou National Instruments. Programy napsané v NXT-G jsou tedy poskládané z grafických bloků, pospojovaných dohromady, u kterých se nastavují jejich vlastnosti a posloupnosti. Využívá produktu Lejos, který je k dispozici zdarma pro operační systémy Windows, Linux a MAC OS.(ROBOTI ČVUT - Katedra řídící techniky, 2009) 7.1 Lejos je firmware náhrada za Lego Mindstorms programovatelné kostky. V současné době podporuje LEGO RCX kostku a lejos NXJ podporuje NXT kostku. Port na nové Lego Mindstorms NXT je k dispozici od ledna 2007. Ten je mnohem rychlejší než verze RCX, má více paměti, systém menu, podpora Bluetooth a mnoho z NXT funkcí. Dále obsahuje Java virtual machine, takže umožňuje aby roboti Lego Mindstorms byli naprogamováni v programovacím jazyku Java. LEJOS NXJ nabízí: Objektově orientovaný jazyk (Java) Programování v standardním jazyku Java v IDE Netbeans nebo Eclipse Práci s preemptivní vlákny, vícedimenzionálními poli, Možnost rekurzivního programování Synchronizace, Výjimky, javovské typy včetně float, long a string Většinu z tříd java.lang, java.util and java.io Výborně dokumentované Robotics API (ROBOTI ČVUT - Katedra řídící techniky, 2009) 7.2 Java Java plně podporuje objektově orientované programování. Java je v současnosti nepoužívanějším programovacím jazykem.(myslíme objektově, 2004) Programují se v ní aplikace všech rozměrů od drobných programů pro čipové karty přes programy pro mobilní telefony a nejrůznější zabudovaná zařízení, desktopové aplikace až po obří projekty rozprostřené na řadě vzájemně komunikujících počítačů. Tento jazyk se řadí mezi hybridní jazyky. To znamená, že je současně překládaná i interpretovaná. (Pecinovský Rudolf, 2004) 7.2.1 Vývojové prostředí Eclipse Toto prostředí je opensource nástroj, který ve svém základu poskytuje pouze základní funkčnost potřebnou pro vývoj v Javě, ale disponuje velkým množstvím pluginů. Celé prostředí je implementované v jazyce Java, ale nepoužívá pro vykreslování GUI Swing, ale vlastní knihovnu SWT.(Skoumal Vladislav, 2010)

8 NÁVRH MECHANICKÉ KONSTRUKCE ROBOTA 19 8 Návrh mechanické konstrukce robota Tato mechanická konstrukce robota musela být vytvořená víckrát, než se stala ideální. Můj první pokus byl vytvořen takto: pro sestrojení robota byly použity dva servo motory NXT pro pravý a levý náhon předních kol, dále zadní pasivní stabilizační kolečko, které slouží k vyrovnání robota. Motory byly připojeny na porty A a C. Dotykový senzor byl umístěn na přední části robota. Jedná se o tlačítko a dotykový senzor NXT zobrazuje vždy buď hodnotu 0, pokud není stisknuté, nebo 1, pokud se stiskne, tedy pokud robot narazí na překážku. K tomuto senzoru jsem také sestavila nárazník, aby při nárazu robota do stěny byl náraz co nejšetrnější. Celková kostra robota je snadná a velikostně malá, aby se mohl robot snadno pohybovat labyrintem. Rozměry robota jsou na výšku 18 cm, na délku 25 cm a na šířku 16 cm. Nárazník byl rozměrově malý a na šířku měl 6 cm. Robot díky servo motorů je schopen se otočit na místě. Obr. 13: Kostra robota. Obr. 14: Stabilizační kolečko a nárazník dotykového čidla z boku. Tato konstrukce robota nebyla ideální, jelikož při odzkoušení nárazu robota na překážku se projevilo, že robot nezvládne tuto překážku ustát bez toho, aby se převrátil. Tudíž jsem musela vyměnit terénní kolečka za menší, která jsou vhodná

8 NÁVRH MECHANICKÉ KONSTRUKCE ROBOTA 20 na rovný povrch. Výměnou koleček se problém stability vyřešil. Kvůli změně koleček jsem musela přepracovat celou konstrukci robota, protože se celá konstrukce snížila a dotykový senzor s nárazníkem se třel o zem a tímto třením byla také ovlivněna přesnost a rychlost robota. Dále jsem vypozorovala, že se musí provést lepší konstrukce nárazníku, protože jsem potřebovala, aby byl nárazník širší a více ohraničoval robota. Rozměr nárazníku na šířku byl 16 cm a nárazník se rozšiřoval do boční strany robota. Tuto modifikaci jsem udělala z důvodů, aby byl náraz dotykového čidla co nejcitlivější a robot i při malém, ale také bočním nárazu na překážku pocítil náraz a to tím, že se dotykový senzor stlačil. Obr. 15: Nárazník dotykové senzoru. Bohužel se ukázalo, že tato konstrukce rovněž není ideální, a potřebovala jsem použít senzor kompas. Důvody pro použití senzoru kompas jsou uvedeny níže v kapitole implementace v jazyku Java. Jelikož jsem tedy musela přidělat senzor kompas, rozhodla jsem se k nové konstrukci robota. Tato konstrukce je více stabilnější. Opět je složená ze dvou servo motorků a stabilizačního kolečka. Protože jsem změnila konstrukci, bylo nutno také změnit nárazník u dotykového čidla. Nezměněný nárazník byl moc velký a vysoko postavený od země a zasekával se o překážky ve spodní části čidla. Protože tato nová konstrukce je mnohem delší a celkově větší, musela jsem odstranit mnoho součástek ze starého nárazníku. Tento důvod byl zapříčiněn absencí otáčení v labyrintu a také měl robot velký problém v hladkém průjezdu labyrintem. Další součástí robota jak jsem zmínila na začátku odstavce je kompas senzor. Jelikož kompas nemůže být hned vedle kostky a motorků, musela jsem vytvořit stožár, na kterém je senzor kompas přidělán. Tuto konstrukci, na které je přidělán kompas senzor, jsem se snažila sestavit co nejstabilněji, aby se při pohybu tento senzor příliš nepohyboval a tedy byl co nejpevněji přidělán k použitým součástkám, které jsou přidělány ke kostce. Důvodem zabezpečení stability stožáru, na kterém je přidělán kompas senzor, je obava, že při pohybu tohoto kompasu, by mohlo dojít ke klamným informacím, tedy že by mi senzor udával špatný úhel. Tato konstrukce se o trochu zvětšila, ale musela jsem zachovat velikost, podle které byl vytvořen labyrint, aby se robot mohl v tomto labyrintu otočit.

8 NÁVRH MECHANICKÉ KONSTRUKCE ROBOTA 21 Po vyzkoušení robota se stala tato konstrukce přijatelná tedy finální. Rozměry tohoto robota jsou na výšku 31 cm, na šířku 14 cm a délka robota je 25 cm, tyto rozměry jsou přijatelné k tomu, aby se robot mohl otáčet a pohybovat plynule v labyrintu. K připojení robota k počítači jsem použila kabel, nebo také bloetooth, který je více pohodlnější. Výhoda bloetooth je velká, protože při nahrávání programu do robota se musel připojený kabel k počítači připojit k robotu, aby se program uploadoval, následně se musel robot vypnout a znova zapnout. Problémové bylo, když se robot začal točit a postupně zamotávat do zmíněného kabelu. Bloetooth je tedy v tomto více pohodlnější, že se program hned uploadoval a nemusela jsem řešit vypnutí, oddělení kabelu od robota a následné zapnutí. V kostce lze nastavit defaultní připojení, tedy nemusí se opakovaně přistupovat ke složce pomocí file. Tento postup zabíral více času, protože postupem zkoušení programu a vložení nahrávek, které robot říká při nárazu do zdi se nahromadilo mnoho souboru a bylo obtížnější a nepohodlné stále nacházet potřebný soubor. Nevýhoda byla i v tom, že jsem vybrala soubor a po zmáčknutí jsem musela stisknout položku v menu vykonat program. Toto bylo také velice zdlouhavé. Obr. 16: Upravený robot. Obr. 17: Upravený nárazník z boku.

9 NÁVRH LABYRINTU 22 9 Návrh labyrintu Tato kapitola je věnována návrhu a komplementaci labyrintu. Máme mnoho druhů labyrintu, kterýma jsem se mohla inspirovat pro návrh a vytvoření labyrintu. Typy labyrintu pro robota se liší funkcí a také se musí dělit podle senzoru robota. Protože pokud má robot dotykový senzor jako v mém případě, je potřeba mít překážky, které jsou ve výšce dotykového senzoru, tedy aby překážka nebyla příliš malá a robot se s dotykovým senzorem nezasekl o tuto překážku, např. pokud robot jako v mém případě má před dotykovém senzorem nárazník. Při druhé konstrukci robota, jsem sestavila velký nárazník a protože překážka nebyla příliš velká, robot se se svým nárazníkem zasekl o dřevo, tedy o překážku a bylo těžké se z ní dostat ven, proto jsem musela změnit také nárazník u robota, který jsem zmenšila o značnou část. Samozřejmě také musí být překážka dostatečně vysoká, aby se dotykové čidlo této překážky dotklo a stisklo tento senzor. Za použití světelného senzoru, by musel být labyrint vytvořen např. pomocí černé pásky, která by byla nalepena na ploše, ale nepotřeboval by žádné hmotné překážky. V teoretické části v podkapitole dělení senzorů jsem uvedla, že světelný senzor rozpozná světlo a tmu a dokáže změřit intenzitu světla u barevného povrchu na ploše. Pro ultrazvukový senzor stejně jako u dotykového senzoru je potřeba hmotné překážky, protože tento ultrazvukový senzor umožňuje tzv. vidět. U tohoto senzoru není hledání cesty tak drastické, protože tento senzor dokáže měřit vzdálenost od překážky, tímto do ní nenarazí. Překážky tedy nemusí být pevně přidělané k ploše. Naopak u dotykového senzoru je pevnost přichycených překážek nezbytně nutná, protože při dotykovém senzoru si robot hledá cestu dotykem. Dále záleží u tohoto čidla také na rychlosti robota. Čím robot rychleji jede, tím musí být překážky pevněji přichyceny, nebo by se mohlo stát, že by robot nehledal cestu pomocí inteligence, ale cestu by si proboural. Při návrhu labyrintu jsem se snažila, aby se robot pohyboval jen jedním směrem, tedy aby se otáčel např. jen doleva. Nakonec jsem zjistila, že tato varianta není správná ani dobrá, protože si robot dokáže najít cestu a nezáleží na směru. V této kapitole jsem se věnovala návrhu a komplementaci labyrintu. Rozměry celého labyrintu jsou 125 cm x 125 cm. Podstava je ze 2 cm tvrzeného sádrokartonu a přepážky jsou z tvrdého dřeva 26 cm x 7 cm. Jedna buňka labyrintu má rozměry 30 cm x 30 cm, aby bylo možné se v této části buňky otočit na místě. Překážky jsou k ploše přilepené a ještě pomocí hřebíků zatlučené. Každá část dřeva je ještě k sobě přilepena bezbarvou lepící páskou, toto opatření je proto, aby se jednotlivé části labyrintu daly rozložit a labyrint se tedy stal mobilním. Mobilní je potřeba, jelikož robot nefunguje správně se senzorem kompas v laboratoři v budově Q. Tato budova má konstrukci ze železa, tudíž kompas zde nefunguje, je ovlivňován jejím magnetickým polem. Labyrint jsem zkoušela na různých místech. Před univerzitou, doma, kde jsem si vytvořila pomocí knížek labyrint, nebo také na dlaždicích, které nahrazovaly jednotlivé buňky a překážkami se stala moje ruka.

9.1 Typy Labyrintu 23 Jak jsem zmínila v teoretické části, v labyrintu je jen jedna cesta a nelze tam zabloudit. K tomuto účelů byl také robot tak naprogramován, aby tento labyrint prošel bez komplikaci. Kdyby měl robot projet bludištěm, tak by tento úkol nesvedl jen pomocí dotykového čidla a kompasu, protože bludiště obsahuje křižovatky a více cest na výběr. Obr. 18: Labyrint. 9.1 Typy Labyrintu Labyrint je především symbol řádu a nikoliv chaosu, jak je tomu u bludiště, který je jako skládanka v podobě složitě větvených cest s možností volby cesty a směru. Zatímco labyrintem vede pouze jedna cesta, neboli dráha, ke středu nebo zpět, nejsou zde žádné slepé uličky či záludnosti. Má pouze jedno ústí, na cestě nejsou žádné křižovatky, na kterých je nutné se rozhodnout, jakým směrem se vydat, a jedinou cestou ven je cesta po stejné trase. Labyrint se zdá být chaotický, ale ve skutečnosti je však uspořádaný a pravidelný.(the Labyrinth: Walking Your Spiritual Journey, 2008) Labyrinty jsou ve tvaru čtverce nebo obdélníku. Dále máme kulaté nebo kruhové, ale tyto typy se v robotice nepoužívají. Labyrinty jsou s překážkou a bez překážky. Bez překážky jsou např. pro barevné nebo světelné senzory, kde hlavní prioritou není hmotná překážka, ale trasa v podobě např. pásky nalepené na ploše. Labyrint se velmi ujal v herním oboru, který se stal velice populární na různých soutěžích. Tyto soutěže se týkají průchodem labyrintu pomocí různě volitelných druhů a počtů senzorů, a to v nejkratším čase. Těmito labyrinty jsou právě většinou obdélníkové či čtvercové tvary, které obsahují hmotné překážky jako je např. dřevo

10 VÝBĚR A IMPLEMENTACE V PROGRAMU 24 10 Výběr a implementace v programu Zprvu jsem měla možnost volit v kterém programu budu programovat robota. V programech které následně zmíním, lze splnit úkol této bakalářské práce. Měla jsem na výběr ze tří možností. Mezi tyto možnosti patří labview, java a nebo lego mindstorms. Váhala jsem mezi NXT-G a jazykem java. Nakonec jsem se rozhodla pro javu, protože má větší rozsah možností. 10.1 Program lego mindstorms Programování v lego mindstorms je úplně jiné než v jave, už protože java je objektově orientovaný jazyk. Vývojové prostředí Lego mindstorms vychází z programu labview. LabVIEW je moderní programovací vývojové prostředí, k vytváření programu ve formě blokových diagramu. Obsahuje mnoho knihoven pro analýzu měřených dat. Tyto data lze získávat přes sérioví a paralelní rozhraní a s využitím měřicích karet z různých měřicích přístrojů. Obsahuje vcelku propracované uživatelské rozhraní, kde s využitím připravených prvků (tlačítek, snímačů atd.) lze připravit velice vkusné měřicí pracoviště ovládané počítačem.(lesák, Pavel, 2005) Programy napsané v NXT-G jsou tedy poskládané z grafických bloků pospojovaných dohromady, u kterých se nastavují jejich vlastnosti a posloupnosti. Důraz je u NXT-G kladen na intuitivnost a jednoduchost vývojového prostředí. Toto vývojové prostředí je určeno pro žáky základních škol, tudíž tvoření v programu NXT-G je mnohem snadnější než v javě. Pracovní prostředí se skládá z hlavního menu. V hlavním menu nalezneme standardní funkce pro práci se soubory. Dále je zde možnost kalibrace senzorů a update NXT firmware. Další častí vývojového prostředí je pracovní plocha na které se vkládají funkční bloky. V pracovním prostředí se také nachází panel funkčních bloků, panel řízení a panel help. Program je tvořen právě vkládáním funkčních bloků, které se následně propojí. Tyto bloky lze propojit paralelně. Každý blok má své vlastnosti. Grafické rozhraní je velice přehledné a na každém kroku je pomůcka help a celkově je každý blok graficky znázorněn, potom tedy člověk hned rozpozná účel každého bloku. Jedinou nevýhodou je, že je toto vývojové prostředí v anglickém jazyce. Jak už jsem zmínila, toto vývojové prostředí se skládá z bloků. Použiji jen některé bloky, které se mi zdají nejdůležitějšími. Těmito bloky jsou: Blok pohyb, který ovládá funkce motorů. Tento blok obsahuje panel vlastností, kde nalezneme různé palety, pro následné nastavení např. výběr portu, směru či stupeň otočení. Blok zvuku slouží k přehrávání zvuků z nabídky. Máme na výběr buď zvuky ze souboru, které se nachází v paletě file, nebo také tóny, které se nalézají v paletě Note s klávesami. Blok cyklu znamená opakování, tedy to co máme vložené uvnitř smyčky (cyklu) se opakuje.

10.2 Implementace v jazyku java 25 Blok dotykový senzor se nastaví tak, aby reagoval na stisknutí a uvolnění tlačítka. Blok random je určený pro generování náhodných čísel ve vektoru od 0 100, který si sami zvolíme. Blok porovnání slouží zda hodnota A je menší, větší nebo rovna hodnotě B. 10.2 Implementace v jazyku java Mým úkolem byla implementace pro průchod robota v labyrintu pomocí dotykového čidla. Během programování a implementaci robota jsem zjistila, že robot nemůže projít pouze s dotykovým senzorem. Zkoušela jsem použít matici, tedy dvojrozměrné pole, kam robot zaznamenává hodnoty, aby se vyznal kde byl, tedy kde nezavadil o žádnou překážku a kolikrát navštívil buňku. Samozřejmě si také značí, kde překážka je. K tomu aby zaznamenání robota v matici bylo přesné a nebyl kontraproduktivní a vše správně fungovalo jak by mělo, je potřeba, aby robot jel rovně a otáčel se v přesném úhlu. K tomuto účelu je potřeba senzor kompas, který nastaví přesný směr. Bez tohoto senzoru se robot neotáčí ve správném úhlu a následek toho je, že robot po otočení nejede rovně jak by správně měl. V ideálních podmínkách by robot nepotřeboval senzor kompas. Jelikož robot při otočení svou konstrukcí může zavadit o překážku a neotočit se o požadovaný úhel. Ideální podmínky jsou takové, že robot má dostatek místa kolem sebe a otáčení je přesné. Tento důsledek je velice vážný, protože robot se zasekne z boku o část překážky a zaznamená do matice, že narazil do překážky. Tato informace je však klamná a robot si zaznamenává překážky tam kde nejsou a to ho zmate a v té chvíli se robot ztratí a neví kde se nachází. Jak už jsem zmínila výše v kapitole Návrh labyrintu, senzor kompas nelze použít v budově Q, kde se nachází laboratoř robotiky. Pokud bych chtěla použít jen dotykové čidlo, tak jsem z mého vypozorování usoudila, že by byla ještě jedna možnost k dispozici. Tímto řešením by bylo, že by robot byl hloupý tedy nepoužívala by se matice a robot by si vybíral cestu náhodně a mohlo by velmi dlouho trvat než by robot prošel ze startu do cíle. Proto tato cesta také není vůbec ideální. Nakonec po dlouhém váhání nad úkolem jsem zvolila variantu s použitím senzoru kompas.

11 SLOŽENÍ PROGRAMU 26 11 Složení programu Celý program se skládá z následujících tříd. Hlavním třídou je RoboteksKompasem. Dále jsou Labyrint, JizdaRovne, MaSeOtocit, MaZatocitVlevo, MaZatocitVpravo, NarazDoZdi implementujícími rozhraní Behavior, které implementují jednotlivá chování robota při určitých situacích. 11.1 Třída RoboteksKompasem Je to hlavní třída, která obsahuje funkci main a konstanty pro nastavení parametrů robota a labyrintu. Vytvořila jsem si jednotlivé objekty, které následně popíši. Objekt kompas je instance třídy CompassSensor, která přejímá v konstruktoru port do kterého je senzor připojen. Dalším objektem je dotykac, tento objekt je instanci třídy TouchSensor, který rovněž přejímá v konstruktoru port. Objekt pilot je instance třídy CompassPilot a v jeho konstruktoru předávám objekt kompas, průměr koleček, jejich vzdálenost od sebe a porty motoru. Dále je objekt lab třídy Labyrint, kterou si níže popíšeme. Dále proměnné, kde je uložený aktuální směr u kterého 0 odpovídá počátečnímu směru robota. U třídy CompassSensor směr 0 odpovídá severu, ale pro zjednodušení implementace jsme změnili stupnici pomocí metody resetcartesianzero(), tak že 0 odpovídá počátečnímu směru robota. Při zapnutí se robotek kalibruje otočením přibližně 360. Ke kalibraci využívá metodu pilot.calibrate(). Kalibrace NXT Kompasu není nutná, ale je vhodná protože omezuje nežádoucí ovlivňování kompasu magnetickým polem NXT kostky, motorů a částečně okolí. Tento senzor sleduje magnetické pole země spolu s určováním azimutu. Senzor určí směr na 1 přesně v rozsahu 0 359 s frekvencí 100 záznamů za sekundu. Pomocí metody setmovespeed třídy compaspilot. Dále v metodě main vytvoříme objekty tříd implementující rozhraní Behavior. Těmito objekty jsou naraz, vlevo, vpravo, otočit, rovně. Následně jsem vytvořila objekt arbousek třídy arbitrator. Tato třída Arbitrator určuje, které chování bude aktivní v systému řízení. Konstruktor této třídy přejímá pole objektu implementujících rozhraní Behavior. Chování s nejvyšším indexem v poli má nejvyšší prioritu. Priority jsou uvedeny výše, tedy naraz, vlevo atd. Po inicializaci objektu třídy Arbitrator je ještě nutná metoda start(), která spustí jeho činnost. Zde uvedu ukázku hlavní metody main: public static void main(string[] args) { kompas.resetcartesianzero(); pilot.calibrate(); pilot.setheading(0); pilot.setmovespeed(20f); lab.zapisnavstevu(); Behavior rovne = new JizdaRovne();

11.2 Třída Labyrint 27 Behavior vlevo = new MaZatocitVlevo(); Behavior vpravo = new MaZatocitVpravo(); Behavior otocit = new MaSeOtocit(); Behavior naraz = new NarazDoZdi(); Behavior[] barray = {rovne,otocit,vpravo,vlevo,naraz}; Arbitrator arbousek = new Arbitrator(bArray); arbousek.start(); } 11.1.1 Metoda zmenauhlu Další matodou je zmenauhlu s číselným parametrem udávající rozdíl úhlů. K aktuálnímu směru přičteme rozdíl úhlu, ale protože jsme se mohli dostat mimo rozsah 0 až 360 musíme v případě, že je aktuální směr vyšší než 359 odečíst 360. A v případě, že je nižší než 0 musíme 360 přičíst. Nový aktuální směr nastavím v objektu Pilot pomocí metody setheading(aktsmer) a otočím robota pomocí metody rotateto() objektu pilot. public static void zmenauhlu(int rozdiluhlu){ aktsmer=aktsmer+rozdiluhlu; if (aktsmer>359)aktsmer=aktsmer-360; if (aktsmer<0)aktsmer=aktsmer+360; pilot.setheading(aktsmer); pilot.rotateto(aktsmer,false); } 11.2 Třída Labyrint V této třídě jsem vytvořila dvojrozměrné pole o velikosti, která je nastavena s konstantou rozmermatice v hlavní třídě. Je to matice celých čísel. Na začátku matici vynuluji. Tato třída obsahuje čtyři veřejné metody a jednu soukromou. 11.2.1 Metoda presun Veřejnými metodami jsou presun, tato metoda nastavuje aktuální pozici v matici podle aktuálního směru robota a zaznamená návštěvu buňky. public void presun(){ if(robotekskompasem.aktsmer==0){akty--;} //nahoru, zmenší aktuální pozici Y o 1 if(robotekskompasem.aktsmer==90){aktx--;} //doleva, zmenší aktuální pozici X o 1

11.2 Třída Labyrint 28 if(robotekskompasem.aktsmer==180){akty++;} //dozadu, zvětší se aktuální pozice Y o 1 if(robotekskompasem.aktsmer==270){aktx++;}++;} //doprava, zvětší se aktuální pozice Y o 1 11.2.2 Metoda presunanecisto V metodě je zaveden parametr uhel, tato metoda vrátí souřadnice sousední buňky ve směru zadaném v parametru. 11.2.3 Metoda zapisprekazku Při nárazu robota na překážku se do matice zapíše hodnota na uvedené buňce 999. public void zapisprekazku(){ labyrint[presunnanecisto(0)[0]][presunnanecisto(0)[1]]=999; } 11.2.4 Metoda zapisnastevu Při návštěvě buňky tato metoda zvýší hodnotu v aktuální pozici o 1. 11.2.5 Metoda vrathodnotu Tato metoda je na stejném principu jako metodu presunnanecisto. Na místo souřadnic vrací hodnotu buňky. Vrátí hodnotu následující buňky v určitém směru, tedy kdybych měla aktuální pozici 5,5 a úhel 0, tak to hodnotu vrátí na pozici 5,4 public int vrathodnotu(int uhel){ return labyrint[presunnanecisto(uhel)[0]][presunnanecisto(uhel)[1]]; }

12 ROZHRANÍ BEHAVIOR 29 12 Rozhraní Behavior Rozhraní se používá pro definování chování. Rozhraní je velice obecné, proto funguje celkem dobře a individuální implementace chování je velmi široké. Jakmile všechna chování jsou definována, jsou předány arbitrovy, aby reguloval, která mají být aktivovány. Všechny třídy a rozhraní pro kontrolu chování se nacházejí v josx.robotics balíčku. API pro rozhraní chování jsou následující. 12.1 Popis jednotlivých metod v rozhraní behavior Rozhraní behavior se skládá z jednotlivých metod 12.1.1 Void takecontrol() arbitrátor vyhodnocuje takecontrol, pokud takcontrol vrátí boolean hodnotu, aby indikoval zda toto chování má být aktivní. Například, zda dotykový senzor indikuje, že robot narazil do objektu, tato metoda by měla vrátit hodnotu true, tedy že je to splněné a provede se action. Pokud vrátí hodnotu false, tak se provede jiné chování 12.1.2 Void suppress() Kód v supress() metodě by měl okamžitě ukončit kód běžící v metodě action(). Tato metoda může být také použita pro update dat předtím, než bude toto chování ukončeno. 12.1.3 Void action() Kód v této metodě inicializuje akci, jakmile chování začne být aktivní. Pokud tedy takecontrol() detekuje, že robot se srazil s objektem, potom kód v metodě action() donutí robota vrátit se a otočit se pryč od objektu. 12.2 Třída JizdaRovne Tato třídá obsahuje metodu action, v této metodě jsem použila metodu travel třídy CompasPilot. Robot cestuje směrem k headingu a jede vzdálenost určenou parametrem. Při každém kroku zvýším počitadlo kroku o jeden. Pokud je splněna podmínka, když je hodnota v počítadlu větší nebo rovno než počet kroků, které je potřeba aby robot ujel jednu buňku, tak po ujetí jedné buňky se počítadlo vynuluje a tak pomocí metody presun třídy labyrint se zapíše presun na novou buňku. Velikost BunkyCm je 29 cm a krok 1 cm. Když robot ujede 29 cm, což je 29 kroků, tedy jakmile ujede velikost celé buňky, vynuluje se počítadlo a zapíše se, že se nachází na další buňce v labyrintu. Navíc ještě robot signalizuje pípnutím pomocí metody sound.beep, že ujel 29 kroků. Zde uvedu část kódu třídy JizdaRovně výše popisované metody action():

12.3 Třída NarazDoZdi 30 public void action() { RobotekSKompasem.pilot.travel(RobotekSKompasem.velikostKroku,false); RobotekSKompasem.pocitadloKroku++; if(robotekskompasem.pocitadlokroku>= (RobotekSKompasem.velikostBunkyCm/RobotekSKompasem.velikostKroku)){ RobotekSKompasem.pocitadloKroku=0; RobotekSKompasem.lab.presun(); Sound.beep(); } } 12.3 Třída NarazDoZdi Toto chování se provede když dotykový senzor je stisknutý. Poté se robot vrátí o počet kroků, které jsou zaznamenané v počitadlu kroku a to se následně vynuluje a zaznamená se překážka pomocí metody zapisprekážku třídy labyrint. public void action() { RobotekSKompasem.pilot.travel (-RobotekSKompasem.pocitadloKroku,false); RobotekSKompasem.pocitadloKroku=0; RobotekSKompasem.lab.zapisPrekazku(); } 12.4 Třída MaSeOtocit Robot se Otočí pokud je za ním nižší hodnota než před ním. public void action() { RobotekSKompasem.zmenaUhlu(180); } public boolean takecontrol() { return (RobotekSKompasem.lab.vratHodnotu(180) <RobotekSKompasem.lab.vratHodnotu(0)); } 12.5 Třída MaZatocitVlevo Tato třída je na stejném principu jako třída MaSeOtocit. Jestliže buňka nacházející se vlevo je výhodnější než buňka před ním, potom je tato metoda splněná. Tedy když vrathodnotu 90 je menší než vrathodnotu 0. public void action() { RobotekSKompasem.zmenaUhlu(90);

12.6 Třída MaZatocitVpravo 31 } public boolean takecontrol() { return (RobotekSKompasem.lab.vratHodnotu(0) > RobotekSKompasem.lab.vratHodnotu(90)); } 12.6 Třída MaZatocitVpravo Pokud buňka vpravo je výhodnější než buňka před ním, tak je metoda splněna, tedy když vrathodnotu -90 je menší než vrathodnotu 0 public void action() { RobotekSKompasem.zmenaUhlu(-90); } public boolean takecontrol() { return (RobotekSKompasem.lab.vratHodnotu(0) > RobotekSKompasem.lab.vratHodnotu(-90)); } 12.6.1 Třída Pilot Třída pilot obsahuje metody pro řízení pohybu robota. Mezi tyto pohyby patří jízda vpřed, vzad v přímce nebo v kruhové dráze s otočením na nový směr. Používá třídu Motor, která reguluje otáčky motoru za pomocí NXT motoru, kde je zabudovaný otáčkoměr. (Pilot, 2005) 12.7 Zvuk V této podkapitole jsem se zaměřila na nahrávání zvuku, který jsem nahrála, aby robot mohl mluvit při každém nárazu. 12.7.1 Nahrávání a modifikace zvuku K nahrávání hlasu pro robota jsem využila programu GoldWave, kam jsem zvuk nahrála a pomocí nástroje effect, který je zobrazený na panelu, jsem dále použila z výběru položku mechanize. Zvuk jsem zmodifikovala z lidského hlasu na hlas robota. Tyto zvuky jsem nahrála do kostky NXT přes kabel.

12.7 Zvuk 32 12.7.2 Náhodný výběr zvuku při nárazu Nahrála jsem několik krátkých vět, které robot bude říkat při nárazu. Použila jsem random, která nám vybere náhodnou větu. Těmito větami jsou: au, halo, kde je cesta ven, pomoc, pomozte mi, kudy mám jet, zase blbě. public void reknineco(){ Random r = new Random(); Robotek.zvuk(poleZvuku[r.nextInt(poleZvuku.length-1)]); }

13 MOŽNOSTI ROZŠÍŘENÍ 33 13 Možnosti rozšíření Při modifikaci robota by bylo možné využít další senzor, a to ultrazvukový senzor NXT. Tento senzor by byl nejvíc na místě, protože umožňuje vidět překážky a také měřit vzdálenost. Tyto dovednosti jsou pro nás velice důležité, abychom překonali překážky, které jsou vytvořené v labyrintu. Dotykový senzor bych přidělala na zadní stranu konstrukce robota. Tato modifikace by byla určená k tomu, kdyby robot couval, tak aby pomocí dotykového senzoru zjistil, že narazil do překážky. Tento robot má nedostatky, které se týkají senzorů, protože kompas a dotykový senzor nám robota po průchodu labyrintu nezastaví. Tuto možnost neumožňuje žádný z těchto senzorů. Bylo by dobré ho např. rozšířit o světelný senzor. Na konci labyrintu by jsem nechala nějakou barvu, použila bych například kousek papíru, u kterého by robot pomocí světelného senzoru pochopil, že dojel do cíle. Naprogramovala bych ho, aby se točil dokola a pomocí metody sound bych nahrála větu Jsem v cíli. Tento robot není určený do terénu. K tomuto účelu by potřeboval jiná kolečka a také jiný podvozek. Dalším nedostatkem je kompas, který nám neumožňuje používat tohoto robota na každém místě které působí velká magnetická síla.

14 ZÁVĚR 34 14 Závěr Úkolem bakalářské práce bylo sestavení robota s dotykovým čidlem pro průchod labyrintu. Bakalářská práce je rozčleněna na dvě části, a to teoretickou a praktickou část. V teoretické části je čerpáno informací a pojmů z odborné literatury a internetu. Je zde uvedena například definice robotů a robotiky, dělení robotů, jejich potřebné součásti k sestavení robota, senzory atd. V praktické části bylo užito poznatků z části teoretické. Hlavními body praktické části jsou sestavení a naprogramování robota a vytvoření mu adekvátního labyrintu dle jeho rozměrů. Sestavení a naprogramování robota bylo časově náročné. Pro samotné sestavení robota bylo potřeba ho dvakrát modifikovat, aby splňoval podmínky pro správný průchod labyrintem. V prvním pokusu sestavení robota jsem zjistila mnoho nedostatků, které mi ale dopomohly k lepší modifikaci robota. V prvním pokusu jsem použila větší terénní kolečka, protože při nárazu na překážku ztratil stabilitu a převrátil se. Proto bylo potřeba tyto kolečka vyměnit za menší. Jelikož jsem také zjistila, že robot pro dosažení cílů potřebuje navíc také senzor kompas, tak jsem byla nucena změnit celou předchozí konstrukci robota. Největší změnou v konstrukci byla tedy změna nárazníku na dotykovém čidle a vytvoření stožáru, na kterém byl připevněn kompas senzor. Kompas senzor jsem použila z důvodu správného nasměrování robota. V praktické části jsem popisovala jednotlivé třídy a nejdůležitější metody, kde jsem uvedla i jejich zdrojový kód. Programovala jsem v jazyce Java. Funkce robota je omezena na budovy, které nejsou postaveny ze železné konstrukce. To je důvod, proč se robot nedá použít v budově Q Provozně ekonomické fakulty. Labyrint byl přizpůsoben rozměrům robota tak, aby mohl jednotlivými uličkami projít. Konstrukce tohoto labyrintu musela být sestavena tak, aby mohl projít případnými modifikacemi a také aby ho bylo možno rozložit pro přenášení z místa na místo. Bylo potřeba zvážit z jakého materiálu bude sestaven. Pro spodní část labyrintu byl zvolen sádrokarton, jelikož je to lehký druh materiálu a proto je ho možno snadno přenášet. U překážek jsem se rozhodla pro dřevo, které je pevné a dokáže vydržet náraz robota. Tyto překážky jsou přitlučené hřebíky k podložce a mezi sebou jsou přilepené lepící páskou, pro možnou změnu rozestavění překážek v labyrintu a také pro jejich zpevnění. Cíl bakalářské práce byl splněn, robot procházel labyrintem pomocí dotykového čidla, tak jak bylo stanoveno.