• No results found

Model of plotter and scanner from LEGO Mindstorms Kit Model plotru a skeneru ze stavebnice LEGO Mindstorms

N/A
N/A
Protected

Academic year: 2022

Share "Model of plotter and scanner from LEGO Mindstorms Kit Model plotru a skeneru ze stavebnice LEGO Mindstorms"

Copied!
41
0
0

Loading.... (view fulltext now)

Full text

(1)

Model plotru a skeneru ze stavebnice LEGO Mindstorms

Model of plotter and scanner from LEGO Mindstorms Kit

Bakalářská práce

Autor: Václav Štencl

Vedoucí BP práce: Ing. Josef Chaloupka, Ph.D.

Konzultant: Ing. Miroslav Holada, Ph.D.

V Liberci 9.9. 2010

(2)

PROHLÁŠENÍ

Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje zákon č.

121/2000 Sb., o právu autorském, zejména § 60 – školní dílo.

Beru na vědomí, že Technická univerzita v Liberci (TUL) nezasahuje do mých autorských práv užitím mé bakalářské práce pro vnitřní potřebu TUL.

Užiji-li bakalářskou práci nebo poskytnu-li licenci k jejímu využití, jsem si vědom povinnosti informovat o této skutečnosti TUL; v tomto případě má TUL právo ode mne požadovat úhradu nákladů, které vynaložila na vytvoření díla, až do jejich skutečné výše.

Bakalářskou práci jsem vypracoval samostatně s použitím uvedené literatury a na základě konzultací s vedoucím bakalářské práce a konzultantem.

Datum: 9.9.2010

Podpis:

(3)

Děkuji svému vedoucímu Ing. Josefu Chaloupkovi, Ph.D. za jeho čas, materiály a pomoc poskytnuté během zpracování této práce.

(4)

ABSTRAKT

Tato práce se zabývá konstrukcí a oživením mechatronických systémů ze stavebnice LEGO Mindstorms NXT. Výsledkem práce je sestavený souřadnicový systém fungující ve třech variantách. Vytvořené programy umožňují uživateli používat souřadnicový systém jako plotter, scanner a šachový automat. Programy pro plotter a scanner obsahují i algoritmy pro úpravu obrazu. Součástí práce je také zvolení vhodného nástroje pro ovládání robota.

V první kapitole se práce zabývá stavebnicí LEGO Mindstorms NXT, obsahuje popis dílů a technické specifikace.

Druhá kapitola rozebírá možnosti programování robota. Je zde popsáno několik nástrojů a knihoven, s nimiž můžeme ovládat robota.

Třetí část obsahuje popis souřadnicového systému, čtvrtá plotteru, pátá scanneru a šestá šachového automatu. V každé části je popsán robot, jeho program a nakonec zhodnocení výsledku práce robota.

V závěru je celá práce shrnuta a je zde popsána výsledná funkčnost jednotlivých úloh.

Klíčová slova: Robotika, LEGO Mindstorms NXT, souřadnicový systém

(5)

chess-game robot. Plotter´s and scanner´s program includes also image modification alorithms. Selection of suitable tool for the robot´s control is also part of the thesis.

The first chapter deals with LEGO Minstorms NXT set, especially its technical specifications and description of components.

The second chapter involves possibilities of robot´s programming. There are also described several tools and libraries for robot´s control.

The next chapter describes coordinate system, the fourth describes plotter, in fifth is described scanner and the last deals with chess-game robot. In each of last three chapters is characterized appropriate robot, it´s program and resulting summarization of the robot´s function.

In conclusion are recapitulated and described results of every single solution.

Key words: Robotics, LEGO Minstorms NXT, coordinate system

(6)

OBSAH

PROHLÁŠENÍ ... 4

ABSTRAKT ... 6

ABSTRACT ... 7

ÚVOD ... 10

1. LEGO MINDSTORMS NXT ... 11

1.1 ŘÍDÍCÍ JEDNOTKA NXT ... 12

1.2 SERVOMOTOR ... 13

1.3 SENZORY ... 14

1.3.1 DOTYKOVÝ SENZOR ... 14

1.3.2 OPTICKÝ SENZOR ... 15

1.3.3 ZVUKOVÝ SENZOR ... 16

1.3.4 ULTRAZVUKOVÝ SENZOR ... 17

2. MOŽNOSTI PROGRAMOVÁNÍ ... 18

2.1 NXT-G ... 18

2.2 NXC... 19

2.3 LEJOS-NXJ ... 19

2.4 ROBOLAB ... 20

2.5 ROBOTC ... 21

2.6 RWTH MINDSTORMS NXT TOOLBOX... 22

2.7 NXT++ ... 22

3. SOUŘADNICOVÝ MECHATRONICKÝ SYSTÉM ... 24

3.1 POJEZDOVÁ HLAVA PRO OSU Y ... 25

4. PLOTTER ... 27

4.1 ROBOT PLOTTER ... 27

4.2 PROGRAM PLOTTER ... 27

4.3 ZHODNOCENÍ ... 30

5. SCANNER ... 31

5.1 ROBOT SCANNER ... 31

5.2 PROGRAM SCANNER ... 32

5.3 VÝSLEDEK ... 34

