1. díl - Seznámení s NXJ pro LEGO NXT

Java LEGO NXT Seznámení s NXJ pro LEGO NXT

Vítejte u prvního dílu tutoriálu, kde se naučíme programovat LEGO NXT v Javě - s pomocí LeJOS. Co to je? Je to virtuální stroj zpracovávající Javu, který běží jako alternativní firmware pro LEGO Mindstorms. V současnosti jsou k dispozici 3 verze - pro LEGO RCX, EV3 a právě NXT.

Pokud jste se rozhodli přečíst si tento článek, určitě víte, co to LEGO NXT je, ale pro jistotu si to ujasníme. LEGO NXT je souhrnný název pro LEGO sadu sestávající se ze 4 senzorů (v různých verzích se liší), 3 motorů a 1 inteligentní kostky, která to všechno ovládá. Pokud budu používat označení "NXT", budu myslet právě ji. Existují 2 verze - 1.0 a 2.0. Jsou prakticky stejné, jen ve druhé verzi byl zvukový senzor nahrazen senzorem doteku. Mimo to jsou součástí řady LEGO Mindstorms sady RCX (opravdu hodně staré) a EV3 (novější), těm se ale v tomto seriálu věnovat nebudeme.

sada NXT 1.0

Tutoriál předpokládá znalost základů Javy a OOP, + “počítačovou angličtinu”. Také předpokládá, že vlastníte LEGO NXT. V případě, že neumíte Javu, nezoufejte a naučte se ji.

Upozornění: Nejsem jakýmkoliv způsobem zodpovědný za jakoukoliv škodu způsobenou tímto návodem (např. flashováním NXT), to ale neznamená, že by informace v tomto článku nebyly pravdivé.

Samotný virtuální stroj by nám nebyl k ničemu, protože chceme s NXT a jeho příslušenstvím nějakým způsobem pracovat. K tomuto účelu obsahuje NXJ (jazyk postavený na Javě) sadu knihoven jak pro NXT, tak pro PC.

Dnešní díl se bude věnovat instalaci potřebných programů a prvnímu Hello world programu. První věc, kterou budeme potřebovat, jsou ovladače pro LEGO.

Instalace ovladače

V případě, že jste na témže počítači pracovali s NXT v např. výchozím obrázkovém “IDE”, můžete tento krok přeskočit. Ovladače pro odpovídající operační systém si stáhnete ze stránek RobotC. LEGO má sice na svých stránkách také odkaz ke stažení, nicméně ten je v současnosti nefunkční. Instalaci zkrátka “vynexťete”, nemá smysl ji nějak rozvádět. Po instalaci připojte NXT k počítači přes USB, otevřete správce zařízení (win+x > správce zařízení) a ujistěte se, že pod záložkou “LEGO devices” vidíte svoje NXT.

Pokud ne, nechť je vám Google dobrým přítelem. Každopádně bez toho nepostupujte dál.

Instalace JDK

Další nepostradatelná věc je JDK - Java development kit, budete potřebovat 32-bitovou verzi, a to i v případě, že máte 64-bitový systém, NXJ totiž neumí pracovat s ničím 64-bitovým. JDK stáhnete ze stránek Oracle.

Instalace NXJ

NXJ najdete na Sourceforge. Vyberte si nejnovější verzi, a sice soubor ve formátu leJOS_NXJ_[verze]_win32_setup.exe Opět relativně normální instalace- bude vám stačit nainstalovat základ. Budete požádáni o cestu k JDK- měla by být už vybraná, ale pro jistotu: C:\Program Files (x86)\Java

Na konci nechejte zaškrtnuté políčko Launch NXJ flash utility,

klikněte na “finish”. Otevře se vám okno podobné tomuto:

Zapněte a připojte NXT, ujistěte se, že máte dostatečně nabité baterie a kliknutím na Flash LeJOS firmware flashněte NXT. Upozornění - flashováním přijdete o veškerá data na NXT! Už nám zbývá jen prostředí, ve kterém budeme psát kód.

