Difference between revisions of "Jednoduchá príručka programovania v NQC"
Line 1: | Line 1: | ||
V dnešnej dobe je spôsobov na programovanie robotických stavebníc Lego Mindstorms a Lego Mindstorms NXT je viacero. Za najrozšírenejší medzi školami sa pokladá Robolab v rôznych verziách. Predstavme si teda ďalší z možných spôsobov. | V dnešnej dobe je spôsobov na programovanie robotických stavebníc Lego Mindstorms a Lego Mindstorms NXT je viacero. Za najrozšírenejší medzi školami sa pokladá Robolab v rôznych verziách. Predstavme si teda ďalší z možných spôsobov. | ||
− | |||
== Pojmy BricxCC a NQC == | == Pojmy BricxCC a NQC == | ||
Bricx Command Center (ďalej BricxCC) je IDE (Integrated Development Enviroment – integrované vývojárske prostredie). Využíva kompilátor programovacieho jazyku NQC alebo NXC pre stavebnice NXT. | Bricx Command Center (ďalej BricxCC) je IDE (Integrated Development Enviroment – integrované vývojárske prostredie). Využíva kompilátor programovacieho jazyku NQC alebo NXC pre stavebnice NXT. | ||
− | |||
== Rozdiel: BricxCC vs. Robolab == | == Rozdiel: BricxCC vs. Robolab == | ||
V Robolabe dokážete naprogramovať takmer všetko. Výhodou je pre základoškolákov, ktorí sa nestretli ešte s písaním programov v textovom editore. Ďalšou výhodou ikoniek je lepšia predstavivosť. Po niekoľkoročnej práci v Robolabe som ale natrafil na niekoľko nevýhod a úloh, ktoré nedokázal vyriešiť. | V Robolabe dokážete naprogramovať takmer všetko. Výhodou je pre základoškolákov, ktorí sa nestretli ešte s písaním programov v textovom editore. Ďalšou výhodou ikoniek je lepšia predstavivosť. Po niekoľkoročnej práci v Robolabe som ale natrafil na niekoľko nevýhod a úloh, ktoré nedokázal vyriešiť. | ||
Výhodou BricxCC je taktiež možnosť využívať pomocné aplikácie, ktoré si spomenieme neskôr. | Výhodou BricxCC je taktiež možnosť využívať pomocné aplikácie, ktoré si spomenieme neskôr. | ||
− | |||
== Začiatok: čo vlastne potrebujeme? == | == Začiatok: čo vlastne potrebujeme? == | ||
Line 143: | Line 140: | ||
== Viac informácii o BricxCC == | == Viac informácii o BricxCC == | ||
− | Nájdete na internete(www.google.com).Slovenský preklad programu ani celého manuálu zatiaľ nie je | + | Nájdete na internete( www.google.com ). Slovenský preklad programu ani celého manuálu zatiaľ nie je ale v pripade veľkého zaujmu o preklad |
== Autor == | == Autor == | ||
Line 150: | Line 147: | ||
Kontakt | Kontakt | ||
− | e-mail: lukasbosko | + | e-mail: lukasbosko (zavinac) gmail.com |
icq: 229-836-917 | icq: 229-836-917 | ||
web: www.lukash.colorko.net | web: www.lukash.colorko.net |
Revision as of 12:54, 3 March 2007
V dnešnej dobe je spôsobov na programovanie robotických stavebníc Lego Mindstorms a Lego Mindstorms NXT je viacero. Za najrozšírenejší medzi školami sa pokladá Robolab v rôznych verziách. Predstavme si teda ďalší z možných spôsobov.
Contents
Pojmy BricxCC a NQC
Bricx Command Center (ďalej BricxCC) je IDE (Integrated Development Enviroment – integrované vývojárske prostredie). Využíva kompilátor programovacieho jazyku NQC alebo NXC pre stavebnice NXT.
Rozdiel: BricxCC vs. Robolab
V Robolabe dokážete naprogramovať takmer všetko. Výhodou je pre základoškolákov, ktorí sa nestretli ešte s písaním programov v textovom editore. Ďalšou výhodou ikoniek je lepšia predstavivosť. Po niekoľkoročnej práci v Robolabe som ale natrafil na niekoľko nevýhod a úloh, ktoré nedokázal vyriešiť. Výhodou BricxCC je taktiež možnosť využívať pomocné aplikácie, ktoré si spomenieme neskôr.
Začiatok: čo vlastne potrebujeme?
Začiatkom práce je nájdenie inštalačného súboru. V súčasnej dobe je najnovšou verziou verzia 3.3. Nájdete ju na CD zo súťaže v adresári install, alebo na stránke http://bricxcc.sf.net. Na komunikáciu medzi PC a RCX potrebujete mať nainštalovaný program LEGO Mindstorms SDK vo verzii 2.0 alebo 2.5 (kvôli firmwareu a ovládačom pre vežu). Ten nájdete okrem CD aj na stránke www.lego.download.com. Po jednoduchej inštalácii oboch programov spustíme program BricxCC.
Úvodné okno nám umožňuje nastaviť port pripojenia vežičky(najvýhodnejšie Automatic), firmware a typ riadiaceho centra(v našom prípade RCX). Zapnuté RCX priblížime k vežičke. Ak program neohlási problém s pripojením RCX, zobrazí sa hlavné okno.
Nahrávame Firmware
Firmware je nízkoúrovňový program na ovládanie hardwareu a interpretovanie príkazov, ktorý musí mať pred použitím každé RCX. Ak prebehlo pripojenie RCX v poriadku, v sekcii Tools\Download\Firmware nájdeme firmware, ktorý chceme nahrať(pokiaľ mám položku Download firmware šedú a nedá sa mi na ňu kliknúť, zvolím najskôr možnosť Find BricxCC). Nachádza sa v adresári, kde je nainštalovaný LEGO SDK. Môžete si ho vložiť do adresáru k Vašim programom, aby ste k nemu mali vždy dobrý prístup. Píšeme prvý program Jazyk nqc(not quite C – nie celkom C) používa syntax jazyka C. Práca s premennými a preprocesorom funguje rovnako, až na to, že treba dbať na pamäťovú obmedzenosť RCX. Za každým príkazom musíme napísať „ ; “, bloky vkladáme do zložených zátvoriek {}, pri každom volaní funkcie musíme za ňou napísať zátvorky (aj v prípade, že funkcia nepoužíva parametre). Jazyk NQC je Case Sensitive - treba dávať pozor aj na písanie malých a veľkých písmen. Celková štruktúra programu je nasledovná: všetko sa začína hlavnou úlohou(angl. task) označenou main. Tá je zavolaná vždy na začiatku programu, ale nie je problém ju znovu spustiť.
Štruktúra programu vyzerá nasledovne
task main() { //telo programu }
Poznámky k programom budeme písať takto
/*toto je poznámka*/ // toto je tiež poznámka
Pri robotoch bude najdôležitejší pohyb. Základné príkazy na pohyb sú
OnFwd(OUT_A+OUT_C); motory A a C pôjdu dopredu OnRev(OUT_A+OUT_C); motory A a C pôjdu dozadu Wait(100); proces bude trvať 1 sekundu(100 stotín) Off(OUT_A+OUT_C); motory A a C sa vypnú
Jednoduchý program:
task main() { SetPower(OUT_A+OUT_C,2); OnFwd(OUT_A+OUT_C); Wait(400); OnRev(OUT_A+OUT_C); Wait(400); Off(OUT_A+OUT_C); }
Práca so senzormi
BricxCC pozná všetky typy senzorov ako Robolab. Pred používaním ich hodnôt najskôr musíme zadefinovať, o aký typ senzoru sa jedná. Nato slúži funkcia SetSensor: SetSensor(SENSOR_1, SENSOR_TOUCH); SENSOR_1 označuje port, SENSOR_TOUCH typ – dotykový. Ďalej poznáme SENSOR_LIGHT, SENSOR_ROTATION,SENSOR_CELSIUS a iné.
S hodnotami senzorov pracujeme ako s konštantou, preto si ich môžeme uložiť aj do premenných
int svetelnost=SENSOR_1;
Taktiež dokážeme spraviť priemernú hodnotu dvoch senzorov:
int svetelnost=(SENSOR_1+SENSOR_2)/2;
Jednoduché cykly
Programovací jazyk NQC pozná nasledovné cykly while, while-do, repeat-until,repeat, for, swich.. Základnou podmienkou je podmienka IF. Syntax je uvedená v sekcii Templates(F9). Jednoduchý program ukazuje použitie cyklu repeat(opakuj). Budeme vykresľovať štvorce trajektóriou robota.
#define MOVE_TIME 100 // čas chodu dopredu–dĺžka strany #define TURN_TIME 85 // čas na otočenie o 90°
task main() { repeat(10) // urob 10 štvorcov { repeat(4) { OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); OnRev(OUT_C); Wait(TURN_TIME); } } Off(OUT_A+OUT_C); // a potom všetko vypni
Preprocesor jazyka NQC
Preprocesor je súčasť kompilátora, ktorá sa volá pred procesom samotnej kompilácie. Kontroluje správnosť zdrojového kódu, prípadne s ním vykonáva zadané operácie. Zadávať operácie môžeme špeciálnymi príkazmi, ktoré sa začínajú #. Medzi základné funkcie preprocesora patrí define a include. Define používame na nahradenie časti kódu inou časťou. Syntax je nasledovná:
#define motorlavy OUT_A #define motorpravy OUT_C #define svetelnysenzor SENSOR_1 #define obamotory OUT_A+OUT_C
Pozor: za definovaním nepíšeme bodkočiarku!!!
Tasks(úlohy)
Väčšina programov potrebuje tasky využívať, pretože nevykonávajú len jednu činnosť. Úlohu si môžeme ľubovoľne pomenovať, pričom ďalej budeme používať jej názov. Ako bolo hore spomínané, základný task má názov main. Je to preto, aby ho RCX dokázal rozpoznať a začať s ním. Tasky iné ako main nezačínajú automaticky, musím ich zapnúť príkazom start nazovtasku;.
Ukážkový program
Tento program je program na robosoccer. Je to jeho základ. Pointa je v hľadaní lopty točením. Keď ju nájdem, idem dopredu za ňou.
#define lavy OUT_A #define pravy OUT_C #define svetelny SENSOR_2
task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); start hladanie; } task hladanie() { while(true) { SetPower (lavy+pravy,3); OnFwd(lavy); OnRev(pravy);
if (svetelny>50) { start nasla_sa_lopta; stop hladanie; } } }
task nasla_sa_lopta() { while(svetelny>50) { OnFwd(lavy+pravy); } start hladanie; stop nasla_sa_lopta; }
Ďalšie užitočné funkcie programu BricxCC
V BricxCC tiež fungujú tzv. správy (Message) na komunikáciu medzi viacerými RCX. Všetky príkazy nájdete po stlačení F9 – Templates. Kliknete naň a automaticky sa vloží do programu. Na ľavej strane máme lištu kde sú všetky tasky – vo veľkom programe sa nám to môže hodiť.
Viac informácii o BricxCC
Nájdete na internete( www.google.com ). Slovenský preklad programu ani celého manuálu zatiaľ nie je ale v pripade veľkého zaujmu o preklad
Autor
Je študentom 2.ročníka Gymnázia v Považskej Bystrici a trojnásobným majstrom Slovenska a účastníkom MS RoboCup 2004 Portugal, 2005 Japan a 2006 Germany. Popri svojej účasti na súťaži vedie krúžok Robolab v ZŠ Domaniža v okrese Považská Bystrica.
Kontakt e-mail: lukasbosko (zavinac) gmail.com icq: 229-836-917 web: www.lukash.colorko.net