6. ŠACHOVÝ AUTOMAT ... 35

6.1 ROBOT ŠACHY ... 35

(7)

SEZNAM POUŽITÉ LITERATURY ... 39

SEZNAM POUŽITÝCH SYMBOLŮ A ZKRATEK ... 40

SEZNAM OBRÁZKŮ ... 41

OBSAH PŘILOŽENÉHO CD ... 42

(8)

ÚVOD

Robotika se zabývá návrhem a výrobou robotů a vývojem aplikací pro jejich ovládání. Robot může zastat práci člověka například tam, kde je ohrožen lidský organismus, kde je lidská práce vyloučena, nebo kde je práce příliš náročná. Slovo robot bylo poprvé použito v románu Karla Čapka R.U.R. Chápeme jím stroj pracující samostatně určeným způsobem s možností získávání informací z okolního prostředí, se schopností zasahovat do okolního prostředí a využívající zpětnou vazbu. Robot nemusí nutně zastávat práci člověka.

Robotika obsahuje obor experimentální robotika, který se zabývá vývojem robotů pro méně užitečné úkony. Poznatky získané v experimentální robotice se pak mohou využít pro robota, který zastává práci člověka.

Robotika je rozvíjející se vědní obor. Pomocí stavebnice LEGO Mindstorms NXT se s robotikou můžou seznámit i lidé nemající žádné zkušenosti s tímto oborem. Díky jednoduchosti sestavení robota ze stavebnice a i jednoduchému softwaru přiloženému ke stavebnici je LEGO Mindstorms NXT vhodné pro použití při výuce robotiky a také se často k tomuto účelu používá.

Cílem bakalářské práce je sestavit souřadnicový systém ze stavebnice LEGO Mindstorms NXT a napsat k němu aplikace. Robot se musí pohybovat po osách x a y a má pracovat jako scanner, plotter a šachový automat. Aplikace má být napsána ve vývojovém prostředí Microsoft Visual C++ Studio a je tím pádem nutné se seznámit s ovládáním robota pomocí určeného nástroje, případně použít pro ovládání nějakou knihovnu. Pro šachový automat je potřeba vyřešit připojení elektromagnetu, který zajišťuje pohyb figurek po šachovnici.

(9)

pomocí kterých můžete postavit z této stavebnice prakticky cokoliv. Samotná stavebnice obsahuje návod na postavení čtyř jedinečných robotů. Lze tak postavit například robota pro manipulaci s míčky, štíra nebo Alpha Rexe (Obr. 1.1) a který patří k nejzajímavějším a nejnáročnějším robotům, které lze ze stavebnice postavit. [1]

Obr. 1.1 Lego Mindstorms NXT a robot Alpha Rex

(10)

1.1 Řídící jednotka NXT

Hlavním prvkem stavebnice je řídící jednotka (Obr. 1.2) označovaná jako NXT. Je řízena 32-bitovým procesorem Atmel ARM7, který obsahuje 256KB flash paměti, 64KB RAM paměti a pracuje na 48MHz. Dále kostka obsahuje 8-bitový koprocesor Atmel AVR, který obsahuje 4KB flash paměti, 512Byte RAM paměti a pracuje na 8MHz.

Obr. 1.2 Řídící jednotka NXT

Pro komunikaci s okolím jednotka využívá rozhraní USB 2.0 o maximální rychlosti 12Mbit/s a rozhraní Bluetooth, pomocí kterého lze komunikovat třeba i s mobilním telefonem. Jednotka obsahuje 4 vstupní porty pro připojení senzorů a 3 výstupní pro připojení motorů. Pro zobrazení dat je kostka opatřena černobílým LCD displejem o rozlišení 100x64 pixelů, dále obsahuje reproduktor a tlačítka sloužící pro ovládání jednotky.

Blokové schéma kostky je zobrazeno na Obr. 1.3.

(11)

Obr. 1.3 Blokové schéma NXT jednotky

1.2 Servomotor

Pro pohyb robota je stavebnice vybavena servomotory (Obr. 1.4). Díky senzoru otáček je možné motory využít k měření rychlosti a vzdálenosti, či s nimi otáčet o zvolený počet stupňů. Senzory pracují s přesností +- jeden stupeň. Motory mají také funkci brzda, s níž je možné zastavit motor na přesné pozici. Rychlost motoru je možno nastavit a je umožněna i synchronizace dvou motorů, které se pak točí stejnou rychlostí. Podrobnosti viz. [4].

(12)

Obr. 1.4 Servomotor

1.3 Senzory

Senzory, které jsou popsány v kapitolách 1.3.1 až 1.3.4, jsou dodávány se stavebnicí. Dále je možné dokoupit i následující senzory, které nejsou součástí stavebnice, můžou však značně rozšířit možnosti robota. [6]

 Infračervený spojovací senzor – pro komunikaci mezi zařízeními na dálku.

 Gyroskopický senzor – Analogový senzor, zjišťující úhel a směr rotace v rozsahu +- 360° za sekundu. Reaguje na hodnoty odpovídající rychlosti do 300 otáček za sekundu.

 Senzor kompas – Sleduje magnetické pole země a dokáže určit azimut s přesností na 1°.

 Senzor barvy – Dokáže rozlišit různé barvy.

 Senzor akcelerace – Senzor měří akceleraci ve třech osách.