Instalace Eclipse

Kód budeme psát v Eclipse IDE, bohužel jediným IDE nativně kompatibilním s NXJ. Budeme potřebovat opět 32-bitovou verzi nezávisle na platformě. Můžete si stáhnout buď .zip archiv a někam si ho rozbalit nebo instalátor z eclipse.org. Pokud dáte přednost instalátoru, vyberte si “eclipse IDE for Java developers”. A nechte instalátor pracovat.

Eclipse máme nainstalované a už se blížíme do finále.

Konfigurace Eclipse

Eclipse v základu netuší, že ho chceme použít na programování LEGA, k tomu nám bude sloužit NXJ plugin. Otevřete Eclipse. Při spuštění budete dotázáni na umístění, kde bude mít Eclipse uložená svoje data. Mohu vám doporučit, aby jste si vytvořili speciální složku např. v Dropboxu.

Otevřete help > install new software. Vyskočí na vás nové okno, kde do textového pole Work with vložte následující URL: http://www.lejos.org/tools/eclipse/plugin/nxj/ a potvrďte klávesou Enter. Vyberte plugin, který našlo a nainstalujte.

Pokud máte jako já českou klávesnici, bude vám nejspíš při psaní kódu vadit několik klávesových zkratek. Doporučuji je odstranit v nastavení. Otevřete window > preferences . Pod záložkou General > Keys. Zkratky, které vám budou vadit:

