Článek ve formátu PDF je možné stáhnout
zde.
Dosavadní části seriálu seznamovaly s hardwarovými možnostmi stavebnice Lego Mindstorms, následující části jsou věnovány možným způsobům programování, včetně jednoduchých příkladů. V tomto díle je především popsáno programování v grafickém jazyku NXT-G.
Programování výukových robotů – základní pojmy
Před seznámením s vývojovým prostředím Lego Mindstorms NXT a se základy programování v jazyku NXT-G je potřebné vysvětlit několik základních pojmů:
- Algoritmus je přesný návod či postup, kterým lze vyřešit zadanou úlohu. Je prováděn pomocí konečného počtu definovaných kroků.
- Program (někdy také programový kód) je posloupnost příkazů nebo instrukcí určených pro dané programovatelné zařízení (např. počítač, mikroprocesor, PLC – zde pro řídicí jednotku robotu), která realizuje algoritmus řešení dané úlohy.
- Programátor je osoba, která převádí algoritmus řešení úlohy na program.
- Programovací jazyk je textový nebo grafický prostředek pro zápis programu – je komunikačním nástrojem mezi programátorem a programovaným zařízením.
- Programování je činnost, při které je vytvářen program podle předem vytvořeného algoritmu.
- Software (programové vybavení, „měkké zboží“) je ucelený soubor programů, obvykle poskytovaný jako samostatný produkt.
- Firmware (systémový program, „pevné zboží“) je programové vybavení, které realizuje základní funkce zařízení a na rozdíl od operačního systému je pevně spjato s hardwarem (technickým vybavením, „tvrdým zbožím“). Firmware je obvykle dodáván výrobcem jako neoddělitelná součást zařízení a bývá uložen v paměti s neměnným obsahem (pozn. red.: u počítače PC je firmwarem BIOS, u tabletu firmware např. řídí komunikaci s čipem WiFi nebo GPS; kalkulačka nebo televizní přijímač mají pouze firmware, žádný operační systém ani aplikační software). Běžný uživatel nemá možnost firmware měnit.
Tak jako lidé mluví různými jazyky, i roboty (ale i počítače, mikroprocesory, PLC a jiná programovatelná zařízení) lze programovat v různých jazycích – i řídicí jednotka NXT rozumí různým programovacím jazykům.
Možnosti programování robotu Lego Mindstorms NXT
Stejně jako mnoho programovatelných zařízení, má i kostka NXT svůj operační systém a firmware nahrané v paměti flash. Uživatel operační systém ovládá prostřednictvím LCD: spouští programy a komunikuje s kostkou. Operační systém uživateli zpřístupňuje prostředky mikropočítače pro obsluhu hardwaru (tlačítka, senzory, motory), ale umožňuje i práci se systémem souborů a s grafikou na LCD. Jeho prostřednictvím lze ukládat a spouštět programy vytvořené uživatelem, ale i programy předem připravené výrobcem softwaru. Je důležitý pro spolupráci řídicí jednotky s programovacím softwarem.
Některé programovací jazyky vyžadují svůj specifický operační systém a při přechodu na jiný programovací jazyk je nutná i výměna operačního systému v kostce NXT. Komunikace s kostkou potom může být odlišná.
Přehled možných způsobů programování robotu je v tab. 1. V tomto kurzu budou podrobněji popsány pouze tři z nich: NXT-G, NXC a leJOS NXJ.
Charakteristika jazyka NXT-G
Své jméno jazyk NXT-G získal podle programovacího jazyka využívaného systémem LabVIEW od firmy National Instruments, který se jmenuje G (Graphic). Programy napsané v NXT-G jsou sestaveny z grafických bloků, jejichž vlastnosti lze nastavit. Propojením bloků se stanovuje posloupnost jejich vykonávání. Jazyk NXT-G je výsledkem spolupráce firem Lego a National Instruments. Je dodáván spolu se stavebnicí jako základní programovací nástroj pro Lego Mindstorms NXT. Je vhodný pro tvorbu jednoduchých programů, přičemž důraz je kladen na intuitivnost a jednoduchost vývojového prostředí a snadnost programování, aby s robotem mohli pracovat už i žáci základních škol, kteří s programováním nemají žádné zkušenosti. Jazyk NXT-G naopak není vhodný pro psaní rozsáhlejších programů. Komplikovaně se pracuje s uživatelsky definovanými proměnnými, omezením je nepřítomnost polí a jiných datových struktur nebo při zobrazování na LCD možnost pracovat jen s celými čísly. Ze zkušeností vyplývá, že programování v grafickém jazyku je časově náročnější než v jazyku s textově orientovanou syntaxí. Jazyk NXT-G lze doporučit jen jako užitečný nástroj pro počáteční experimenty se stavebnicí.
Existují dvě varianty softwaru Lego Mindstorms NXT. První je součástí stavebnice robotů NXT, kterou je možné koupit v „kamenném obchodě“, někdy označovaná jako retail (maloobchodní). Druhá varianta je součástí stavebnice NXT, kterou lze pořídit v Lego Educational Division, a má v názvu doplněn přívlastek education (výuková). Bývá pořizována školami nebo školicími centry, ale prostřednictvím internetu ji může získat kdokoliv. Na obr. 1 je maloobchodní verze se sekcí Robo Center a na obr. 2 je výuková verze se sekcí Robot Educator. Robo Center je průvodce, ve kterém jsou krok po kroku uvedeny instrukce pro sestavení a naprogramování čtyř modelů robotu NXT. S využitím Robot Educatoru se lze naučit robot programovat na 39 příkladech. Obě verze softwaru se liší jen v několika funkcích. Ovládání programu je velmi jednoduché a intuitivní.
Postup programování v NXT-G
Programy v NXT-G se tvoří v počítači. Programování je založeno na principu drag-and-drop („táhni a pusť“). Takto lze z panelu na levé straně obrazovky přesouvat značky bloků na programovací plochu programu. Každý blok má unikátní funkci, např. řízení pohybu motorů, detekci zvuku, zobrazení zprávy nebo např. měření vzdálenosti. Sestavením a propojením bloků se vytvoří program, který je potom přeložen (zkompilován) a nahrán do kostky NXT prostřednictvím kabelu USB nebo bezdrátovou komunikací Bluetooth.
Program NXT-G lze spustit dvojím kliknutím na ikonu s názvem Lego Mindstorms NXT 2.0 (jeho prostředí je na obr. 1). Ve střední části obrazovky se nachází úvodní okno s dvěma animovanými průvodci Getting Started a System Overview (obr. 1 vlevo nahoře). Průvodce Getting Started poskytuje rychlý návod k vytvoření programu a další práci s ním. Druhý průvodce System Overview stručně popisuje jednotlivé části programovacího prostředí NXT. Pod těmito průvodci jsou dvě sekce. První z nich je určena pro vytvoření nového programu a druhá pro otevření nedávno vytvořených programů.
Na obr. 3 je ukázka obrazovky s vyznačenými částmi, které tvoří prostředí pro vývoj programu. Číslem 1 jsou označeny roletové nabídky. Lišta s tlačítky pro rychlé spuštění je v poli 2. Paleta 3 obsahuje všechny potřebné programovací bloky. Pro snazší používání je rozdělena do tří menších palet, mezi kterými lze přecházet pomocí záložek ve spodní části sekce. Common palette obsahuje nejpoužívanější bloky. Primárně je nastavena jako výchozí bod. Complete pallete obsahuje všechny programovací bloky. Custom pallete obsahuje bloky stažené z webu a bloky vytvořené uživatelem. Každý programovací blok má svůj unikátní konfigurační panel 4, kde lze specifikovat nastavení vybraného bloku. Na ploše programovacího okna 5 je možné spojovat bloky do sekvence. Mezi jednotlivými programy se přepíná pomocí záložek v horní části programovacího okna. K uzavření aktivní programovací plochy je určen „křížek“ napravo od záložek.
Pole 6 Controller obsahuje pět tlačítek, která slouží ke komunikaci mezi počítačem a kostkou NXT. Pomocí nich lze uložit program (nebo jeho část) do kostky NXT. Jedno z pěti tlačítek je určeno k otevření okna s informacemi o kostce NXT. Tlačítko NXT Window Button otevře okno NXT se záložkou Memory pro správu paměti kostky NXT a současně záložku Communications s přehledem zařízení připojených k PC. Tlačítkem Download Button lze program uložit do kostky NXT a následně jej spustit, zatímco Download and Run Button spustí program okamžitě po nahrání. Tlačítkem Download and Run Selected Button je možné přesunout a spustit jen část programu, třeba i jeden nebo několik bloků. Tak lze vyzkoušet, jak bude fungovat jen malá část programu, aniž by bylo nutné uložit a ověřit celý program. Stop Button je využíván k zastavení běžícího programu. V poli Help & Navigation (7) lze pomocí dvou záložek přepínat mezi dvěma sekcemi. Záložka Help Tab funguje jako nápověda, zatímco Map Tab slouží k získání přehledu nad programem. Oblast Robot Educator & My Portal (8) rovněž obsahuje dvě záložky – Robot Educator je průvodce s instrukcemi pro programování modelů Robot Educator a My Portal umožňuje přístup na webové stránky www.lego.com/en-us/mindstorms/?domainredir=mindstorms.lego.com.
Aktualizace firmwaru – postup nahrání
Uživatelé nemají možnost firmware upravovat, je však žádoucí jej pravidelně aktualizovat. Nejprve je nutné připojit řídicí jednotku k počítači prostřednictvím rozhraní USB. Příkaz ke stažení aktuální verze firmwaru lze najít v horním menu v záložce Tools pod volbou Update NXT Firmware (obr. 4). Po kliknutí na Update NXT Firmware se otevře nové dialogové okno (obr. 5). V horní části je uvedena poslední verze nahrávaného firmwaru. Pod ní se nachází možnost volby Online Updates, která umožňuje zkontrolovat dostupné aktualizace na internetu. Níže je okno, ve kterém je zobrazen aktuálně dostupný balíček firmwaru. K dispozici je volba umístění souboru a po kliknutí na tlačítko Download se firmware stáhne.
Příklady práce s bloky v grafickém prostředí
Nyní bude představen jeden ze základních bloků – Move. V následující části seriálu bude následovat popis dalších bloků spolu s jednoduchými příklady.
Blok Move umožňuje řídit pohyb robotu vpřed a vzad a jeho otáčení, a to zadanou rychlostí a po určenou dobu pohybu. Na obr. 6 je značka bloku Move na pracovní ploše, obr. 7 zobrazuje konfigurační panel k bloku Move. Pole 1 je určeno pro výběr portů, na něž budou připojeny motory. Při volbě dvou portů (jak je znázorněno na obrázku) budou oba motory aktivovány synchronizovaně. Při volbě tří portů budou synchronizovány motory v portech B a C. V poli 2 lze volit směr otáčení motoru (dopředu, dozadu, zastavení s resetováním motoru). V poli 3 lze volit porty motorů pro volbu zakřivení dráhy otáčení posuvníkem. Výkon motoru lze v poli 4 ovládat buď posuvníkem, nebo přímo zapsáním hodnoty do textového pole. Konec otáčení motoru (okamžitý, po zadané době, zadaném počtu otáček nebo ujetí zadaného úhlu natočení) je možné volit v poli 5. Způsob zastavení motorů (zda budou zabrzděny nebo samovolně doběhnou) lze zadat v poli 6. V poli 7 se zobrazuje údaj, o kolik stupňů nebo otáček se motor otočil. Stiskem resetovacího tlačítka se údaj vynuluje.
Na obr. 8 je jednoduchý příklad programu pro pohyb vpřed (doba pohybu 5 s, s 50 % výkonu a zabrzděním) a následně vzad (doba pohybu 5 s, se 100 % výkonu a samovolným doběhem po skončení pohybu).
Ing. Martin Hlinovský, Ph.D.
Ing. Lenka Mudrová
Obr. 1. Maloobchodní verze programu Lego Mindstorms s Robo Center
Obr. 2. Výuková verze programu Lego Mindstorms NXT s Robot Educatorem
Obr. 3. Prostředí programu NXT-G s vyznačenými částmi
Obr. 4. Menu Tools s nástroji
Obr. 5. Dialogové okno pro aktualizaci firmwaru (Update NXT Firmware)
Obr. 6. Blok Move
Obr. 7. Konfigurační panel bloku Move
Obr. 8. Jednoduchý příklad programu pro pohyb vpřed a vzad
Tab. 1. Přehled programovacích jazyků a jejich vlastností
Název jazyka |
NXT - G |
ROBOLAB |
NXC |
ROBOTC leJOS |
NXJ |
leJOS OSEK |
Typ jazyka |
grafický |
grafický |
C |
C |
Java |
ANSI C/C++ |
Platformy |
Windows, Mac OSX |
Windows, Mac OSX |
Windows, Mac OSX, Linux |
Windows |
Windows, Mac OSX, Linux |
Windows |
Firmware |
standardní |
standardní |
standardní |
standardní |
uživatelský |
uživatelský |
IDE |
ano |
ano |
ano |
ano |
pluginy pro Eclipse a Netbeans |
Eclipse CDT (GCC+Atmel SAM-BA) |
Podpora událostí |
ne |
ano |
ne |
ano |
standardní Java Events |
ano (OSEK RTOS) |
Podpora několika vláken |
ano |
ano |
ano |
ano |
ano |
ano (OSEK RTOS) |
Datový typ float |
ne |
ano |
ne |
ano |
ano |
ano |
Podpora Bluetooth |
ano |
ne |
ano |
ano |
ano |
ano |