1.3.1 Dotykový senzor

Dotykový senzor (Obr. 1.5) je jednoduchý spínač. Senzor odesílá informaci „0“, pokud je spínač uvolněn a „1“, pokud je stisknut. Umožňuje robotu zaznamenat překážky, u robotických ruk se používá pro uchopení nějakého předmětu, či jako zarážka pro zastavení motoru.

(13)

Obr. 1.5 Dotykový senzor

1.3.2 Optický senzor

Optický senzor (Obr. 1.6) umožňuje rozeznat intenzitu světla v okolí a tím dává robotu schopnost „vidět“.

Obr. 1.6 Optický senzor

Pracuje ve dvou režimech. V prvním režimu měří pasivně intenzitu světla v okolí a odesílá informaci v procentech. Tento režim je vhodné použít pro detekci světla a tmy.

V druhém režimu se rozsvítí červená dioda a senzor je pak schopen rozeznat i různý jas barvy. Porovnání citlivostí lidského oka a optického senzoru je na Obr. 1.7.

Obr. 1.7 Citlivost optického senzoru

(14)

1.3.3 Zvukový senzor

Zvukový senzor (Obr. 1.8) zaznamenává akustický tlak. Může pracovat ve dvou režimech.

V prvním režimu zaznamenává zvuk v decibelech. Všechny zvuky jsou zaznamenávány se shodnou citlivostí a jsou zaznamenávány i ty, jež neslyší lidské ucho.

V druhém režimu senzor zaznamenává jen zvuk, který dokáže zachytit lidské ucho.

Citlivost senzoru se přizpůsobí citlivosti lidského ucha.

Senzor dokáže zaznamenat akustický tlak až do hodnoty 90dB, což odpovídá silnému hluku nebo jedoucímu vlaku.

Obr. 1.8 Zvukový senzor

Zde jsou ukázky různých úrovní hluku:

 0dB - Práh slyšitelnosti

 20dB - Hluboké ticho, bezvětří, akustické studio

 0dB - Šepot, velmi tichá ulice

 40dB - Tlumený hovor, tikot budíku, šum v bytě

 50dB - Tichá pracovna, obrácení stránek novin

 60dB - Běžný hovor

 70dB - Mírný hluk, hlučná ulice, běžný poslech televize

 80dB - Velmi silná reprodukovaná hudba, vysavač v blízkosti

 90dB - Silný hluk, jedoucí vlak

(15)

objektu. Senzor dokáže měřit vzdálenost od 0 do 255cm s přesností +-3cm.

Senzor funguje na principu měření doby mezi odesláním a přijmutím signálu.

Ultrazvukový senzor vysílá cyklicky vysokofrekvenční impuls, který se šíří prostorem rychlostí zvuku. Pokud narazí na nějaký předmět, odrazí se od něj a vrací se zpět k čidlu jako ozvěna. Z časového intervalu mezi vysláním impulsu a návratem ozvěny odvodí čidlo vzdálenost předmětu. Hůře se detekují malé předměty a předměty špatně odrážející zvukový signál třeba předměty zaoblené nebo předměty z měkkého materiálu.

Jsou-li v jedné místnosti dva senzory, může dojít k rušení. Jeden senzor zaznamená signál druhého jako svůj a chybně detekuje předmět.

Obr. 1.9 Ultrazvukový senzor

(16)

2. MOŽNOSTI PROGRAMOVÁNÍ

Se stavebnicí je dodáván software NXT-G, ale ten je příliš jednoduchý pro složitější aplikace. Pro programování robota existuje dále mnoho možností, je k dispozici mnoho vývojových prostředí a knihoven pro ovládání robota. Níže jsou uvedeny některé z možností.[5]

2.1 NXT-G

Programovací jazyk NXT-G je výsledkem práce firem LEGO a National Instruments a je základním programovacím nástrojem pro LEGO MINDSOTRMS NXT. Vyvinul se z programovacího jazyka využívaného programem LabVIEW od firmy National Instruments, který se jmenuje pouze G. Zkratka „G“ pochází z faktu, že programovací jazyk je grafický.

Programy napsané v NXT-G jsou tedy poskládané z grafických bloků, u kterých se nastavují jejich vlastnosti a posloupnosti. Důraz je u NXT-G kladen především na intuitivnost a jednoduchost vývojového prostředí včetně procesu programování tak, aby s robotem mohli pracovat už i žáci základních škol, kteří nemají s programováním žádné nebo minimální zkušenosti.

Obr. 2.1 NXT-G

(17)

C. Další výhodou je, že se jedná o freewarovou aplikaci. Nevýhodu je nepříliš snadné debugování programů. Na rozdíl od NXT-G se jedná o čistě textové programování bez grafických prvků.

Obr. 2.2 NXC

2.3 LeJOS-NXJ

Tento produkt je šířený společností Sourceforge zdarma a je k dispozici pro operační systémy Windows, Linux a MAC OS. Díky rozšíření a znalosti jazyka Java mezi programátory si tak velká část uživatelů systému LEGO Mindstorms vybírá právě leJOS NXJ s jeho rozsáhlými knihovnami, které podporují zajímavé funkce robota.

