STŘEDNÍ PRŮMYSLOVÁ ŠKOLA ELEKTROTECHNICKÁ A INFORMAČNÍCH TECHNOLOGIÍ BRNO
LEGO - ROBOT SKLADNÍK MARTIN TYL V4.C Profilová část maturitní zkoušky MATURITNÍ PRÁCE
BRNO 2014
Střední průmyslová škola elektrotechnická a informačních technologií Brno
ZADÁNÍ MATURITNÍ PRÁCE obhajované před zkušební komisí Předmět: Soubor odborných předmětů (zaměření na informační technologie) Školní rok: 2013/2014
Obor: Informační technologie Student: Martin Tyl Třída: V4C Vedoucí práce: Petr Pernes
Téma: AUTO2 – LEGO – robot skladník Zadání: Naprogramujte robota jako skladníka tak, že prohledá plochu a nalezený předmět umístí na vyhrazené místo. Konstrukce bude provedena se stavebnicí LEGO MINDSTORMS NXT. V případě, že nebude stačit jedna stavebnice LEGO, použijte tyto stavebnice dvě.
Sestavte vhodnou konstrukci robota pro tento účel
Popište zvolenou konstrukci a její přednosti.
Vytvořte minimálně tři rozdílné druhy testovacích skladových objektů. Může se jednat o kostku, matičku, hrneček. Případně i další tvary. Pokud zvolená konstrukce vylučuje uchopení různých tvarů, je možné použít jeden typ předmětu, tento předmět bude na ploše vícekrát.
Popište zvolené programové prostředí a důvody volby.
Robot bude naprogramován tak, aby prošel vyhrazený skladový prostor a nalezené předměty přesunul na místo uskladnění.
Program umožňuje volbu uskladnit předměty vedle sebe, nebo na sebe.
Popište problémy řešené při prohledávání skladu a uskladnění předmětu.
Pokud bude program složitý, je možné program rozdělit do několika samostatných programů.
Výsledkem práce bude:
Funkční robot k prohledávání dvourozměrného prostoru s možností manipulovat s předměty.
Program, který bude řídit robota.
Několik kusů testovacích objektů.
Dokumentace ke konstrukci a programu robota.
Demonstrace řešení na překážkách
Doporučené prostředky pro řešení, technické požadavky:
Znalosti a dovednosti algoritmizace.
IDE a prostředí LEGO MINDSTORMS NXT v2.0.
Stavebnice LEGO MINDSTORMS education 9797.
Výsledky projektu CZ.1.07/1.1.16/01.0037 na MOODLE.
Formální požadavky
Student pracuje na práci dle zadání pod vedením vedoucího práce a případně odborného konzultanta.
Při minimálně 3 kontrolních dnech (data kontrolních dní stanoví vedoucí práce po dohodě se studentem, případně odborným konzultantem) předvede stav práce a akceptuje případné připomínky a doporučení vedoucího práce.
Student vypracuje zprávu o řešení zadání a základní dokumentaci v rozsahu minimálně 20 stran (odborného textu). Pokud to vyžaduje povaha úlohy, bude přílohou práce i příručka pro uživatele. Pro vyvázání zprávy postačuje kroužková či drátková vazba.
Zpráva bude obsahovat následující náležitosti: o
titulní list dle vzoru
o
toto zadání maturitní práce (vloženo do zprávy)
o
prohlášení o původnosti práce (viz vzor)
o
krátkou anotaci práce
o
obsah
o
teoretický úvod, seznam použitých zkratek
o
rozbor problému, popis možných řešení zadání
o
popis a rozbor vlastního řešení
o
experimentální část a dokumentaci k ní
o
závěr
o
seznam použitých zdrojů (literatura, obrázky, … - viz Autorský zákon)
o
přílohy
Termín odevzdání: 24. dubna 2014 do 12:00 hod (termín se vztahuje na zprávu i výslednou aplikaci). Tištěnou zprávu (případně příručku pro uživatele a zdrojové soubory) odevzdá v papírové i elektronické podobě (zprávu ve formátu PDF) ve dvou vyhotoveních na sekretariátě školy. Kritéria pro hodnocení
Splnění jednotlivých bodů zadání, úplnost řešení
Obtížnost a originalita řešení
Průběh práce na tématu (hodnocení kontrolních dnů)
Typografická a jazyková úprava práce
Odborná kvalita obhajoby práce
Vyjádření vedoucího práce, oponenta a případě odborného konzultanta nebo budoucího uživatele řešení
Doplňující poznámky
Vedoucí práce a oponent zpracují posudky práce a navrhnou hodnocení
Případný konzultant předá vedoucímu práce krátké zhodnocení práce studenta, toto hodnocení zapracuje vedoucí práce do svého posudku
Student bude minimálně 14 dní před obhajobou práce seznámen s posudkem vedoucího práce a oponenta, tyto posudky si student může vyzvednout na sekretariátě školy
Výsledky řešení musí student obhájit před maturitní komisí
Obhajoba může trvat maximálně 30 minut
Součástí obhajoby bude prezentace práce, předvedení funkčnosti aplikace (zařízení), seznámení s výsledky řešení a odpovědi na otázky komise
Student při obhajobě zodpoví všechny otázky oponenta uvedené v oponentském posudku
V Brně dne: 16. 12. 2013 Podpis studenta:
Podpis vedoucího práce:
Prohlášení Prohlašuji, že jsem maturitní práci LEGO - Robot skladník vypracoval samostatně a použil jen zdroje uvedené v seznamu zdrojů. Prohlašuji, že: Beru na vědomí, že zpráva o řešení maturitní práce a základní dokumentace k aplikaci bude uložena v elektronické podobě na intranetu Střední průmyslové školy elektrotechnické a informačních technologií Brno. Beru na vědomí, že bude má maturitní práce včetně zdrojových kódů uložena v knihovně SPŠEIT Brno dostupná k prezenčnímu nahlédnutí. Škola zajistí, že nebude pro nikoho možné pořizovat kopie jakékoliv části práce. Beru na vědomí, že SPŠEIT Brno má právo celou moji práci použít k výukovým účelům a po mém souhlasu nevýdělečně moji práci užít ke své vnitřní potřebě. Beru na vědomí, že pokud je součástí mojí práce jakýkoliv softwarový produkt, považují se za součást práce i zdrojové kódy, které jsou předmětem maturitní práce, případně soubory, ze kterých se práce skládá. Součástí práce není cizí ani vlastní software, který je pouze využíván za přesně definovaných podmínek, a není podstatou maturitní práce.
Martin Tyl Novoměstská 1477/3 621 00 Brno
V Brně dne 20. 4. 2014
.........................................................
Vedoucí práce: Ing. Petr Pernes
Anotace Dokumentace pojednávající o maturitní práci je rozdělena do celkově tří částí, které na sebe chronologicky navazují. První částí je rozbor, kde jsou představeny možné způsoby řešení a seznámení s vývojovým prostředím NXT. Tato sekce má za úkol seznámit uživatele se základními principy fungování prostředí a samotného LEGO bloku NXT. Také jsou zde uvedeny návrhy řešení a argumentace proč je pro výslednou podobu vybraný právě ten který model. Část druhá pojednává o zkouškách, jenž byly prováděny za účelem odladění programu a dosažení co největší přesnosti při úkonech robota.
Jsou zde uvedeny problémy a
nesrovnalosti, které se během programování a odlaďování vyskytly a také nabízí jejich možné řešení. Poslední, třetí, má za úkol seznámit s výsledným řešením a popsat jednotlivé prvky tohoto řešení. Je zde soustředěna vyšší pozornost na popis toho, jak pracuje program sám o sobě a ukazuje souvislosti mezi programem, algoritmem a výslednou činností robota.
Obsah ZADÁNÍ MATURITNÍ PRÁCE ......................................................................................................ii Prohlášení ...........................................................................................................................................v Anotace ............................................................................................................................................ vii Obsah .................................................................................................................................................. 1 Teoretický úvod................................................................................................................................. 2 Seznam použitých zkratek ............................................................................................................... 3 1
2
Rozbor řešení ............................................................................................................................. 4 1.1
Seznámení s vývojovým prostředím ............................................................................... 4
1.2
Rozbor zadání ..................................................................................................................... 6
1.2.1
Model č. 1 ..................................................................................................................... 6
1.2.2
Model č. 2 ..................................................................................................................... 7
Experimentální část................................................................................................................. 10 2.1
3
Problémy řešené při konstrukci ..................................................................................... 10
2.1.1
Hardwarové problémy ............................................................................................. 10
2.1.2
Softwarové problémy ............................................................................................... 10
Finální produkt ........................................................................................................................ 11 3.1
Algoritmus......................................................................................................................... 11
3.2
Program ............................................................................................................................. 11
3.2.1
Vysvětlení jednotlivých funkcí programu ............................................................. 12
3.3
Ostatní ................................................................................................................................ 17
3.4
Návod k obsluze robota .................................................................................................. 18
Závěr ................................................................................................................................................. 19 Seznam ilustrací............................................................................................................................... 20 Použité zdroje .................................................................................................................................. 21 Přílohy............................................................................................................................................... 22
1
Teoretický úvod Maturitní práci LEGO - Robot skladník jsem si vybral z toho důvodu, že mne zaujala možnost vytvořit a naprogramovat vlastního robota. Také výzva naučit se a prozkoumat něco nového, jelikož ač jsem se již podobnou problematikou zaobíral dříve, neměl jsem potřebu ani nutkání ponořit se hlouběji a získat více zkušeností. A právě tohle vše toto zadání nabízí. Z teoretického hlediska je zadání poměrně jednoduché. Sestavit robota s vhodnou konstrukcí a naprogramovat jej tak, aby ve svém okolí našel a vyzvedl objekty, které pak přesune na vyhrazené místo. Vše by mělo jít hladce vyprodukovat i v základním grafickém vývojovém prostředí bez nutnosti sáhnout po některém z podporovaných programovacích jazyků.
2
Seznam použitých zkratek V samotném textu se odborné zkratky, které nejsou obecně známé, skoro nevyskytují. Přesto je zde pár zkrácených výrazů a názvů, kterým by nezasvěcený člověk nemusel rozumět. Prostředí NXT či jen NXT – vývojové prostředí LEGO MINDSTORMS NXT Blok NXT – centrální (inteligentní) LEGO „kostka“ obsahující microcontroller Supersonic (sensor) – sensor, pracující na principu vysílání zvukového signálu který pokud narazí na objekt, tak se vrátí zpátky k vysílači a sensor vypočte z doby vyslání a přijetí signálu vzdálenost objektu Light (sensor) – sensor, který na základě odrazu světla umí rozlišit barevný rozdíl (nikoli samotnou barvu) např. černá – bílá nebo červená – modrá a na základě rozdílu reagovat
3
1 Rozbor řešení Hned ze začátku byla jasná nedostatečná informovanost o hlubších principech programování v NXT a tedy jsem se rozhodl nejdříve vyzkoušet naprogramovat jednodušší samostatné programy, které se zadáním sice neměli moc společného, avšak měli za úkol přiblížit mi chování jednotlivých bloků při různých nastaveních a kombinacích.
1.1 Seznámení s vývojovým prostředím Vývojové prostředí má na pohled příjemné vzezření (obr. 1) a je uživatelsky velice přívětivé. Většinu místa vyplňuje mřížka pro umisťování programových bloků a tedy asi nejdůležitější část celého programu. Zde jsou umístěny a pospojovány jednotlivé bloky
Obr. 1 – vzhled vývojového prostředí LEGO MINDSTORMS NXT v2
vytvářeného programu, se kterým se v danou chvíli pracuje. V pravém dolním rohu je navigační okénko, které vždy zobrazuje celý program a umožňuje se v něm rychle přesouvat na žádané místo. Nalevo od tohoto okénka se nachází konfigurátor bloků, kde se nastavují parametry pro aktuálně nakliknutý blok. Skoro po celé levé straně se táhne pás, ve kterém jsou umístěny jednotlivé komponenty, které můžeme použít při stavě programu. Panel je v základním zobrazení (obr. 2) orientován spíše na uživatele-začátečníka a obsahuje jen pár základních bloků.
4
Po přepnutí do rozšířeného panelu (obr. 3) máme k dispozici veškeré bloky, které jsou v dané verzi programu k dispozici. A jako poslední možnost panelu jsou zde takzvané „My blocks“ neboli bloky vytvořené uživateli. Tyto bloky lze vytvářet přímo v tomto programu anebo stáhnout z internetu a libovolně používat stejně jako bloky původní.
Obr. 2
Obr. 3 – rozvinutá nabídka rozšířeného panelu
Nakonec je tu po celé horní délce lišta pro ukládání a otevírání uložených projektů a další úpravy. Nastavují se zde také proměnné a konstanty a je zde i tlačítko pro tvorbu „My blocks“. Při skládání bloků do programu jsou vždy jednotlivé fragmenty pospojovány datovou linkou. Ta má tři různé typy podle účelu, jemuž slouží (obr. 4). Prvním typem je logická linka, která lze připojit pouze do bloků, které pracují s hodnotami True a False. Druhá linka je numerická a lze přes ni poslat libovolná čísla, která mohou být jak záporná tak i třeba desetinná. Poslední je typ textový, který posílá buď jen jednotlivé znaky, nebo celá slova.
Obr. 4 – jednotlivé typy spojových linek, první z leva je logická, druhá numerická a poslední textová
5
1.2 Rozbor zadání Ze zadání vyplývá, že je třeba vymyslet vhodnou konstrukci robota, která bude schopna vykonávat funkce jako „jeď“, „uchop“, „rozpoznej“ a podobné. Poté bude tato konstrukce naváděna programem, jenž bude jednotlivé kroky řídit a kontrolovat je. Proto jako prvním cílem při řešení jsem si ustanovil vymyslet vhodnou konstrukci robota, jelikož od ní se bude odvíjet program. Začal jsem se tedy zabývat vymyšlením jednoho či více účelných modelů, které by splňovali zadaná kritéria. Nakonec jsem se dobral k výsledku, kdy se mi nabízela dvě možná řešení, každé na jiném principu orientace a pohybu v prostoru. Ovšem sebelépe vymyšlená konstrukce bez vhodného programu je nepoužitelná a proto jsem musel zvážit také složitost programu pro ten který model. 1.2.1 Model č. 1 První model se pohybuje po předem zadaných osách (x, y) a nese na sobě pojízdnou hlavici se zvedákem. Je založen na kolejnicovém principu a inspirován kontejnerovým jeřábem. Kolejnicový princip znamená, že pro každou osu je vyrobena kolejnice a jejich pohyb je korigován tak, aby odpovídal souřadnicovému systému podobnému jako je u Kartézské soustavy souřadnic (dvojrozměrné). Nejníže položená kolejnice je určena pro osu y a pohybuje se tedy jen po této ose. Na této je pak kolmo položena druhá kolejnice pro osu x po které se pohybuje hlavice se zvedákem. Z celkem tří motorů, které lze připojit k NXT bloku, jsou využity všechny. Jeden ovládá pohyb po ose x, druhý po ose y a třetí zvedák. Pro zjištění objektů v prostoru jsou použity dva supersonické sensory každý pro jednu osu. Nejdříve sensor pro osu y určí vzdálenost objektu, a následně se celá konstrukce posune po této ose o požadovanou délku tak, aby kolejnice pro osu x se nacházela nad objektem. Poté vyjede hlavice, která nese zvedák a druhý sensor a jede do té doby, dokud nezaznamená objekt pod sebou, následkem čehož zastaví a spustí zvedák. Tento pak zvedne objekt, načež se celá konstrukce vrací do výchozí pozice a ukládá objekt na vyhrazené místo. Pokud je to vyžadováno programem nebo uživatelem celá akce se opakuje. 1.2.1.1 Výhody
Jednou z hlavních výhod konstrukce, je její přesnost, která je dána využitím souřadnicového systému. Další výhodou je konstrukce s vysokou stabilitou a také dobrou přehledností případných nedostatků a chyb. Také by tato konstrukce umožňovala splnění zadání po všech stránkách, jelikož by byla schopná vyzvednout různé objekty a také je různě umisťovat.
6
1.2.1.2 Nevýhody
Největší nevýhodou je velikost celé konstrukce. Jen na sestavení kolejnic modelu, bez pojízdné hlavice je potřeba většina hlavních součástek ze dvou stavebnic 9797. S větší velikostí přichází také problém s propojovacími kabely, kdy je potřeba použít do všech částí jen ty nejdelší a i tak jsou jen dostačující a ne adekvátní. Díky krátkým kabelům je taká potřeba využít dva hlavní NXT bloky. Jeden pro ovládání samotné konstrukce a motorů na ní umístěných a druhý pro staticky umístěný sensor snímající osu y. Mezi těmito sensory je potřeba mít nějakou komunikaci aby si navzájem předávali hodnoty, a tato lze řešit využitím Bluetooth modulu, který obsahují. Ovšem je tu problém s tím, že jsem nenašel způsob jak podržet otevřený kanál tak, aby spolu mohli neomezeně komunikovat. Vždy šlo poslat jen jednu hodnotu a celý přenos se tím ukončil. Z tohoto pohledu je tedy tato konstrukce nevyhovující. 1.2.1.3 Program
Část programu, která by pohybovala jednotlivými motory a uváděla tak celou konstrukci do pohybu by byla triviální záležitostí a to i pro méně zkušeného uživatele. Problém nastal u zbytku programu, kdy se moduly pokoušely navzájem komunikovat přes Bluetooth modul. Tento problém by se sice dal vyřešit, ale vyžadoval by spoustu času na přemýšlení a také výsledný program by byl monstrózní. 1.2.2 Model č. 2 Druhý model je založen na volném pohybu v prostoru, kdy se neřídí podle žádného souřadnicového systému ale podle vektorů. Sensor by vždy našel nejbližší objekt, nasměroval k němu pojízdný model a udal mu vzdálenost, o kterou se má posunout do předu k objektu. Zde by byl objekt vyzvednut, konstrukce by se otočila a vrátila by se na výchozí pozici. Pro nalezení objektu v prostoru model využívá rotačního pohybu a dvojice supersonických sensorů (obr. 5) a spoléhá se na výpočty v programu, které určí, že v ten pravý moment se rotace zastaví a celá konstrukce je namířena čelem k nalezenému objektu. Výpočty jsou založeny na principu porovnávání vah a neustále kontrolují, zda se hodnoty vycházející ze sensorů nerovnají. Pokud ano znamená to, že je model v poloze, kdy je čelem k nějakému objektu. Bohužel je tato metoda přesná asi jen na 90% a stává se, že někdy se model nedokáže natočit vůbec, jelikož je objekt vůči němu v takové poloze, že při jakémkoli natočení ve své pozici se vzdálenost z obou sensorů nerovná.
7
Obr. 5 – princip nasměrování modelu čelem k objektu, kdy vzdálenost A se musí rovnat vzdálenosti B
1.2.2.1 Výhody
Výhodou je zde velikostně malá konstrukce schopná volného pohybu v prostoru. Je jednoduše složitelná a neobsahuje velké množství součástek. Díky tomu se také jednoduše přenáší a celková manipulace s ní je příjemnější než u prvního modelu. Také modelu jsou zde jednodušší a nevyžadují hlubšího zásahu do konstrukce. 1.2.2.2 Nevýhody
Nepřesnost je nepřítelem tohoto modelu a to z důvodu, že pro pohyb dopředu a rotaci používá dva oddělené motory a tedy i když oba dva jedou na 100% výkonu každý má oproti tomu druhému jistou odchylku. Tím je způsobena nepřesnost rovné jízdy na větší vzdálenosti (>1m). Jako další nevýhodu bych označil nedokonalou vyváženost modelu, kdy se celá konstrukce svojí vahou nesenou v přední části nepatrně naklání a může tak ovlivnit spolehlivost čtení senzorů. A poslední, která je viděna nevýhodou vůči zadání, je ta věc, že na principu na jakém tento model funguje, není možné splnit některé části zadání a to konkrétně možnost používat více různých objektů, možnost uskladnění (na sebe, vedle sebe,…) a celé fungování je závislé na asistenci uživatele.
8
1.2.2.3 Program
Program je zde o poznání vyváženější nežli u prvního modelu, kde část programu byla jednoduše sestavitelná avšak druhá část nikoliv. Sestavení programu pro tuto konstrukci vyžaduje pochopení fungování bloků a tedy je jej schopen sestavit jen uživatel s dostatečnými znalostmi. Samotné sestavení bloků uvnitř programu je vysoce citlivé na jakékoli změny konstant a zapojení a to až do takového extrému že jedinou změnou může přestat program fungovat jako celek. Stručně řečeno je program rozdělen do větších bloků, které jsou seskládány z původních bloků, a každý tento „vyšší“ blok splňuje vždy jednu funkci. Např. „zjisti polohu“ „vypočítej vzdálenost“ „dojeď k cíli“ atd. Pokud má tedy uživatel znalost o konstrukci programu je schopen jej upravovat po těchto blocích tak aby neovlivňoval funkčnost bloků ostatních. Samozřejmě pokud provede změnu na bloku, který má za úkol zjistit vzdálenost a tato změna nebude funkční, nebudou správně funkční ani bloky které spoléhají na správný výsledek z tohoto bloku a reagují dle něj.
9
2 Experimentální část Jako výchozí model jsem si tedy zvolil konstrukci druhou. Nejdříve jsem musel upravit počet supersonických sensorů z jednoho na dva. Na začátku jsem totiž počítal s tím, že bude stačit jen jeden, ale při prvních testech se ukázalo, že výsledek je velice nepřesný a asi jen z 20% je šance nasměrovat model přesným směrem. Po tomto servisním zásahu bylo vše připraveno na první testování.
2.1 Problémy řešené při konstrukci Při řešení se vyskytlo několik problémů, které způsobili hlavně emociální újmu v tom smyslu, že mne odrazovali od práce svojí vytrvalostí. Některým problémům šlo předejít, avšak za podmínek které nelze jednoduše akceptovat a některé zase šlo obejít jiným přístupem k problému. 2.1.1 Hardwarové problémy U hardwaru se vyskytl jediný problém a tím byl způsob fungování supersonického sensoru. Tento sensor totiž jede non-stop a zobrazuje informace o vzdálenostech, i když nejede žádný program, který by jej využíval. Stačí, že je připojen k NXT, které je připojeno k PC. A to se stalo jedním z hlavních problémů, se kterými jsem se během řešení potýkal. Pro správnou funkci programu je totiž potřeba, aby sensor do proměnné zapsal jednorázově hodnotu a vypnul se. Pokud je sensor připojen rovnou na proměnnou bude ji neustále přepisovat hodnotami, které v tu danou chvíli snímá což je problém. Při řešení tohoto problému jsem zkoušel několik způsobů, z nichž žádný krom posledního nefungoval. Řešením se stalo dorovnávání proměnné, kdy celý robot stojí na místě a jen snímá sensorem. Tím se stabilizuje hodnota ze sensoru a program je schopen dorovnat hodnotu v proměnné tím že neustále přičítá jedničku až do té doby, dokud se hodnoty nerovnají. 2.1.2 Softwarové problémy Softwarových problémů bylo poněkud více, než jsem na začátku očekával, že bude. Největší potíž zde byla kompatibilita s operačním systémem. Program byl nestabilní, zasekával se někdy se jen vzdal, a aniž by cokoli nahlásil tak spadl. Řešením zde by byla instalace virtuálního PC a rozjetí programu nejlépe pod Windows XP ovšem virtuální PC zabírá určitou kapacitu paměti RAM a s nároky jaké má programové prostředí NXT je to dohromady neslučitelné. Program sám o sobě je schopen zabrat si i více jak 2GB RAM pokud často neukládáte svoji práci a neodlehčujete tak pamětem.
10
3 Finální produkt Finální produkt po všech testech a úpravách je funkční robot, který umí vyhledat objekt v okolí, nasměrovat se k němu čelem, vypočítat délku v centimetrech a převést ji na stupně pro motory, dojet k objektu, zvednout jej, určit zda je objekt barvy červené nebo modré, otočit se o 180°, dojet zpátky na svoji výchozí pozici a počkat 10sekund na příkaz k opakování, který pokud nedostane tak je po oněch 10sekundách vypnut. Pokud příkaz k opakování dostane, pustí předmět, počká na odebrání a začne znovu vyhledávat.
3.1 Algoritmus Kompletní algoritmus lze nalézt v příloze. Návrh algoritmu pro program probíhal ve více fázích. První fází bylo zkonstruovat základní kostru samotného programu a podle ní algoritmus, do kterého jsem postupně doplňoval části podle toho, jak jsem dokončoval program. Většina algoritmu je tedy vyvozena z programu, ale je tu pár částí, kde jsem nejdříve navrhl algoritmus, jelikož jsem si nedokázal uspořádat jednotlivé kroky dané části tak abych ji rovnou naprogramoval. Lze tedy říct, že jsem nevyužil ani program ani algoritmus jako šablonu pro to druhé, ale spíš jsem je používal ke vzájemné podpoře jednoho s druhým.
3.2 Program Kompletní program lze nalézt v digitální příloze. Dokončený program má skoro 5MB velikost v plné verzi, tedy bez zkrácení všech funkcí do „My blocks“ a zkrácená verze zabírá cca 500kB. Oba programy jsou absolutně totožné co do funkčnosti, avšak lze zde vidět jak využívání „My blocks“ pomáhá udržovat program ve snesitelných mezích.
11
3.2.1 Vysvětlení jednotlivých funkcí programu Vysvětlení jednotlivých funkcí a cyklů v programu spolu s odpovídající částí algoritmu.
Kontrolní cyklus a reset funkce
Kontrolní cyklus má za účel zkontrolovat, zdali je program spuštěn poprvé nebo se opakuje. Pokud je spuštěn poprvé provede svoji sekvenci a zapíše si sám do sebe, že již byl proveden a tedy nebude nic dělat, dokud se program celý nerestartuje. Funkce reset slouží pro resetování motorů a jejich sensorů, resetování Light sensoru a vyčištění displeje pokud je na něm něco zobrazeno. Dále zvedá úchopné vidle do výchozí polohy.
Obr. 6 – z leva kontrolní cyklu, za ním funkce reset (my block)
12
Vyhledávací cyklus
Cyklus, který v sobě obsahuje několik True/False switchů, má na starost vyhledání a nasměrování čela robota směrem k objektu. První část má na starost sensor na portu číslo jedna a je to sensor, který je umístěný na konstrukci tak, že je vždy první, který „vidí“ objekt. Tento sensor měří vzdálenost, a pokud je něco ve vzdálenosti menší, než je zadaná konstanta tak program pokračuje do druhého switche. Zde se to stejné opakuje, až i druhý sensor na portu 4 zaznamená hodnotu nižší, nežli má defaultně zadanou. Poté se začnou porovnávat hodnoty z obou sensorů, a dokud se nerovnají tak se robot stále otáčí na nejnižší možné rychlosti. Pokud se však hodnoty nejsou schopny vyrovnat je zde problém, který způsobí, že se robot bude neustále otáčet, dokud nenarazí na jiný objekt. Jedná se o neošetřenou podmínku, nad kterou jsem uvažoval jak ji ošetřit, ovšem nenapadlo mě žádné vhodné řešení. Nechal jsem tedy program jak je a zkoušel jsem jej pořád dokola abych zjistil jaká je pravděpodobnost této chyby. Výsledek vycházel tak, že 1 z 8 pokusů je chyba a se jedná o odpustitelnou chybu.
Obr. 7 – zapojení vyhledávacího cyklu
13
Matematická funkce
Funkce mající za úkol získat vzdálenost ze sensoru do proměnné aby se s ní dalo nadále
pracovat.
porovnává
Funguje
proměnnou
ta,
že
„Vzdal“
s hodnotou sensoru. Pokud se nerovnají tak je zde switch, kde ve False je matematický
postup
aby
se
do
proměnné „Vzdal“ přičetla +1, poté se celý cyklus opakuje. Zase se otestuje, jestli jsou si hodnoty rovny a pokud ne, přičítá se +1 a pokud ano cyklus končí a v proměnné „Vzdal“ zůstává hodnota, která se rovná vzdálenosti ze sensoru. Tuto hodnotu pak matematicky převedeme na počet stupňů, o které se musí otočit kola motorů, aby se dostala do požadované vzdálenosti, a zapíšeme ji do proměnné „Otac“.
Obr. 8 – cyklus, který dorovnává proměnnou tak aby měla stejnou hodnotu jako sensor a matematický „vzorec“ převádějící tuto hodnotu na stupně
14
Funkce vpřed
Tato funkce má jediný úkol, a to pohnout motory tak, aby se počet stupňů, o který se otočí, rovnal počtu stupňů, které jsou v proměnné „Otac“.
Obr. 9 – funkce pro pohyb
Úchop objektu a rozpoznání barvy
Další
jednoduchý
krok
programu. Posunutí motoru A, který na sobě má úchopné vidle a následné čtení z Light sensoru. Následuje zvukový projev
„object
red“
nebo
„object blue“ podle rozpoznané barvy.
Obr. 10 – pohyb motoru a rozpoznání barvy
15
Funkce pro otočení
Je zde konstanta obsahující předem naměřenou hodnotu odpovídající počtu stupňů pro otočení robota o 180°. Porovnává se zde konstanta „Otoceni“ a rotační sensor jednoho z motorů. Dokud nejsou hodnoty rovny, robot se stále otáčí.
Obr. 11 – funkce určená pro otočení o 180°
Odpočet pro opakování
Poslední funkce avšak nikoli poslední blok. Zde se čeká 10sekund, jestli uživatel potvrdí tlačítkem opakování anebo bude program ukončen. Cyklus vždy na začátku počká jednu sekundu, pak ověří, jeli zmáčknuto tlačítko, a jestliže není, přičítá do proměnné „Spozd“ hodnotu +1 načež kontroluje, není-li hodnota v proměnné rovna 10. Jestliže je program ohlásí zvukovým signálem konec a ukončí se. Pokud není, cyklus se opakuje. Takto se děje do doby dokud není zmáčknuto tlačítko anebo dokud neuběhne 10sekund.
Obr. 12 – cyklus řídící odpočet a opakování celého programu
16
Ostatní části programu
Nevypsal jsem zde celý program, jen funkce a cykly, které se podílí na hlavní činnosti. Ostatní bloky jsou v programu umístěny pro resetování sensorů, motorů a pro zpoždění. Jsou vždy samostatně stojící, a proto není těžké odvodit, k čemu na daném místě slouží.
3.3 Ostatní Jedním z dalších problémů při řešení byl samotný takt, na kterém microcontroller jede. Díky jeho nižšímu taktu se stává, že ve fázi hledání se robot dostane do situace, kdy se hodnoty na obou sensorech rovnají na tak krátkou chvíli, že nejsou zaznamenány, jelikož se objevili ve chvíli, kde microcontroller nečte a jsou tak ignorována. Tím se stane, že se robot nadále otáčí a pro uživatele to vypadá, jako kdyby objekt neviděl. Dalším problémem se supersonickými sensory je ten, že se mohou navzájem ovlivňovat při čtení, jelikož oba dva zaráz vysílají zvukové vlny, které se mohou odrazit pod takovým úhlem, že odražené vlny se dostanou ke čtení pro druhý sensor a zmatou jej tak, že na okamžik mu přeskočí hodnoty na úplně jinou úroveň.
17
3.4 Návod k obsluze robota 1. Robota zapněte a přes menu se dostaňte k souboru s programem 2. Vyberte program a potvrďte zmáčknutím, druhým zmáčknutím program spustíte 3. Nyní robot provádí první start programu, kde nejdříve 3sekundy čeká a až pak začne konat, mezitím umístěte objekt do maximální vzdálenosti 50cm od robota 4. Robot se začne otáčet proti směru hodinových ručiček až do doby než najde vámi položený objekt. Poté k němu dojede, sebere jej a nahlásí vám jeho barvu. Následně se otočí a dojede zpátky na výchozí místo. 5. Nyní máte na výběr robota nechat počkat 10sekud aby se sám ukončil anebo program zopakovat stisknutím senzorového tlačítka. 6. Pokud jste zvolili opakovat, robot pustí objekt a počká, dokud jej neodeberete, načež opětovným zmáčknutím stejného tlačítka mu dáte znamení, že je vše připraveno a může jet znovu
18
Závěr Zadání, jak jsem v průběhu řešení zjistil, je bohužel či bohudík nedefinováno přesně a může se tedy stát, že řešitel si jej vyloží o trochu jinak, než si zadávající přeje vidět řešení. Ovšem za mou osobu si nemyslím, že je to na škodu a nechává to řešiteli více volnosti při řešení. Během řešení je ovšem potřeba často kontrolovat s vedoucím práce, aby se řešitel příliš neodklonil. Mé řešení dopodrobna neodpovídá zadání a to konkrétně v těchto bodech: - robot nedokáže pracovat s více než s jedním druhem testovacích objektů, což je způsobeno druhem úchopu pro tyto předměty - robot neumí pracovat samostatně a je potřeba asistence uživatele (zde nevidím přílišný odklon od zadání, jelikož zde není specifikováno do jaké míry a v čem má být samostatný) - program nenabízí možnost uskladnění objektů na určeném místě a to z důvodu výběru samotné konstrukce a principu fungování Ostatní body však splňuje více či méně dle požadavků. Robot dokáže vyhledat předměty, které jsou kolem něj umístěné, avšak vždy se soustředí jen na ten první, který uvidí a ostatní ignoruje, dokud není vyzván k opakování programu. Samotná procentuální úspěšnost hledání je asi 80% a toto nižší číslo je způsobeno z části samotnými sensory, které se mohou navzájem ovlivňovat a také samotným programem, ve kterém jsem nebyl schopen ošetřit některé podmínky, aniž bych nezkonstruoval tak monstrózně velký program ve kterém jeho většinu tvoří právě ošetření různých podmínek. A ani takhle bych dozajista nebyl schopen ošetřit vše. Závěrem za mou osobu bych tuto práci doporučoval každému, kdo si přeje zdokonalit sám sebe a potřebuje téměř okamžitě vidět výsledek své píle.
19
Seznam ilustrací [1]
Obr. 1, str. 3 – vzhled vývojového prostředí LEGO MINDSTORMS NXT v2
[2]
Obr. 2, str. 4 – základní panel
[3]
Obr. 3, str. 4 – rozvinutá nabídka rozšířeného panelu
[4]
Obr. 4, str. 4 - jednotlivé typy spojových linek, první z leva je logická, druhá numerická a
poslední textová [5]
Obr. 5, str. 8 - princip nasměrování modelu čelem k objektu, kdy vzdálenost A se musí
rovnat vzdálenosti B [6]
Obr. 6, str. 12 - z leva kontrolní cyklu, za ním funkce reset (my block)
[7]
Obr. 7, str. 13 - zapojení vyhledávacího cyklu
[8]
Obr. 8, str. 14 - cyklus, který dorovnává proměnnou tak aby měla stejnou hodnotu jako
sensor a na matematický „vzorec“ převádějící tuto hodnotu na stupně [9]
Obr. 9, str. 15 - funkce pro pohyb
[10]
Obr. 10, str. 15 - pohyb motoru a rozpoznání barvy
[11]
Obr. 11, str. 16 - funkce určená pro otočení o 180°
[12]
Obr. 12, str. 16 - cyklus řídící odpočet a opakování celého programu
20
Použité zdroje [13]
http://www.lego.zcu.cz - informace ohledně možností programování a rozšiřujících bloků
[14]
http://www.lego.com/cs-cz/mindstorms - příručky, aktualizace software a firmware
[15]
community.lego.com - diskuzní fórum, řešení softwarových problémů
[16]
http://www.nxtprograms.com - vysvětlení vytváření vlastních bloků a inspirace
[17]
http://moodle.sspbrno.cz – materiály zpracované Ing. Petrem Pernesem, využity pro
studium problematiky [18]
http://www.teamhassenplug.org – „my blocks“ ke stažení
21
Přílohy Příloha 1: Návod na sestavení robota a seznam potřebných dílů (pouze digitálně - pro tisk příliš objemné) Příloha 2: Algoritmus programu - kompletní algoritmus použitý pro program Příloha 3: CD s veškerým digitálním materiálem
22
Seznam použitých dílů
23
Algoritmus použitý pro program
24