Skip to main content.

A LEGO Mindstorms NXT

Ha valaki robotok programozásával szeretne foglalkozni, akkor ideális választás lehet a LEGO Mindstorms NXT készlete. Az alapcsomag a nem játék szintjén programozható robotokhoz képest viszonylag olcsó, százezer forint alatt beszerezhetõ. Ugyanakkor a rendszer kellõen összetett ahhoz, hogy a szórakozáson túlmenõen komoly kihívások elé állítsa a vállalkozó kedvû fejlesztõket, és bepillantást engedjen ebbe a mûszaki informatikai világba.

A LEGO a hagyományos konstrukciós játékok készítése mellett már több mint két évtizede foglalkozik robotokkal. A cég a Mindstorms szériát 1998-ban indította útjára, ennek egyik elsõ típusa az intelligens téglaként is nevezett RCX. Az NXT a LEGO legújabb generációs programozható robotkészlete. A LEGO Mindstorms NXT honlapja részletesen bemutatja a készletet, a továbbiakban én csak a legfontosabbak tudnivalókat írom le.

A következõ kép a készlet központi részét, az NXT egységet ábrázolja. (Az oldal képei a LEGO Mindstorms honlapjáról valók, a filmek saját készítésûek.)

Az NXT készlethez a közismert Technic építõelemeken és a központi egységen kívül hozzátartozik 3 szervómotor és 4 különbözõ szenzor.
Az NXT alapú robot szervómotorainak segítségével tud bármiféle mozgást végezni, így kereken gurulni, járni vagy tárgyakat emelni. A motorok sajátsága, hogy elfordulásérzékelõt tartalmaznak, így az általuk végrehajtott elfordulás lekérdezhetõ, illetve viszonylag finom mozgás kivételezésre adódik lehetõség.

A 4 önálló szenzortípus különbözõ érzékelési modalitásokban mûködik. Az érintésérzékelõ az eszköz végén lévõ gomb benyomódását, felengedését jelzi vissza. A fényérzékelõ a fény erõsségérõl tájékoztat. A hangérzékelõ különféle hangmintákat ismer fel. Az ultrahangos érzékelõ a tárgyakról visszaverõdõ ultrahang segítségével határozza meg a környezet elemeinek távolságát.

érintésérzékelõ fényérzékelõ hangérzékelõ ultrahangos érzékelõ

Az alapkészlethez további érzékelõk vásárolhatók, akár eddig nem említett típusúak, pl. iránytû, színérzékelõ, gyorsulásmérõ.
Mivel ezek az érzékelõk a készlethez képest viszonylag drágák, ezért ha megoldható, akkor célszerûbb két alapkészletet vásárolni. Ennek a megoldásnak további elõnye, hogy a robotok közötti kommunikáció, feladatmegosztás, versenyzés kipróbálása is lehetségessé válik.

Programozási nyelvek

Az NXT programozási lehetõség nélkül nem volna más, mint egy többfunkciós mozgó játék. A megfelelõ programozási nyelveket alkalmazva viszont önálló robottá válhat.

A robot programozása kétféle irányból közelíthetõ meg. Egyrészrõl a robot NXT egységébe tölthetõ le egy asztali gépen megírt program, másrészrõl egy asztali gépen futó program USB vagy Bluetooth kapcsolaton keresztül közvetlenül irányíthatja a robotot. Az elsõ megközelítés elõnye, hogy a robot teljesen autonóm módon mûködhet, ugyanakkor csak kellõen kis méretû és egyszerû programok írhatók meg így. A második megoldás mellett az szól, hogy a kis számítási és memóriakapacitású NXT eszköz helyett a lényegi számításokat a nagyságrendekkel nagyobb hardverkörnyezet végzi el. Ekkor viszont a kommunikációs kapcsolatnak kellõen gyorsnak és megbízhatónak kell lennie.

Az NXT programozására alkalmas nyelvek egy áttekintését mutatja az alábbi oldal, mely mindkét megközelítésmódot ismerteti.
Fontos megjegyezni azonban azt is, hogy a Mindstorms készlet programozása világszerte sokak fantáziáját megmozgatja, akik sok energiát áldoznak arra, hogy minél több és minél komolyabb megoldások szülessenek. Ebbõl következõen a lehetõségek szinte napról napra bõvülnek, mindig érdemes újabb, a kitalált feladathoz jól illeszkedõ szoftvereket keresni, a használt környezetek legújabb változatát alkalmazni.