LeJOS NXJ obsahuje:

 Nový firmware pro NXT, který obsahuje Java Virtual Machine, a který nahrazuje standardní LEGO firmware. Lego firmware může být nahrát do kostky zpět pomocí LEGO software.

(18)

 Knihovnu tříd Java, kterou implementuje leJOS NXJ API.

 PC nástroje pro nahrání nového firmwaru do NXT kostky, nahrávání programů, debugování a další funkce.

 PC API pro zapisování PC programů přes USB, Bluetooth nebo LEGO komunikační protokol.

 Mnoho testovacích programů.

LeJOS NXJ nabízí:

 Programování ve standardním jazyku Java v IDE Netbeans nebo Eclipse.

 Objektově orientované programování.

 Práci s preemptivními 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".

2.4 ROBOLAB

Robolab (Obr. 2.3) byl původně vyvinut pro první generaci LEGO Mindstorms RCX. Později byl rozšířen, aby podporoval i novější verzi LEGO Mindstorms NXT.

Robolab je grafické prostředí, ale není tak intuitivní jako NXT-G. Robolab je dobrá volba, potřebujeme-li prostředí s podporou RCX i NXT, pro začátečníky je lepší použít NXT-G.

(19)

Obr. 2.3 ROBOLAB

2.5 ROBOTC

RobotC (Obr. 2.4) využívá standardního jazyka C. Pracuje ve dvou režimech „basic“

a „expert“. V režimu „basic“ jsou pokročilejší funkce skryty. V levé části okna programu RobotC je seznam funkcí a pomocí „drag and drop“ je možné tyto funkce přenášet do pravé části, kde se nachází napsaný program.

Obr. 2.4 ROBOTC

(20)

2.6 RWTH Mindstorms NXT toolbox

Otevřená architektura MATLABu vedla ke vzniku knihoven funkcí nazývaných toolboxy, které rozšiřují použití programu v příslušných vědních a technických oborech.

Tyto knihovny, navržené v jazyku MATLAB, nabízejí předzpracované specializované funkce, které je možno rozšiřovat, modifikovat, anebo lze pomocí nich jen čerpat informace z přehledně dokumentovaných algoritmů.

RWTH Mindstorms NXT toolbox je knihovna pro prostředí MATLAB. Umožňuje komunikaci s robotem LEGO Mindstorms NXT a je určena pro jeho ovládání.

2.7 NXT++

NXT++ je knihovna napsaná v jazyce C++. Může se použít v jakémkoliv programu využívajícím jazyk C++. Obsahuje funkce pro komunikaci přes USB port a přes Bluetooth a funkce pro ovládání robota. Tato knihovna se softwarem Microsoft Visual C++ 2008 Epress Edition je použita při programování souřadnicového systému.

Zde je několik příkladů příkazů knihovny použitých v programu:

 NXT::Open(&comm) – Zjistí, zda je k počítači připojena kostka NXT.

 NXT::Close(&comm) - Uzavře komunikaci mezi počítačem a kostkou NXT.

 NXT::Sensor::SetTouch(&comm, IN_1) - Nastaví port 1 na dotykový senzor.

 NXT::Sensor::SetLight(&comm, IN_4, true) - Nastaví port 4 na optický senzor s rozsvícenou červenou diodou.

 NXT::Sensor::GetValue(&comm, IN_1) – Přečte hodnotu senzoru na portu 1. Je-li senzor dotykový, je hodnota buď „1“ nebo „0“ podle toho, je-li senzor sepnut či rozepnut. Je-li senzor optický, je hodnota od 0 do 100 podle intenzity zaznamenaného světla.

 NXT::Motor::BrakeOn(&comm, OUT_A) - Zapne brzdu motoru na portu A.

 NXT::Motor::SetForward(&comm, OUT_A, 40) - Spustí motor směrem dopředu na portu A s rychlostí 40.

(21)

snímače otáček motoru na portu A.

 NXT::Motor::GetRotationCount(&comm, OUT_A) – Přečte hodnotu senzoru otáček motoru na portu A.

Knihovna dále obsahuje funkce, například pro zjištění nabití baterie, spuštění programu uloženého na jednotce NXT, pro zahrání zvuku či zvukového souboru, funkce pro práci se soubory uložených na jednoctce NXT a funkce pro práci se zvukovým senzorem, ultrazvukovým senzorem a dalšími senzory.

(22)

3. SOUŘADNICOVÝ MECHATRONICKÝ SYSTÉM

Souřadnicový mechatronický systém je postaven na desce o rozměrech 37,5 x 37,5 cm. Po stranách desky jsou proti sobě umístěny dvě lišty sloužící pro pojezd po ose x.

Kolmo k nim je položena konstrukce nesoucí lišty pro pojezd po ose y. Na konstrukci je umístěn servomotor pro pojezd po ose x, dva dotykové senzory a pojezdová hlava pro osu y. Součástí konstrukce je také tyč, která přenáší pohyb motoru pro pojezd po ose x z jedné strany na druhou, zajišťuje plynulý pohyb po ose x.

