A fizikai, kémiai és matematikai modellek megértésében, a természettudományos jelenségek összefüggéseinek feltárásában sokat segítenek a számítógépes animációk. A szimulációs játékok ugyancsak kiaknázzák a virtuális világ lehetőségeit, amelyben az objektumok mozgatásáról hatékonyabbnál hatékonyabb megoldások gondoskodnak. A népszerű pályajátékok jelentős része valamilyen vonalkövető algoritmus segítségével modellezi a játékosok mozgását, az elektronika iránt érdeklődők körében pedig örökzöld téma a vonalkövető robot megépítése.
Ha valakinél a szekrény tetején porosodna éppen egy Lego Mindstorms programozható robot készlet, akkor most érdemes lenne letörölgetni, és életre kelteni a benne szunnyadó lehetőségeket. Hatalmas élmény, amikor egy gépbe zárt gondolat kinetikus formát ölt.
Ha viszont csak egy PC vagy táblagép áll rendelkezésre, akkor programozhatunk magunk is egy virtuális robotot, ami hajlandó lesz egy megadott pályát bejárni. Később ez a kód tovább fejleszthető különböző Forma-1-es pályák bejárására, vagy akár egy autóverseny játék kivitelezésére. Az ilyen egyszerű, de végtelenül praktikus megoldások általában a Poor Mans Robot kategóriában indulnak, és sok örömet okoznak a fejlesztőiknek.
Vonalkövető robot szimuláció
Használjuk fel a vászon kínálta lehetőségeket kétdimenziós zártpályán közlekedő robot mozgás-szimulációjának modellezésére.
Bemenet: Belső értékadással meghatározott pályaadatok és robot tulajdonságok, valamint a mozgásirány és ismétlési idő.
Kimenet: A vászon különböző pontjain megjelenő robot rajza, és az állapot információi.
Változók: A canvas, context változók a vászonműveletekhez, a ring objektum változói: dataRing a pályaadatok kezeléséhez, a pathColor a pálya, a borderColor és az antiAliasing a pályaszegély színkódjának elemzéséhez, a robot objektum változói: a radius a robot méretét illetve a left, top, centerX, centerY a robot aktuális pozícióját kezelő változók, valamint a myTimerVar és myTimerRepeat a robotmozgás időzítéséhez.
Algoritmus: A zárt pályán mozgó robot a sötét (pathColor:'#1F2839') képpontokon haladva figyeli a pálya által bezárt terület szélén elhelyezkedő világos (borderColor:'#E0E0E0') pixeleket, amelyekhez viszonyítva számolja ki a következő pozícióját.
Eseménykezelés: A setInterval() metódus segítségével beállítunk 1-32 ms-os ismétlési időt a számításokat és a robot megjelenítését végző függvények hívásához.
Kedves Bitfaragó jelöltek!
A HTML5 canvas szimulációs feladatok megjelenítésére is alkalmas. Segítségével könnyen ábrázolhatjuk és egyszerű programozási eszközökkel manipulálhatjuk a virtuális modelljeinket. Ebben a leckében felfedezhetünk egy egyszerűbb vonalkövetési algoritmust, amely egy zárt pályán haladó robotot irányít. Az itt szerzett tapasztalatokat később felhasználhatjuk atommodell-, bolygómozgás- vagy akár a már említett autóverseny-szimulációs feladatok megoldására is. A mintafeladatok alatti Próbáld ki! » gombra kattintással nemcsak megnézhetitek a futási eredményt, hanem mindjárt szerkeszthetitek is a kódot.
1
Robotépítés és programozás
A vonalkövetési feladatok megoldása alapesetben valamilyen egyszerűbb robot megépítésével kezdődik, ami ugyan izgalmas kihívás, de sajnos kevésbé költséghatékony tevékenység. Az érzékelők, a motorok és a vezérlő elektronika beszerzése illetve összeszerelése után az elkészült robot megmozgatásához a mikrovezérlőjét kell majd programozni egy általában ingyenes fejlesztőkörnyezet (IDE) segítségével. Ezt a lehetőséget kínálja például a Launchpad Robot tervezése és megépítése.
Hozzájuthatunk robot építőkészletekhez is, mint amilyen a bevezetőben említett Lego Mindstorms. A beszerzési költsége egy PC árával vetekszik, viszont igen komoly támogatottsággal bír. A különböző feladatok ellátására alkalmas robotok gondosan előkészített útmutató alapján viszonylag könnyen összeállíthatók. A építőkészlet tartalmazza a szenzorokat, a szervomotorokat és a vezérlőegységet, amit gyakran intelligens téglának is neveznek, és a számítógépünkhöz USB kábellel, vagy vezeték nélküli módon Bluetooth vagy Wi-Fi segítségével csatlakoztatható. A használható programozási nyelvek: LEGO MindStorms NXT Software, NBC/NXC nyelvpáros, RobotC. Az elkészült program USB vagy Bluetooth kapcsolaton keresztül tölthető át az intelligens téglába. Hogyan készítsünk vonalkövető robotot Mindstroms használatával?
A vonalkövetési feladat virtuális leképezéséhez ismét felhasználhatjuk a digitális vászon szolgáltatásait. Először szükségünk lenne egy zárt pályára, amit rajzolással vagy képszerkesztéssel tudunk kivitelezni. A demo program esetében a legkézenfekvőbb megoldás a rajzolás. Egy körpályát néhány JavaScript utasítással már megjeleníthetünk:
Ha kanyargósabb útvonalon szeretnénk kipróbálni a virtuális robotunk tűrőképességét, akkor újabb körívek beillesztésével nehezíthetjük a pályát.
A virtuális pálya képpontjaihoz rendelt színkódokat a robot a vonalkövetés folyamán pásztázni fogja, ezért a pályaadatokat egy tömbben letároljuk, és mivel a robot állandó pályán mozog ezért a pályaképet CSS háttérképpé alakítjuk. Így a továbbiakban annak frissítéséről nem kell gondoskodnunk.
A robot a demo programban sötét (pathColor:'#1F2839') pályán halad, és a haladási iránynak megfelelően a pálya belső világos (borderColor:'#E0E0E0') képpontjai alapján tájékozódik. Itt azonban előjön az élsimítási eljárás miatt módosult képpontok kezelésének problémája. Ezt az antiAliasing változóval hidaljuk át. Egyszerűen kihagyjuk az ott megadott számú pixelt a sötét-világos átmenet vizsgálatából, sőt a későbbiekben még arról is gondoskodunk, hogyha az átmeneti terület nagyobb lenne a beállított kezdőértéknél, akkor a robot módosíthassa azt.
A digitális pályán mozgó kétdimenziós robot ábrázolásához most egy smile szimbólumot használunk. Mivel szimmetrikus alakzat, ezért a pozicionálása és mozgatása a későbbiekben valamelyest egyszerűsödik.
A legizgalmasabb kérdések a robot mozgatásával kapcsolatban jelentkeznek. Meg kell oldanunk a robot színkód érzékelését, ami nem is olyan bonyolult feladat. A robot a középpontjához viszonyított négy irányból mintát vesz a pályaadatokból, amiből kiszámítja a következő pályapozícióját, majd átrajzolja magát az új helyére. Mivel íves és nem sarkos pályán mozog, ezért most elegendő a négy irány vizsgálata. A színérzékelés közben az élsimítás miatti átmenetek színváltozására feltétlenül ügyelnünk kell. A demo pályánkon ez nagyítástól függően 3-4 pixel széles határsávot jelent.
Az elkészült pálya és robot objektumokat most már csak el kell helyeznünk a vásznon, és a működést vezérlő HTML űrlapról elindíthatjuk a szimulációt. Menet közben a pálya, a körbejárás iránya és a robot sebessége változtatható.
A HTML canvas felhasználási lehetőségeit még közel sem merítettük ki, de már elég sok és változatos feladatot megoldottunk, ezért célszerű lenne az eddig elkészült anyagokat egy HTML albumban összegyűjteni, és a továbbiakban bemutatkozó portfólióként kezelni. Ehhez kínálkozik egy könnyen adaptálható megoldási lehetőség, amit a w3schools.com oktatóanyagai között találtok meg: How to Build a Web Site?
A minta nagyon ügyesen használja ki a CSS és JavaScript lehetőségeit az élőfej, a menü és az élőláb kezelésénél.
A team_script.js állomány tartalmazza azokat az adatokat, amelyeket minden HTML oldalon meg akarunk jeleníteni. Így egy helyen kezelhetjük a lapok közös információit.
A HTML oldalakon csupán annyi a dolgunk, hogy a team_site.css és team_script.js állományok betöltéséről gondoskodjunk, illetve az ott hivatkozott szemantikai elemeket a dokumentumban azonosíthatóvá tegyük. A kezdőlapon (team_index.html) célszerű egy rövid bemutatkozó animációt elhelyezni, ami felkelti az érdeklődést a csapat tevékenysége iránt.
A többi oldalon a csapat legjobbnak tartott JavaScript kódjai jelenhetnek meg.(Például: team_site01.html)
A magunkról oldalon (team_about.html) pedig a szokásos, a csapat tevékenységével kapcsolatos fontosabb tények szerepelhetnek.
A képpontok szimulációs felhasználása újabb izgalmas feladatokat kínál, melyek megoldásával ismét értékes pontokat gyűjthettek a verseny következő fordulójához. A könnyebb kezelhetőség érdekében a megoldást a feladatok előtti kék azonosítóval megegyező nevű könyvtárban dolgozzátok ki. A beküldött HTML kód elején a csapat logója és neve, alatta a feladat azonosítója, és szövege jelenjen meg sötét háttérrel és világos betűkkel. Ezt követően már csak a megoldást kell ügyesen kódolnotok. Az elkészült megoldásokat gyűjtsétek össze a csapat nevével megegyező nevű könyvtárban, majd tömörítve töltsétek fel a honlapra!
Beküldhető feladatok 2014:
B3-2014-EGY09
Tervezzétek meg a Föld Napkörüli mozgását bemutató szimulációt úgy, hogy közben a Hold a Föld köröl keringjen.
0100 0000|2 pont
B3-2014-EGY10
Készítsetek HTML albumot az Erőgyűjtés során szerkesztett kódjaitok bemutatására. A bevezető oldalon helyezzétek el a csapat bemutatkozó animációját, majd a többi oldalra fűzzétek fel a legjobb munkáitokat. A weboldalak közötti váltáshoz használjatok CSS-el formázott felsorolást.