Az NXT-n mûködõ programnyelvek

A LEGO MindStorms NXT Software

Az elsõ csoportba tartozó legkézenfekvõbb programozási mód a LEGO által a készlethez adott cd-n található LEGO MindStorms NXT Software használata (a táblázatban NXT-G néven láthatók). Ez a programozási környezet elsõsorban nem programozóknak készült, akik grafikus építõkockákból a robot építéséhez hasonlóan viszonylag gyorsan állíthatják össze és konfigurálhatják az irányító programot. A környezet egyúttal néhány alap robottípus építését is támogatja, ahogy arról a következõ fejezetben szó lesz. A program hátránya, hogy hagyományos programozási nyelvekhez szokott fejlesztõnek eléggé idegen, komolyabb programok már nem igazán áttekinthetõek benne. A készülõ kód a többi megoldáshoz képest lassan fut és sok memóriát igényel.

Az NBC/NXC

A következõ lehetõség az ingyenes letölthetõ NBC/NXC nyelvpáros használata, melyhez a szintén ingyenes a Bricx Command Center biztosít programozási környezetet. A két nyelv közül az NXC a magasabb szintû, C programozási nyelvhez való hasonlóságát és különbözõségét neve is mutatja: Not eXactly C. Az NBC (Next Byte Codes) az NXT egység bájtkódjának felel meg, az NXC programok is elsõre erre a nyelvre fordulnak le. Ez a két programozási nyelv gyakorlott programozók számára készült, mélyebb szintû betekintést enged az NXT világába. Az eredményül kapott kód gyorsabb, kisebb méretû, mint a LEGO MindStorms NXT Software-rel elõállított.
Ugyanakkor a nyelv kifejezõereje még eléggé korlátos: ezen oldal írása közben készült el az a változat (NBC 1.0.1.b32 beta), amely tömbök esetében a változóval címzést is engedélyezi, ami egy ciklus megírásához eléggé fontos. Ezen kívül csak az egész számokat ismeri, így racionális számok kezelésére kerülõ megoldásként például a százszoros érték tárolása lehet megoldás.
Ráadásul a nyelv nem teljesen kiforrott a két fenti változat között például a NumOut függvény két paramétere valamiért megcserélõdött, sok vidám percet okozva a fejlesztõnek a hiba megtalálásáig és minden elkészült program módosításáig.
Reményt keltõ viszont, hogy a programnak szinte havonta jön ki új változata, ezért középtávon ezek a problémák is valószínûleg meg fognak oldódni.

A RobotC

Érdekes lehet még a robotikában komoly hírnévnek örvendõ Carnegie Mellon egyetem robotakadémiája által fejlesztett RobotC nyelv, mely többek között a Mindstorms készlettel is használható. Bár ez a környezet nem ingyenes, van egy egyhónapos próbaváltozata is. A nyelv C-re épül, de az NXC-vel ellentétben a C teljes funkcionalitását biztosítja és ehhez ad ipari szabványokban megszokott C támogatást.

A LeJOS

A LeJOS programozási környezet az eddigi megoldásokon túlmegy abban az értelemben, hogy az NXT operációs rendszerét is lecseréli. Ennek hatására egy kicsi Java virtuális gép jelenik meg a roboton. Ez NXJ API-nak megfelelõ egyszerûsített, ugyanakkor NXT-vel kapcsolatos lehetõségekkel bõvített Java nyelvû programok futtatását teszi lehetõvé. Ez a megoldás sem tekinthetõ még igazán kiforrottnak, de néhány havonta új verzió készül el.

Az NXT-t távolról irányító megoldások

Az NXT kockát nem csak a saját beépített processzorán futó programok irányíthatják, hanem az USB vagy a Bluetooth csatlakozás túloldalán lévõ eszköz, leginkább számítógép is vezérelheti.
Ennek egyszerûbb formája, amikor a vezérlõ eszköz távirányítóként mûködik, vagyis az emberi utasításokat a kapcsolat sebességével viszi át a robotra. Erre többek között egy mobiltelefonra töltött javás alkalmazás, a BrickxCC, a RobotC is képes.

