EV3 + 7657 AT-ST Game
Ismét összehoztunk valamit az EV3 segítségével: Célbalövő Star Wars játék kétlábú lépegetővel, csatajelenettel, célzással, lézer fegyver hanggal, a "csatatéren" mozgó célponttal:
YouTube video a játék működéséről
A játék megépítéséhez felhasználtunk 2 db 16x32-es és 1 db 32x32-es zöld alaplapt, a 7657-es AT-ST készletet, némi technic és hagyományos lego elemet, valamint a Mindstorms EV3 készletből az infra szenzort, touch szenzort, color szenzort, a kis szervo motort és 1 db nagy szervo motort.
Először is szerettem volna valamilyen játékprogramot írni, aztán formálódott a gondolat, hogy egy célbalövő megoldás kellene - főképpen mert Bálint fiam mindíg harcol a Star Wars készleteivel és a kedvébe akartam járni. Aztán adta magát az EV3 Brick tetszetősen apró pixelű (177x127 képpont 43 x 29 mm méret mellett) kijelzője, gondoltam ki kellene használni és valami olyan megoldás kellene, ahol a durva célra közelítést a játék mozgó részeinek követése után a finom célzás követné, és így a kis kijelzőn lehetne imitálni találat esetén a detonációt is, mivel a játék téren ez nem is megoldható és a pontos célzás miatt a szem a képernyőre tapad a lövés pillanatában, így a játék élmény egészen jól fokozható.
Pontos találat esetén a gép egy új célpont pozíciót generál véletlenszerűen és átmozgatja a célpontot ennek megfelelően a "terepen". Mivel célozzunk ? Használjam fel az egyik szervo motort, mint elfordulás jeladót ? Jó, de az olyan snassz, a régi játékokat is fogni kellett és nyomkodni, van egy infra szenzorunk, akkor nem kell hozzáérni célzáskor (nincs löködés, nem tekergetik vadul a szervot, és nem esik szét illetve le a játék az asztalról, ha esetleg oda telepítenénk), ez már kihasználná az EV3 alapcsomagban rejlő lehetőségeket. Hát így alakult ki a kéz levegőben való mozgatásával történő célzás:
Itt aztán lehet finom mozdulatokkal korrigálni, amire szükség is van, mivel a célzást a mozgási tartomány 2 %-án belül kell tartani a pontos találathoz, ami odafigyelést igényel, de nem okoz sok sikertelen próbálkozást sem, ahogy ez a videon látható! A célpont nem minden esetben látható a kijelzőn, van, hogy olyan szélső pozíciót vesz fel, hogy a kijelzőn csak bizonyos mértékű ráfordulás után jelenik meg, így aki játszik, szükségszerűen használja a "terep" követést és a célkeresztet felváltva. A lövéshez az érintés érzékelőt kell benyomni és kiengedni, azaz kattintással lehet elsütni a löveget, amit minden esetben lézer fegyver hang kiadása követ, amely effektet szerencsére tartalmazza az EV3 hangtára. A forgatáshoz is lehetne hangot kapcsolni, de annak lejátszási ideje olyan hosszú, hogy szaggatná a mozgást, ezért azt inkább kihagytam, a szervo egyébként is ad egy kellemes hangot, amikor az alábbi algoritmus pozícionálja:
Az algoritmus egyébként egy végtelenített, keretet adó hurokban működik, amelynél arra kellet törekedni, hogy semmi ne lassítsa annak futását, mert akkor tud igazán szépen működni a mozgás követése, ez azt hiszem, hogy sikerült is.
A másik sarokpont a frissülő képernyő szép megjelenítése volt, ehhez gyakorlatilag a kezdő képernyő törlést követően, ami a kalibrációs programrészben van még a hurok előtt (igy az nem ismétlődik), egyáltalán nem szabad képernyő törlést alkalmazni, mivel a program futási sebesség és a képernyő frissítés interferenciája vibrálást okozott, ezért gyakorlatilag minden mozgó pont sötét felrajzolását követően világos átrajzolással kerül törlésre, aztán az új helyen ismét sötéten rajzolódik fel, ami valahogy így néz ki, persze közben megtörténik a változó értékének módosítása a célzó mozgás függvényében:
Így sikerült teljesen villogás mentes, folyamatos, kontrasztos kijelzést kapni a célkeresztről és a kijelzőn elmozduló, célpontot jelképező téglalapról egyaránt.
Utolsónak a cél "terepen" történő mozgatást kellett megoldani, ehhez egy nagy szervo motort használtam, ami cérna és egy dob segítségével mozgatja a célpont kis alaplapját, ez a mechanizmus még nincs teljesen tökéletesítve, itt még egy kötél feszítőt kellene beilleszteni a rendszerbe, talán majd ez is sorra kerül. A szín szenzornak csak a kalibráláskor van jelentősége, azért kellett, mert a cérna miatt nem lehetne gyorsan kalibrálni "megakadásig", mert akkor a motor széttépné a mechanikát, így egy fehér kocka szolgálja a kezdő pozíció beállítását(a motor mehet magas nyomatékkal és fordulatszámmal, ez rövidíti a kalibráció idejét), a program futása közben már csak relatív távolságokat mozdul a célpont.
A kábel hosszakhoz kellett igazítani az EV3 Brick elhelyezését a játéktéren, de talán nem kellett túl nagy kompromisszumokat kötni.
Ha esetleg sikerül beszerezni egy szögelfordulás szenzort, vagy gyorsulás szenzort, akkor lehetne még ötletelni a mozgatás egyéb megoldásain, de azt hiszem egyenlőre maradok az alap készletnél, hiszen ez is elég nagy mozgásteret enged akár a programozásban, akár a mechanizmusok megépítésében. A készlet ára elég magas, de a benne rejlő lehetőségekhez mérten szerintem nem túl drága. Ha valaki megnézi, hogy a modellező szervok és kontrollerek mibe kerülnek, akkor rájön, hogy egy nagyon jó ár-érték arányú készlet a Mindstorms! Aki szeret algoritmusokkal bajlódni, annak nem lesz ideje a hétköznapi dolgokra, ha egyszer belekezd :-)
2015 január 5, 22:53