zkratka znak název
ctrl + alt + G ] find text in workspace
ctrl + alt + N } Next memory monitor
ctrl + alt + B { Skip all brakpoints

Název zadejte do vyhledávacího pole, vyberte příslušnou položku a kliknutím na unbind command zkratku odstraníte. K zahození není ani trochu agresivnější našeptávač. Ten aktivujete (v nastavení) java > editor > content assist. Neexistuje nativní cesta, ale jde to velmi snadno obejít: obsah pole auto activation triggers změníte na: abcdefghijklmnopqrstuvwxyzABSDEFGHIJKLMNOPQRSTVWXYZ._# Změnu nastavení potvrďte tlačítkem OK.

První program

Nemůžeme začít ničím jiným než Hello world. Projekt v Eclipse vytvoříte pomocí file > new > LeJOS NXT project. Všimněte si, že existuje i typ LeJOS PC project, ke kterému se vrátím v jednom z následujících dílů. Projekt si pojmenujte "Hello world", všude můžete nechat výchozí konfiguraci, a můžete projekt vytvořit tlačítkem finish.

Projekt je prázdný, proto si musíme manuálně přidat hlavní třídu. V package exploreru klikněte pravým na váš projekt new > class. Třídu si pojmenujte Main. Zároveň zaškrtněte checkbox u položky public static void main(String[] args), to způsobí vygenerování entry pointu, tj. statické metody main(String[] args).

V prostředním, největším okně Eclipse máte otevřený samotný kód. Obsah třídy Main upravte na následující:

import lejos.nxt.Button;

public class Main {

        public static void main(String[] args) {
                System.out.println("Hello world!");
                Button.waitForAnyPress();
        }
}

Pojďme si rozebrat, co kód dělá. První řádek je víceméně jasný - zobrazí “Hello world!” a sice na LCD displeji, kterým NXT disponuje. Další řádek také není nic složitého - bez něj by se jednoduše program ukončil ihned po zobrazení textu. Takto se program zastaví a čeká na stisknutí jakéhokoliv tlačítka na NXT, které vrátí jako jeho číselné id typu int. Kód máme napsaný, ale co s ním? Musíme nějak sdělit Eclipse, že ho má zkompilovat pro NXT a nahrát ho tam. Zapněte NXT. Když program spustíte pomocí tlačítka run v nástrojové liště (nebo zkratkou Ctrl + F11), zeptá se, jak ho spustit. Vyberte možnost LeJOS NXT program.

Proklikejte se zbytkem oken a ve výstupní konzoli Eclipse byste měli vidět něco jako

Linking ...
Program has been linked successfully
Uploading ...
Found NXT: LEGO 00165306ADB8
leJOS NXJ> Upload successful in 1123 milliseconds
program has been uploaded

Jakmile se program nahraje do NXT, spustí se a uvidíte hlášku “Hello world!”, kterou můžete zavřít stiskem libovolného tlačítka. Potom se program ukončí a NXT se restartuje zpět do hlavního menu, jehož popisem se nebudeme zdržovat. Jednak pro nás není důležité, druhak je velmi intuitivní. To je pro dnešek vše, příště se budeme zaobírat něčím zajímavějším.

PS: Je to můj první článek, zajímalo by mě, jak se vám líbí/nelíbí.


 

  Aktivity (1)

Článek pro vás napsal Petr Čech (czubehead)
Avatar
Autor se věnuje především desktopovým aplikacím v C#, okrajově Javě na Legu NXT.

Jak se ti líbí článek?
Celkem (13 hlasů) :
4.846154.846154.846154.846154.84615


 


Miniatura
Všechny články v sekci
LEGO NXT

 

 

Komentáře
Zobrazit starší komentáře (3)

Avatar
Odpovědět  +1 26.9.2015 21:13
Why so serious? -Joker
Avatar
Ondřej Langr (andysekcze):

Hurá konečně něco

Odpovědět 29.9.2015 15:41
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
eaktivo
Člen
Avatar
eaktivo:

Este som nestretol nic dobre postavene na Jave. Bud to bolo katastrofalne pomale, alebo tam stale nieco neslo.

 
Odpovědět  +1 2.10.2015 8:13
Avatar
Odpovídá na eaktivo
Petr Čech (czubehead):

Jestli se mi snažíš naznačit, že Java je nanic, tak tě asi překvapím, ale nemám ji rád :D. Tady je problém, že nevím o jiné platformě, která by umožňovala programovat LEGO NXT v něčem lepším (lepším myslím objektovým, třeba C#). Tady jde o to, že mi připadá psaní kódu mnohem intuitivnější a pohodlnější než ty příšerné grafické bloky.
//Ano, vím, že existuje ještě možnost psát to v céčku (NXC myslím), ale Java mi je bližší.
Jestli znáš lepší způsob, sepiš to.

Odpovědět  +2 2.10.2015 14:24
Why so serious? -Joker
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na Petr Čech (czubehead)
David Novák:

když je způsob v C, proč používáš Javu? :D

Odpovědět  ±0 2.10.2015 15:46
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na David Novák
Michal Žůrek (misaz):

protože C je hodně omezené (třeba já si už bez OOP nedovedu představit život), to hrůzostrašné "IDE" co se k tomu dodává, ty nesmysly v návrhu, debilní dokumentace, ..... Možná examply je jedna z mála věcí co je tam aspoň trochu dobře. Java je zde úplná výhra.

Odpovědět  +1 2.10.2015 16:16
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na David Novák
Petr Čech (czubehead):
  1. nemám rád non-OOP jazyky
  2. není k tomu dokumentace (alespoň ne taková, z jaké by se dal udělat rozumný tutoriál)
  3. V C se to dělá ve strašlivě hloupém "IDE" (spíš syntax highliteru) Bricx command center, které se nedá na moderním počítači skoro ani rozjet, když už ano, je problém s drivery a pod... Navíc nemá našeptávač, a neumí takové ty cool věci jako míso
Syntax error

zobrazit třeba

Syntax error: Semicolon expected

Takže díky, nechci. I třeba za cenu mírně nižší rychlosti nebo čehokoliv.

Odpovědět 2.10.2015 17:00
Why so serious? -Joker
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

Zrovna na tohle OOP přeci vůbec nepotřebuješ.. :D Jsou to jednoduché věci.

Není dokumentace? Nekvalitní dokumentace? o.O C má vynikající dokumentaci.. Nechápu, co se vám na tom nelíbí..

IDE? Poslouží jakýkoliv chytřejší texťák - notepad++, gedit, vim.

Chybové hlášky jsou záležitostí kompilátoru, ne IDE.

C je krásné v tom, že ti dovolí prakticky cokoliv - a proto se taky používá právě na programování robotů atd. Můžeš tam bez problému po bitech nastavovat, co tam má být... inline asembler, žádný virtuální stroj.. žádné hloupé kontroly.. krása ;)

Jenže ono to tak bohužel dneska je.. Programátoři jsou strašně líní a závislí na "pěkných klikátkech" a často vůbec neví, jak to ve skutečnosti funguje a proč. Proč si jednoduše neudělat Makefile a skript, který vám výsledek nahraje a spustí? Tím se naučíte spoustu věcí a budete mít plnou kontrolu.. :)

