JavaScript - HTML5 szimuláció

7. Vonalkövetés

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.
Pálya: Robotpozíció: [,]
Your browser does not support the HTML5 canvas tag.
Mozgás: T: ms [px/s]

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?

« Előző | Lap eleje

2

Virtuális pálya szerkesztése

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.

« Előző | Lap eleje

3

2D robotábrázolás és animáció

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.

« Előző | Lap eleje

4

Szimuláció indítása és vezérlése

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ó.

« Előző | Lap eleje

5

HTML album az elkészült kódoknak

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.

« Előző | Lap eleje

6

Oldd meg a feladatokat!

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:

  1.  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

  2.  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.

    1000 0000|2 pont

« Előző | Lap eleje

Hivatkozások, felhasznált források

[1] Czúni László - Tanács Attila: Képi információ mérése, Typotex, 2011 (pdf)

[2] Abonyi-Tóth Andor - Nagy Norbert - Regős Ákos: A multimédia-alkalmazások elemei: a képek

[3] Pluhár Zsuzsa: Webanimáció

[4] HTML Canvas Reference

[5] HTML5 Canvas Tutorials

[6] Horváth Győző: Bevezetés a kliens- és szerveroldali webalkalmazások készítésébe

[7] Browser photo editor: http://apps.pixlr.com/editor/

[8] CodeMirror: Theme Demo

[9] LEGO MINDSTORMS

[10] Hobbi elektronika 5.000 Ft-os Launchpad Robot