Souřadnicový systém se řídí pomocí počítače přes jednotku NXT. Jednotka obsahuje čtyři vstupní porty a tři výstupní. Vstupní porty 1 a 2 jsou určeny pro dotykové senzory na ose y, tyto senzory slouží jako zarážky. Na port 3 jsou připojeny dva dotykové senzory na ose x sloužící také jako zarážky. Jsou připojeny přes vyrobenou rozdvojku kvůli nutnosti použít čtvrtý vstupní port pro světelný senzor při scanování. K výstupnímu portu A je připojen servomotor určený pro pojezd po ose y a k portu B servomotor pro pojezd po ose y. K portu C se připojí buď servomotor pro aplikaci „plotr“, který zajišťuje pohyb lišty s tužkou, anebo elektromagnet pro aplikaci „šachy“, který slouží k pohybu s figurkami, a který není základní součástí stavebnice. Kabely musely být v důsledku nedostatečné délky prodlouženy, aby se pojezdová hlava mohla pohybovat po celé desce. Souřadnicová systém s popisem jednotlivých částí je na obrázku 3.1, jde o 3D model v programu MLCad.

Obr 3.1 Souřadnicový mechatronický systém

(23)

d- Dotykové senzory sloužící k zastavení pojezdu servomotoru pro pojezd po ose x při dojezdu na konec desky.

e- Dotykové senzory sloužící k zastavení pojezdové hlavy pro osu y.

f- Lišta osy y, po které jezdí pojezdová hlava.

g- Lišta osy x.

3.1 Pojezdová hlava pro osu y

Tato část robota zajišťuje v první řadě pojezd po ose y pomocí servomotoru. Dále obsahuje druhý servomotor, který je určen pro plotter - pro pohyb kreslící tužky.

K pojezdové hlavě je možno připevnit optický senzor pro scanner a elektromagnet pro šachový automat. Hlavu s popisem jednotlivých částí vidíme níže na obrázku.

Obr. 3.2 Pojezdová hlava

(24)

a– Servomotor a je určen k pojezdu po ose y a jsou k němu připevněny další části hlavy.

b– Servomotor b je určen k pohybu tužky při aplikaci „scanner“.

c– Ozubené kolečko pro pohyb lišty e.

d- Ozubené kolečko pro pohyb hlavy po liště osy y.

e- Pohyblivá lišta, k níž se při aplikaci „scanner“ připevní optický senzor, a při aplikaci „plotter“ tužka.

f- Kostky, které přitisknou hlavu k lištám osy y. Zajišťují přesný pohyb po ose.

g- Kostky sloužící jako zarážka, která po dojezdu na konec osy narazí na dotykový senzor a zastaví motor pro pojezd po ose.

(25)

rozjede pojezdová hlava až k bodu, kde je na obrázku konec čáry, tam se tužka vysune nahoru a opět se rozjede pojezdová hlava, čímž čáru z obrázku na počítači přenese na papír.

To pokračuje až do doby než pojezdová hlava dojede na konec nebo již ve svislém směru není žádná čára. V tom případě se robot posune o délku odpovídající jednomu pixelu ve směru osy x a pojezdová hlava dojede na bod x;0. Toto se opakuje do doby, než je celý obrázek nakreslen, nebo dokud cyklus uživatel sám nezastaví.

4.1 Robot plotter

Při této variantě je k pohyblivé liště na pojezdové hlavě připevněna tužka. Tužka je opatřena odpružením, které zamezuje vychýlení tužky z dráhy při kreslení a zajišťuje správné dolehnutí tužky na papír.

Pro plotrování je nutno velice přesně nastavit umístění tužky. Je-li tužka moc vysoko, nedosáhne hrot tužky při tisku na papír a nic nenakreslí, nedoléhá-li úplně, kreslí přerušovaně. Jestliže je naopak hrot tužky příliš nízko, má tužka tendence vychylovat se z osy y při kreslení čáry. Nakreslená čára pak není rovná a má tvar oblouku.

4.2 Program plotter

Do programu se nejdříve naimportuje přes menu obrázek. Ten se zobrazí v objektu picturebox. Před tiskem je nejdříve nutno obrázek upravit pro tisk. Tyto úpravy spočívají ve změně velikosti rozlišení obrázku, má-li obrázek příliš velké rozlišení, dále je nutné převést obrázek na černobílý a nakonec pomocí funkce prahování[7] změnit barvy v hodnotách RGB jen na čistě černou [0;0;0] a čistě bílou [255,255,255]. Na obrázku 4.1 je vidět postupná úprava obrázku, pro převod na čistě černou a čistě bílou barvu byl použit práh 128.

(26)

Funkce prahování:

int ox,oy,svet,prah; //deklarace proměných

prah = (int)Form1::numericUpDown1->Value; //načtení hodnoty prahu //načtení obrázku do bitmapy

bmp1=dynamic_cast<Bitmap^>(Form1::pictureBox1->Image);

for ( ox = 0; ox < bmp1->Width; ox++ )//cyklusy for pro procházení bitmapy {

