OBCHODNÍ AKADEMIE ORLOVÁ
ÚVO D D O PROG R AM OVÁNÍ RO BOTŮ 2 Ing. PETR KLIMŠA
ORLOVÁ 2012
Název: Autor: Vydání: Počet stran: Určeno pro projekt: Číslo projektu: Vydavatel: Tisk:
Úvod do programování robotů 2 Ing. Petr Klimša 2012 114 Škola dnes a zítra – inovativní přístup k výuce technických a přírodovědných oborů CZ.1.07/1.1.07/03.0085 Obchodní akademie Orlová
© Ing. Petr Klimša ©Obchodní akademie Orlová
OBSAH:
Úvod ................................................................................................................................................7 PŘÍRUČKA PRO UČITELE ....................................................................................................15 1
ZÁKLADNÍ HARDWARE A SOFTWARE ..................................................................17 1.1
Metodický pokyn .......................................................................................................17
1.2
Realizace úlohy..........................................................................................................18
1.2.1 Teoretický základ úlohy ............................................................................................18 1.2.2 Pomůcky.....................................................................................................................18 1.2.3 Úkoly ..........................................................................................................................19 1.2.4 Závěry a celkové hodnocení práce ...........................................................................22 2
CYKLY.................................................................................................................................23 2.1
Metodický pokyn .......................................................................................................23
2.2
Realizace úlohy..........................................................................................................23
2.2.1 Teoretický základ úlohy ............................................................................................23 2.2.2 Pomůcky.....................................................................................................................25 2.2.3 Úkoly pro světelný senzor spolu s dotykovým senzorem ......................................25 2.2.4 Závěry a celkové hodnocení práce ...........................................................................32 3
Regulace výkonu motorů ...................................................................................................33 3.1
Metodický pokyn .......................................................................................................33
3.2
Realizace úlohy..........................................................................................................33
3.2.1 Teoretický základ úlohy ............................................................................................33 3.2.2 Pomůcky: ...................................................................................................................34 3.2.3 Úkoly ..........................................................................................................................35 3.2.4 Závěry a celkové hodnocení práce ...........................................................................40 4
Senzory .................................................................................................................................41 4.1
Metodický pokyn .......................................................................................................41
4.2
Realizace úlohy..........................................................................................................41
4.2.1 Teoretický základ úlohy ............................................................................................41 4.2.2 Pomůcky ...................................................................................................................43 4.2.3 Úkoly ..........................................................................................................................43 4.2.4 Závěry a celkové hodnocení práce ...........................................................................50
5
FUNKCE ............................................................................................................................. 51 5.1
Metodický pokyn ...................................................................................................... 51
5.2
Realizace úlohy ......................................................................................................... 52
5.2.1 Teoretický základ úlohy ........................................................................................... 52 5.2.2 Pomůcky .................................................................................................................... 53 5.2.3 Úkoly ......................................................................................................................... 53 5.2.4 Závěry a celkové hodnocení práce .......................................................................... 59 6
APLIKACE ......................................................................................................................... 61 6.1
Metodický pokyn ...................................................................................................... 61
6.2
Realizace úlohy ......................................................................................................... 62
6.2.1 Teoretický základ úlohy ........................................................................................... 62 6.2.2 Úkoly: ........................................................................................................................ 65 Závěr .................................................................................................................................. 67 Přílohy .......................................................................................................................................... 69 1
ZÁKLADNÍ HARDWARE A SOFTWARE ................................................................. 71
2
CYKLY ................................................................................................................................ 77
3
2.1
Teoretický základ úlohy ........................................................................................... 77
2.2
Pomůcky: (uveď přehled potřebných pomůcek) .................................................... 78
2.3
Úkoly ......................................................................................................................... 78
Regulace výkonu motorů .................................................................................................. 85 3.1
Teoretický základ úlohy ........................................................................................... 85
3.2
Pomůcky .................................................................................................................... 86
3.3
Úkoly ......................................................................................................................... 87
3.3.1 Úkol č. 1 – OVĚŘENÍ FUNKCE PID V PROGRAMU ....................................... 87 3.3.2 Úkol č. 2 – OVĚŘENÍ NUTNOSTI SYNCHRONIZACE.................................... 88 3.3.3 Úkol č. 3 – POUŽITÍ SYNCHRONIZACE PRO ZAJIŠTĚNÍ STEJNÉHO VÝKONU PRO OBA MOTORY ........................................................................... 88 Závěry a celkové hodnocení práce...................................................................................... 90 4
Senzory ................................................................................................................................ 93 4.1
Teoretický základ úlohy ........................................................................................... 93
4.2
Pomůcky .................................................................................................................... 94
4.3
Úkoly ......................................................................................................................... 94
5
FUNKCE ..............................................................................................................................99 5.1
Teoretický základ úlohy ............................................................................................99
5.1.1 Pomůcky.................................................................................................................. 100 5.1.2 Úkoly ....................................................................................................................... 100 5.2
Závěry a celkové zhodnocení práce ...................................................................... 104
Závěrečný úkol: ................................................................................................................... 104 6
APLIKACE....................................................................................................................... 105 6.1
Teoretický základ úlohy ......................................................................................... 105
6.1.1 Úkoly ....................................................................................................................... 108 Seznam použitých zdrojů ........................................................................................................ 111
Úvod Do rukou se vám dostává studijní opora určená k výuce programování. Navazuje na studijní oporu Úvod do programování robotů 1. Pro podporu výuky je využit počítačově řízený model robota LEGO Mindstorms NXT, který umožňuje okamžité ověření správnosti vytvořeného programu. Po převodu programu do řídící jednotky robota a jeho spuštění můžete pozorovat, zda robot reaguje podle vašich představ a plní tak úkoly zadané programem. Sbírka obsahuje pět oddílů s experimenty z oblasti programování robota MINDSTORM NXT a šestý oddíl nazvaný APLIKACE sloužící zájemcům o seznámení s dostupným softwarem sloužícím k vytváření aplikací pro praktické uplatnění robotů. Prvních kapitoly jsou navrženy především pro praktické ověření probírané teorie programování se zaměřením na nácvik ovládání jednotlivých senzorů doplňujících funkční možnosti robota. Využití jednotlivých senzorů spolu s dovedností aplikovat potřebné algoritmické struktury nabízí celou škálu různorodých úloh a řadu jejich modifikací. Experimenty jsou koncipovány tak, abyste si co nejlépe osvojili učivo probírané v hodinách programování a dozvěděli některé další zajímavosti z probírané oblasti. Splnění jednotlivých dílčích úkolů vyžaduje práci s programovým prostředím ROBOTC a práci s odbornou literaturou. Během samotného řešení úloh žáci pracují (jednotlivě i ve skupinách) s počítačem v prostředí programu ROBOTC, připravují programový kód dle zadané úlohy, případně doplňují některé další varianty, poté přes USB připojí k počítači základní jednotku robota a přenesou připravený program. Po spuštění programu sledují chování robota, analyzují případné problémy, formulují návrhy na jejich řešení a upravují programový kód. Opravený kód mohou opět ověřit. Vizualizace programování je také inspirací pro vytváření dalších modifikací zadání. V závěru jednotlivých kapitol je vždy dostatečný prostor pro shrnutí dané problematiky a pro ověření znalostí, které studenti získali při řešení problému. První část sbírky je určena pro vyučujícího a obsahuje podrobný návod na řešení jednotlivých úloh (s důrazem na možné obměny zadání, časovou náročnost jednotlivých prací apod.). V této části textu jsou kurzívou uvedeny odpovědi na dílčí otázky. Text je doplněn ilustračními fotografiemi výstupů, kterých by měli studenti dosáhnout. Druhá část sbírky je tvořena pracovními listy pro studenta, do kterých student v rámci provádění experimentu doplňuje získané údaje, přepisuje programový kód a odpovídá na otázky z daného tématu. Po splnění jednotlivých úloh by měli být studenti schopni vyslovit závěry vlastního řešení, porovnat výsledky své práce s ostatními studenty a zasvěceně diskutovat o dané problematice (optimalizace kódu, variantnost řešení). Jednotlivé kapitoly jsou koncipovány tak, že získáváte zkušenosti potřebné v dalších kapitolách. Je tudíž vhodné procházet kapitoly postupně.
Kompetence I.
Obecné cíle
Hlavním cílem předmětu Programování je naučit studenty algoritmicky myslet, navrhovat a řešit dílčí úlohy, vyjadřovat algoritmy schematicky i v programovacím jazyce, navrhovat a realizovat programy zadaných praktických úloh. K naplnění tohoto cíle může velmi dobře sloužit programování robotů, protože není závislé pouze na abstraktním myšlení, ale studenti si mohou prakticky své schopnosti a dovednosti okamžitě ověřit. Mezi obecné cíle patří schopnost žáka:
II.
využívat znalostí a dovedností získaných ve výuce programování v reálném životě analyzovat a rozložit zadání na do dílčích částí nutných k realizaci úloh logicky přemýšlet a vyhodnocovat návaznost používat pojmy z oblasti algoritmizace a programování formulovat návrhy a zdůvodnit je vyhodnocovat předložené varianty a formulovat závěry pracovat v týmu
Klíčové kompetence
Klíčové kompetence jsou chápány jako kombinace znalostí, dovedností a postojů, které žákovi umožňují zvládnout úkoly a situace běžného života. Evropský rámec zahrnuje osm oblastí klíčových kompetencí:
komunikace v mateřském jazyce komunikace v cizím jazyce matematické kompetence a základní kompetence v oblasti vědy a technologií kompetence v oblasti digitálních technologií kompetence učit se učit sociální a občanské kompetence smysl pro iniciativu a podnikatelské myšlení kulturní povědomí a vyjádření
Rámcový vzdělávací program pro SŠ vymezuje šest klíčových kompetencí: 1. 2. 3. 4. 5. 6. .
Kompetence k učení. Kompetence k řešení problémů. Kompetence komunikativní. Kompetence sociální a personální. Kompetence občanská. Kompetence pracovní.
III.
Přínos k rozvoji klíčových kompetencí
1. Kompetence k učení
mít pozitivní vztah k učení a vzdělávání
ovládat různé techniky učení, umět si vytvořit vhodný studijní režim a podmínky¨
uplatňovat různé způsoby práce s textem (zvl. studijní a analytické čtení), umět efektivně vyhledávat a zpracovávat informace
s porozuměním poslouchat mluvené projevy (např. výklad, přednášku, proslov aj.), pořizovat si poznámky
využívat ke svému učení různé informační zdroje včetně zkušeností svých i jiných lidí
sledovat a hodnotit pokrok při dosahování cílů svého učení, přijímat hodnocení výsledků svého učení od jiných lidí
znát možnosti svého dalšího vzdělávání, zejména v oboru a povolání. 1.1. Způsob podpory pro nabytí kompetencí
umožněním experimentování s reálnými objekty (roboty), podpoříme zvídavost, snahu řešit problémy (i metodou pokus-omyl), pozorováním výsledků a korekcí chování robota
podporou práce žáků nejen s texty v tomto studijním materiálu, ale také podporou vyhledávání informací v jiných zdrojích
vedením žáků k zhodnocení svých výsledků i posouzení výsledků ostatních žáků, podporou kladení si vzájemných otázek a hledání odpovědí v rámci řešené problematiky
2. Kompetence k řešení problémů
porozumět zadání úkolu nebo určit jádro problému, získat informace potřebné k řešení problému, navrhnout způsob řešení, popř. varianty řešení, a zdůvodnit jej, vyhodnotit a ověřit správnost zvoleného postupu a dosažené výsledky
uplatňovat při řešení problémů různé metody myšlení a myšlenkové operace
volit prostředky a způsoby (pomůcky, studijní literaturu, metody a techniky) vhodné pro splnění jednotlivých aktivit, využívat zkušeností a vědomostí nabytých dříve
spolupracovat při řešení problémů s jinými lidmi (týmové řešení) 2.1. Způsob podpory pro nabytí kompetencí
vytvářením vhodných problémů simulujících problémy reálného světa a odpovídajících schopnostem žáků
vedením výuky tak, aby žáci problém rozpoznali, analyzovali, navrhli vlastní řešení, řešení si ověřili, zhodnotili a navrhli další varianty řešení vč. závěrů.
podporou diskuse mezi žáky nad variantami řešení a jejich vzájemné zhodnocení navržených variant
zadáváním řešení úkolů do dvojic a týmů
využitím brainstormingu
podpořením žáků v tvorbě vlastních alternativních úloh
3. Kompetence komunikativní
vyjadřovat se přiměřeně účelu jednání a komunikační situaci v projevech mluvených i psaných a vhodně se prezentovat
formulovat své myšlenky srozumitelně a souvisle, v písemné podobě přehledně a jazykově správně
účastnit se aktivně diskusí, formulovat a obhajovat své názory a postoje
zpracovávat běžné administrativní písemnosti a pracovní dokumenty
snažit se dodržovat jazykové a stylistické normy i odbornou terminologii
zaznamenávat písemně podstatné myšlenky a údaje z textů, popř. projevů jiných lidí
vyjadřovat se a vystupovat v souladu se zásadami kultury projevu a chování
dosáhnout jazykové způsobilosti potřebné pro základní komunikaci v cizojazyčném prostředí nejméně v jednom cizím jazyce
dosáhnout jazykové způsobilosti potřebné pro základní pracovní uplatnění dle potřeb a charakteru příslušné odborné kvalifikace (např. porozumět základní odborné terminologii a základním pracovním pokynům v písemné i ústní formě)
pochopit výhody znalosti cizích jazyků pro životní i pracovní uplatnění, být motivováni k prohlubování svých jazykových dovedností 3.1. Způsob podpory pro nabytí kompetencí
vedením žáků k používání odborné terminologie v oblasti programování
podporou žáků při vzájemné komunikaci
formulací problémů žáky a jejich diskusí nad možnými variantami řešení
vedením žáků k přesnému zhodnocení návrhů a výsledků jak svých, tak ostatních žáků.
vedením žáků k vhodnému způsobu formulace připomínek
podporou vzájemné spolupráce žáků při experimentování s programováním robotů
vedením žáků k vytváření různých výchozích situací pro chování robota
4. Kompetence sociální a personální
posuzovat reálně své fyzické a duševní možnosti, odhadovat důsledky svého jednání a chování v různých situacích
stanovovat si cíle a priority podle svých osobních schopností, zájmové a pracovní orientace a životních podmínek
reagovat adekvátně na hodnocení svého vystupování a způsobu jednání ze strany jiných lidí, přijímat radu i kritiku
ověřovat si získané poznatky, kriticky zvažovat názory, postoje a jednání jiných lidí
mít odpovědný vztah ke svému zdraví, pečovat o svůj fyzický i duševní rozvoj, být si vědomi důsledků nezdravého životního stylu a závislostí
adaptovat se na měnící se životní a pracovní podmínky a podle svých schopností a možností je pozitivně ovlivňovat, být připraveni řešit své sociální i ekonomické záležitosti, být finančně gramotní
pracovat v týmu a podílet se na realizaci společných pracovních a jiných činností
přijímat a odpovědně plnit svěřené úkoly
podněcovat práci týmu vlastními návrhy na zlepšení práce a řešení úkolů, nezaujatě zvažovat návrhy druhých
přispívat k vytváření vstřícných mezilidských vztahů a k předcházení osobním konfliktům, nepodléhat předsudkům a stereotypům v přístupu k druhým. 4.1. Způsob podpory pro nabytí kompetencí
podporou zadáváním práce nejen do skupiny, ale i v případě samostatných úloh podporou vzájemné spolupráce na řešení zadaných úloh
vedením žáků k samostatné práce a zapojením do různých rolí v rámci skupiny, kdy jeden žák připraví a formuluje alternativní zadání experimentu, druhý zadání ověří (provede), třetí zhodnotí dosažené výsledky apod.
5. Kompetence občanské a kulturní
jednat odpovědně, samostatně a iniciativně nejen ve vlastním zájmu, ale i ve veřejném zájmu
dodržovat zákony, respektovat práva a osobnost druhých lidí (popř. jejich kulturní specifika), vystupovat proti nesnášenlivosti, xenofobii a diskriminaci
jednat v souladu s morálními principy a zásadami společenského chování, přispívat k uplatňování hodnot demokracie
uvědomovat si – v rámci plurality a multikulturního soužití – vlastní kulturní, národní a osobnostní identitu, přistupovat s aktivní tolerancí k identitě druhých
zajímat se aktivně o politické a společenské dění u nás a ve světě
chápat význam životního prostředí pro člověka a jednat v duchu udržitelného rozvoje
uznávat hodnotu života, uvědomovat si odpovědnost za vlastní život a spoluodpovědnost při zabezpečování ochrany života a zdraví ostatních
uznávat tradice a hodnoty svého národa, chápat jeho minulost i současnost v evropském a světovém kontextu
podporovat hodnoty místní, národní, evropské i světové kultury a mít k nim vytvořen pozitivní vztah. 5.1. Způsob podpory pro nabytí kompetencí
vedením žáků k vzájemné slušnosti při komunikaci jak v rámci týmu, tak mezi týmy. Zejména pak při tvorbě návrhu řešení zadaných problémů a také zejména ve fázi vzájemného kritického hodnocení řešení. Klademe důraz nejen na věcnou stránku hodnocení, ale také na způsob podání.
vedením žáků k uvědomění si, kdy výsledky jejich chování nebo práce mohou ohrozit životní prostředí nebo bezpečnost
vedením žáků ke stanovení pravidel chování v rámci pracovních týmů i mezitýmové spolupráce
6. Kompetence pracovní
mít odpovědný postoj k vlastní profesní budoucnosti, a tedy i vzdělávání; uvědomovat si význam celoživotního učení a být připraveni přizpůsobovat se měnícím se pracovním podmínkám;
mít přehled o možnostech uplatnění na trhu práce v daném oboru; cílevědomě a zodpovědně rozhodovat o své budoucí profesní a vzdělávací dráze;
mít reálnou představu o pracovních, platových a jiných podmínkách v oboru a o požadavcích zaměstnavatelů na pracovníky a umět je srovnávat se svými představami a předpoklady;
umět získávat a vyhodnocovat informace o pracovních i vzdělávacích příležitostech, využívat poradenských a zprostředkovatelských služeb jak z oblasti světa práce, tak vzdělávání;
vhodně komunikovat s potenciálními zaměstnavateli, prezentovat svůj odborný potenciál a své profesní cíle;
znát obecná práva a povinnosti zaměstnavatelů a pracovníků;
rozumět podstatě a principům podnikání, mít představu o právních, ekonomických, administrativních, osobnostních a etických aspektech soukromého podnikání; dokázat vyhledávat a posuzovat podnikatelské příležitosti v souladu s realitou tržního prostředí, svými předpoklady a dalšími možnostmi. 6.1. Způsob podpory pro nabytí kompetencí
vedením žáků k vytváření různých prostředí pro pohyb robota
podporou tvorby vlastních zadání a variant řešení
vedením žáků ke správnému zacházení se svěřenými pomůckami (roboty, pracovní podložkou apod.)
žákům umožníme připojovat a konfigurovat potřebná čidla
15
PŘÍRUČKA PRO UČITELE
16
17
1 ZÁKLADNÍ HARDWARE A SOFTWARE Po absolvování této kapitoly byste měli být schopni: vysvětlit z čeho se skládá robot Mindstorm NXT vyjmenovat jaká jsou připojovaná čidla vysvětlit pojmy: controller NXT, senzor NXT, vyjmenovat známý software pro ovládání robota NXT Mindstorm napsat jednoduchý kód pro rozjezd robota vysvětlit, které faktory ovlivňují jednotlivé fáze pohybu – doba a směr jízdy nahrát program do řídící jednotky robota
1.1 Metodický pokyn Cílová skupina
2. ročník – Programování
Název tematického celku
Algoritmizace programu
Název úlohy
Základní operace s robotem
Cíle
Pomocí programu ROBOTC ovládejte pohyb robota
Forma práce
Skupinová práce v učebně
Metoda práce
Reproduktivní, Komparativní, Deduktivní
Mezipředmětové vztahy
fyzika
Časové rozvržení realizace úlohy
90 minut
18
1.2 Realizace úlohy 1.2.1 Teoretický základ úlohy Zopakujte si základní složení Lego robota Mindstorm NXT z Úvodu do programování robotů 1 spuštěním ukázky Using the NXT na adrese http://www.education.rec.ri.cmu.edu/previews/robot_c_products/teaching_rc_lego _v2_preview/
Zopakujte si přehled a základní funkčnost základních senzorů pohybový (krokovací motorek) dotykový (touch) světelný (light) ultrasonar (ultrasonic) zvukový sensor (sound) Spuštěním ukázky NXT Sensors na adrese
http://www.education.rec.ri.cmu.edu/previews/robot_c_products/teaching_rc_lego _v2_preview/
Vypište si fyzikální podstatu funkčnosti následujících senzorů: -
dotykového – nakreslete elektrické obvody pro stisknutý a nestisknutý senzor T rychlost zvuku ultrasonar- použijte vzorec vzdálenost = , pro 2 výpočet času, který potřebuje zvuk pro vzdálenost 10 cm od překážky
(případně si otevřete soubor Senzory.docx) Zopakujte si práci v prostředí ROBOTC nastavení parametrů pro krokovací motorky B,C nastavení časové prodlevy vložení textu na display použití jednoduché podmínky 1.2.2 Pomůcky PC, Lego robot Mindstorm NXT vybavený 2 servomotory B,C a 1 dotykovým senzorem a základní jednotkou NXT a propojovací kabel USB
krokovací motorek
dotykový senzor
jednotka NXT
19 1.2.3 Úkoly 1.2.3.1 Testy Ověřte své znalosti pomocí testů: Test1 Přiřaďte k sobě skupinu příkazů pro motory a výsledný pohyb Příkazy pro motory motor(motorB)=100; motor(motorC)=100;
motor(motorB)=0; motor(motorC)=0;
motor(motorB)=50; motor(motorC)=50;
motor(motorB) = 100; motor(motorC) = -100;
motor(motorB)=100; motor(motorC)=0;
motor(motorB) = - 100; motor(motorC) = - 100;
Výsledný pohyb
pojezd vpřed plným výkonem
zastavení motorů
pojezd vpřed polovičním výkonem
otočení na místě
otočení přes stranu motoru C
jízda vzad plným výkonem
20 Test 2 Dopište kód pro následující situace: Situace A - jízda vpřed po dobu 4s na 80% výkonu motorů Dopište kód: task main() { motor(motorB)=80; motor(motorC)=80; wait1Msec(4000); }
Situace B - otočení vlevo s výkonem motorů 50%, doba 0,8s Dopište kód: task main() { motor(motorB)=0; motor(motorC)=50; wait1Msec(800); } Výkon motorů 50% Doba jízdy 0,8 s
Situace C - stání po dobu 5 sekund a pak 2s jízda 100% výkonem vpřed Dopište kód: task main() { motor(motorB)=0; motor(motorC)=0; wait1Msec(5000); motor(motorB)=100; motor(motorC)=100; wait1Msec(2000); }
21 Test 3 Zapište kód, který umožní robotovi vykonat uvedené činnosti v daném pořadí: (1) Jede vpřed 6 s (2) Na místě zahne doprava v průběhu 0,6 s (3) Couvá přímo po dobu 3 s task main() { motor(motorB)=50; motor(motorC)=50; wait1Msec(6000); motor(motorB)=50; motor(motorC)=0; wait1Msec(600); motor(motorB)=-50; motor(motorC)=-50; wait1Msec(3000); }
Zkuste sami vyřešit následující dva úkoly: 1.2.3.2 Úkol č.1 – Slalom 1. Na stole vyznačte start. 2. Napište program pro pohyb robota po dané trase 3. Nahrajte program do robota a spusťte 4. Na příslušná místa vložte překážky a cíl 5. Doplňte program o textovou signalizaci Na startu se objeví text VYJÍŽDÍM Při každé změně směru se objeví text DOLEVA, příp. DOPRAVA Při dojezdu do cíle se objeví text DORAZIL JSEM
start 6s 8s
6s
cíl
6s
4s 4s
5s
22 6. Po dojezdu do výchozího bodu START se objeví velkým písmem text DOMA JE DOMA 7. Po 10 s se otočí 8. Upravte program tak, aby body 5,6,7,8 se opakovaly v nekonečné smyčce Návod: vyhodnocujte a ověřujte po jednotlivých bodech.
1.2.3.3 Úkol č. 2 Jízda zručnosti
1. Úkol č.1 vyřešte tak, že změnu směru v daném okamžiku zabezpečíte pomocí dvou dotykových senzorů, které pojmenujete LEVY, PRAVY. Program běží v nekonečném cyklu 2. Na display se střídají texty JEDU,DOPRAVA, DOLEVA, STOJÍM podle toho, jak jsou nastaveny motory B,C 3. Na stole si vytvořte překážkovou dráhu a sami veďte robota při jejím projíždění.
1.2.4 Závěry a celkové hodnocení práce
Procvičili jste si
ovládání krokových motorků a dotykových senzorů.
nastavování příslušných parametrů, pojmenování jednotlivých senzorů. Zvládli jste výpis textových informací na displeji NXT a přehrávání zvukových záznamů z knihovny NXT.
z algoritmických struktur jste používali řetězení příkazů, strukturu IF podmínka činnost1 ELSE činnost2, zápis podmínky a dotkli jste se opakování činnosti pomocí nekonečného cyklu při testování stavu dotykového senzoru. Použití cyklů je však daleko širší a my se s nimi potkáme v dalších kapitolách.
Souhrn základních hardwarových pojmů – dotykový senzor.
motorB, motorC,
Cykly
23
2 CYKLY Po absolvování této kapitoly byste měli být schopni: vyjmenovat existující typy cyklů,
určit v jakých případech se dané cykly používají
které typy čidel si vyžadují využití cyklů.
vysvětlit pojem cyklus řízený proměnnou,
vysvětlit pojem cyklus řízený pomocí podmínky
vysvětlit princip výběru jednotlivých typů cyklů při řešení jednotlivých situací.
2.1 Metodický pokyn Cílová skupina
2. ročník – Programování
Název tematického celku
Cykly
Název úlohy
Využití light senzoru
Cíle
Pomocí vybraných čidel světelného senzoru a sonaru vytvořit program pro pohyb robota v nastaveném prostředí
Forma práce
Skupinová práce v laboratoři
Metoda práce
Reproduktivní, Komparativní, Deduktivní
Mezipředmětové vztahy
Fyzika
Časové rozvržení realizace úlohy
90 minut
2.2 Realizace úlohy 2.2.1 Teoretický základ úlohy Pro plynulý pohyb robota je důležité opakované vyhodnocování vstupních údajů (u touchsenzorů – je/není stisknuto, u krokovacích motorků řídit pohyb úhlem otočení, u ultrasonaru výpočet vzdálenosti v určitém časovém odstupu, u lightsenzorů – vyhodnocení absorpce světelného záření apod.). Je tedy nutné umět v kódu nastavit opakování činností – CYKLY.
Cykly
24 Základní typy cyklů
Cykly s pevně stanoveným počtem opakování - FOR CYKLUS
Cykly s proměnlivým počtem opakování závislým na zadané podmínce – WHILE cyklus
Zopakujte si připojování základních senzorů,
nastavení jména a potřebných parametrů
použití nekonečného for cyklu FOR (;;)
označení jednotlivých portů I/O
zvukový sensor (sound)
Ukázka kódu While (podmínka) {
Pokud podmínka bude platit, činnost se bude opakovaně provádět .
činnost
Počet opakování nelze dopředu
}
určit.
Nekonečný While cyklus While (true) { činnost
Pokud je podmínka nahrazena hodnotou true, Činnost se bude provádět neustále
} Cyklus For - známý počet opakování Int i = 0; For (i = 0; i < 10; i ++)
Činnost se provede 10krát . Počet opakování dopředu známe !!!
{ cinnost }
Počet opakování se kontroluje pomocí proměnné i (zvolené počítadlo).
Nekonečný FOR cyklus For ( ; ; ) Činnost se bude provádět neustále.
{ činnost }
Např. při použití dotykových senzorů
Cykly
25
2.2.2 Pomůcky PC, Lego robot Mindstorm NXT vybavený 2 servomotory B,C a jedním dotykovým senzorem a základní jednotkou NXT a propojovací kabel USB
Dotykový senzor
Světelný senzor
Ultrasonický Senzor
2.2.3 Úkoly pro světelný senzor spolu s dotykovým senzorem 2.2.3.1 Úkol č. 1 Zabezpečte pohyb po vyznačené trase 1. Připravte si prostředí podle nákresu, připojte k základní jednotce světelný senzor tak, aby bylo možno sledovat barevnou stopu, například takto
2. V prostředí programu RobotC si a) vytvořte nový program, který umožní využití připojeného světelného senzoru.
Cykly
26 b) Otevřete oddíl pro nastavení senzorů
c) Nastavíte světelné čidlo na portu S1, vhodně ho pojmenujete
Vybereme světelný senzor
Pojmenujeme
d) Uložíme nastavené změny
Název souboru
Cykly
27
Teď máme nastavený světelný senzor a můžeme přidat kód. Např: Robot se pohybuje v závislosti na tmavémnebo světlém pozadí. V případě tmavého pozadí zahne.
const tSensor svetelny = (tSensors) S1; task main() pojmenování světelného senzoru { while(SensorValue(svetelny) >= 50) světlejší pozadí { motor(motorB)=50; motor(motorC)=50; } tmavší pozadí while(SensorValue(svetelny) < 50) { motor(motorB)=0; zahni motor(motorC)=50; } motor(motorB)=0; motor(motorC)=0; wait1Msec(10000); }
2.2.3.2 Úkol č. 2 Hledej hranici oblasti – DÁL NESMÍŠ Modifikujte jízdu robota, aby jel po přímé dráze na světlém podkladu tak dlouho, až narazí na tmavou linku. Potom se robot zastaví. Řešte i další úkoly.
1. Pomocí LightSenzoru testuje robot barvu podkladu. Až najde natolik tmavý podklad, aby jeho reakce neodpovídala podmínce v následujícícm kódu, zastaví .
Cykly
28
const tSensor svetelny = (tSensors) S1; task main() pojmenování světelného senzoru { while(SensorValue(svetelny) >= 50) Detekce světlého pozadí { Pohyb po přímé dráze s výkonem motor(motorB)=50; 50% motor(motorC)=50; } motor(motorB)=0; Zastavení robota motor(motorC)=0; wait1Msec(10000); } Dále dopište kódy, kterými zabezpečíte, aby se 2. po zastavení na tmavém pozadí robot otočil čelem vzad 3. po otočení robot rozjel zpět směrem k výchozímu bodu, který bude opět označen tmavší barvou 2.2.3.3
Úkol č. 3 Světelná křižovatka
STŮJ – PŘIPRAV SE - JEĎ 1. experimentálně ověřte, jaká číselná hodnota odpovídá 3 různým barvám. Zkuste barvy - červenou, zelenou, žlutou 2. poté si připravte bodový zdroj světla a 3 barevné clony (barevný celofán) Případně použijte papírové barevné kruhy, které vkládáte pod světelný senzor 3. Připravte kód pro chování robota na světelné křižovatce červená znamená motory v klidu,na konci cyklu nechejte 1 sekundu čekání žlutá nastaví čekání na 0,1 s zelená rozjede se přímo nastavenou rychlostí 4. Zabezpečte změnu barvy pod světelným senzorem robota.
Cykly
29
2.2.3.4 Úkol č. 4 Robot stopař - SLEDUJE TRASU Na připravený papír nakreslete širokým fixem trasu pro robota a připravte kód, který ho naučí sledovat naznačenou trasu po křivce. Ověřte, že kód je takový, že bude použitelný i pro další připravené trasy (alespoň jednu) Ukázka trasy
CÍL
L
Kostky představují překážky ( plastové kelímky, krabice apod.) Pohyb po křivce je řešen sledováním barvy podkladu pomocí světelného senzoru. 1. Varianta – zjednodušená : Opakuje níže uvedené 2 kroky tak dlouho, dokud se nestane, že robot nenarazí na tmavou barvu po otočení o 360° robot se natáčí tak dlouho, dokud nenarazí na tmavou barvu posouvá se vpřed tak dlouho, nenarazí na světlou barvu
pohyb je trhaný ( viz nákres)
Cykly
30
Pseudokód :
Opakuj neustále { Pokud uvidíš světlou barvu { Zahni doprava } Pokud uvidíš tmavou barvu { Zahni doleva } }
Kód v ROBOTC: const tSensor svetelny = (tSensors) S1; task main() { Podmínka 1=1 platí vždy while(1==1) { while(SensorValue(svetelny)> 45) { motor(motorB)=50; motor(motorC)=0; } while(SensorValue(svetelny) <= 45) { motor(motorB)=0; motor(motorC)=50; } }
2. Varianta – vylepšená: předchozí varianta se vylepší tím, že si robot dopředu detekuje barvy podložek, určí si průměrnou hodnotu a změna směru se řídí touto průměrnou hodnotou a tak se zjemní „kličkování“ Systém dvou WHILE cyklů se nahradí podmínkou if else Robot si uloží hodnotu, kterou vysílá světelný senzor u světlé podložky - SvetlaPodlozka Robot si uloží hodnotu, kterou vysílá světelný senzor u tmavé podložky - TmavaPodlozka Vypočte se průměrná hodnotu - PrumernaHodnota V předchozím kódu se hodnota 45 nahradí touto průměrnou hodnotou, čímž se trhavý pohyb „vyhladí“ bude se pohybovat dokud není stisknut dotykový senzor Popis výchozí situace: Aby si robot mohl vypočítat průměrnou hodnotu podložky, položíme jej nejdříve na světlou položku. Po zmáčknutí dotykového senzoru si robot uloží hodnotu světlé podložky do proměnné SvetlaPodlozka. Pak položíme robota na tmavou podložku a opět stiskneme dotykový senzor. Dojde k uložení hodnoty tmavé podložky. Na základě těchto údajů pak robot vypočítá průměrnou hodnotu, na základě které bude dále korigovat svou jízdu.
Cykly
task main() { int SvetlaPodlozka; int TmavaPodlozka; int PrumernaHodnota; while(SensorValue(touchSensor)==0) { } SvetlaPodlozka=SensorValue(lightSensor); wait1MSec(1000); while(SensorValue(touchSensor)==0) { } TmavaPodlozka=SensorValue(lightSensor); PrumernaHodnota=(SvetlaPodlozka+TmavaPodlozka)/2; wait1MSec(1000); } while(SensorValue(touchSensor)==0) {
if(SensorValue(lightSensor) < PrumernaHodnota) { motor(motorB)=50; motor(motorC)=0; } else { motor(motorB)=0; motor(motorC)=50; } } }
31
32
Cykly
2.2.4 Závěry a celkové hodnocení práce Ve většině programových kódů se nabízí použití While cyklů vzhledem k tomu, že při vyhodnocování vnějších podnětů z reálného okolí není možné dopředu stanovit počet opakování. FOR cykly se hodí pro nastavení počtu opakování vytvořeného kódu (například – danou trasu projeď třikrát apod.). Nekonečný cyklus FOR(;;) může nahradit nekonečný cyklus WHILE (true), např. WHILE(1==1). Souhrn základních pojmů – cyklus, cyklus řízený proměnnou – FOR cyklus, cyklus řízený pomocí podmínky – WHILE cyklus, konečný cyklus, nekonečný cyklus – FOR ( ; ; ) nebo WHILE ( true )
Regulace výkonu motorů 33
3 Regulace výkonu motorů Po absolvování této kapitoly byste měli být schopni: objasnit jak ovlivnit chování robota nejen pomocí různých čidel, ale také pomocí parametrů PID, synchronizací krokovacích motorů a různé formy nastavení časování pohybu. vysvětlit pojmy PID, synchronizace vysvětlit pojem TIMER, nastavení počtu otáček kol robota, vysvětlit význam jednotlivých parametrů, vysvětlit podstatu použití synchronizace.
3.1 Metodický pokyn Cílová skupina
3. ročník Programování
Název tematického celku
Vstupní parametry funkcí
Název úlohy
Regulace výkonu motorů
Cíle
Naučit se zabezpečit přímý pohyb
Forma práce:
Skupinová práce ve třídě
Metoda práce:
Reproduktivní
Mezipředmětové vztahy:
fyzika, matematika
Časové rozvržení realizace úlohy:
135 min.
3.2 Realizace úlohy 3.2.1 Teoretický základ úlohy Už v první kapitole i v prvním díle programování robotů jste se setkali se způsobem nastavení výkonu motorů pomocí procentuálního výkonu (od 0 do 100 procent). Nula znamená zastavení, 100 procent plný (maximální) výkon. Experimentálně však můžeme pozorovat, že stejně nastavený výkon obou kol ještě neznamená, že se obě musí pohybovat stejnou rychlostí. Je třeba vzít do úvahy problematiku tření a plno dalších reálných vlivů. Tuto situaci řeší firmware robotů Mindstorm NXT zavedením 1. Parametru PID 2. Synchronizací motorů
Parametr PID určí skutečnou rychlost, kterým se daný krokovací motorek pohybuje.
Regulace výkonu motorů
34
vypočítá ji porovnáním aktuální pozice motoru s pozicí motoru před sekundou. zjistí, jakou dráhu skutečně urazil. vypočítá, skutečnou rychlost z nastavení maximální možné rychlosti propočítá aktuální procentuální výkon z rozdílu mezi skutečným a nastaveným výkonem se vyhodnotí parametr PID a koriguje se výkon počáteční pozice kola
počáteční pozice kola aktuální pozice kola
Výchozí pozice kola
Pozice po 1/10 s
Rychlost =
30 = 300°/s toto je ideální výkon motoru (100 %) 0,1s
Korekce výkonu pomocí PID nastavený výkon očekávaná rychlost: 50
výkon motorů: 50
zjištěný výkon naměřená rychlost: 47
korekce výkonu pomocí PID chyba: 3
PID seřízení: +4
Na základě zjištěné chyby algoritmus PID upraví výkon motoru
Kód, který aktivuje použití parametru PID nMotorPIDSpeedCtrl(motorB) = mtrSpeedReg; nMotorPIDSpeedCtrl(motorB) = mtrSpeedReg; Synchronizace motorů zabezpečí sladění rychlosti oboru motorů na stejnou hodnotu (s využitím parametru PID) a tím zajistí ideálně přímý pohyb robota. Tato skutečnost je řešena funkcí SYNC BC pomocí níž je motor B chápán jako řídící (master) a motor C jako podřízený (slave). Nastavíme-li výkon motoru B, automaticky se nastaví stejný výkon na motor C. Parametrem PID se dále sladí také skutečný výkon Kód, který aktivuje použití synchronizace a nastaví maximální výkon podřízeného motoru nSyncedMotors= synchBC; nSyncedTurnRatio = 100; 3.2.2 Pomůcky: Robot Mindstorm NXT, Touch Senzory, připravené pracovní podložky
Regulace výkonu motorů
35
3.2.3 Úkoly 3.2.3.1 Úkol č. 1 – Ověření funkce PID v programu
Připravte si pracovní podložku pro robota s naznačeným přímým směrem. Úkoly: 1. Vytvořte kód pro přímý pohyb robota , oba motory nastavte na výkon 50, délka jízdy 30 s. Poté se robot na místě otočí. Nepoužívejte PID korekci. 2. Vytvořte kód pro přímý pohyb robota , oba motory nastavte na výkon 50, délka jízdy 30 s. Poté se robot na místě otočí. Použijte PID korekci. 3. Porovnejte obě situace a udělejte závěr. Programový kód: Úkol 1: motor(motorB)=50; motor(motorC)=50; wait1Msec(30000); motor(motorB)=-50; motor(motorC)=50; wait1Msec(1000); Úkol 2: task main() { nMotorPIDSpeedCtrl(motorB)=mtrSpeedReg; nMotorPIDSpeedCtrl(motorC)=mtrSpeedReg; motor(motorB)=50; motor(motorC)=50; wait1Msec(30000); motor(motorB)=-50; motor(motorC)=50; wait1Msec(1000); }
36
Regulace výkonu motorů
Pro zájemce: Vyzkoušejte si změnu délky pohybu a ověřte minimální dobu, aby se odchylka projevila: Použijte program pro nekonečný cyklus – stálý pohyb robota – změřte okamžik pozorované odchylky od přímého směru. Pozorování opakujte alespoň 5 krát a udělejte průměr. Sledujte nastavované hodnoty PID Otevření okna pro sledování PID a po zahájením programu
Regulace výkonu motorů 37
Ukázka výsledku při spuštěném programu
Závěr: Dostatečná délka jízdy (30 s) je dostatečná pro tom aby se projevila odchylky trasy robota od přímého směru 3.2.3.2 Úkol č. 2 – Ověření použití synchronizace pro zajištění stejného výkonu pro oba motory
1.
Připoj dva dotykové senzory k řídící jednotce robota
2. Vytvoř program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte rychlost motoru B na 50 , dobu jízdy na 10 sekund. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota 3. Vytvoř program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte počáteční rychlost motoru B na 30 , dobu jízdy na 10 sekund. Nastavte komunikaci s jedním touch Senzorem. Vždy když ho stiskneme, zvýšíme aktuální výkon o 10. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota 4. Vytvoř program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte počáteční rychlost motoru B na 30 , dobu jízdy na 10 sekund. Nastavte komunikaci se dvěma touch Senzory S1, S2. Vždy když stiskneme senzor S1, zvýšíme aktuální výkon o 10. Vždy když stiskneme senzor S2, snížíme aktuální výkon o 10. V případě, že by výkon vyl záporný, nastavíme jej na nulu. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota. Vše řádně ukliď.
Regulace výkonu motorů
38 Řešení: Programový kód pro bod 2 1.
Pro zapnutí synchronizace motorů musíme použít následující příkaz synchBC . Motor B bude master, motor C bude slave.
task main() { nSyncedMotors= synchBC; } 2.
Nastavíme maximální výkon pro slave motor (nSyncedTurnRatio). Motor C se bude pracovat na 100 % výkonu master motoru.
task main() { nSyncedMotors= synchBC; nSyncedTurnRatio = 100; } 3.
Nastavíme výkon pro motor B - master
task main() { nSyncedMotors= synchBC; nSyncedTurnRatio=100; motor(motorB)=50; wait1Msec(10000); } 4.
Použití parametru PID
task main() { nMotorPIDSpeedCtrl(motorB)=mtrSpeedReg; nMotorPIDSpeedCtrl(motorC)=mtrSpeedReg; nSyncedMotors= synchBC; nSyncedTurnRatio=100; motor(motorB)=50; wait1Msec(10000); } Programový kód pro bod 3 Const tSensors touchSensor = (tSensors) S1; task main() { Int rychlost=30; nMotorPIDSpeedCtrl[motorB] = mtrSpeedReg; nMotorPIDSpeedCtrl[motorC] = mtrSpeedReg;
Regulace výkonu motorů
nSyncedMotors = synchBC; nSyncedTurnRatio = 100; FOR (; ; ) { if (SensorValue(touchSensor)>0) { speed = speed + 10; } motor[motorB] = rychlost; wait1Msec(500); } }
Programový kód pro bod 4 Const tSensors touchSensor_1 = (tSensors) S1; Const tSensors touchSensor_2 = (tSensors) S2; task main() { Int rychlost=30; nMotorPIDSpeedCtrl[motorB] = mtrSpeedReg; nMotorPIDSpeedCtrl[motorC] = mtrSpeedReg; nSyncedMotors = synchBC; nSyncedTurnRatio = 100; FOR (; ; ) { if (SensorValue(touchSensor_1)>0) { speed = speed + 10; } if (SensorValue(touchSensor_2)>0) { speed = speed - 10; } motor[motorB] = speed; wait1Msec(500); } }
39
Regulace výkonu motorů
40 3.2.4 Závěry a celkové hodnocení práce
Vyzkoušeli jste parametry, kterými lze optimalizovat pohyb robota. Použijte nabyté zkušenosti pro vytvoření podobných úloh. Experimentujte s rychlostí motoru master, % motoru slave vůči motoru master apod. Pomůcky: internet, přiložený soubor Senzory.docx, Sbírka: Úvod do programování robotů_1. Kontrolní otázky a úkoly: 1. Popiš, na jakém principu pracuje touch Senzor. 2.
Vysvětli, jak pozná program, který ze dvou touch Senzorů je stlačen..
3.
Vysvětli podstatu příkazu speed = speed - 10 .
4.
Jak dlouho bude probíhat programový kód z bodů 3 a 4
5.
Vysvětli podstatu příkazu nSyncedMotors = synchBC;
6.
Vysvětli podstatu příkazu nSyncedTurnRatio = 100;
Senzory
41
4 Senzory Po absolvování této kapitoly byste měli být schopni:
vysvětlit princip funkčnosti a praktické uplatnění sonaru (ultrasonic Senzor) aplikovat jak uplatnit ultrasonic senzor v praktických úlohách, vysvětlit princip funkčnosti a aplikovat světelný senzor (lightSenzor) určit, které faktory ovlivňují činnost světelného senzoru objasnit princip použití zvukového senzoru (SoundSenzor) určit vazbu určité míry hluku na konkrétní hodnotu zvukového senzoru vysvětlit podstatu výpočtu vzdálenosti robota od překážky, princip, jak světelný senzor rozezná jednotlivé barvy a princip ovládání robota hlasem a dalšími zvuky odhadnout umístění zvukového senzoru, aby jeho funkce byla bezchybná, aktivně uplatnit jednotlivé probrané senzory v praktických úlohách,
4.1 Metodický pokyn Cílová skupina
2. ročník Programování
Název tematického celku
Úplná a neúplná podmínka, Cykly
Název úlohy
Uplatnění senzorů
Cíle
Pochopit a využít fyzikální podstatu funkčnosti senzorů
Forma práce
Skupinová práce v laboratoři
Metoda práce
Reproduktivní, Komparativní, Deduktivní
Mezipředmětové vztahy
Fyzika, chemie
Časové rozvržení realizace úlohy
90 minut
4.2 Realizace úlohy 4.2.1 Teoretický základ úlohy Základem pro použití senzorů při řešení konkrétních úloh je pochopení principu jejich funkčnosti:
Senzory
42
Touch senzor – funguje na základě přerušení a spojení elektrického obvodu. Při nestisknutém spínači neprochází proud je hodnota 0. Při stisku proud prochází – hodnota 1.
LightSenzor – červená žárovka vysílá světlo, které se odráží od podkladu. Podle barvy podložky dochází k absorpci určité části bílého světla, zbylé světlo se odrazí a je přijato fototranzistoru, který je transformuje na elektrický signál a ten pošle řídící jednotce NXT (vidí míru světlosti)
CO VIDÍ OKO SENZOR SNÍMÁ VŽDY OBRAZ TMAVŠÍ UltraSonic Senzor – je tvořen dvěma senzory v jedné rovině. Jeden vysílá zvukové vlny, které narazí na překážku, odrazí se a druhý přijme odražené vlnění s určitým časovým zpožděním. Podle míry zpoždění T vypočte vzdálenost čidla od překážky vzdálenost = (T * rychlost zvuku) / 2
Sound Senzor – zvukový senzor obsahuje membránu (diafragma) , která reaguje na zvukové vlny , jakékoli deformace, dále magnet s připojenám vodičem. Vibrace membrány způsobí vibraci magnetu, vodič přenese elektrický signál
Jak reaguje? 4 - 5% Tichá
5 – 10%
10 – 30%
Hovor z dálky
Hovor zblízka
30 – 100% Hudba,
Senzory
43
místnost
aj.zvuky
Pomocí internetu: Najděte další senzory, které je možno připojit a tak rozšířit možnosti ovládání robota a jeho nasazení do různých situací. 4.2.2 Pomůcky Robot MindStorm NXT, senzory – dotykový (2 ks), světelný, ultrasonar a zvukový, vytvořené prostředí pro pohyb robota (podložka, překážky). 4.2.3 Úkoly 4.2.3.1 Úkol č. 1 – NAJDI PŘEKÁŽKU VARIANTA 1 Robot najde překážku tak, že na ni narazí. Po nárazu se zastaví. 1. Připoj Touch senzor k řídící jednotce robota 2. Na stůl nebo na zem položte vytvořenou pracovní podložku a umístěte pevnou překážkou 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon, doba jízdy bude trvat až do té doby, až dojde ke stisku touchSenzoru (narazí do překážky). Při nárazu do překážky se robot zastaví. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota Řešení: Programový kód const tSensors touchSensor=(tSensors) S1; task main() { while (SensorValue(touchSensor) == 0) { motor(motorB)=100; motor(motorC)=100; } motor(motorB)=0; motor(motorC)=0; wait1Msec(1000); }
Ukázka:
Senzory
44
Jede tak dlouho, až narazí do zdi
VARIANTA 2 Robot najde překážku bez potřebného nárazu. Zastaví se před překážkou v zadané vzdálenosti. 1. Připoj Ultrasonic senzor k řídící jednotce robota 2. Na stůl nebo na zem položte vytvořenou pracovní podložku a umístěte překážkou 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon. Doba jízdy bude řízena připojeným čidlem – UltrasonicSenzor , které vyhodnocuje vzdálenost od překážky a porovnává ji s nastavenou hodnotou. Po dosažení této hodnoty se robot zastaví. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota 4. Změřte vzdálenost robota s nastavenou hodnotou.
od
překážky
a
porovnejte
5. Vyzkoušejte citlivost čidla pro různé vzdálenosti (postupně je zkracujte). Rovněž zkoušejte zvyšovat výkon motorů. 6. Udělejte závěr ze svých experimentů. . Příprava řešení: Nastavíme volnou překážku
Senzory
Připojíme Ultrasonic senzor na vhodné místo
V prostředí ROBOTC aktivujeme připojený senzor
45
Senzory
46
Napíšte program, který zastaví 15 cm před překážkou Programový kód: const tSensors SonarSenzor = (tSensors) S1; Definice připojeného senzoru task main() { while (SensorValue(SonarSenzor) > 15 ) { motor(motorB)=50; Dokud je vzdálenost větší než 15 cm motor(motorC)=50; postupuj vpřed výkonem 50. } motor(motorB)= 0; motor(motorC)= 0; } Ukázka: 15 cm
Senzory
47 4.2.3.2 Úkol č. 2 – Počítá otáčení kol
Robot pojede tak dlouho, až se jeho kola otočí 5 krát. Jak to udělat? Nastudujte, jak lze definovat činnost krokovacího motorku velikostí otočení. 1. Pro řešení této úlohy nepotřebujete speciální čidlo, stačí krokovací motorek. Přesto připojte dotykový senzor, kterým budete spouštět program a sledovat, že po každém spuštění popojede robot o stejnou dráhu. ( Změřte). 2. Na stůl nebo na zem položte pracovní podložku, na kterou můžete fixem označovat pozici robota 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon. Start programu bude řízen připojeným čidlem – TouchSenzor Robot pojede tak dlouho, až se jeho kola otočí 6krát Potom se robot zastaví 4. Program uložte do řídící jednotky NXT 5. Opakovaně startujte program a po zastavení robota označte pozici jeho kola. 6. Změřte jednotlivé dráhy a porovnejte s předpokladem, že budou stále stejné. 7. Případné odchylky vysvětlete (nebudete-li mít zapnutou synchronizaci kol a korekci výkonu, nemusí se robot pohybovat vždy přímo) 8. Udělejte vlastní závěr. Řešení: Programový kód V prostředí RobotC se pro přístup k hodnotě krokovacího motoru používá funkce nMotorEncoder(název motoru) . Na počátku je nutné hodnotu vynulovat ( Počáteční pozice kol)
nmotorEncoder(motorB)=0; nMotorEncoder(motorC)=0; Nastavíme počet otáček na 6, to znamená 6 celých kruhů (360°) – celkem tedy 2160° task main() { nMotorEncoder(motorB)=0; nmotorEncoder(motorC)=0; while (nMotorEncoder(motorB) < 2160) {
Senzory
48 motor(motorB)=100; motor(motorC)=100; } }
Pokud chcete, aby se otáčky počítaly na obou krokovacích motorech současně, je třeba přidat podmínku pro motor C a nastavit současnou platnost obou podmínek task main() { nMotorEncoder(motorB)=0; nmotorEncoder(motorC)=0;
Podmínky budou platit současně
while (nMotorEncoder(motorB)<2160)&& nMotorEncoder(motorC)< 2160
{ motor(motorB)=100; motor(motorC)=100; } }
4.2.3.3 Úkol č. 3 – Poslouchá mě na slovo Pokuste se splnit dávné přání konstruktérů robotů, aby je ovládal hlasem nebo různými zvuky. Nastudujte, jak je zvukové čidlo citlivé na vnější zvukové podněty a naučte se tato pravidla ovládat. 1. Pro řešení této úlohy potřebujete zvukové (soundSensor), kterým budete ovládat pohyb robota.
čidlo
2. Robota postavte na stůl nebo na zem. 3. Vytvoř program, který nastaví výkon obou motorů B, C na určitý výkon (robot se rozjede rychleji nebo pomaleji). Start programu bude řízen připojeným čidlem – SoundSenzor . Dobu jízdy stanovte na 10 s. 4. Program uložte do řídící jednotky NXT 5. Opakovaně startujte program působením různě silných zvukových podnětů. 6. Po zastavení robota změřte jednotlivé dráhy a porovnejte je navzájem. 7. Vytvořte tabulku závislosti výkonu motorů na síle vnějšího zvukového podnětu. 8. Udělejte vlastní závěr.
Senzory
49
Řešení: Jako ideální zdroj zvuku zvolte tlesknutí. Později zkoušejte jiné typy zvuků a jak na ně robot reaguje. Programový kód
Připojíte a aktivujete zvukové čidlo
Napíšete program, kterým nastavíte oběma krokovacím motorům výkon dle impulsu získaného ze zvukového čidla
const tSensors zvukovySensor = (tSensors) S1; task main() { motor(motorB)= SensorValue(zvukovySensor); motor(motorC)=SensorValue(zvukovySensor); wait1Msec(10000); }
Program vložíte do řídící jednotky NXT, robota postavíte na podložku na místo startu, spustíte program a vyvoláváte zvukové efekty. (použijte různé varianty intenzity zvuku)
Po zastavení robota vždy změřte ujetou vzdálenost
V závěru vložte program, ve kterém nastavíte výkon obou motorů na 100% a dobu jízdy 10 s. Postavte robota na podložce na start a spusťte vložený program. Změřte ujetou vzdálenost.
Ze získaných údajů propočítejte procentuální výkon pro jednotlivé zvukové podněty.
Senzory
50
Závěr: Pro získání ideální citlivosti zvukového senzoru je třeba ho umístit co nejdál od krokovacích motorků, které samy produkují zvuk. Úkol pro zájemce: Vytvořte obměnu předchozího úkolu. Pokud v průběhu 10 s, kdy se robot pohybuje, vyvoláte další zvukový podnět, robot se zastaví. NÁVOD: Použijte celočíselnou proměnnou pohyb , která bude mít hodnotu nula, pokud robot stojí a hodnotu jedna, pokud se pohybuje.
Při zvukovém podnětu testujeme obsah proměnné pohyb a pokud je >0 nastavíme výkon motorů na nulu, jinak je nastavíme na hodnotu dodanou zvukovým senzorem. Ukázka
4.2.4 Závěry a celkové hodnocení práce Řešením předchozích úkolů, jste si vyzkoušeli rozšíření funkčnosti robota pomocí základních senzorů. Na internetu najdete celou řadu dalších senzorů, které jsou v současné době k dispozici. Najděte a uložte si zdrojové stránky, které budou pro vás zdrojem informací o dalším vývoji tohoto prostředí. Souhrn základních pojmů – funkční senzory Robota NXT Mindstorm, fyzikální podstata funkce použitých senzorů.
Funkce
51
5 FUNKCE Po absolvování této kapitoly byste měli být schopni: vysvětlit princip tvorby a volání funkcí, objasnit význam vstupních parametrů funkcí vysvětlit princip a zdůvodnit využití funkcí při řešení aplikací. vysvětlit pojem funkce, její strukturu a způsob volání funkce v těle programu, účelně navrhnout potřebné funkce a účelně využít při řešení úlohy .
5.1 Metodický pokyn Cílová skupina
3. ročník – Programování
Název tematického celku
Funkce
Název úlohy
Použití funkcí pro přesun robota podle zadaného plánu
Cíle
Naučit se účelnému využití funkcí
Forma práce
Skupinová práce v laboratoři Frontální výuka
Metoda práce
Reproduktivní, Komparativní, Deduktivní
Mezipředmětové vztahy
matematika
Časové rozvržení realizace úlohy
90 minut
Funkce
52
5.2 Realizace úlohy 5.2.1 Teoretický základ úlohy
popiš význam funkce. vysvětli princip strukturu kódu funkce a jeho připojení ke kódu programu. vysvětli princip volání jednoduché funkce a funkce s použitím parametrů.
Použití funkcí se ukážeme, na příkladu, kdy máme vyřešit následující úkol: Pohyb robota o herním plánu obsahujícím překážky Zakreslená mřížka představuje hrací plán, ve kterém šedá pole představují překážky, které musí robot objet. Je povolen pouze posun vpřed, vzad, vlevo a vpravo
Úkolem je přemístit robota z výchozí pozice START do pozice CÍL. Je povolen posun vpřed, vzad, vlevo, vpravo
Např. Trasa A
Možná řešení:
Určitě Vás napadnou další možné kombinace, jak by se robot mohl dostat do cíle
šipky naznačují možné přesuny robota
Funkce
53
při bližším pohledu je patrné, že se zde střídá určitý počet činností (vpřed, vlevo, vpravo), které se opakují a právě pro takovéto situace je vhodné použít funkce.
síťový charakter podkladu navíc ukazuje, činnosti vpřed, vlevo, vpravo se mezi sebou liší počtem čar, které přejíždějí
při řešení takové situace spočívá v tom,že ho budeme postupovat v oddělených krocích: o pojmenujete opakující se činnosti o opakující se kód napíšeme pouze jednou (jako funkce) o pokud se činnosti liší jen v určité vlastnosti, kterou lze vyjádřit číslem nebo konečným počtem údajů, použijeme tzv. vstupní parametr do příslušného kódu o po vytvoření všech potřebných kódů začnete vytvářet hlavní kód programu, kde na příslušných místech programu uvedeme odkaz na potřebnou funkci (voláme funkci)
5.2.2 Pomůcky Robot Mindstorm NXT, software RobotC, světelný senzor 5.2.3 Úkoly
5.2.3.1 Úkol č. 1 – APLIKACE FUNKCÍ
Postupně vytvořte potřebné funkce tak, že
pro jednotlivé funkce napíšete programový kód
k němu připojíte tělo programu, v němž funkci zavoláte
uložíte jako program, který vložíte do NXT jednotky, spustíte a ověříte jeho správnost .
při tvorbě kódů využijete zkušenosti nabyté v předchozích kapitolách
Ze zadání plyne, že robot při jízdě : volí pohyb ve směru naznačené sítě, rovnoběžně s linkami, nepoužívá jízdu šikmo, změnu směru provádí na místě.
Funkce
54 Funkce ZMĚNA SMĚRU: (1) funkce zaboč vlevo
void Vlevo() Využijeme čítače otočení { kol, který vynulujeme nMotorEncoder(motorB)=0; while(nMotorEncoder(motorB) < 180) { motor(motorB)=50; motor(motorC)=-50; } motor(motorB)=0; motor(motorC)=0; } Volání funkce Vlevo task main () { Vlevo(); Wait1MSec(1000); }
Spusť funkci Vlevo a následně počkej, než budeš pokračovat
(2) funkce zaboč vpravo. Bude konfigurována obdobně void Vpravo() Využijeme čítače otočení { kol, který vynulujeme nMotorEncoder(motorB)=0; while(nMotorEncoder(motorB) < 180) { motor(motorB)=-50; motor(motorC)=50; } motor(motorB)=0; motor(motorC)=0; } Volání funkce Vpravo
task main () { Vpravo(); Wait1MSec(1000); }
Spusť funkci Vpravo a následně počkej, než budeš pokračovat
Aplikace
56 Funkce JEĎ ROVNĚ Jeď přímo, až narazíš na tmavou linku, zastav
void JedRovne() { while(SensorValue(lightSensor)> PrumernaHodnota { motor(motorB)=50; dokud je světlá podložka, jeď motor(motorC)=50; rovně } motor(motorB)=0; motor(motorC)=0; } Funkce PŘEJEĎ LINKU Přejeď tmavou linku a ve chvíli, kdy linka skončí (najedeš na světlou podložku), zastav. void PrejedLinku() { while(SensorValue(lightSensor)< Prumerna hodnota
{ motor(motorB)=50; motor(motorC)=50;
Přejeď čáru a zastav
} motor(motorB)=0; motor(motorC)=0; } 5.2.3.2 Úkol č. 2 Řešte průjezd robota herním plánem po vyznačené trase A .
Robot má v takovémto případě přejet 5 tmavých linek , zahnout vlevo, přejet 2 linky, opět zahnout vlevo a přejet jednu linku. Kód programu by mohl vypadat následovně. Předem je nutné upozornit, že tento kód je ilustrační a má k ideálu daleko. V případě použití výše uvedených funkcí vlevo a vpravo odstraňte zastavení motorů po dokončení otočení. Využijte proměnné PrumernaHodnota použité v 2. kapitole (2.2.3.4).
Aplikace
57
task main () { int PocetLinek; PocetLinek=0; while (PocetLinek <= 5) { if (SensorValue(lightSensor)> PrumernaHodnota) { Jeď, dokud jsi na světlé podložce . JedRovne(); } if (SensorValue(lightSensor)< PrumernaHodnota) { Přejeď linku a připočti PrejedLinku(); PocetLinek=PocetLinek + 1; k počtu přejetých linek. } } V tuto chvíli robot přejel 5 linek a otočil se Vlevo(); while (PocetLinek <= 7) { if(SensorValue(lightSensor)> PrumernaHodnota) { JedRovne(); } if (SensorValue(lightSensor)< PrumernaHodnota) { PrejedLinku(); PocetLinek=PocetLinek + 1; } } V tuto chvíli robot přejel 7 linek a otočil se Vlevo(); while (PocetLinek < 8) { if (SensorValue(lightSensor)> PrumernaHodnota) { JedRovne(); } if (SensorValue(lightSensor)< PrumernaHodnota) { PrejedLinku(); PocetLinek=PocetLinek + 1; } } }
Další možností je po každém otočení počet přejetých linek nulovat a začínat počítat nově při každé jízdě vpřed. Vidíte, že takto formulovaný kód je dost nešťastný, protože se stále opakují stejné pokyny. Musí proto existovat lepší způsob řešení, který by umožňoval zadat počet linek, které má robot přejet, univerzálně. K tomu je vhodné použít vstupního parametru funkce, který bude udávat počet linek, které má robot překonat.
Aplikace
58 5.2.3.3 Úkol č. 3 – PARAMETRIZACE FUNKCÍ
pro zadané funkce vytvoříte všechny potřebné varianty, které pak zobecníte pomocí parametrů
ukážete si volání funkcí s parametrem v těle programu
správnost programu ověříte vložením do NXT jednotky robota a jeho spuštěním
Z předchozího úkolu č.1 vidíme, že kód programu, který vede robota po trase A skrz herní plán, je docela dlouhý. Z rozboru je vidět, že pro přejezd přes několik linek se opakuje stále stejný kód, který se liší jen počet tmavých linek, které, je třeba přejít. Situaci lze zjednodušit vytvořením „univerzální“ funkce, která bude používat vstupního parametru tzv. vstupního parametru UjedPocetLinek, kterým lze obecně zadat počet tmavých linek, jenž má robot přejet. Výsledný kód funkce: task main() { int PocetLinekUjeto; PocetLinekUjeto=0; void PrejedPocetLinek(int UjedPocetLinek) { PocetLinekUjeto=0; while(PocetLinekUjeto < UjedPocetLinek) { while(SensorValue(lightSensor) > PrumernaHodnota) { motor(motorB)=50; Jeď, dokud jsi na světlé podložce . motor(motorC)=50; } if (SensorValue(lightSensor) < PrumernaHodnota) { while(SensorValue(lightSensor)< PrumernaHodonta Narazil-li jsi na { tmavou podložku Jeď, dokud jsi na motor(motorB)=50; . motor(motorC)=50; tmavé podložce . } PocetLinekUjeto=PocetLinekUjeto+1; Po opuštění tmavé podložky } } }
Způsob volání funkce s parametrem: PrejedPocetLinek (5) ;
za UjedPocetLinek se dosadí 4
PrejedPocetLinek (2) ;
za UjedPocetLinek se dosadí 3
PrejedPocetLinek (1) ;
za UjedPocetLinek se dosadí 2
Aplikace
59
5.2.3.4 Úkol č. 4 – ŘETĚZENÍ FUNKCÍ Navrhněte tělo programu pro průchod robota herním plánem po trase A pomocí „univerzální“ funkce vytvořené v úkolu č.2 { … PrejedPocetLinek(5); vlevo(); PrejedPocetLinek(2); vlevo(); PrejedPocetLinek(1); } 5.2.3.5 Úkol č. 5 Napište celý program pro průchod robota po trase A
Zvažte další varianty řešení !!! 5.2.4 Závěry a celkové hodnocení práce Podrobnější vysvětlení pojmu funkce jako podprogramu a principu jejího využití pro zjednodušení programových kódů: FUNKCE je klíčovým pojmem programování. Představuje zobecněný postup pro řešení nějaké situace obsahující výpočty, výpisy, případně další činnosti. Pokud používá proměnné (nazýváme je formální parametry), předpokládá se, že budou při okamžitém použití funkce v programu nahrazeny konkrétními hodnotami (těm pak říkáme skutečné parametry). Zapisují se při volání funkce do závorky v příslušném pořadí). Při řešení předchozí úlohy jste mohli pozorovat, jak výrazně se zkrátí a také zpřehlední hlavní část programového kódu. Tato skutečnost vede k lepšímu pochopení podstaty programu a snadněji se odhalují případné nedostatky. Používání parametrů ve funkcích vyžaduje sice předchozí analýzu, co, jak a kdy parametrizovat, aby to bylo účelné, ale umožní několikanásobně zkrátit programové kódy a zrychlí tak i jejich interpretaci. Závěry a celkové hodnocení práce (pro studenty): S pojmem funkcí se setkáváte i v celé řadě dalších předmětů – v matematice, fyzice, chemii i biologii. Charakter funkcí mají také
60
Aplikace
šablony při tvorbě slovesných tvarů v jazycích apod, Nácvik pochopení funkčních závislostí a dovednost jejich nastavení a zobecňování je důležitým faktorem lidského myšlení ve všech směrech. Souhrn základních pojmů – pojem funkce, princip jejího uplatnění, vstupní (nezávislá) a výstupní (závislá) hodnota, způsob volání funkce, zobecnění definice funkce použitím parametru. Závěrečný úkol: Vytvořte vlastní zadání pro průchod robota bludištěm. Bludiště nakreslete na bílý papír černým fixem. Úlohu řešte ve skupinách a vyhlaste soutěž o robota šikulu, který bude nejrychlejší,
Aplikace
61
6 APLIKACE Po absolvování této kapitoly byste měli být schopni: vyjmenovat příklady prostředí pro ovládání robotů, ovládat základy řídící kostky NXT vysvětlit výhody grafických prostředí pro programování robotů naprogramovat jednoduchý program pomocí řídící kostky NXT naprogramovat jednoduchý program pomocí prostředí NXT-G
6.1 Metodický pokyn Cílová skupina
2. - 4. ročník – Programování
Název tematického celku
Tvorba aplikací
Název úlohy
Nácvik práce v prostředí NXT-G a Microsoft Robotic studia
Cíle
Zvládnout základy grafického programování a programování pomocí řídící kostky NXT
Forma práce
Individuální práce v laboratoři
Metoda práce
Reproduktivní, Komparativní, Deduktivní
Mezipředmětové vztahy
Fyzika, Matematika
Časové rozvržení realizace úlohy
120 minut
Aplikace
62
6.2 Realizace úlohy 6.2.1 Teoretický základ úlohy Před plněním úkolů v této kapitole prací si zopakujte: - pojem algoritmus a jeho základní vlastnosti, - základní algoritmické struktury (cyklus, podmínka, podprogramy), - stáhněte a nainstalujte si potřebný software, např. Microsoft Robotics Developer Studio 4 http://www.microsoft.com/robotics/ - seznamte se s ovládáním robotického studia (najděte instrukce a tutoriál na webových stránkách) Poznejte některá další vybraná prostředí pro tvorbu aplikací: MATLAB Jedná se o programové prostředí a skriptovací programovací jazyk pro :
modelování, návrhy algoritmů, počítačové simulace, analýzu a prezentaci dat,
měření a zpracování signálů, návrhy řídících systémů návrhy řídících systémů návrhy komunikačních systémů .
Jednou z možností programování robota LEGO Mindstorms NXT je využití systému MATLAB s knihovnou RWTH – Mindstorms NXT a sadou nástrojů Toolbox. Knihovna obsahuje funkce sloužící k navázání komunikace s robotem LEGO Mindstorms NXT, k jeho kontrole a ovládání. Nástavbou Matlabu je pak Simulink umožňující modelování dynamických systémů. Microsoft Robotic Studio Je používané k programování robotů v .NETu. Obsahuje knihovnu CCR, která u robotů řeší koordinaci mezi činnostmi, které může robot vykovnávat. Knihovna je založená na portech, pod kterými si lze představit objekt, který může obsahovat posloupnost zpráv, nebo dat určitého typu. V případě robotů jsou porty všechny senzory a motory . Ze senzorů se data získávají a do motorů se zapisují. Visual Programming Language (VPL) Jedná se o grafický nástroj Microsoft Robotics Studia, který poskytuje možnost grafického programování. VPL umožňuje tvořit své vlastní komponenty napsané např. v jazyce C# a seskupovat je do složitějších programů.
Aplikace
63
Ukázka návrhu aplikace s využitím VPL
Zdroj: http://www.tomasp.net/files/robotics/vpl.png
Prostředí Lego Mindstorms NXT a knihovna LEGO NXT.NET je k dispozici ke stažení na webu s opensource projekty pro vývojová prostředí Microsoft
Řídící kostka NXT
64 obsahuje nainstalovaný firmware, který umožňuje kromě spouštění programů vytvořených v programovacím prostředí NTX-G také možnost naprogramovat si vlastní jednoduchý program pomocí NXT (bez použití počítače). Funkce NXT, jsou dostupné pomocí menu: .
V menu se lze pohybovat pomocí tlačítek umístěných na NTX kostce. Seznamte se podrobněji s jednotlivými částmi menu. Popis menu: My files Zobrazení všech programů vytvořených v NXT případně v počítači Software files – programy uložené z PC NXT soubory – programy, které byly vytvořeny na NXT Sound files - zvukové soubory Try Me Files Soubory se automaticky ukládají do příslušných adresářů. V případě, že je stažen program se zvukovým souborem, je program uložen do software files a zvuky do sound files. NXT Program Slouží k programování robota přímo z kostky NTX bez použití počítače Try Me Nabídka umožňuje vyzkoušet senzory a motory robota za předpokladu, že příslušené senzory jsou zapojené do portů, které jsou uvedeny v manuálu k robotu. View Nabídka slouží k provedení testů senzorů a motorů na základě pozorování skutečných dat z příslušných jednotek. Postup: připojte motor, případně senzor do příslušného portu a data se v případě volby tohoto menu objeví na displeji. Settings Ke konfiguraci NTX - hlasitost reproduktoru, vypnutí v případě nečinnosti, odstraňování souborů apod Sleep: klidový režim nastavitelný po 2, 5, 10, 30, 60 minutách a možnost never, která zajistí, že robot bude stále zapnutý Volume: k nastavení hlasitosti reproduktoru Delete files: jak už název napovídá, umožňuje odstranit programy z jednotlivý adresářů
Aplikace
65
Zde můžete vymazat všechny stažené programy ve všech třech dříve zmiňovaných složkách: softwarové soubory, NXT soubory, zvukové soubory. Bluetooth Umožňuje připojení pomocí bluetooth k dalším zařízením jako jsou ostatní NXt, počítače, mobilní telefony apod., což lze použít k výměně programů mezi jinými NXT a nahrání programů z počítače bez použití kabelu. Může také sloužit k ovládání robota pomocí mobilního telefonu. Pomůcky: PC, LEGO, Mindstorms NXT, robot, čidla, laboratorní úlohy 6.2.2 Úkoly: 6.2.2.1 Úkol č.1 Napište zdrojový kód programu Vytvořte program s jedním dotykovým senzorem: 1. po stisku dotykového senzoru zahájí na displeji NXT terminálu odpočet od 10 do 1 po sekundách. 2. zobrazte na displeji nápis „START“ a rozjeďte robota 100% výkonem. 3. po opětovném stisku dotykového senzoru, ať se robot zastaví a program se ukončí. task main() { for(;;) if(SensorValue(ovladac)==1) break; for(int i=5;i>=1;i++) { nxtDisplayTextLine(0,”%d”,i); wait1Msec(1000); } nxtDisplayTextLine(0,”START”); for(;;) { motor(motorB)=100; motor(motorC)=100; if(SensorValue(ovladac)==1) break; } }
66 6.2.2.2 Úkol č.2 - programování robota pomocí řídící kostky NXT Pomocí voleb v řídící kostce NXT vytvořte jednoduchý program, který uvede robota do pohybu vpřed, po té zastaví, otočí se o 180° a opět pojede vpřed. 6.2.2.3 Úkol č. 3 - tvorba programu v grafickém prostřední NXT-G Vytvořte program z úkolu č.2 v grafickém prostředí NXT-G Pro zájemce: Stáhněte si z internetu software Robotics Studio a vyzkoušejte si předchozí úlohy z této sbírky vytvořit v tomto prostředí.
67 Závěr Pokuste se zadané aplikace vytvořit sami. Uvidíte, že programování v prostředí Matlab i Robotics Studia s využitím robota Mindstorms NXT je docela zábavné. Pokud jste došli až k tomuto odstavci, blahopřeji vám k výdrži a trpělivosti. Určitě jste se pobavili, ale také strávili dost času při studiu nových informací. Doufám, že oblast programování vás oslovila, že jste naši zalíbení v řešení úloh a získali lepší představu o práci programátora. Přeji Vám hodně sil, úspěchů a radosti při programování Autor
68
Aplikace
69
Přílohy Pracovní listy pro žáka
Pracovní list č.1
71
1 ZÁKLADNÍ HARDWARE A SOFTWARE Název úlohy: Základy ovládání robota. Cíle: Pomocí programu RobotC ověř své základní dovednosti ovládání robota Vypracováno dne: Spolupracovali: _______________________________________________________________ Test 1 1. Odpovězte na otázky:
z čeho se skládá robot Mindstorm NXT …………………………………………………………………………………………… ……………………………………………………………………………………………
pomenuj zařízení na obrázcích, uveď princip jejich činnosti ---------------------------------
----------------------------------
---------------------------------
----------------------------------
---------------------------------
----------------------------------
---------------------------------
----------------------------------
A
B
C
2. Uveď, o jaký typ pohybu se jedná.
Příkazy pro motory motor[motorC]=100; motor[motorB]=100;
motor[motorC]=0; motor[motorB]=0;
Výsledný pohyb
Pracovní list č.1
72
motor[motorC]=50; motor[motorB]=50;
motor[motorC] = 100; motor[motorB] = -100;
motor[motorC]=100; motor[motorB]=0;
motor[motorC] = - 100; motor[motorB] = - 100;
Test 2 Pro naznačené situace dopište potřebný kód Situace A - jízda vpřed po dobu 4s na 80% výkonu motorů Dopište kód:
Pracovní list č.1
73
Situace B - otočení vlevo s výkonem motorů 50%, doba 0,8s Dopište kód:
Výkon motorů 50% Doba jízdy 0,8 s
Situace C - stání po dobu 5 sekund a pak 2s jízda vpřed 100% výkonem Dopište kód:
Test 3 Zapište, který umožní robotovi vykonat uvedené činnosti v daném pořadí: (4) Jede vpřed 6 s (5) Na místě zahne doprava v průběhu 0,6 s (6) Couvá přímo po dobu 3 s
Test 4
Pracovní list č.1
74
V programu ROBOTC vytvořte následující úlohy a správnost ověřte nahráním do robota a spuštěním.
Úkol č.1 – Slalom
Na stole vyznačte start, cíl a překážky dle schematu Napište program pro pohyb robota po dané trase Nahrajte program do robota a spusťte Na příslušná místa vložte překážky a cíl Doplňte program o textovou signalizaci Na startu se objeví text VYJÍŽDÍM Při každé změně směru se objeví text DOLEVA, příp. DOPRAVA Při dojezdu do cíle se objeví text DORAZIL JSEM
start 6s 8s
6s
cíl
6s
4s 4s
5s
Po dojezdu do výchozího bodu START se objeví velkým písmem text DOMA JE DOMA Po 10 s se otočí Upravte program tak, aby jednotlivé body se opakovaly v nekonečné smyčce Návod: vyhodnocujte a ověřujte po jednotlivých bodech.
Pomůcky:
Popis algoritmu
Programový kód
Pracovní list č.1
75
1.1.1.1 Úkol č. 2 Jízda zručnosti
Úkol č.1 vyřešte tak, že změnu směru v daném okamžiku zabezpečíte pomocí dvou dotykových senzorů, které pojmenujete LEVY, PRAVY. Program běží v nekonečném cyklu
na display se střídají texty JEDU,DOPRAVA, DOLEVA, STOJÍM podle toho, jak jsou nastaveny motory B,C
na stole si vytvořte překážkovou dráhu a sami veďte robota při jejím projíždění. Návod: vyhodnocujte a ověřujte po jednotlivých bodech. Programový kód: (doplňte komentářem)
Doplňte text: Vytvořený program se nahraje do ________________ a spustí se. Příkaz _____________________ způsobí, že se motorB zastaví. Robot se otočí na místě čelem vzad směrem doleva, když napíšu příkazy ___________________ a _______________ . Robot vypíše na display na 2.
řádek
Blahopřeji,
zvládl
jsi
to!!!
pomocí
příkazu____________________________________________
76 Závěry a celkové zhodnocení experimentu: Popište reakce robota, udělejte vlastní zobecnění.
Pracovní list č.1
Pracovní list ě.2
77
2 CYKLY Název úlohy: Řízení pohybu robota barvou podložky Cíle: Pomocí vybraných čidel - světelného senzoru a sonaru vytvořit programy pro pohyb robota v nastaveném prostředí Vypracováno dne: Spolupracovali: _________________________________________________
2.1 Teoretický základ úlohy Pro plynulý pohyb robota je důležité opakované vyhodnocování vstupních údajů: V programech se řeší pomocí cyklů. 1. Uveďte konkrétní situace, kdy je nutné opakovat stejné činnosti: 2. Popiš, jak se mohou jednotlivé typy opakování lišit? _____________________________________________________________ _____________________________________________________________ _____________________________________________________________ 3. Uveď přehled jednotlivých typů cyklů včetně programového kódu Programový kód: (doplňte komentářem)
4. Popiš princip funkčnosti světelného senzoru: ____________________________________________________________ ____________________________________________________________
Pracovní list č.2
78
2.2 Pomůcky: (uveď přehled potřebných pomůcek) _____________________________________________________________ _____________________________________________________________
2.3 Úkoly 2.3.1.1 Úkol č. 1 Zabezpečte pohyb po vyznačené trase 1.
Připravte si prostředí podle nákresu, připojte k základní jednotce světelný senzor tak, aby bylo možno sledovat barevnou stopu, například takto
2. V prostředí programu RobotC si vytvořte nový program, který umožní využití připojeného světelného senzoru. otevřete oddíl pro nastavení senzorů nastavíte světelné čidlo na portu S1, vhodně ho pojmenujete uložtee nastavené změny Programový kód: (doplňte komentářem)
Pracovní list ě.2
79
2.3.1.2 Úkol č. 2 Hledej hranici oblasti – DÁL NESMÍŠ Modifikujte jízdu robota, aby jel po přímé dráze na světlém podkladu tak dlouho, až narazí na tmavou linku. Potom se robot zastaví. Řešte i další úkoly.
1. Pomocí LightSenzoru testuje robot barvu podkladu. Až najde natolik tmavý podklad, aby jeho reakce neodpovídala podmínce v následujícícm kódu, zastaví. 2. po zastavení na tmavém pozadí robot otočil čelem vzad 3. po otočení robot rozjel zpět směrem k výchozímu bodu, který bude opět označen tmavší barvou Programový kód: (doplňte komentářem)
Pracovní list č.2
80 2.3.1.3
Úkol č. 3 Světelná křižovatka
STŮJ – PŘIPRAV SE - JEĎ 1. experimentálně ověřte, jaká číselná hodnota odpovídá 3 různým barvám. Zkuste barvy - červenou, zelenou, žlutou 2. poté si připravte bodový zdroj světla a 3 barevné clony (barevný celofán) Případně použijte papírové barevné kruhy, které vkládáte pod světelný senzor 3. Připravte kód pro chování robota na světelné křižovatce červená znamená motory v klidu,na konci cyklu nechejte 1 sekundu čekání žlutá nastaví čekání na 0,1 s zelená rozjede se přímo nastavenou rychlostí 4. Zabezpečte změnu barvy pod světelným senzorem robota. Programový kód: (doplňte komentářem)
Pracovní list ě.2
81
2.3.1.4 Úkol č. 4 Robot stopař - SLEDUJE TRASU Na připravený papír nakreslete širokým fixem trasu pro robota a při-pravte kód, který ho naučí sledovat naznačenou trasu po křivce. Ověřte, že kód je takový, že bude použitelný i pro další připravené trasy (alespoň jednu). Zkuste dvě varianty řešení. Ukázka trasy
CÍL
L
Kostky představují překážky (plastové kelímky, krabice apod.). Pohyb po křivce je řešen sledováním barvy podkladu pomocí světelného senzoru. 1.
Varianta – zjednodušená : Opakuje níže uvedené 2 kroky tak dlouho, dokud se nestane, že robot nenarazí na tmavou barvu, maximální pootočení o 360° robot se natáčí tak dlouho, dokud nenarazí na tmavou barvu posouvá se vpřed tak dlouho, nenarazí na světlou barvu
ověřte, že pohyb je trhaný ( viz nákres)
Pracovní list č.2
82 2.
Varianta – vylepšená: předchozí varianta se vylepší tím, že si robot dopředu detekuje 2 extrémní barvy podložek (světlá – tmavá), určí si průměrnou hodnotu thresholdValue a změna směru se řídí touto průměrnou hodnotou. Tím se „zjemní kličkování“ Systém dvou WHILE cyklů se nahradí podmínkou if else Robot si uloží hodnotu, kterou vysílá světelný senzor u světlé podložky - SvetlaPodlozka Robot si uloží hodnotu, kterou vysílá světelný senzor u tmavé podložky - TmavaPodlozka Vypočte se průměrná hodnotu - PrumernaHodnota v předchozím kódu se hodnota 45 nahradí touto průměrnou hodnotou, čímž se trhavý pohyb „vyhladí“
Popis výchozí situace: Aby si robot mohl vypočítat průměrnou hodnotu podložky, položíme jej nejdříve na světlou položku. Po zmáčknutí dotykového senzoru si robot uloží hodnotu světlé podložky do proměnné SvetlaPodlozka. Pak položíme robota na tmavou podložku a opět stiskneme dotykový senzor. Dojde k uložení hodnoty tmavé podložky. Na základě těchto údajů pak robot vypočítá průměrnou hodnotu, na základě které bude dále korigovat svou jízdu. Programový kód: (doplňte komentářem)
Pracovní list ě.2
83
Závěry a celkové zhodnocení experimentu: - popište reakce robota - experimentálně zjistětem po jaké době se robot odchýlí od příměho směru, i když máte nastaven výkon obou motorů stejně. - pokuste experimentální zjištění logiscky zdůvodnit
84
Pracovní list č.2
Pracovní list ě.3
85
3 Regulace výkonu motorů Název úlohy: Zabezpečení přímého pohybu Cíl: Využitím parametru PID a synchronizace výkonu motorů, které jsou v knihovně NXT-G sledovat udržení přímého směru jízdy Vypracováno dne: Spolupracovali: _______________________________________________________________
3.1 Teoretický základ úlohy Experimentálně můžete pozorovat, že stejně nastavený výkon obou kol ještě neznamená, že se obě musí pohybovat stejnou rychlostí(viz pracovní list 2). Tuto situaci řeší firmware robotů Mindstorm NXT zavedením 3. Parametru PID 4. Synchronizací motorů
Parametr PID určí skutečnou rychlost, kterým se daný krokovací motorek pohybuje. Vypočítá ji porovnáním aktuální pozice motoru s pozicí motoru před sekundou. Zjistí, jakou dráhu skutečně urazil. Vypočítá, skutečnou rychlost Z nastavení maximální možné rychlosti propočítá aktuální procentuální výkon Z rozdílu mezi skutečným a nastaveným výkonem se vyhodnotí parametr PID a koriguje se výkon Rychlost =
30 = 300°/s toto je ideální výkon motoru (100 %) 0,1s
počáteční pozice kola
počáteční pozice kola aktuální pozice kola
Výchozí pozice
Pozice po 1/10 s
Pracovní list č.3
86 Korekce výkonu pomocí PID nastavený výkon očekávaná rychlost: 50
výkon motorů: 50
zjištěný výkon naměřená rychlost: 47
korekce výkonu pomocí PID chyba: 3
PID seřízení: +4
Na základě zjištěné chyby algoritmus PID upraví výkon motoru
Kód, který aktivuje použití parametru PID nMotorPIDSpeedCtrl(motorB) = mtrSpeedReg; nMotorPIDSpeedCtrl(motorB) = mtrSpeedReg; Zobrazení hodnot PID v prostředí RobotC
Synchronizace motorů zabezpečí sladění rychlosti oboru motorů na stejnou hodnotu (s využitím parametru PID) a tím zajistí ideálně přímý pohyb robota. Tato skutečnost je řešena funkcí SYNC BC pomocí níž je motor B chápán jako řídící (master) a motor C jako podřízený (slave) . Nastavíme-li výkon motoru B, automaticky se nastaví stejný výkon na motor C. Parametrem PID se dále sladí také skutečný výkon Kód, který aktivuje použití synchronizace a nastaví maximální výkon podřízeného motoru nSyncedMotors= synchBC; nSyncedTurnRatio = 100;
3.2 Pomůcky Robot Mindstorm NXT, Touch Senzory, Lightsenzor, připravené pracovní podložky (pro dokonale rovnou čáru použijte širší černou lepicí pásku)
Pracovní list ě.3
87
3.3 Úkoly 3.3.1 Úkol č. 1 – OVĚŘENÍ FUNKCE PID V PROGRAMU
1. Vytvořte kód pro přímý pohyb robota , oba motory nastavte na výkon 50, délka jízdy 30 s. Po
2. Vytvořte kód pro přímý pohyb robota , oba motory nastavte na výkon 50, délka jízdy 30 s. P 3. Porovnejte obě situace a udělejte závěr. Programový kód k bodu 1:
Programový kód k bodu 2:
Pracovní list č.3
88
3.3.2 Úkol č. 2 – OVĚŘENÍ NUTNOSTI SYNCHRONIZACE Experimentálně ověřte si minimální dobu jízdy, abychom zaregistrovali odchylku od přímého směru. Použijte program pro nekonečný cyklus – stálý pohyb robota – změřte okamžik pozorované odchylky od přímého směru. Nastavte výkon a měřte uletou vzdálenost za určitý čas, přepočtěte rychlost Pozorování opakujte alespoň 5 krát a udělejte průměr. Měření zapište do tabulky Tabulka zjištění dobym kdy byla zaregistrována odchylka od přímého směru Měření 1 2 3 4 5 číslo Doba jízdy Výkon motorů Rychlost
Sledujte závislost na nastaveném čase a nastaveném výkonu. Vyvoďte závěr ze zjištěných výsledků _______________________________________________________________ _______________________________________________________________ _______________________________________________________________ ______________________________________________________________ 3.3.3
Úkol č. 3 – POUŽITÍ SYNCHRONIZACE PRO ZAJIŠTĚNÍ STEJNÉHO VÝKONU PRO OBA MOTORY
1.
Připojte dva Touch senzory k řídící jednotce robota
2. Vytvořte program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte rychlost motoru B na 50 , dobu jízdy na 4 sekund. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota 3. Vytvořte program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte počáteční rychlost motoru B na 30 , dobu jízdy na 10 sekund. Nastavte komunikaci s jedním touch Senzorem. Vždy když ho stiskneme, zvýšíme aktuální výkon o 10. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota
Pracovní list ě.3
89
4. Vytvořte program používající parametr PID a synchronizaci obou motorů B,C tak, že motor B se master a motor C je slave. Nastavte počáteční rychlost motoru B na 30 , dobu jízdy na 10 sekund. Nastavte komunikaci se dvěma touch Senzory S1, S2. Vždy když stiskneme senzor S1, zvýšíme aktuální výkon o 10. Vždy když stiskneme senzor S2, snížíme aktuální výkon o 10. V případě, že by výkon vyl záporný, nastavíme jej na nulu. Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota. Vše řádně ukliď.
Programový kód pro bod 2:
Programový kód pro bod 3:
Pracovní list č.3
90
Programový kód pro úkol č.4
Závěry a celkové hodnocení práce Vyzkoušeli jste parametry, kterými lze optimalizovat pohyb robota. Použijte nabyté zkušenosti pro vytvoření podobných úloh.
Kontrolní otázky a úkoly: Pro hledání odpovědí na otázky můžete použít: internet, přiložený soubor Senzory.docx, Sbírka: Úvod do programování robotů_1. 1.
Popiš, na jakém principu pracuje touch Senzor.
2.
Vysvětli, jak pozná program, který ze dvou touch Senzorů je stlačen..
3.
Vysvětli podstatu příkazu speed = speed - 10 .
4.
Jak dlouho bude probíhat programový kód z bodů 4 a 5
5.
Vysvětli podstatu příkazu nSyncedMotors = synchBC;
6.
Vysvětli podstatu příkazu nSyncedTurnRatio = 100;
Pracovní list ě.3
Otázka číslo
91
Vypracování
92
Pracovní list č.3
Pracovní list č.5
4
93
Senzory
Název úlohy: Uplatnění sonaru a zvukového senzoru. Cíl: Pochopit a využít fyzikální podstatu funkčnosti senzorů Vypracováno dne: Spolupracovali: _______________________________________________________________
4.1 Teoretický základ úlohy Základem pro použití senzorů při řešení konkrétních úloh je pochopení principu jejich funkčnosti: Touch senzor – funguje na základě přerušení a spojení elektrického obvodu. Při nestisknutém spínači neprochází proud je hodnota 0. Při stisku proud prochází – hodnota 1. LightSenzor – červená žárovka vysílá světlo, které se odráží od podkladu. Podle barvy podložky dochází k absorpci určité části bílého světla, zbylé světlo se odrazí a je přijato fototranzistoru, který je transformuje na elektrický signál a ten pošle řídící jednotce NXT (vidí míru světlosti)
CO VIDÍ OKO SENZOR SNÍMÁ VŽDY OBRAZ TMAVŠÍ UltraSonic Senzor – je tvořen dvěma senzory v jedné rovině. Jeden vysílá zvukové vlny, které narazí na překážku, odrazí se a druhý přijme odražené vlnění s určitým časovým zpožděním. Podle míry zpoždění T vypočte vzdálenost čidla od překážky vzdálenost = (T * rychlost zvuku) / 2
Sound Senzor – zvukový senzor obsahuje membránu (diafragma) , která reaguje na zvukové vlny , jakékoli deformace, dále magnet s připojenám vodičem. Vibrace membrány způsobí vibraci magnetu, vodič přenese elektrický signál
Pracovní list č.5
94 Jak reaguje? 4 - 5%
5 – 10%
Tichá místnost
Hovor z dálky
10 – 30%
30 – 100%
Hovor zblízka
Hudba, aj.zvuky
4.2 Pomůcky Robot MindStorm NXT, senzory – dotykový (2 ks), světelný, ultrasonar a zvukový, vytvořené prostředí pro pohyb robota (podložka, překážky).
4.3 Úkoly 4.3.1.1 Úkol č. 1 – NAJDI PŘEKÁŽKU VARIANTA 1 Robot najde překážku tak, že na ni narazí. Po nárazu couvne. 1. Připoj Touch senzor k řídící jednotce robota 2. Na stůl nebo na zem položte vytvořenou pracovní podložku a umístěte pevnou překážkou 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon, doba jízdy bude trvat až do té doby, až dojde ke stisku dotykového senzoru (narazí do překážky). Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota . Zde piš programový kód
Varianta 2 VARIANTA 2 ROBOT najde překážku bez potřebného nárazu. Zastaví se před překážkou v zadané vzdálenosti. 1. Připoj Ultrasonic senzor k řídící jednotce robota
Pracovní list č.5
95
2. Na stůl nebo na zem položte vytvořenou pracovní podložku a umístěte překážkou 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon. Doba jízdy bude řízena připojeným čidlem – UltrasonicSenzor - ,které vyhodnocuje vzdálenost od překážky a porovnává ji s nastavenou hodnotou. Po dosažení této hodnoty se robot zastaví Program uložte do řídící jednotky NXT a spusťte jej. Sledujte pohyb robota Napíšte program, který zastaví 15 cm před překážkou Zde piš programový kód
4. Změřte vzdálenost robota od překážky a porovnejte s nastavenou hodnotou. (udělejte 5 pokusů) nastaveno změřeno 5. Propočtěte citlivost čidla pro různé vzdálenosti (postupně je zkracujte). vzdálenost odchylka 6. Udělejte závěr.
Pracovní list č.5
96
4.3.1.2 Úkol č. 2 –Počítá otáčení kol Robot pojede tak dlouho, až se jeho kola otočí 5 krát. Jak to udělat? Nastudujte, jak lze definovat činnost krokovacího motorku velikostí otočení. 1. Pro řešení této úlohy nepotřebujete speciální čidlo, stačí krokovací motorek. Přesto připojte touch Senzor, kterým budete spouštět program a sledovat, že po každém spuštění popojede robot o stejnou dráhu. ( Změřte). 2. Na stůl nebo na zem položte pracovní podložku, na kterou můžete fixem označovat pozici robota 3. Vytvořte program, který nastaví rychlost obou motorů B, C na plný výkon. Start programu bude řízen připojeným čidlem – TouchSenzor Robot pojede tak dlouho, až se jeho kola otočí 5 krát Potom se robot zastaví 4. Program uložte do řídící jednotky NXT 5. Opakovaně startujte program a po zastavení robota označte pozici jeho pravého předního kola.
Zde piš programový kód
Pracovní list č.5
97
6. Změřte jednotlivé dráhy a porovnejte s předpokladem, že budou stále stejné. Případné odchylky vysvětlete vzdálenost odchylka
4.3.1.3 Úkol č. 3 –Poslouchá mě na slovo
Pokuste se splnit dávné přání konstruktérů robotů, aby je ovládal hlasem nebo různými zvuky. Nastudujte, jak je zvukové čidlo citlivé na vnější zvukové podněty a naučte se tato pravidla ovládat. 1. Pro řešení této úlohy potřebujete zvukové (soundSenzor), kterým budete ovládat pohyb robota.
čidlo
2. Robota postavte na stůl nebo na zem. 3. Vytvoř program, který nastaví výkon obou motorů B, C na určitý výkon (robot se rozjede rychleji nebo pomaleji). Start programu bude řízen připojeným čidlem – SoundSenzor . Dobu jízdy stanovte na 10 s. 4. Program uložte do řídící jednotky NXT 5. Opakovaně startujte program působením různě silných zvukových podnětů. 6. Po zastavení robota změřte jednotlivé dráhy a porovnejte je navzájem. Zde piš programový kód
Pracovní list č.5
98
7. Vytvořte tabulku závislosti výkonu motorů na síle vnějšího zvukového podnětu. 8. Udělejte vlastní závěr. zvukový podnět vzdálenost výkon propočtená rychlost
Závěr:
Pro zájemce: Vytvořte obměnu předchozího úkolu. Pokud v průběhu 10 s, kdy se robot pohybuje, vyvoláte další zvukový podnět, robot se zastaví. NÁVOD: Použijte celočíselnou proměnnou pohyb , která bude mít hodnotu nula, pokud robot stojí a hodnotu jedna, pokud se pohybuje.
Při zvukovém podnětu testujeme obsah proměnné pohyb a pokud je >0 nastavíme výkon motorů na nulu, jinak je nastavíme na hodnotu dodanou zvukovým senzorem. Ukázka
Pracovní list č.5
99
5 FUNKCE Název úlohy: Použití funkcí pro přesun robota podle zadaného plánu Cíle: Naučit se účelně využívat funkce Vypracováno dne: Spolupracovali: _________________________________________________
5.1 Teoretický základ úlohy
popiš význam funkce. vysvětli princip strukturu kódu funkce a jeho připojení ke kódu programu. vysvětli princip volání jednoduché funkce a funkce s použitím parametrů.
Použití funkcí se ukážeme, na příkladu, kdy máme vyřešit následující úkol: Pohyb robota o herním plánu obsahujícím překážky Zakreslená mřížka představuje hrací plán, ve kterém šedá pole představují překážky, které musí robot objet. Je povolen pouze posun vpřed, vzad, vlevo a vpravo Máme vyřešit následující úkol: Úkolem je přemístit robota z výchozí pozice START do pozice CÍL. Je povolen posun vpřed, vzad, vlevo, vpravo
Možná řešení:
START
Určitě Vás napadnou další možné kombinace, jak by se robot mohl dostat do cíle
Pracovní list č.5
100
Barevné lomené čáry naznačují možné přesuny robota
Při bližším pohledu je patrné, že se zde střídá určitý počet činností (vpřed, vlevo, vpravo), které se opakují
Síťový charakter podkladu navíc ukazuje, činnosti vpřed, vlevo, vpravo se mezi sebou liší počtem čar, které přejíždějí
Při řešení takové situace budeme postupovat v oddělených krocích: o Pojmenujete opakující se činnosti o opakující se kód napíšeme pouze jednou (jako funkce) o Pokud se činnosti liší jen v určité vlastnosti, kterou lze vyjádřit číslem nebo konečným počtem údajů, použijeme tzv. vstupní parametr do příslušného kódu o Po vytvoření všech potřebných kódů začnete vytvářet hlavní kód programu, kde na příslušných místech programu uvedeme odkaz na potřebnou funkci (voláme funkci)
5.1.1 Pomůcky Robot Mindstorm NXT, software RobotC, světelný senzor 5.1.2 Úkoly 5.1.2.1
Úkol č. 1 – APLIKACE FUNKCÍ
Postupně vytvořte potřebné funkce tak, že
pro jednotlivé funkce napíšete programový kód
k němu připojíte tělo programu, v němž funkci zavoláte
uložíte jako program, který vložíte do NXT jednotky, spustíte a ověříte jeho správnost .
při tvorbě kódů využijete zkušenosti nabyté v předchozích kapitolách
Ze zadání plyne, že robot při jízdě : volí pohyb ve směru naznačené sítě, rovnoběžně s linkami, nepoužívá jízdu šikmo, změnu směru provádí na místě
Pracovní list č.5
Funkce ZMĚNA SMĚRU: Zaboč Vlevo Napiš funkci a její volání v programu
Funkce ZMĚNA SMĚRU: Zaboč Vpravo Napiš funkci a její volání v programu
Funkce JEĎ ROVNĚ Napiš funkci a její volání v programu
Funkce PŘEJEĎ LINKU. Napiš funkci a její volání v programu
101
Pracovní list č.5
102
5.1.2.2 Úkol č. 2 - Řešte průjezd robota herním plánem po vyznačené trase A
Robot má v takovémto případě přejet 5 tmavých linek , zahnout vlevo, přejet 2 linky, opět zahnout vlevo a přejet jednu linku. Kód programu by mohl vypadat následovně. Předem je nutné upozornit, že tento kód je ilustrační a má k ideálu daleko. V případě použití výše uvedených funkcí vlevo a vpravo odstraňte zastavení motorů po dokončení otočení. Využijte proměnné PrumernaHodnota použité v 2. kapitole (2.2.3.4).
Pracovní list č.5
103
5.1.2.3 Úkol č. 3 – PARAMETRIZACE FUNKCÍ
pro zadané funkce vytvoříte všechny potřebné varianty, které pak zobecníte pomocí parametrů
ukážete si volání funkcí s parametrem v těle programu
správnost programu ověříte vložením do NXT jednotky robota a jeho spuštěním
Situaci při psaní funkcí, lze zjednodušit vytvořením „univerzální“ funkce, která bude používat tzv. vstupního parametru UjedPocetLinek, kterým lze obecně zadat počet tmavých linek, které má robot přejet Výsledný kód funkce:
Způsob volání funkce s parametrem pak bude:
PrejedPocetLinek (5)
;
za UjedPocetLinek se dosadí 4
PrejedPocetLinek (2)
;
za UjedPocetLinek se dosadí 3
PrejedPocetLinek (1)
;
za UjedPocetLinek se dosadí 2
Pracovní list č.5
104
5.1.2.4 Úkol č. 4 – ŘETĚZENÍ FUNKCÍ Navrhněte tělo programu pro průchod robota herním plánem po trase A pomocí „univerzální“ funkce vytvořené v úkolu č.2
5.1.2.5 Úkol č.5 - Napište celý program pro průchod robota po trase A
5.2 Závěry a celkové zhodnocení práce ____________________________________________________________ _______________________________________________________________ _______________________________________________________________ _______________________________________________________________. Závěrečný úkol: Vytvořte vlastní zadání pro průchod robota herním plánem. Herní plán nakreslete na bílý papír černým fixem.
105
6 APLIKACE Název úlohy: Použití funkcí pro přesun robota podle zadaného plánu Cíle: Naučit se účelně využivat funkce Vypracováno dne: Spolupracovali: _________________________________________________
6.1 Teoretický základ úlohy Před plněním úkolů v této kapitole prací si zopakujte: - pojem algoritmus a jeho základní vlastnosti, - základní algoritmické struktury (cyklus, podmínka, podprogramy), - stáhněte a nainstalujte si potřebný free software, např. http://www.microsoft.com/download/en/confirmation.aspx?id= 29081 si stáhněte a nainstalujte prostředí Microsoft Robotics Developer Studio 4 (free SW , nutný OS Windows 7), - seznamte se s ovládáním robotického studia (najděte instrukce a tutoriál na webových stránkách) - Stáhněte si 15 denní verzi proatředí MATLAB a nainstalujte Při řešení následujících úloh poznejte některá další vybraná prostředí pro tvorbu aplikací: Prostředí NXT-G a knihovna LEGO NXT.NET je k dispozici ke stažení na webu s opensource projekty pro vývojová prostředí Microsoft
106
Pracovní list č.6
Řídící kostka NXT
obsahuje nainstalovaný firmware, který umožňuje kromě spouštění programů vytvořených v programovacím prostředí NTX-G také možnost naprogramovat si vlastní jednoduchý program pomocí NXT (bez použití počítače). Funkce NXT, jsou dostupné pomocí menu: .
V menu se lze pohybovat pomocí tlačítek umístěných na NTX kostce. Seznamte se podrobněji s jednotlivými částmi menu. Popis menu: My files Zobrazení všech programů vytvořených v NXT případně v počítači Software files – programy uložené z PC NXT soubory – programy, které byly vytvořeny na NXT Sound files - zvukové soubory Try Me Files Soubory se automaticky ukládají do příslušných adresářů. V případě, že je stažen program se zvukovým souborem, je program uložen do software files a zvuky do sound files. NXT Program Slouží k programování robota přímo z kostky NTX bez použití počítače Try Me Nabídka umožňuje vyzkoušet senzory a motory robota za předpokladu, že příslušené senzory jsou zapojené do portů, které jsou uvedeny v manuálu k robotu. View Nabídka slouží k provedení testů senzorů a motorů na základě pozorování skutečných dat z příslušných jednotek. Postup:
107
připojte motor, případně senzor do příslušného portu a data se v případě volby tohoto menu objeví na displeji. Settings Ke konfiguraci NTX - hlasitost reproduktoru, vypnutí v případě nečinnosti, odstraňování souborů apod Sleep: klidový režim nastavitelný po 2, 5, 10, 30, 60 minutách a možnost never, která zajistí, že robot bude stále zapnutý Volume: k nastavení hlasitosti reproduktoru Delete files: jak už název napovídá, umožňuje odstranit programy z jednotlivý adresářů Zde můžete vymazat všechny stažené programy ve všech třech dříve zmiňovaných složkách: softwarové soubory, NXT soubory, zvukové soubory. Bluetooth Umožňuje připojení pomocí bluetooth k dalším zařízením jako jsou ostatní NXt, počítače, mobilní telefony apod., což lze použít k výměně programů mezi jinými NXT a nahrání programů z počítače bez použití kabelu. Může také sloužit k ovládání robota pomocí mobilního telefonu. Pomůcky: PC, LEGO, Mindstorms NXT, robot, čidla, laboratorní úlohy
108
Pracovní list č.6
6.1.1 Úkoly 6.1.1.1 Úkol č.1 Napište zdrojový kód programu Vytvořte program s jedním dotykovým senzorem: 1. po stisku dotykového senzoru zahájí na displeji NXT terminálu odpočet od 10 do 1 po sekundách. 2. zobrazte na displeji nápis „START“ a rozjeďte robota 100% výkonem. 3. po opětovném stisku dotykového senzoru, ať se robot zastaví a program se ukončí.
109
6.1.1.2 Úkol č.2 - programování robota pomocí řídící kostky NXT Pomocí voleb v řídící kostce NXT vytvořte jednoduchý program, který uvede robota do pohybu vpřed, po té zastaví, otočí se o 180° a opět pojede vpřed. 6.1.1.3 Úkol č. 3 - tvorba programu v grafickém prostřední NXT-G Vytvořte program z úkolu č.2 v grafickém prostředí NXT-G Pro zájemce: Stáhněte si z internetu software Robotics Studio a vyzkoušejte si předchozí úlohy z této sbírky vytvořit v tomto prostředí.
110
Pracovní list č.6
111
Seznam použitých zdrojů Informace z webových stránek http://www.robotc.net/education/curriculum/nxt/ http://robotika.cz/cs http://robot.vsb.cz/mobilni-roboty/ http://hdl.handle.net/10084/78533 http://www.nuov.cz
112
Pracovní list č.6