Lego építőkockákból összeszerelt, motorokat vezérelni képes, fény-, forgás- és nyomásérzékelők segítségével tájékozódó, programozható számítógépek. Lelkük az RCX számítógépegység, mely a Lego Mindstorms széria fő alkotóelemeként tett szert igen komoly érdeklődésre világszerte. Tekintettel arra, hogy a Lego cég leginkább műanyagfröccsentéshez rendelkezik mérnökökkel és munkásokkal, csak nehezen lenne elvárható tőlük, hogy használható programozói felületet nyújtsanak az érdeklődők számára, amivel komoly problémák is megoldhatók. Ezért a profi fejlesztések elősegítéséért létrejött a BrickOS nevű szabadszoftveres megoldás, ami igen jól tölti be a Lego által hagyott programozástechnikai űrt.
Feladatunk egy olyan robot létrehozása, amely egy fehér asztalra fekete szigetelőszalaggal leragasztott zárt út mentén az elem lemerüléséig megy körbe-körbe.
Egy-egy hajtott féltengely, két mozgásérzkelő (melyek az út szélét tartják maguk előtt és így az utat középen). A fordulásokat a motorok ellentétes vezérlésével érjük el.
Maximális egyszerűségű BrickOS-hez fordítható C program, mely természetesen szabadon elérhető vagy megtekinthető. Lényege, hogy sűrűn ellenőrzi a fényérzékelők állapotát és amennyiben
Feladatunk egy olyan robot létrehozása, amely egy fehér asztalra fekete szigetelőszalaggal leragasztott űtvesztőt bejár (nem csal, nem vág át falon), közben a memóriájában térképet készít, melyet a kiindulópontba visszaérve a számítógépnek infravörös kapcsolaton keresztül átad, a számítógépen ezt egy program a képernyőn megjelníti. Ezen program elkészítése is a feladat része.
A feladatnak kétszer is nekiláttunk, mivel az elsőnek épített robot hardvere sosem lett elég pontos ahhoz, hogy olyan szoftvert készítsünk hozzá, ami nem téved.
Egy-egy hajtott féltengely áttételekkel, három mozgásérzkelő úgy elhelyezve, hogy az utat is tudják követni és elágazásokban az elágazás útjainak meghatározása is könnyű legyen. Érdemes lett volna még beépíteni valamelyik tengelyhez egy forgásérzékelőt, hogy távolságot is tudjunk mérni, azonban ezt az egyetem erőforrásai nem tették lehetővé.
A robotban futó program folyamatosan épít egy gráfot a memóriájában, amely gráfot Tremaux algoritmusával próbálja teljesen feltérképezni. Az algoritmus lényege, hogy a csomópontok közötti élekhez színeket rendelünk (feketét, ha még nem jártunk rajta, csak már tudunk róla, zöldet, ha egyszer végigmentünk rajta, pirosat, ha kétszer végigmentünk rajta). Ha abban a csomópontban, ahol éppen tartózkodunk van kivezető fekete él, ami ismeretlen csúcsba vezet, akkor mindig arra megyünk. Ha ilyen már nincs, akkor vissza kell fordulnunk. A visszaforduláskor biztos, hogy csak egy zöld él van, az mutatja a visszafele vezető utat. Miután egyet mentünk a zöld úton, elképzelhető, hogy már tudunk fekete, ismeretlen csúcsba vezető utat követni, ha nem, akkor továbbra is visszalépünk. Ezen algoritmus garantálja, hogy az egész útvesztőt bejárja a robot, nem zavarják meg a körök és a befejeződésekor a kiinduló pontban van.
A számítógép és a robot között, a feltérképezett rész közvetítéséhez szükség van valamilyen (lehetőleg szöveges) reprezentációra, amit a robot a memóriájában lévő útvesztőből elő tud állítani, a számítógép pedig meg tud jeleníteni. Ez legyen a következő:
útvesztő ::= {<(északi)út><(keleti)út><(déli)út><(nyugati)út>}
út ::= <szín><csomópont>
szín ::= a|b|c
csomópont ::= x|u|0|<útvesztő>
A reprezentáló karakterlánc előállításakor az ismeretlenbe vívő utakat az u betű jelzi, a már reprezentált részbe vívőket az x, míg, ha egy út nem létezik, arra a 0 jelölést vezettük be.
Gyakorló feladat: rajzoljuk fel, hogy mit reprezentál a {a{a0a0axa{a0ax{axa0a0au}a0}}a0a0a0} karakterlánc!
Az ismertett adatszerkezetek robotbeli implementációjáért a graph.c modul felel (letöltés, megtekintés), a navigálásért a robotools.c (letöltés, megtekintés), míg Tremaux algoritmusát implementálja a főprogram, a masodik.c (letöltés, megtekintés).
Film, amely alatt a robot kétszer hibázik, a második alkalommal akkorát, ami miatt útját már nem tudja folyatatni:
Hossz | Hang, zene | Minőség | Formátum |
---|---|---|---|
7:56 (eredeti) | Hangok nélkül | 360x288, normál | AVI (15 MB) OGG Theora (15 MB) |
7:56 (eredeti) | Eredeti hangok | 360x288, normál | AVI (23 MB) OGG Theora (19 MB) |
7:56 (eredeti) | Eredeti hangok | 720x576, normál | AVI (66 MB) OGG Theora (52 MB) |
7:56 (eredeti) | Eredeti hangok | 720x576, kiemelkedő | AVI (124 MB) OGG Theora (96 MB) |
3:00 (gyorsított) | Hangok nélkül | 360x288, normál | AVI (6 MB) OGG Theora (7 MB) |
3:00 (gyorsított) | Pachelbel - Canon | 360x288, normál | AVI (8 MB) OGG Theora (8 MB) |
3:00 (gyorsított) | Pachelbel - Canon | 720x576, normál | AVI (26 MB) OGG Theora (25 MB) |
3:00 (gyorsított) | Pachelbel - Canon | 720x576, kiemelkedő | AVI (48 MB) OGG Theora (45 MB) |
Készült egy másik felvétel is, amiben a hiba máshol jelentkezik: AVI (63 Mbyte) és OGG Theora (64 Mbyte) formátumban.
Az első változat bizonytalanságai és hibái mind abból adódtak, hogy nincs kellő információnk a körülöttünk lévő utak helyéről, csupán a három érzékelőből és forgolódásból kell meghatároznunk a robot állapotát. Ugyanakkor a forgolódás közben olyan elmozdulások is történnek, amik nem megjósolhatók és épp eléggé befolyásolják a robot pozícióját ahhoz, hogy aztán hibázzon.
A megoldás az, hogy az érzékelést függetlenítjük a fordulásoktól és egyéb mozgásoktól. Ezt úgy valósítjuk meg, hogy a három fényérzékelő helyett csupán egyet használunk, azonban azt egy daru szerű karra szerelve, magunk körül 360 fokban körbeforgathatóvá tesszük. A darut vezérlő tengelyre egy forgásérzékelőt szerelve azt is meg tudjuk mondani, hogy az olvasó fej éppen hol érzékel.
Az ezen meggondolások alapján születő robot kicsit otrombább, több hardvert használ, mint elődje, talán megépíteni is kicsit hosszadalmasabb, azonban pontossága, vezérelhetősége sokkal kifinomultabb, a szoftverében így kevesebb heurisztikára van szükség: graph.c (változatlan) (letöltés, megtekintés), robotools.c (letöltés, megtekintés), main.c (letöltés, megtekintés).
Film, amely alatt a robot végigmegy a pályán és a végén közli az eredményt a számítógéppel:
Hossz | Hang, zene | Minőség | Formátum |
---|---|---|---|
21:24 (eredeti) | Hangok nélkül | 360x288, normál | AVI (40 MB) OGG Theora (43 MB) |
21:24 (eredeti) | Beethoven - Piano Sonata nr. 15 in D major op. 28 "Pastoral" | 360x288, normál | AVI (61 MB) OGG Theora (53 MB) |
21:24 (eredeti) | Beethoven - Piano Sonata nr. 15 in D major op. 28 "Pastoral" | 720x576, normál | AVI (179 MB) OGG Theora (150 MB) |
21:24 (eredeti) | Beethoven - Piano Sonata nr. 15 in D major op. 28 "Pastoral" | 720x576, kiemelkedő | AVI (335 MB) OGG Theora (282 MB) |
10:00 (gyorsított) | Hangok nélkül | 360x288, normál | AVI (19 MB) OGG Theora (26 MB) |
10:00 (gyorsított) | Liszt - Hungarian Rhapsody No. 5 | 360x288, normál | AVI (29 MB) OGG Theora (30 MB) |
10:00 (gyorsított) | Liszt - Hungarian Rhapsody No. 5 | 720x576, normál | AVI (84 MB) OGG Theora (84 MB) |
10:00 (gyorsított) | Liszt - Hungarian Rhapsody No. 5 | 720x576, kiemelkedő | AVI (157 MB) OGG Theora (154 MB) |
3:00 (erősen gyorsított) | Hangok nélkül | 360x288, normál | AVI (6 MB) OGG Theora (11 MB) |
3:00 (erősen gyorsított) | Pachelbel - Canon | 360x288, normál | AVI (9 MB) OGG Theora (12 MB) |
3:00 (erősen gyorsított) | Pachelbel - Canon | 720x576, normál | AVI (26 MB) OGG Theora (33 MB) |
3:00 (erősen gyorsított) | Pachelbel - Canon | 720x576, kiemelkedő | AVI (48 MB) OGG Theora (60 MB) |
Készült egy másik felvétel is, digitális fényképezőgéppel, azonban azon két sarokkal a vége előtt elfogyott a hely. Újabb felvétel készítésébe nem kezdtünk.
Az útvesztőt ábrázoló karakterfüzér fogadására az lnphost nevű programot használtuk, míg az ember számára érthető megjelenítésre saját QT alapú visualizer programot írtunk.
A robotikáról szóló weblapom és azon szereplő minden program jogtulajdonosa Riskó Gergely ( (C) Riskó Gergely, 2006.). Hozzájárulásomat adom ahhoz, hogy a programokat a GPL, az LGPL vagy a módosított BSD (2.2.1-es pont) licenszek rendelkezéseit betartva terjesszék vagy felhasználják. Minden olyan cselekmény megengedett, amit az említett licenszek bármelyike megenged.
A filmek alatt szereplő zene mindegyike a Wikimedia Commonsból származik, azok felhasználása megengedett, ha azonos licensz alatt terjesztem a módosított művet. Ezért a videókra a felhasznált zene licensze vonatkozik (ez minden esetben a Creative Commons Attribution ShareAlike 1.0 licensz).