for ( oy = 0; oy < bmp1->Height; oy++ ) {

pixelC = bmp1->GetPixel( ox, oy ); //načtení pixelu //získání hodnoty jasu z barevných složek pixelu

svet = (pixelC.R*0.2126)+(pixelC.B*0.7152)+(pixelC.G*0.0722);

if (svet<=prah) svet = 0; //rozhodnutí zda půjde o černou //nebo bílou else svet = 255;

//vytvoření nové barvy

Color newColor = Color::FromArgb(svet, svet, svet );

//uložení pixelu s požadovanou barvou do bitmapy bmp1->SetPixel(ox,oy,newColor);

} }

Form1::pictureBox1->Image=bmp1; //nahrání bitmapy do objektu picturebox

\ Obr. 4.1 Úprava obrázku

(27)

Otočení motoru o určitý počet stupňů je zařízeno senzorem otáček servomotorů. Je- li potřeba otočit motor o určitý počet stupňů, přečte se hodnota senzoru otáček motoru, spustí se motor a pak se čeká, dokud se hodnota senzoru nezvýší (nesníží) o požadovaný počet. Poté se motor zataví. Při zastavení motoru se nastaví proměnná „krok“ na následující hodnotu, což dovoluje pokračovat dál v programu.

Obr. 4.2 Program plotter

(28)

4.3 Zhodnocení

Na obrázku číslo 4.3 je vidět, jak robot vytisknul text „LEGO“. Chyby v tisku jsou způsobeny několika faktory. Vynechaná místa jsou způsobena nedolehnutím hrotu tužky na papír. Příčinou je buď mechanická chyba, nebo chybné otočení motoru. Přetáhnutí je způsobeno občasným zrychlením motoru v důsledku mechanického odporu nebo přílišného zatížení motoru. Další chyba tisku je vidět na písmenu „G“, zde se v důsledku mechanické chyby posunuly čáry v ose y.

Obr. 4.3 Porovnání vytisknutého obrázku s původním

(29)

y. Robot nejdříve zajede do bodu 0;0, poté se rozjede pojezdová hlava a začnou se snímat hodnoty ze světelného senzoru do doby, než dojede pojezdová hlava na konec, pak se posune robot ve směru osy x o délku, která odpovídá jednomu pixelu a pojezdová hlava se rozjede nazpátek. Začnou se číst hodnoty ze světelného senzoru, a když dojede pojezdová hlava na začátek, opět se posune robot ve směru osy x. Pro zjištění, zda se pojezdová hlava nachází na začátku či konci, jsou použity dotykové senzory. Dále se program opakuje, dokud nedojede do posledního bodu nebo uživatel cyklus sám nezastaví.

5.1 Robot scanner

Při této variantě je k pohyblivé liště na pojezdové hlavě připevněn optický senzor (Obr. 5.1). Dále je na desce položen bílý kartón s černým obdélníkem v pravém horním rohu odpovídajícím poloze 0;0, který slouží jako podklad.

Pro scanování je nutno nastavit polohu optického senzoru, senzor musí být těsně nad scanovaným materiálem.

Obr. 5.1 Pojezdová hlava s optickým senzorem

(30)

5.2 Program scanner

Proces scanování je celý řízen pomocí vlákna [3]. Na začátku se nastaví proměnná

„krok“ na hodnotu 1 a tisk se spustí. Proměnná „krok“ určuje, v jaké fázi se program nachází. Program obsahuje 6 kroků, které nemusejí jít nutně po sobě a vzhledem k okolnostem mohou mezi sebou přeskakovat. Na počátku robot nascanuje bílý podklad a černý obdélník v pravém horním rohu. Tyto nascanované informace slouží k úpravě obrazu po skončení scanování. Program postupně při scanování nahrává do objektu picturebox nascanovaný obrázek. Scanování se ukončí dojezdem na konec v ose x nebo může být ukončeno uživatelem. Po skončení scanování je potřeba upravit barvy obrazu. Díky nascanovanému podkladu můžeme určit, jaká hodnota jasu bude odpovídat bílé barvě a jaká hodnota bude odpovídat černé barvě a s těmito hodnotami se přepočítají barvy obrazu [7].

Další úpravou je posunutí lichých sloupců v obraze, tato chyba je způsobena scanováním v obou směrech.

Zde je procedura úpravy obrazu po scanování:

int ox,oy; //deklarace proměnných

double svet2,svet,svetla,tmava,barva;

svetla = 0; //nastavení počátečních hodnot proměnných tmava = 255;

svet = 0;

//nahrání obrazu do bitmapy

bmp1=dynamic_cast<Bitmap^>(Form1::pictureBox1->Image);

//for cyklus pro procházení bitmapou

for ( ox = 0; ox <= bmp1->Width-1; ox++ ) {

for ( oy = 0; oy <= bmp1->Height-1; oy++ ) {

pixelC = bmp1->GetPixel( ox, oy ); //nahrání pixelu

barva = pixelC.R; //zjištění úrovně jasu pixelu //zjištění jaká barva je nejsvětlejší a jaká nejtmavší

if (barva != 255){

if (barva>svetla) svetla = barva;

if (barva<tmava) tmava = barva;

} }

}

for ( ox = 0; ox <= bmp1->Width-1; ox++ ) {

for ( oy = 0; oy <= bmp1->Height-1; oy++ )

(31)

Color newColor = Color::FromArgb(svet2, svet2, svet2 );

bmp1->SetPixel(ox,oy,newColor); //uložení pixelu }

} }