Ennél érdekesebb lehetõség, amikor egy PC-n futó program távirányítja a robotot a Bluetooth kapcsolaton át. Ebbõl a célbõl számos ismert programozási nyelvhez készül kiegészítés, így Java-hoz, C#-hoz (kettõ is), Perlhez, Pythonhoz, Rubyhoz.

Építhetõ robotok

Ahogy az a LEGO játékoknál már megszokott, rendkívül sokféle variációt lehet összerakni. További hagyományos Technic elemek hozzáadásával a lehetõségek tovább bõvíthetõk.

Az alaptípusok

A MindStorms NXT készlethez adott CD-n található MindStorms NXT Software programozási környezet 4 robot építéséhez (és programozásához) nyújt részletes, lépésrõl lépésre haladó tájékoztatást. Ezek a robotok a készlet széles lehetõségeit mutatják be, egyre komolyabb szerelési és talán programozási feladat elé állítva a kísérletezõket.
A program ergonómia értelemben szinte tökéletes, érzékelhetõ, hogy a készítõk nagy hangsúlyt fektettek arra, hogy a gyerekek számára élvezet legyen a robotok építése és programozása. A szerzõk minden egyes demonstrációs feladatot elemi részekre bontottak. A részek elkészültekor pedig a felhasználók egy önállóan is értelmezhetõ programozási feladatot oldhatnak meg, majd kísérletezhetnek az eredménnyel.

Tribot

A demonstrációs feladatok közül a legegyszerûbben megépíthetõ robot a TriBot egy kerekeken guruló jármû, mely az összes szenzor és motor használatát mutatja be. A következõ képen az elkészült robot látható.

Az építés során elsõ lépésként az alapjármû készül el, melyben két motor segítségével már önálló mozgást lehet végezni. A következõ rész a nyomásérzékelõ beépítése, amivel az akadálynak való frontális ütkõzést lehet észlelni. Ezután jelennek meg a robot elején a fogókarok, melyek a harmadik motor felhasználásával már a készletben lévõ labdák szállítására is alkalmasak. A következõ két lépésben kerül a robot tetejére a hangérzékelõ, aljára a fényérzékelõ. Utóbbival a padló színének változása követhetõ. Végezetül a robot elején megjelenõ ultrahangos érzékelõ a tárgyakhoz való közeledést már az ütközés elõtt is jelezheti a robotnak.

A következõ film a TriBot utolsó fázisának elkészítése utáni mûködését mutatja. A robot a tesztpályán elindul, ha az ultrahangos érzékelõvel valamilyen akadályt érzékel maga elõtt, jelen esetben az odahelyezett labdát. Ezután megáll, amint az akadályhoz ér a nyomásérzékelõ szerint. Valamilyen zajra, tapsra megfogja a labdát, megfordul, visszamegy a kiindulási pontra, amit a fényérzékelõ vesz észre, a tesztpálya fekete csíkjához érkezve. Ott a robot elengedi a labdát.

Az elõbbi viselkedésért egy egyszerû, lineáris felépítésû program a felelõs, ahogy az a következõ képen látható, mely egyúttal a LEGO MindStorms NXT Software környezetet is megmutatja.

A kész program forrása.

RobotArm

A valamivel összetettebb RobotArm T-56 egy nem mobil típus, mely daruként képes funkcionálni. Ezt egyelõre nem készítettem el.

Spike

A skorpiót mintázó Spike érdekessége, hogy kerekek helyett lábakon járást valósít meg. A dolog szépséghibája annyi, hogy a képen látható három pár távolra kinyúló láb és a fogókarok csak esztétikai elemek, a járást valójában a robot oldalán elhelyezkedõ kis pálcikák végzik.

A robotot és a hozzá tartozó kódot Salamon András készítette el. Ennek eredményeként a skorpió egyenesen, bár nem túl gyorsan halad elõre a nyílt terepen. Ha 30 centiméternél közelebb valami megjelenik az ultrahangos érzékelõje elõtt, akkor hátrálni kezd. Ha ennél is kisebb, néhány centiméteres távolságra közelíti meg valami, akkor sarokba szorított állat módjára kezd el támadni, ami annyit jelent, hogy a harmadik motorhoz kapcsolt szerkezetet, azaz a farkát villámgyorsan elõrenyújta és lecsap áldozatára. Amennyiben a nyomásérzékelõ találatot jelez, akkor a kar visszahúzódik helyére.