Ale chápu, že NXT je původně určen pro děcka na učení (od toho ale mají ten klikací "jazyk")..

Odpovědět  +1 2.10.2015 23:08
Chyba je mezi klávesnicí a židlí.
Avatar
Odpovídá na David Novák
Michal Žůrek (misaz):

když ono je C a zprasené-C. Víš ono to není jak třeba u Atmelu že na výstupní port pošleš bity...

PORTD = 0b11001100;

ale tam jsou na všechno retardovaně pojmenované funkce a dokumentace je ve stylu:

Nadpis: drawRect
Popis (ne, skutečně jsem popis nezkracoval, takhle to tam k nějaké funkci je): This function draw a rect.

to je ti fakt na ho*no. Jednou jsem i narazil na funkci, která byla v dokumentaci pojmenovaná jinak než ve skutečnosti je. Myslím že to bylo motorStop × stopMotor (nevím jestli stop, ale něco s motorem). Parádička zkoumat proč funkce, kterou (když už si připadáš jak největší debil světa) zkopíruješ z dokumentace nefunguje.

OOP nepotřebuješ, ale hodí se. To je spíš požadavek nás co už jsme psali různé větší systémy a tak. Pravdou je že cílová skupina takovýchto robotů to moc nepotřebuje.

IDE? Ano je to IDE, nápad dobrý, zpracování otřesné. Abys mohl program spustit musíš spustit zmáčknout asi 3 tlačítka, breakpointy spíše nefungují a když už fungují, tak pro jistotu nefunguje náhled do proměnných.

A je tzo na učení základů programování, sem tam se zajdi podívat na studenty SŠ, valná většina nemá páru co je to kompilace, natož jim pak říkej o nějakém makefile nebo automatických scriptech. Jejich vrcholem co zvládnou naprogramovat sami bez pomoci učitele, je ve většině případů program na převod stupňů na radiány a to si ještě musí dohledat na internetu vzorec.

Odpovědět  +3 2.10.2015 23:36
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na David Novák
Petr Čech (czubehead):

Prostě mám radši Javu než C. Navíc zrovna u LEGA nepotřebuješ ty fíčury, které jsi jmenoval. Když si k tomu chceš připojit něco, co není z LEGA, tak není C od věci, ale člověk, co to umí asi nečte tento tutoriál :D. V C jsem i několik robotů (vesměs velmi jednoduchých) naprogramoval, ale Java mi připadá prostě pohodlnější.
Ano, programátoři jsou líní: no a? Vždyť od toho máme právě věci, co nám to ulehčují. Proč bychom se měli patlat hodinu s něčím, co stačí za pár minut naklikat, popř s pointery, když to stejně není většinou potřeba?
Nemyslel jsem C dokumentaci, ale NCX dokumentaci.

Odpovědět  +1 3.10.2015 10:02
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 13. Zobrazit vše