//posunutí lichých sloupců o 2 pixely

for ( ox = 1; ox <= bmp1->Width-1; ox+=2 ) {

for ( oy = 2; oy <= bmp1->Height-1; oy++ ) {

pixelC = bmp1->GetPixel( ox, oy );

barva = pixelC.R;

bmp1->SetPixel(ox,oy-2,Color::FromArgb(pixelC.R, pixelC.R, pixelC.R ));

} }

Form1::pictureBox1->Image=bmp1; //nahrání obrazu do picturebou

Obr. 5.2 Program scanner

(32)

5.3 Výsledek

Na obrázku číslo 5.3 je vidět postup při scanování obrázku. V levé části obrázku je původní obrázek před nascanováním. Uprostřed je nascanovaný obrázek, na který ještě nebyla použita úprava jasu a posunutí sloupců. Je zde dobře vidět rozhození sloupců, kterému by šlo zamezit scanováním jen v jednom směru, pak by ale scanování trvalo příliš dlouho. Proto byla zvolena možnost scanování v obou směrech a pak následné úpravy posunutí sloupců v aplikaci. Na obrázku vpravo je výsledný nascanovaný obrázek po úpravě. Oproti obrázku uprostřed je zde znatelně vidět úprava jasu. Občasné posunutí sloupců proti sobě je dáno nerovnoměrným pohybem pojezdové hlavy, tato chyba bude při scanování většího obrázku zanedbatelná.

Obr. 5.3 Porovnání nascanovaného obrázku s původním

(33)

souřadnicovém systému. Hra probíhá tak, že uživatel zadá tah do políčka, nebo tah zadá pomocí kliknutí na figurku a na políčko kam má táhnout, poté se v druhém políčku objeví tah protihráče a přesunou se figurky v aplikaci a spustí se robot, který přesune figurky v reálu.

6.1 Robot šachy

V této variantě je souřadnicový systém položen na desce, ke které jsou připevněny sloupky. Na nich je položena skleněná hrací deska s vyznačenou šachovnicí. Na hrací desce jsou rozestavěny figurky opatřené zespoda magnetem. Dále robot obsahuje navíc elektromagnet přidělaný k pojezdové hlavě robota tak, aby mohl jezdit po celé hrací ploše.

Elektromagnet je přímo připojený ke kostce NXT na výstupní port A.

Obr 6.1 Robot Šachy

(34)

6.2 Program šachy

6.2.1 Program šachy bez robota

Program šachy (Obr. 6.2) je možno spustit bez připojeného robota a hrát jen na počítači. V tomto případě se v pravém horním rohu objeví nápis „Not connect“, je-li robot připojen, objeví se nápis „Connect“. Umělou inteligenci programu zajišťuje knihovna sachy_Dll.dll vytvořená z programu získaného na webových stránkách univerzity MIT.

Knihovna obsahuje funkci SachyNTah(), pomocí které získáváme tah protihráče. Je-li zadán chybný tah, objeví v políčku pro výstup nápis „Ilegal move“ a je nutno zadat nový správný tah.

Obr. 6.2 Program šachy

(35)

figurku do středu cílového políčka. Tah je znázorněn na obrázku číslo 6.3.

Obr. 6.3 Tah robota

Takto přesune robot figurky obou hráčů, případně odsune figurku z hracího pole a může následovat další tah.

Zde je uvedena funkce, pomocí které je robot schopen přijet na zadanou souřadnici:

void prijednaxy(int xy, int sour){

int ux,uy,ax,ay; //deklarace proměnných //pro posun po x

if ( xy == 1){

//zjištení pozice

ux = (NXT::Motor::GetRotationCount(&comm,OUT_B))/10;

ax= sour-ux; //výpočet o kolik se má motor otočit

//otočení motoru

if (ax > 0) otocmotor(1,ax*10,20,true);

else if (ax < 0) { ax=ax-ax-ax;

otocmotor(1,ax*10,20,false);

} }

//pro posun po y else if (xy == 2){

uy = (NXT::Motor::GetRotationCount(&comm,OUT_A))/10;

uy = uy-uy-uy;

ay= sour-uy;

if (ay > 0) otocmotor(0,ay*10,20,false);

else if (ay < 0) { ay = ay-ay-ay;

otocmotor(0,ay*10,20,true);

} }

(36)

ZÁVĚR

Pro programování byla zvolena knihovna NXT++ obsahující všechny potřebné funkce pro ovládání. Pomocí těchto funkcí byly vytvořeny všechny ostatní potřebné funkce k ovládání robota jako například funkce schopná otočit motor o několik stupňů nebo funkce, která přesune pojezdovou hlavu na dané souřadnice.

Plotter funguje s drobnými chybami způsobenými mechanickými komplikacemi robota. Zejména se jedná o občasný nerovnoměrný pohyb motorů, který může způsobit zpožděné zabrzdění motoru a přetáhnutí. Pro plotrování je důležité správné seřízení umístění tužky, špatné seřízení může způsobit přerušovanému tisku nebo kreslení křivých čar.