A skorpióhoz tartozó program ábráján látható, hogy az már összetett programozási struktúrákat, azaz elágazást és ciklust is tartalmaz.

A kész program forrása.

Alpha Rex

A legkomolyabb alaprobot az Alpha Rex, mely egy valódi járásra képes humanoid típus. Megépítése igazán idõigényes és a Mindstorms készlet nagy részére szükség van hozzá. Az eredmény igazán látványos, az alábbi képen látható méretes robot két nagy lábát felváltva mozgatva, halad elõre.

A robot felépítésének összetettségét az alábbi film is bemutatja.

Ugyanakkor a robot korlátai is érzékelhetõk: a járás igazából lábemelés nélküli csoszogás, így Alpha Rex már egy szõnyeget sem képes megmászni. Ezen kívül a haladás eléggé bizonytalan, kevésbé iránytartó, mint a kerekeken gurulás, és természetesen lényegesen lassabb is. Vagyis ezen mozgásforma NXT-beli változata egyelõre nem alternatívája a gurulásnak, csupán egy érdekes kísérletként értelmezhetõ.
Az alábbi film a robot járását mutatja be.

A járás programjának forrása.

A humanoid robot is gyerekbarátabbá tehetõ a szenzorok használatával. Erre példa a táncoló változat. Ez a robot a nyomásérzékelõ érintésekor megszólal (Play music!), majd jobbra-balra mozgatni kezdi a derekát. Ha a kérésének megfelelõen zenét játszunk le (illetve bármilyen zajt keltünk a hangérzékelõ környezetében), akkor fejét ingatja, karjait emelgeti, ahogy az az alábbi felvételen is látható.

A kész program forrása.

További feladatok

Irányítás Bluetooth kommunikációval

Mivel az NXT kocka Bluetooth kommunikációra képes, ezért arra alkalmas eszközzel, így például megfelelõ mobiltelefonnal irányítani lehet.
A mobiltelefonon futó Java MIDP-s program, a LEGO NXT Mobile application jad és jar fájlja j2me-képes telefonon működik.
Az alkalmazással a robotba korábban letöltött programokat lehet elindítani, illetve a telefonnal közvetlen navigálás is lehetséges. Ez utóbbit mutatja be az alábbi film, melyben látható, ahogy a számbillentyûk lenyomásának hatására a motorok elõre- és hátramenetbe kapcsolnak, amitõl a robot mozog, illetve az ultrahangos szenzort hordó fej forog.

Bluetooth kommunikáció használata LEGO MindStorms NXT Software-ben

Az elõbb említett oldalon a mobiltelefonra letölthetõ alkalmazás mellett robotoldali program is található volt régebben. A két NXT Software-beli program üzeneteket küld és fogad, ezáltal a telefonon keresztül irányítja a robotot.

A SendMsg.rbt attól függõen, hogy az 1., a 2. vagy a 3. portra van csatlakoztatva a nyomásérzékelõ, a robot lejátszik egy hangot, majd 1, 2, 3 jelet küld a telefonnak. A telefon az elsõ esetben készít egy fényképet (rákérdezés után), a második esetben elvileg lejátszik egy hangot (nálam ilyen funkció nem volt), a harmadik esetben egy Hello üzenetet küld át, ami a telefonon a Collected data alatt is látható.

A ReceiveMsg.rbt elindítása után a telefon 1,2,3 gombok valamelyikének lenyomásakor a robot kimondja a gomb számát.

Fal elkerülése Tribottal

Igazán egyszerû feladat a falak elkerülése az ultrahangos szenzor felhasználásával. Ennek során a robot elõrefele halad, majd amint 15 centiméternél közelebb falat érzékel maga elõtt, akkor az egyik oldalon rövid idõre hátramenetbe kapcsol, aminek hatására éles fordulatot vesz.

A robot mûködése a következõ filmen látható.

A program forrása.

Falkövetés NQC-ben

Az ultrahangos szenzor távolságbecslése nem csak a faltól való kitérésre, hanem a fal mentén haladásra is használható. Ennek segítségével a véletlenszerû akadályelkerülõ mozgást felválthatja egy tudatos viselkedés, mely a kitûzött célpontot a közbeesõ akadályok ellenére is eléri. Ezen algoritmus elsõ lépése az, hogy a robot képes legyen tárgyak mentén haladni.

