V předchozím článku o robůtkovi mBot2 jsme si ukázali základní práci s modulem CyberPi. V tomto díle si povíme něco o tom, jak můžeme v editoru mBlock 5 naprogramovat robůtkovi mBot2 pohyb. Jak můžeme pracovat s vymožeností zvanou encoder a co vše nám mBlock 5 umožní.
Pokud budete mít to štěstí (nebo dobrý nápad) pořídit svým dětem robota mBota2 (nebo v případě pedagogů zařadit tyto robůtky do výuky „nové informatiky“), velmi brzy zjistíte, že oproti klasickému mBotovi vám tato verze umožňuje mnohem větší možnosti co se týká pohybu mBota. A pokud zde píši „mnohem větší možnosti“, nemyslím tím větší rychlost – v tomto směru je s mBot2 s klasickým mBotem víceméně na stejno. Myslím tím zejména řádově mnohem větší přesnost pohybu, která umožnila programátorům editoru mBlock5 zařadit do knihovny pro pohyb příkazové bloky, které by v případě předchozí verze postrádaly smysl.
Rozdíly v motorové vybavenosti obou verzí mBotů
Obě řady jsou vybaveny podobnými motorky, rozdíl tak spočívá hlavně v konstrukci převodovky. U první verze jsou převodová kolečka z plastu a celá konstrukce převodové soustavy slouží hlavně pro snížení otáček pro hnaná kolesa. Vzhledem k poměrně měkkému plastu, který je pro převod použitý, je kvalita pohybu mBota první verze značně nepřesná. A nepřesnosti se v průběhu delšího a intenzivnějšího používání zvyšují. O přesném pohybu si u této verze můžeme nechat jenom zdát.
U druhé verze je převodové soustrojí daleko kvalitnější a hlavně vyrobené z kovu. Již použité materiály na samotnou konstrukci soustavy tedy zvyšují kvalitu a přesnost pohybu. Motorová soustava mBotu2 je navíc ještě vybavená enkodéry, které umožňují mBotu2 zpětnou vazbu na chod motorků. Mbot2 má tedy informaci o aktuálních otáčkách motorků a z těchto dat může odvodit informace o rychlosti a dráze pohybu mBota2. Enkodéry jsou pro přesný pohyb klíčové. Pomocí průběžné změny otáček (dle informací z enkodérů) pak může mBot2 provádět korekce aktuálního pohybu vzhledem k hodnotám, které jsou zadané v programu. Výsledkem je spolehlivě řiditelný a hlavně přesný pohyb mBota2.
Rozdíly ve způsobu řízení obou verzí mBotů
Způsob řízení pohybu prvé verze mBota je možné si podrobněji přečíst ve starších článcích na těchto stránkách. Zkráceně – řízení se dalo ovládat pomocí dvou hlavních parametrů – výkon motorku (0-255) a času po který motorky o naprogramovaném výkonu pracovaly. Další možností pohybu pak byla možnost změny směru otáček, díky které mohla první verze manévrovat. Přesnější manévrování tedy obnášelo nějaké to testovaní předem (každý mBot měl jinak fungující motorovou soustavu) a poté co programátor zjistil přesné hodnoty pro dráhu v závislosti na čase bylo ještě třeba si spočítat čas pro chod motorků, aby mBot ujel přesně požadovanou dráhu.
MBot2 je možné díky enkodérům řídit mnohem sofistikovaněji a s daleko menší námahou. Díky tomu je s ním také mnohem méně práce (a díky tomu také s ním děti mnohem raději pracují). Programové bloky, které editor mBlock 5 používaný pro programování mBota2 nabízí, umožňují řídit robota více způsoby, včetně zadávání přesného úhlu otáčení, nebo možnosti zadat přesnou vzdálenost pro ujetí požadované dráhy. Můžeme přesně řídit otáčky u obou motorků nezávisle na sobě a enkodéry obou motorů mohou také vracet nejenom přesné hodnoty aktuálních otáček motorků, ale také úhel natočení kola (čímž se mimochodem mBot2 vyrovnal stejné schopnosti robotických sad řady LEGO Mindstorm EV3).
Řízení pohybu mBota2 pomocí programu v mBlock5
MBot2 má oproti starší verzi i programově mnohem více možností, jak ovládat svůj pohyb. Z této skutečnosti také vyplývá větší počet příkazových bloků, které můžeme při sestavování programu využít. Při testování s dětmi (zejména s mladšími) se jevil jako hlavní problém, že knihovna, která je pro pohyb využita, dosud není přeložena do češtiny. Dalším problémem je, že knihovna pro pohyb není přímou součástí editoru mBlock5 a tudíž tyto příkazové bloky (z mého pohledu poněkud nepochopitelně) nejsou na první ráně, když se podíváte do rejstříku příkazových bloků. Knihovnu je třeba pro každý projekt zvlášť doinstalovat jako nové rozšíření. Jakmile si ale na tuto logiku zvyknete, vše už dál běží jako po drátkách.
Změn v příkazových blocích si lze povšimnout již u prvého příkazového bloku jehož logika vlastně odpovídá systému řízení pohybu pro mBota starší verze. Ve starší verzi bylo nutné pro pohyb zadávat bloky pro pohyb a časový interval nutný pro ujetí stanovené dráhy. Nová verze má již tyto bloky integrované do jednoho příkazu. Programátor tak zadává klasickou škálu pro pohyb, vpřed, vzad, doleva a doprava. Místo zadávání parametru pro výkon motoru (dříve 0-255) se v nové verzi zadávají přímo požadované otáčky motorku (RPM) (nyní 0-200). Vše doplněno ještě parametrem pro požadovaný čas pro daný pohyb.
Pomyslnou třešničkou na dortu je pak možnost zadávání příkazů pro ujetí přesné dráhy v centimetrech. MBot2 se umí otočit i přesně o zadaný úhel ve stupních. Pro školy se tak otevírá velmi zajímavá možnost výuky geometrie spojené s informatikou. Ve svých kroužcích dětem často zadávám požadavky pro ujetí dráhy v podobě geometrických útvarů, nutí je to uvědomit si vlastnosti daných tvarů například vnitřní úhly.
Garantovaná přesnost pohybu obou verzí mBota
Parametr | mBot2 | mBot |
rychlost otáčení kol | 1-200 RPM | 47-118 RPM ±10 % |
přesnost při otáčení | ±5° | není uvedeno |
minimální pohyb při otáčení | 1° | není uvedeno |
Zatímco u předchozí skupiny blokových příkazů bylo v knihovně pro tuto skupinu příkazů přesně definovaná funkčnost a programátor pouze měnil parametry, další skupina pohybových příkazů definuje pohyb nepřímo pomocí pomocí bloků pro chod jednotlivých motorků. Výsledná funkce je pak kombinací příkazů pro oba motorky.
V těchto příkazových blocích (viz. obrázek) je možné pomocí nastavení otáček řídit otáčení obou koles mBota (samostatně) a podobně jako u předchozí skupiny příkazů je pak možné jako další parametr zadávat i čas po který bude prováděna požadovaná činnost. Zajímavou možností, která se dá využít, je blok pro zadání otočky kola o předem definovaný úhel.
Otáčky obou motorků lze samostatně měnit i jedním jediným blokem (viz. předchozí obrázek – třetí a čtvrtý programový blok). Pro zadávání parametrů do těchto dvou bloků platí jisté specifikum, vyplývající z konstrukce mBota2.
V šasi mBota2 jsou totiž oba motorky uloženy proti sobě (viz. předchozí obr.). Pokud jim tedy chceme dát příkaz jejímž výsledkem by měl být pohyb mBota2 vpřed, nebo vzad je třeba parametr otáček v příkazu zadávat pro pravé koleso vždy se záporným znaménkem tak, aby výsledné otáčky probíhaly ve shodném směru.
Posledním příkazem v této skupině bloků je příkaz, který zastaví chod buď obou motorků, nebo pouze motorku, který si zvolí programátor.
Pomocí enkodérů můžeme dostávat výstupní data z motorků, která můžeme nejenom využít pro další řízení pohybu mBota, ale také je třeba zobrazit na displeji. Bloky pro tyto proměnné není třeba složitě definovat. Jsou k dispozici jako systémové bloky a poznáte je podle kulatých okrajů. Je s nimi možno také zcela plnohodnotně dále pracovat jako s proměnnými při konstruování podmínkových, nebo cyklických příkazů. Tato možnost nabízí programátorovi další možnosti ve využití enkodérů, jako je třeba použití kolesa a motorku jako regulačního prvku.
Poslední dva bloky ve skupině příkazů pro řízení chodu motorů pomocí enkodérů jsou určeny pro pokročilejší programátory. Umožňují například programově resetovat naměřené hodnoty úhlu.
Příklady použití pohybových bloků
Na následující grafice vám popíši způsob efektivního zacházení s programovými bloky které řídí pohyb mBota2. Vše v základní rovině, ale pro pochopení a použití to myslím stačí. Na konci článku jsou všechny tři popisované programy volně ke stažení.
Program „klikatice_1“
Příkazům za událostí „když se CyberPi spustí“ si nevšímejte. Je to pouze dvojjazyčný návod jak spustit celý program. Po stisku tlačítka A (na mBotovi) robůtek vychovaně sekundu počká, aby z něj programátor mohl sundat ruku. Jeho úkolem je dále ujet jistou dráhu klikatým způsobem pohybu. Otočí se tedy do dráhy dalšího pohybu, načež se spustí smyčka ve které mBot2 šestkrát popojede o 20 cm a šestkrát se otočí o úhel devadesáti stupňů, přičemž otáčení střídá na jednu a na druhou stranu.
Když je pohybová smyčka u konce, mBot2 zahraje tón a vypne motůrky, aby zbytečně nevyčerpával baterku. Celý program je ukázkou možností programování pohybu mBota2 pomocí bloků, které přesně definují úhel a požadovanou vzdálenost, kterou má robot ujet. V praxi je také velmi doporučováno sdružování opakovaných pohybů do smyček – významně se tak zkracuje délka programu, zvyšuje jeho přehlednost a zmenšuje velikost souboru programu.
Program „klikatice_2“
Program „klikatice 2“ funguje víceméně stejně, jako předchozí varianta. Změna je pouze v příkazech pro pohyb, kde byl tentokrát použit příkaz pro regulování otáček motorků. Hodnoty pro pravý motorek jsou zadávány se záporným znaménkem (obrácené uložení motorku v šasi mBota2). Jeden motorek jede vždy s polovičními otáčkami druhého motorku. Díky tomu pak celý mBot provádí elegantní půloblouky, které střídá.
Program „osmička“
V programu „osmička“ jsem chtěl demonstrovat možnost použití vlastních bloků – podprogramů. Začal jsem vytvořením proměnné „time to drive“ – čas pro pohyb do které jsem vložil hodnotu 2.1. K této hodnotě jsem dospěl pokusy a je možné, že u vašeho mBota2 a na jiném povrchu bude tato hodnota jiná – takže si ji měňte dle vlastních podmínek. Výhodou takto použité proměnné je to, že změníte-li její hodnotu v začátku programu, nemusíte jí měnit na dalších místech.
Dále jsem definoval dva vlastní bloky, které jsem pojmenoval (snad mě angličtináři nezabijí) jako quarter curve 90 a -90. Tyto bloky mají za úkol ujet s mBotem čtvrt obloukovou dráhu doleva, nebo doprava. Oba tyto bloky jsem dále vzal jako kostky lega a poskládal si z nich celkový pohyb jehož dráha by se měla tvářit jako že je do osmičky. Pokud bylo třeba tyto příkazy opakovat – vložil jsem je do smyček. Podobným způsobem se dají naprogramovat i složitější pohybové sekvence.