Scanner dokáže nascanovat obrázek až o rozlišení 800x800. Největší chyba nastává při scanování v obou směrech, kdy jsou pak liché a sudé sloupce pixelů obrázku oproti sobě posunuty. Tato chyba je vyřešena při konečné úpravě obrázku, kdy jsou softwarově liché sloupce posunuty. Při nerovnoměrném chodu motoru se může stát, že je jeden sloupec posunut oproti ostatním. Kvalita nascanovaného obrázku závisí i na položení papíru s předlohou. Nebude-li předloha plně doléhat na podklad, stane se, že optický senzor bude při scanování od předlohy rozdílně vzdálen, což bude mít za následek vytvoření světlejších a tmavších částí obrázku.

Aplikace „Šachy“ může pracovat i bez připojeného souřadnicového systému, kdy hra probíhá jen v počítači. Při výrazně nerovnoměrném chodu motoru by se mohlo stát, že elektromagnet ztratí uchopenou figurku.

(37)

[2] Gook, M.: Hardwarová rozhraní – průvodce programátora. Computer press, Praha, 2006, ISBN 80-251-1019-2

[3] Kruglinsky, D., J., Shepherd, G., Wingo, S.: Programujeme v Microsoft Visual C++.

Computer Press, Praha, 2000, ISBN 80-7226-362-5

[4] Novák, P.: Mobilní roboty - pohony, senzory, řízení. BEN - technická literature, 2005, ISBN 80-7300-141-1

[5] Perdue, D., J.: The Unofficial LEGO MINDSTORMS NXT Inventor's Guide. No Starch Press, 2007, ISBN-13 978-1593271541

[6] Gasperi, M., Hurbain, P., E., Hurbain, I., L.: Extreme NXT: Extending the LEGO MINDSTORMS NXT to the Next Level, Apress, 2010, ISBN-13 978-1590598184

[7] Luse, M. : Bitmapped Graphics Programming in C++, Addison-Wesley Professional, 1993, ISBN-13: 978-0201632095

(38)

SEZNAM POUŽITÝCH SYMBOLŮ A ZKRATEK

NXT Řídící jednotka robota Mindstorms NXT

ARM AVR

32bitová mikroprocesorová architektura typu RISC 8bitové mikročipy typu RISC

USB MATLAB¨

RGB LCD MIT RAM SPI I2C

Universal Serial Bus Matrix Laboratory Red Green Blue Liquid Crystal Display

Massachusetts Institute of Technology Random Access Memory

Serial Peripheral Interface Inter-Integrated Circuit

(39)

Obr. 1.4 Servomotor 14

Obr. 1.5 Dotykový senzor 15

Obr. 1.6 Optický senzor 15

Obr. 1.7 Citlivost optického senzoru 15

Obr. 1.8 Zvukový senzor 16

Obr. 1.9 Ultrazvukový senzor 17

Obr. 2.1 NXT-G 18

Obr. 2.2 NXC 19

Obr. 2.3 ROBOLAB 21

Obr. 2.4 ROBOTC 21

Obr 3.1 Souřadnicový mechatronický systém 24

Obr. 3.2 Pojezdová hlava 25

Obr. 4.1 Úprava obrázku 28

Obr. 4.2 Program plotter 29

Obr. 4.3 Porovnání vytisknutého obrázku s původním 30

Obr. 5.1 Pojezdová hlava s optickým senzorem 31

Obr. 5.2 Program scanner 33

Obr. 5.3 Porovnání nascanovaného obrázku s původním 34

Obr 6.1 Robot Šachy 35

Obr. 6.2 Program šachy 36

Obr. 6.3 Tah robota 37

(40)

OBSAH PŘILOŽENÉHO CD

 Text bakalářské práce ve formátu PDF.

 Zdrojové kódy pro jednotlivé úlohy.

(41)

References

Related documents

För att person B inte ska vara sysslolös kan även denna person utrustas med en helt annan uppsättning lego-bitar och ha samma uppdrag.. Det behövs sålunda två stycken

Genmodifiera med LEGO Övningen är framtagen av Elias Englund med kollegor, Institutionen för Kemi - Ångström, vid Uppsala universitet.. Bearbetad av Ida Solum,

Genmodifiera med LEGO - Lärarkommentarer Övningen är framtagen av Elias Englund med kollegor, Institutionen för Kemi - Ångström, vid Uppsala universitet.. Bearbetad av Ida

Genmodifiera med LEGO - Facit Övningen är framtagen av Elias Englund med kollegor, Institutionen för Kemi - Ångström, vid Uppsala universitet. Bearbetad av

Studien har gett en överblick på hur lego kan används i förskolan och syftet kan beskrivas som ett material som går att använda på olika sätt som exempel en lugn stund i den

The new parts in the laboratory work “Rescue Work” involve more interactivity, higher degree of freedom, older students and the programming is made in Java.. The

Tento program umožňuje pohybovat s vytvořeným robotem za pomoci směrových kurzorů na klávesnici. Při spuštění programu robot čeká na stisknutí libovolné směrové

TěŽiŠtěm práce je třetí kapitola. v níŽ autor předkládá navrŽené příklady' programových řeŠení. Pro první modelové řeŠení byla zvolena aplikace