A feladat megoldásához azonban alapvetõen egynél több távolságérzékelõre van szükség. A robot haladási irányában lévõ szenzor észleli, ha a robot elõtt akadály bukkan fel. Amikor a jármû elkezd kitérni az akadály elõl valamelyik irányban, akkor az oldalsó érzékelõi segítségével észlelheti, hogy az akadályt elhagyta-e már és folytathatja-e az útját eredeti célja felé.

Mivel a Mindstorms készlet csak egy ultrahangos érzékelõt tartalmaz, ezért a több érzékelõ helyett az egy szenzor mozgatása látszott kivitelezhetõnek. Ezért készítettem egy olyan két meghajtott kerekû robotot, amelyikben a harmadik motor forgástengelye függõleges. Erre a tengelyre van rögzítve a robot által forgatható ultrahangos szenzor.
Az elkészített robot induláskor elõre néz, majd - mivel jobboldali falkövetést végez, ezért - nagyjából 120 fokos szögig jobbra fordul. Eközben méri a távolságokat és az értékek alapján kiszámolja, milyen irányba kell fordulnia ahhoz, hogy tartsa a faltól elõre eltervezett, nagyjából 20 centiméteres távolságot.

A program elsõ változata 30 fokokat fordított a szenzoron, és mindenütt mért egyet. Bár a robot így is mûködõképes, a forgató motor indításából, leállításából származó idõkésés miatt a mért értékek viszonylag lassan gyûlnek össze, ezért a robot csupán maximális sebességének 20 százalékával haladhat.

A program forrása.

A program következõ változata a "fejet" folyamatosan forgatja jobbra és vissza, miközben egy másik taszk megfelelõ idõközönként méréseket végez. Az így felgyorsított robot már 50 százalékos sebességgel is elfogadhatóan közlekedik, ahogy az a következõ két videón is látható.

A program forrása.

Ugyanakkor megjegyzendõ az is, hogy a program csupán kísérleti fázisban van. A robot még nem mûködik megbízhatóan, az érzékelt falfelületek hangvisszaverõ képessége eltérõ, a merõlegestõl komolyan elterõ mérési értékek igen pontatlanok lehetnek, a csupán egy szenzorból adódóan a robot figyelmen kívül hagyhat fontos információkat.

Szonar

Ez a kis alkalmazás az NXT kijelzõjén mutatja meg, hogy a robot körül milyen távolságban találhatók akadályok. Ehhez a függõleges tengelyû motorra szerelt ultrahangos érzékelõ folyamatosan 360 fokos kört tesz meg oda és vissza. Eközben az érzékelést végzõ másik taszk a távolságoknak megfelelõen a képernyõ közepébõl sugárirányba kiinduló vonalakat rajzol az adott irányba érzékelt akadály távolságával arányosan. A program forrása.

Általános tapasztalatok

Az alábbi lista az NXT készlettel kapcsolatos tapasztalatok összegzése, szemben az egyetemi kutatásokhoz vagy mérnöki játszadozásokhoz használható egyéb robotokkal.

Érdekes kísérletek

További hasznos oldalak

Saját honlap
Istenes Zoltán robotika honlapja az ELTE-n
A LEGO NXT-s híroldala
NXT-vel kapcsolatos információk blogja
LEGO Mindstorms-zal kapcsolatos könyvek az Amazonon
Egy LEGO robotokról szóló régebbi oldal
Magyarok a Marson - Alkalmazott (mérnöki) tudományok versenye Kiskunhalason diákoknak
lap.hu oldal robotokról
LEGO áruház
RoboShop - Robotalkatrészek boltja

Köszönetnyilvánítás

Köszönetet szeretnék mondani dr. Istenes Zoltánnak az NXT csomag használatához nyújtott segítségéért, tanácsaiért, valamint Salamon Andrásnak hasznos ötleteiért és a Spike-on végzett munkájáért.

Örömmel veszem az építõ jellegû kritikát, az oldallal kapcsolatos kommentárokat, kiegészítéseket a rics@nospam.inf.elte.hu (a nospam rész törlendõ) címre.

Copyright © 2007, Szabó Richárd
Courtesy Open Web DesignThanks to Florida Vacation Homes