Gestures and WiiMote, how do they interact? human gestures revealed!
Bachelorproef voorgedragen door Andreas D’Hollandere tot het behalen van het diploma Bachelor in de Grafische en Digitale Media, Multimediaproductie proDEV.
Opleiding Bachelor in de Grafische en Digitale Media Arteveldehogeschool, campus Mariakerke Industrieweg 232 9030 Mariakerke (Gent) Interne promotor: Philippe De Pauw – Waterschoot Externe promotor: Tommy Van de Velde Academiejaar 2009 - 2010
Gestures and WiiMote, how do they interact? human gestures revealed!
Bachelorproef voorgedragen door Andreas D’Hollandere tot het behalen van het diploma Bachelor in de Grafische en Digitale Media, Multimediaproductie proDEV.
Opleiding Bachelor in de Grafische en Digitale Media Arteveldehogeschool, campus Mariakerke Industrieweg 232 9030 Mariakerke (Gent) Interne promotor: Philippe De Pauw – Waterschoot Externe promotor: Tommy Van de Velde Academiejaar 2009 - 2010
Woord vooraf
Graag had ik eerst en vooral Joachim Coppens willen bedanken voor de toffe en aangename samenwerking aan het project Astro Quest. Hij gaf mij veel steun en doorzettingsvermogen tijdens het schrijven van deze bachelorproef. Bedankt Joachim! Ook had ik graag mijn promotoren bedankt voor hun professionele begeleiding en inbreng tijdens het maken van deze bachelorproef. Philippe De Pauw – Waterschoot fungeerde als interne promotor, Tommy Van de Velde was mijn externe promotor. Vervolgens had ik ook graag mijn ouders bedankt die mij tijdens de ups and downs altijd blijven steunen en motiveren zijn. Ten slotte nog een speciaal woord van dank aan Nikki Paessens en Philippe Coppens, beiden collega’s, zij genieten een speciale vermelding voor het meedenken aan het gameconcept van Astro Quest en voor de steun tijdens het schrijven van dit eindwerk.
Inhoudsopgave
Inleiding ................................................................................................................................... 8 1
Wat is gesture recognition? ............................................................................................... 9
2
Geschiedenis van gebaren ............................................................................................... 10
3
Gebruik van gestures in onze maatschappij .................................................................... 12
4
Mogelijkheden om gestures te meten .............................................................................. 13 4.1
4.2
4.3
5
Hardwarematig ..................................................................................................... 13 4.1.1
Accelerometer .................................................................................................. 13
4.1.2
Infrarood positiebepaling .................................................................................. 15
Softwarematig ....................................................................................................... 17 4.2.1
Patroonherkenning .......................................................................................... 17
4.2.2
Vergelijken van bitmapdata door middel van webcam....................................... 17
4.2.3
Muis gestures .................................................................................................. 18
4.2.4
Wii gebaseerde gestures ................................................................................... 19
Voorbeelden ......................................................................................................... 21 4.3.1
Mouse gesture gestuurde website ...................................................................... 21
4.3.2
Finger tracking door middel van Wii Remote. ................................................... 21
4.3.3
Whiteboard met behulp van IR-pen en Wii Remote ........................................... 22
4.3.4
Besturen van Windows Media Player door middel van laserpen ........................ 22
Gestures herkennen ........................................................................................................ 23 5.1
5.2
5.3
Hidden Markov Model .......................................................................................... 23 5.1.1
Definitie ......................................................................................................... 23
5.1.2
Gebruik van het Hidden Markov Model .......................................................... 23
5.1.3
Praktisch voorbeeld ......................................................................................... 23
Levenshtein afstand .............................................................................................. 25 5.2.1
Definitie en geschiedenis .................................................................................. 25
5.2.2
Wetenschappelijke formule ............................................................................... 25
5.2.3
Actionscript 3 voorbeeld................................................................................... 27
5.2.4
Gebruik van de Levenshtein afstand ................................................................ 27
Dynamic Time Warping ....................................................................................... 28 5.3.1
Definitie ......................................................................................................... 28
5.3.2
Hoe Dynamic Time Warping gebruiken? .......................................................... 28
6
5.3.3
Procedure voor het berekenen van de afstand. ................................................... 29
5.3.4
Actionscript 3 voorbeeld................................................................................... 29
Gesture gestuurde controllers ......................................................................................... 30 6.1
6.2
6.3
Nintendo Wii ........................................................................................................ 30 6.1.1
Geschiedenis ................................................................................................... 30
6.1.2
Controllers ...................................................................................................... 31
6.1.3
Praktische voorbeelden..................................................................................... 34
iPhone – iPod Touch – iPad .................................................................................. 35 6.2.1
Inleiding ......................................................................................................... 35
6.2.2
Gebruik maken van multi-touch en de motion sensor ........................................ 35
Project Natal (XBOX 360) ................................................................................... 36 6.3.1
6.4
Plastation 3 Move ................................................................................................. 37 6.4.1
6.5
7
Wat is Project Natal? ...................................................................................... 36
Wat is de Playstation Move en hoe werkt die? .................................................. 37
Microsoft Surface .................................................................................................. 38 6.5.1
Wat is de Microsoft Surface?............................................................................ 38
6.5.2
Mogelijkheden ................................................................................................. 38
Praktijk ............................................................................................................................ 40 7.1
WiiFlash ................................................................................................................ 40 7.1.1
Inleiding ......................................................................................................... 40
7.1.2
WiiFlash Server en de connectie van de Wii Remote.......................................... 40
7.1.3
Hoe WiiFlash gebruiken? ................................................................................. 41
Wii Draught Masters .................................................................................................. 47 7.2
8
Muis gerelateerde gestures .................................................................................... 48 7.2.1
Inleiding ......................................................................................................... 48
7.2.2
Hoe mouse gestures gebruiken? ......................................................................... 48
7.2.3
Gebruikte technieken voor het meten van gestures ............................................. 49
WOW project ................................................................................................................. 52 8.1
Inleiding ................................................................................................................ 52
8.2
Concept en opbouw ............................................................................................. 53
8.3
Gebruik van de Wii Remote ................................................................................. 53
8.4
Implementatie van gestures................................................................................... 54 8.4.1
Gebruikte technieken ....................................................................................... 54
8.4.2
Hoe game controls aan gestures koppelen?......................................................... 57
9
8.4.3
Problemen ....................................................................................................... 57
8.4.4
Conclusie ........................................................................................................ 57
Besluit ............................................................................................................................. 58
10
Lijst van figuren en tabellen ...................................................................................... 59
11
Lijst van geraadpleegde werken ................................................................................. 62
12
Bijlagen ...................................................................................................................... 65 Bijlage I: Logboek bachelorproef en WOW project. ........................................................ 65 Bijlage II: Poster horend bij deze bachelorproef en WOW project. ................................. 69 Bijlage III: CD met poster horend bij deze bachelorproef ................................................ 70
Inleiding
Zover de geschiedenis reikt proberen mensen in op ordelijke en verstaanbare manier met elkaar te communiceren. Iedereen kent het gevoel wel in een vreemd land te verblijven waar je de taal niet meester bent en waarbij je je uiterste best doet alles met handen en voeten uit te leggen, om toch maar je vraag duidelijk te maken. Deze vorm van communiceren staat beter bekend als gebaren. In deze bachelorproef probeer ik de essentie van gebaren onder de loep te nemen en deze informatie te gebruiken om een beeld te geven hoe we deze kunnen herkennen via computertechnologie. Door het gebruik van wiskundige algoritmes kunnen we dit geheel aanzien als gesture recognition. Het doel van deze bachelorproef stelt zich een duidelijk beeld te geven welke technieken hierbij een bijdrage kunnen leveren en hoe deze het best toe te passen. Sinds lang ben ik gefascineerd door de wereld van Actionscript 3.0 en Flash. Tutorials op het web en de gevolgde lessen tijdens mijn studies gaven dan ook de aanzet tot het schrijven van deze bachelorproef. In oorsprong had ik als idee deze bachelorproef te wijden aan augmented reality, maar toen ik de mogelijkheden van de Wii Remote zag was ik meteen verkocht. In samenwerking met mijn collega Joachim Coppens tracht ik deze theoretische uiteenzetting te toetsen aan de praktijk. Door het maken van een game, Astro Quest genaamd waarin Wii controls en physics elkaar aanvullen, willen wij een zo goed mogelijk beeld geven wat er mogelijk is binnen deze twee domeinen. Ik wens iedereen een aangename reis doorheen deze wondere wereld van gestures en technologie.
8
1
Wat is gesture recognition?
Gesture recognition1 is een onderdeel van de computerwetenschappen met als doel het interpreteren van menselijke bewegingen via wiskundige algoritmes. Deze patronen kunnen ontstaan uit bewegingen van het lichaam, gezicht of handen. Waar er op dit moment de meeste aandacht naar uit gaat is het herkennen van gezichtsuitdrukkingen en bewegingen met de handen. Het herkennen van bewegingen kan gezien worden als het herkennen van lichaamstaal. Dit verkleint de afstand tussen verschillende user interfaces2. Waar vroeger alleen muis en toetsenbord gebruikt werden, is nu ook menselijke interactie3 een manier om elektronica aan te sturen. Deze technologie laat de mensen toe om interactie te hebben met een programma, zonder mechanische onderdelen. Een van deze voorbeelden is multi-touch input. In het kort komt het er op neer dat door bewegingen op een gepast scherm er interactie kan zijn door middel van aanraking. Deze techniek kan bijvoorbeeld ook uitgebreid worden naar het wijzen naar een computerscherm in plaats van het aan te raken. Wanneer je dan met je vinger beweegt, zal de aanwijzer ook meebewegen. Deze gesture recognition is doorgaans een combinatie van beeldverwerking en computer vision4. Hierbij kunnen ook wiskundige algoritmes gebruikt worden zoals het Hidden Markov Model5.
1
Het herkennen van gebaren.
2
De plaats waar de communicatie tussen mens en machine gebeurt, bijvoorbeeld een touchscreen.
3
Communicatie tussen personen en/of computers.
4
Heeft betrekking tot alle apparaten die met beeld te maken hebben, bijvoorbeeld een webcam of een scanner.
5
Een wiskundig model dat het mogelijk maakt om verschillende sequenties met elkaar te verglijken.
9
2
Geschiedenis van gebaren
Gebaren worden de dag van vandaag veelal gezien als een inconsistente manier van communiceren. Ze hebben meer een mondaine uitstraling, maar het blijft zo dat ze een enorm belangrijke rol spelen in de communicatie tussen mensen. Ze zijn veeleer een aanvulling van de gesproken communicatie, die zo in bepaalde gevallen verduidelijkend is. Deze gebaren kunnen ook op zichzelf gebruikt worden, zoals in situaties waar je niet kan of mag spreken. Denk maar aan een duiker in groep die de communicatie met zijn collega’s moet behouden door middel van gebaren. Deze gebaren spelen dus een heel belangrijke rol in het communiceren met andere personen. Het is bijvoorbeeld enorm moeilijk om een bepaalde situatie uit te leggen zonder je handen te gebruiken. De gebaren geven dus altijd een meerwaarde aan het gesprek, maar kunnen ook dingen onthullen die je eigenlijk niet zou willen meedelen aan de andere persoon. Zo hebben we veelal onze eigen manier van gebaren, lenen we er van anderen, of gebruiken we een universeel gekende gebarentaal. Deze gebaren kunnen van generatie op generatie doorgegeven worden en zo tot het gemeengoed van een samenleving behoren. Zo worden deze gestures meestal doorgegeven via televisie en multimedia en worden op die manier terug geïntegreerd in andere culturen en samenlevingen. Denk hierbij maar aan het vredessymbool.
Afbeelding 1 – Vredessymbool - (bron: http://www.bodylanguageuniversity.com/public/images/170.jpg)
Niet alleen het vredessymbool is een algemeen gekend gebaar, zo hebben we ook het gekruist houden van de armen, dit is het equivalent voor het uitstralen van macht, het thumbs-up teken, het ok teken, enzovoort. Wat uiteindelijk ook voorkomt is dat er sommige gebaren in bepaalde delen van de wereld een geheel andere connotatie dragen. Dit kan dus soms tot rare situaties leiden. Zo kan bijvoorbeeld een knipoog betekenen dat je een geheim wilt overdragen aan een andere persoon, of kan het iets sluws betekenen in een totaal andere context. Deze knipoog werd tot een tijd geleden vooral geassocieerd met seksuele aantrekkingskracht of appreciatie, maar op dit moment wordt het eerder gelinkt aan goedkoop, en met 10
personen die eerder slechtere bedoelingen hebben. Wat hier vooral interessant blijkt is dat dit gebaar in Nigeria gebruikt wordt om kinderen duidelijk te maken dat ze de kamer moeten verlaten. Het wordt nu plezanter wanneer een gebaar voor de ene cultuur iets positief betekent en voor de andere iets negatief en deze twee culturen met elkaar moeten communiceren. Een hilarisch voorbeeld deed een tijdje geleden de ronde op het internet. Het voordien genoemde thumbs-up gebaar kwam in opspraak toen de Amerikaanse president dit gebaar maakte naar de troepen in een Irakese straat. Dit gebaar kwam verkeerd over want in het Midden-Oosten wordt dit aanzien als een grove belediging. Deze situatie toont dus aan dat eenzelfde gebaar in verschillende landen een andere betekenis kan hebben en je dus best vooraf nagaat wat deze betekenissen zijn. Populaire gebaren hebben vaak een geschiedenis die ver terug gaat in de tijd. Het thumbs-up gebaar vindt zijn herkomst in het Colosseum waar gladiatoren vochten voor hun leven voor duizenden toeschouwers. De overwinnaar had toen het leven of de dood van zijn tegenstander in handen, maar het commando om te doden werd gegeven door de heerser. Dit hing af van hoeveel invloed de verslagen gladiator had in het gevecht. Als die een mooie show vertoonde, kon de aanwezige menigte de heerser er misschien van overtuigen hem te laten leven door hun duimen de lucht in te steken.
11
3
Gebruik van gestures in onze maatschappij
Gesture recognition is vooral handig bij het verwerken van informatie die door mensen werd voortgebracht waar tekst of spraak niet voldoende is om de boodschap over te brengen. Net zoals het herkennen van spraak kunnen ook menselijke gebaren herkend worden door computers. Deze software gaat de uitgebeelde symbolen omzetten naar tekst. Hierbij wordt vooral gebruik gemaakt van webcams en eventueel infrarood sensors. Door het gebruik van accelerometers en gyrometers kunnen bijvoorbeeld robots ingezet worden bij medische ingrepen, waarbij de chirurg verschillende sensoren op zijn lichaam draagt die een robot bestuurbaar maken. In dit geval sturen digitale accelerometers signalen door en zorgen zo voor een grotere precisie. Wijzen heeft een zeer specifieke bedoeling in onze gemeenschap. Door te wijzen kan je een object of een plaats aanduiden in een omgeving. Dit wijzen wordt dan herkend door camera’s met een achterliggend gesture herkenningssysteem. Dit kan vooral handig zijn bij bijvoorbeeld presentaties waar er iets op een scherm aangeduid moet worden door wijzen te selecteren. Het besturen van een computer door middel van gelaatsuitdrukkingen kan toegepast worden bij personen die niet in staat zijn om een muis en toetsenbord te gebruiken. Hierbij is eye tracking een goede oplossing. Dit kan het traditionele toetsenbord en muis vervangen en door middel van het focussen met de ogen op een punt op het scherm zo interactie verkrijgen met de applicatie. Deze eye tracking wordt ondermeer gebruikt om de aandachtspunten te bepalen in een winkel, om te weten waar de producten moeten geplaatst worden om het meest in het oog te springen. Vandaag de dag zijn gestures binnen games enorm populair. Denk hierbij maar aan de Wii Remote, PS3 DualShock 3.0, Playstation Move met de Playstation Eye, iPod Touch … Deze controllers geven de gebruiker meer interactie en zo ook een meer realistische weergave van het spel. Later in deze bachelorproef worden deze controllers afzonderlijk besproken en de gebruikte technieken uitgelegd. Sommige systemen maken gebruik van virtuele controllers: door middel van gestures worden de bestaande fysische controlesystemen vervangen. Een van de functies hiervan is het bedienen van de televisie door middel van gebaren. Dit is ook de techniek waarop Project Natal van Microsoft steunt, waarover later meer. Een heel andere techniek doet zich voor bij affective computing. Hier wordt er gebruik gemaakt van gezichtsexpressies en emoties die herkend worden door een computer, zodat er interactie met de gebruiker voorzien wordt. Gestures kunnen ook gebruikt worden om apparaten op afstand te bedienen. Denk maar aan de motion sensor van AirWick die geur verspreidt als er iemand voor de sensor wandelt.
12
4
4.1
Mogelijkheden om gestures te meten
Hardwarematig In de laatste jaren doet zich de trend voor dat er meer en meer goedkope technologieën op de markt komen die goed inzetbaar zijn op vlak van gesture recognition. Vroeger was dit proces relatief duur omdat de hardware amper voor handen was. Zoals besproken in deze bachelorproef is de Wii Remote één van deze goedkope oplossingen die een zee van mogelijkheden biedt. Deze Wii Remote kan door middel van de accelerometer driedimensionele bewegingen herkennen. Door deze Wii Remote los te koppelen van zijn oorspronkelijk doel, het aansturen van de Wii console, kan de data die voortvloeit uit de Wii Remote dienen om bewegingen te herkennen.
4.1.1 Accelerometer
Een accelerometer is eigenlijk niets meer dan een apparaatje dat de kracht van versnellingen meet. Deze krachten kunnen zowel statisch als dynamisch zijn. Statische krachten zijn vooral krachten zoals de zwaartekracht die met een constante kracht op een voorwerp inwerken. De beweging van de accelerometer veroorzaakt dynamische krachten. De accelerometers kunnen in twee grote groepen onderverdeeld worden. Enerzijds zijn er analoge accelerometers, anderzijds digitale. Om uit te maken welke het beste in een apparaat past, wordt er gekeken naar het eindproduct. Heeft dit een analoge output, dan wordt er een analoge accelerometer gebruikt, en omgekeerd.
Afbeelding 2 - Analoge accelerometer - (bron: http://www.vexrobotics.com/media/catalog/product/cache/11/image/296x/5e06319eda06f020e43594a 9c230972d/a/c/accelerometer-c.jpg)
13
Het doel van een analoge accelerometer is om een zo precies mogelijke output te geven. Zo zal de output sterk veranderen als er een kleine wijziging is in de input. Dit soort van accelerometers wordt vooral gebruikt bij situaties waar een snelle respons belangrijk is. Digitale accelerometers zijn meer gesofisticeerd dan hun analoge tegenhangers. Hierbij wordt er gebruik gemaakt van een hoge elektrische spanning die in verhouding staat met de acceleratie. Een van de belangrijkste voordelen hierbij is dat er een direct digitaal signaal beschikbaar is als output. Deze digitale versie kunnen we onderverdelen in drie categorieën. Als eerste hebben we de piëzoelektrische versie. Deze werkt via het meten van elektrische verschillen die optreden bij het bewegen van microscopisch kleine kristallen deeltjes die een spanning veroorzaken wanneer deze in beweging worden gebracht. Vervolgens is er de MEMS6 accelerometer. Deze vergelijkt de oorspronkelijke waarden, met de door beweging veroorzaakte waarden. Deze technologie is het meest courant. Als laatste hebben we de spanningsmeter, deze meet vooral spanningen in een spanningsfolie7. Indien er veranderingen optreden worden ze omgezet in elektrische ladingen die verder als maatstaf gebruikt kunnen worden voor verdere metingen.
Afbeelding 3 - MEMS accelerometer - (bron: http://openlearn.open.ac.uk/file.php/3071/T207_1_032i.jpg)
Deze accelerometers worden vooral gebruikt in de luchtvaart en militaire operaties. Hierbij denken we vooral aan raketlanceersystemen. In de meeste gevallen worden dit soort meters gebruikt om breekbaar materiaal te beschermen tijdens het transport, en om zo informatie te leveren bij momenten waar er schade kan optreden. Sommige bedrijven zijn er zelfs in geslaagd om draadloze accelerometers te ontwikkelen die niet alleen goedkoop zijn, maar ook schokbestendig. Deze driedimensionele accelerometers vind je vooral terug in MP3-spelers en mobiele telefoons, maar kunnen ook ingezet worden bij GPS-toestellen.
6
Micro-electro-mechanical systems of een systeem dat de accelerometer op heel kleine schaal maakt.
7
Dient om de twee spanningsbronnen van elkaar te scheiden, is spanningsdoorlatend.
14
Door het meten van een bepaalde hoeveelheid statische acceleratie ten opzichte van de zwaartekracht is het mogelijk om de hoek te berekenen waarin de Wii Remote zich bevindt ten opzichte van de aarde. Door deze statische metingen te combineren ontstaat er een dynamische beweging. Deze dynamische waarden tonen uiteindelijk aan in welke richting de Wii Remote beweegt. De mogelijkheden om een accelerometer te implementeren zijn dus quasi onbeperkt. Zo kan het handig zijn om te weten of een afstandsgestuurde auto bergop rijdt, of als een voorwerp al dan niet zal vallen. Dit zijn maar twee van de oneindig veel toepassingen waarbij je een accelerometer kan gebruiken. Ook Apple maakt gebruik van accelerometers in hun apparaten. Zij bouwen deze accelerometers in om harde schrijven te beschermen tegen schade bij een val van de laptop. Wanneer een plotse beweging wordt geregistreerd wordt de harde schrijf uitgeschakeld zodat de schrijfkoppen niet in contact komen met de platen. Ook in auto’s wordt deze techniek gebruikt, maar dan wel met sterkere analoge accelerometers. Deze worden geplaatst om in geval van een ongeval dit tijdig waar te nemen en de airbags te openen.
4.1.2 Infrarood positiebepaling
Een andere manier van gestures te meten is door middel van infrarood signalen. Deze methode houdt in dat er een infrarood signaal uitgestuurd wordt, bijvoorbeeld via een IR-ledje8, en deze ontvangen wordt door een apparaat. In mijn geval gebeurt dit via de Wii Sensorbar die het infrarood signaal uitzendt en de Wii Remote die het signaal opvangt. Zo kan je de positie van de Wii Remote ten opzichte van het scherm achterhalen. Om een infrarood signaal uit te zenden kan je ook gebruik maken van theelichtjes in plaats van IR-leds. Dit maakt het een iets goedkopere oplossing. Het herkennen van bewegingen kan op verschillende manieren. Een eerste manier is door het gebruik van een soort van handschoenen waar IR-leds op bevestigd zijn ter hoogte van bijvoorbeeld elke vinger. Wanneer je niet over handschoenen beschikt kan je de reflectie van je huid gemakkelijker laten verlopen door reflecterende plakband op je vingers aan te brengen. Bij deze opstelling fungeert de Wii Remote als ontvanger. Om het signaal sterk genoeg te maken zodat de Wii Remote het kan ontvangen is het aangeraden om een array9 van infrarode leds te gebruiken en deze voor de Wii Remote te plaatsen. In dit geval fungeert de Wii Remote als ontvanger van signalen. Sommige mensen denken eerder dat de Wii Remote dient om signalen uit te zenden, en dat de sensorbar deze dan doorstuurt naar de Wii of computer, wat dus totaal niet het geval is.
8
Infrarode Light Emitting Diode.
9
Verzameling van infrarode leds op een printplaat die aangesloten is op een voedingsbron met een lage voltage.
15
Afbeelding 4 - Array van infrarode LEDs met bijhorende Wii Remote - (bron: http://www.eblackwelder.com/projects/curb-appeal/images/led_array.jpg)
Door deze methode te gebruiken wordt het dus mogelijk door middel van reflecterende plakband de positie van de vingers in twee dimensies, alsook in drie dimensies te bepalen. Dit kan een eerste stap zijn richting het bepalen van bewegingen in een driedimensionale wereld. Voor de praktische uitwerking van deze bachelorproef zal ik alleen gebruik maken van de accelerometer die ingebouwd is in de Wii Remote, en deze dus niet in combinatie met de Wii Sensorbar gebruiken.
16
4.2
Softwarematig
4.2.1 Patroonherkenning
“Onder patroonherkenning verstaan we het herkennen van voorwerpen, gezichten, geluid en kleur door middel van een extern instrument zoals een camera, infrarood sensor of een apparaat die bewegingen kan registreren en omzetten in digitale signalen.”
4.2.2 Vergelijken van bitmapdata door middel van webcam
Een veel gebruikte manier van patronen te herkennen is via de bitmapdata10 die uit een webcamstream11 gehaald wordt. Door per frame12 de veranderingen te bekijken ten opzichte van het vorige frame kan men zo bewegingen opsporen. Om de bewegingen goed te kunnen detecteren passen we best een paar filters toe op het beeld. Ten eerste moet de verzadiging van het beeld drastisch worden verhoogd. Door deze techniek toe te passen in samenwerking met het converteren van de inputstream naar een zwart-wit beeld wordt de herkenning van beweging en eventuele voorwerpen vergemakkelijkt. Bij deze techniek worden ook eventueel door algoritmes figuren en voorwerpen herkend door hun vorm of lichtemissie. Deze vorm van patroonherkenning is vooral enorm populair bij augmented reality13. Bij augmented reality gebruik je een vooraf afgeprint tweedimensionaal patroon, dat door middel van een webcam herkend wordt en zo een 3D beeld toevoegt aan het oorspronkelijke beeld van de webcam. Zo is het bijvoorbeeld mogelijk om een racespel te maken waarbij je een circuit maakt doorheen je eigen kamer. Indien gecombineerd met de Wii Remote, of een andere gesture interface, kan er een interactief game gemaakt worden dat gebruik maakt van gestures en de reële wereld om de omgeving uit op te bouwen. Door het gebruik van een webcam zijn ook andere toepassingen mogelijk. Zo is het mogelijk om een lichaamsdeel te herkennen. Voor het herkennen van een hand is het aangewezen van een handschoen aan te trekken met een egale kleur, wat het makkelijker maakt voor de webcam deze te herkennen. Voor deze manier van herkenning gebruik je best twee soorten webcams, enerzijds een infrarood camera, anderzijds een normale kleuren webcam.
10
Data bestaand uit pixels die een afbeelding vormen.
11
Bitmapdata afkomstig van een webcam die samen een vloeiend beeld vormen.
12
Een frame is één beeld in een reeks zoals een film of simulatie. Doorgaans bekijken we beelden op televisie bijvoorbeeld aan ongeveer 24 frames per seconde. Zo ervaren we die opeenvolging van stilstaande beelden als een vloeiende beweging.
13
Het toevoegen van virtuele beelden aan een reële omgeving door middel van projectie.
17
Afbeelding 5 - Herkennen van patronen d.m.v. camera's
Wanneer deze twee camera’s gecombineerd worden in samenwerking met een array van infrarood leds kunnen door middel van het vergelijken van frames, zoals eerder vermeld, gestures of posities bepaald worden. Om deze gestures goed te kunnen vergelijken met elkaar is het nodig om te werken met een bepaald algoritme. Enerzijds kan men gebruik maken van het Hidden Markov Model, wat een relatief wiskundig model is en dus resulteert in een te complexe oplossing voor een simpel probleem. Een betere oplossing hier is gebruik te maken van Dynamic Time Warping. Deze techniek zorgt ervoor dat gekeken wordt hoeveel stappen of veranderingen er nodig zijn om de originele gesture te verkrijgen. De mogelijkheden met deze technieken zijn onbeperkt. Door het gebruik van een laserpen kan je bepaalde programma’s aansturen zoals iTunes of Firefox. Een veelgebruikte toepassing van infrarood gesture tracking in samenwerking met de Wii Remote is een whiteboard14 dat aangestuurd wordt door een pennetje waarop een infrarode led is aangebracht. Door de Wii Remote op een bepaald oppervlak te richten zodat de infrarode signalen kunnen teruggekaatst en opgevangen worden door de Wii Remote. De meeste reeds gebouwde whiteboard applicaties ondersteunen ook multitouch gestures, dit wil zeggen dat ze kunnen gebruik maken van meerdere infrarode pennetjes tegelijk om het whiteboard mee te besturen.
4.2.3 Muis gestures
Het herkennen van bewegingen met een muis is een veel voorkomende manier van gestures herkennen op het internet. Het wordt vooral gebruikt bij het navigeren in een website of om een mediaspeler te besturen. Deze mouse gestures zijn een goed uitgangspunt om verder uit te bouwen naar een WiiGesture library. Het principe van mouse gestures is dat de posities van de muiscursor, wanneer de muisknop ingedrukt is, vergeleken wordt via een algoritme met bepaalde vooraf gedefinieerde patronen. Op deze manier is het dus ook mogelijk om uit de datastroom van posities van de muiscursor, een eigen patroon op te bouwen. Dit patroon kan opgeslagen worden in een array van data om later hergebruikt te worden voor andere toepassingen. Een veel gebruikte mouse gesture bibliotheek voor Actionscript 3.0 is deze van ByteArray.org.
14
Digitaal schoolbord.
18
Deze library maakt gebruik van sequenties met acht richtingen en het principe van de Levenshtein15 afstand. Daardoor is het mogelijk om quasi elke beweging uit te voeren. Deze Levenshtein afstand vergelijkt twee sequenties met elkaar en gaat de verschillen bundelen in een matrix. Wanneer dit bijvoorbeeld toegepast wordt op een woord kan je met deze Levenshtein afstand kijken hoeveel stappen er nodig zijn om dat ene woord om te vormen naar een ander woord. In het geval van de mouse gestures worden de twee bewegingen vergeleken en diegene waarbij er het minste stappen nodig zijn om de gesture om te vormen naar het opgeslagen teken wordt dan gebruikt.
4.2.4 Wii gebaseerde gestures
Wanneer we spreken over gestures die ontstaan zijn uit de Wii gaat het vooral over driedimensionele gestures. Bij een tennisbeweging zal de driedimensionele accelerometer, die ingebouwd zit in de Wii Remote, data doorsturen naar een computer of Wii. Deze data kan dan geïnterpreteerd worden als een bepaalde gesture. Om een gesture te herkennen moeten er op deze ‘ruwe’ data bepaalde filters worden toegepast zodat de nauwkeurigheid gewaarborgd kan blijven, en zo ook het uiteindelijk herkennen van de gesture. Het eigenlijke herkenningsproces bevat vier belangrijke onderdelen. Enerzijds moet het herkenningssysteem een filter bevatten die de ruwe data omzet in bruikbare data. Dit kan gebeuren door de inkomende data door een lowpass16 filter te sturen, die ervoor zorgt dat de data geëgaliseerd wordt en zo beter bruikbaar is voor verdere verwerking. Ten tweede moet er een quantisizer voorzien worden om de data bij elkaar te houden en in clusters onder te verdelen. Dit is vooral nodig om bepaalde bewegingen te gaan herkennen als één object, en deze dus later te kunnen vergelijken met een vooraf gedefinieerde waarde. Als derde component is er een bepaald wiskundig model nodig om de gefilterde data met elkaar te verglijken en dit zowel in tijd als in ruimte. Hierbij kunnen verschillende wiskundige modellen of algoritmes gebruikt worden. Een zeer bekend model die vaak gebruikt wordt bij het herkennen van gestures, maar enorm wiskundig is, is het Hidden Markov Model. Dit model zal ervoor zorgen dat elke stap in de gesture vergeleken wordt met een vooraf gedefinieerde waarde. Als vierde component hebben we de classifier17. Deze classifier zorgt ervoor dat de vergeleken data geïnterpreteerd wordt. Bij het interpreteren van een gesture kan het Bayes-classificatiemodel gebruikt worden. Dit model gaat na of de uiteindelijke data voldoet aan de eisen van een gesture, of niet.
15
Maatstaf voor het meten van verschillen tussen twee sequenties van data.
16
Haalt bepaalde pieken uit data, dit zowel in de hoge als lage waarden.
17
Zorgt voor het interpreteren van de data.
19
Afbeelding 6 - Stappen voor het herkennen van gestures (bron: http://www.wiigee.org/download_files/gesture_recognition_with_a_wii_controllerschloemer_poppinga_henze_boll.pdf)
Als toevoeging op deze vier belangrijke componenten voor het herkennen van gestures is het aangewezen van twee bijkomende filters toe te passen alvorens over te gaan tot het herkennen van de gesture. Enerzijds hebben we de filter die nagaat of er beweging is of niet. Indien de Wii Remote in beweging is, zal een andere filter kijken in welke richting dit gebeurt. Door deze vorm van preprocessing18 wordt al een groot deel van de data gefilterd op bruikbaarheid en kan er dus later sneller overgegaan worden tot het verwerken van de desbetreffende data.
18
Voorafgaand selecteren van bruikbare data.
20
4.3
Voorbeelden
4.3.1 Mouse gesture gestuurde website
Afbeelding 7 - Mouse gesture applicatie in Actionscript 3.0 - (bron: http://marc.virtuallypreinstalled.com/SimpleGesture)
Op deze website is het mogelijk om verschillende voorgedefinieerde mouse gestures te testen. Op deze site is het ook mogelijk om een eigen gesture op te nemen en daar ook een bepaalde handeling aan te koppelen. Deze website maakt gebruik van de ByteArray mouse gesture library.
4.3.2 Finger tracking door middel van Wii Remote.
Afbeelding 8 - Finger tracking met Wii Remote - (bron: http://www.youtube.com/watch?v=0awjPUkBXOU)
Dit voorbeeld maakt gebruik van een Wii Remote en een array van infrarode leds om de bewegingen van de vingers te detecteren. Zoals eerder al vermeld in het onderdeel infrarood positiebepaling. Dit detecteren van de vingers wordt mede mogelijk gemaakt door reflecterende plakband om de reflectie te vergroten van de infrarode stralen die uitgezonden worden door de array van leds.
21
4.3.3 Whiteboard met behulp van IR-pen en Wii Remote
Afbeelding 9 - Whiteboard gestuurd door Wii Remote en infrarood pen - (bron: http://www.youtube.com/watch?v=5s5EvhHy7eQ)
Nog een project van Johny Chung Lee is er eentje dat gebruik maakt van een pen waarop een infrarode led is bevestigd en dat samen met een Wii Remote en projector een digitaal klasbord nabootst. Deze oplossing kost hoogstens 40€ aan onderdelen (projector niet meegerekend) en is dus een zeer geschikte oplossing tegenover de soms dure whiteboards die reeds op de markt zijn.
4.3.4 Besturen van Windows Media Player door middel van laserpen
Afbeelding 10 - Lasergestures - (bron: http://ashishrd.blogspot.com/2006/12/gesture-recognition-usingwebcam-and.html)
Een volledig andere manier van gestures komen we tegen in dit voorbeeld. Hier wordt een laserpen gebruikt om Windows Media Player te besturen. De opstelling hierbij is een normale webcam en een laserpen. Door de pen te richten op het vlak waar de webcam zicht op heeft, en daarna een beweging uit te voeren, kan de gebruiker Windows Media Player besturen.
22
5
5.1
Gestures herkennen
Hidden Markov Model
5.1.1 Definitie
“Het Hidden Markov Model is een eindige verzameling van toestanden, die elk geassocieerd is met een (meestal multidimensionale) kansverdeling. Overgangen tussen de toestanden worden geregeld door een reeks van waarschijnlijkheden. In een bepaalde toestand kan een resultaat bekomen worden, volgens de bijbehorende kansverdeling. Het is alleen het resultaat en niet de toestand die zichtbaar is voor een externe, vandaar de naam Hidden Markov Model.” (Warakagoda, 1996)19
5.1.2 Gebruik van het Hidden Markov Model
Het Hidden Markov model wordt in wetenschappelijke kringen veel gebruikt voor kansberekeningen. Specifieke toepassingen van het Hidden Markov Model zijn vooral spraakherkenning, bewegingsdetectie, voorspelling van DNA20, partial discharge21 en cryptie analyse22.
5.1.3 Praktisch voorbeeld23
Twee vrienden, Sarah en Tom leven ver van elkaar maar praten elke dag via de telefoon over wat ze die dag gedaan hebben. Tom toont alleen interesse voor drie activiteiten: wandelen in het park, winkelen en zijn appartement schoonmaken. De keuze welke activiteit hij doet op welke dag hangt af van het weer. Sarah heeft geen uitsluitende informatie over het weer waar Tom woont, maar ze weet ongeveer welk weer het is. Op basis van wat Tom haar elke dag vertelt probeert Sarah te raden welk weer het bij Tom die dag geweest is.
19
Vrij vertaald en herkwerkt.
20
Desoxyribonucleïnezuur - Een molecuul uit de kern van een cel dat de genetische informatie van het organisme bevat. 21
Wordt vooral gebruikt in de ingenieurswereld. Het snel verminderen van de weerstand van een stof. 22
De analyse die gepaard gaat met het ontcijferen van een bepaald cijferraadsel.
23
Vrij vertaald en herwerkt naar: http://en.wikipedia.org/wiki/Hidden_Markov_Model. Oorspronkelijke bronnen werden nagekeken voor het gebruik van deze website.
23
Sarah gelooft dat het weer zich voordoet als een discrete Markov ketting. Er zijn twee toestanden: regenachtig en zonnig, maar deze kan ze niet met haar eigen ogen waarnemen. Op dit vlak zijn deze toestanden verborgen voor haar. Elke dag is er een kans dat Tom zijn activiteiten aanpast aan het weer van die dag. De activiteiten die hij kan uitvoeren zijn dus: wandelen, winkelen of schoonmaken. Doordat Tom Sarah over zijn activiteiten vertelt, zijn deze activiteiten observaties. Het volledige systeem steunt hier dus op het HMM24. Sarah weet wat de algemene weertrend in deze zone is en wat Tom doet bij welke omstandigheid. Met andere woorden, alle parameters voor het HMM zijn gekend. Dit alles kan weergegeven worden in de volgende weergave: states = ('Rainy', 'Sunny') observations = ('walk', 'shop', 'clean') start_probability = {'Rainy': 0.6, 'Sunny': 0.4} transition_probability = { 'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3}, 'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6}, } emission_probability = { 'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5}, 'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, } Codevoorbeeld 1 - Hidden Markov parameters - (bron: http://en.wikipedia.org/wiki/Hidden_Markov_Model)
In dit stuk code de start_probalitity stelt Sarah haar geloof voor in welke toestand het HMM is wanneer Tom haar voor de eerste keer belt. Het enige dat ze weet is dat het in het algemeen regenachtig is. De kansverdeling die hier gebruikt is, is niet in evenwicht, namelijk ongeveer 57% regenachtig, en 43% zonnig. De transition_probability geeft het veranderen van het weer weer in de onderliggende Markov ketting. In dit voorbeeld is er 30% kans dat het morgen zonnig is, als het vandaag regenachtig was. De emission_probability toont hoeveel kans er is dat Tom een bepaalde activiteit zal uitoefenen die dag. Als het regenachtig is, is er 50% kans dat hij zijn appartement aan het schoonmaken is. Is het echter zonnig, dan is er 60% kans dat hij naar buiten gaat voor een wandeling.
24
Hidden Markov Model
24
Afbeelding 11 - Hidden Markov Chain - (bron: http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/HMMGraph.svg/708pxHMMGraph.svg.png)
5.2
Levenshtein afstand
5.2.1 Definitie en geschiedenis
De Levenshtein afstand meet de overeenkomsten tussen twee woorden. Enerzijds hebben we het originele woord dat meestal voorgesteld wordt als ‘s’, anderzijds hebben we het woord dat als doel gebruikt zal worden ‘t’. Hoe groter de Levenshtein afstand, hoe meer verschillen er waargenomen zijn tussen de woorden. De Levenshtein afstand is genoemd naar een Russische wetenschapper Vladimir Levenshtein. Hij ontdekte dit algoritme in 1965. Indien het moeilijk is om ‘Levenshtein’ uit te spreken is er ook een makkelijkere uitspraak namelijk de edit distance25.
5.2.2 Wetenschappelijke formule
Voor de Levenshtein afstand is er niet echt een wetenschappelijke formule, het is meer een manier van berekenen van data, een algoritme. Om een Levenshtein afstand te berekenen is het handig volgend stappenplan te volgen. Stap 1: Maak twee variabelen n en m aan, en zet die gelijk aan de lengte van het originele woord en het doelwoord. Indien een van deze twee variabelen 0 zijn, geef dan de andere terug en stop de bewerking. Indien dit niet het geval is, maak dan een multidimensionale array aan waarbij de breedte en hoogte gelijk staan aan de lengte van de woorden. Stap 2: Initialiseer de eerste rij van 0 tot n, initialiseer daarna de eerste kolom van 0 tot m.
25
Andere naam voor Levenshtein distance of afstand.
25
Stap 3: Loop door de array met een for lus en bekijk elk karakter van het originele woord. Stap 4: Doe hetzelfde met het doelwoord. Stap 5: Als s[i] gelijk is aan t[j], dan is de kost 0. Indien s[i] niet gelijk is aan t[j] is de kost 1. Stap 6: Zet de waarde van de d[i,j] cel van de matrix gelijk aan het minimum van: a. b. c.
De cel die zich boven de bekeken cel bevindt plus 1: d[i-1,j] + 1 De cel die zich aan de linker kant bevindt plus 1: d[i,j-1] + 1 De cel die zich diagonaal boven en aan de linker kant bevindt plus de kost: d[i-1,j-1] + kost
Stap 7: Wanneer al deze stappen doorlopen zijn kan de Levenshtein afstand gevonden worden in de cel d[n,m] van de matrix. Wanneer we deze berekeningen toepassen op de woorden GUMBO en GUMBAL krijgen we dit als resultaat:
Afbeelding 12 - Berekening van Levenstein afstand - (bron: http://www.merriampark.com/ld.htm)
26
5.2.3 Actionscript 3 voorbeeld
Wanneer we bovenstaande stappen toepassen op Actionscript 3 bekomen we volgende oplossing: protected function costLeven(a:Array,b:Array):uint{ //STAP 1 // point if (a[0]==-1){ return b.length==0 ? 0 : 100000; } //STAP 2 // precalc difangles var d:Array=fill2DTable(a.length+1,b.length+1,0); var w:Array=d.slice(); //STAP 3 & 4 for (var x:uint=1;x<=a.length;x++){ for (var y:uint=1;y
5.2.4 Gebruik van de Levenshtein afstand
De Levenshtein afstand wordt het meeste gebruikt voor het herkennen van spraak. Andere toepassingen zijn: het controleren van spelling, herkennen van gestures, analyse van DNA en het herkennen van plagiaat.
27
5.3
Dynamic Time Warping
5.3.1 Definitie
Dynamic Time Warping is een algoritme dat gebruikt wordt om de overeenkomsten tussen twee sequenties te meten. Deze twee sequenties mogen zowel in tijd als in snelheid verschillen van elkaar. Ze worden niet lineair vervormd op vlak van tijd om zo een waarde te creëren van de gelijkheid. Deze manier van vervormen wordt vaak gebruikt in combinatie met het Hidden Markov Model. Het DTW26 algoritme is vooral enorm interessant omdat het zo geschreven is dat niet alle informatie aanwezig moet zijn om een passende uitkomst te vinden. Zolang de segmenten lang genoeg zijn, is er geen probleem.
5.3.2 Hoe Dynamic Time Warping gebruiken?
Om het DTW algoritme te gebruiken is het handig om de data in een rooster weer te geven. In dit rooster plaatsen we de input onderaan, en de opgeslagen data links. Beiden starten onderaan links in het rooster. In elke cel kunnen we een afstandsmaat plaatsen waarbij we de twee overeenkomende elementen van de twee sequenties vergelijken.
Afbeelding 13 - Dynamic Time Warping grid - (bron: http://web.science.mq.edu.au/~cassidy/comp449/html/dtw.gif)
Om de beste overeenkomst te vinden tussen deze twee sequenties kunnen we een patroon herkennen dat de minimum afstand weergeeft tussen deze sequenties. In bovenstaand voorbeeld zijn het eerste en tweede element van elke sequentie gelijk aan elkaar, terwijl het derde element van de input het beste aanleunt bij het tweede element van het opgeslagen patroon. Dit komt dus overeen met een deel van het opgeslagen patroon, maar dan uitgerekt naar de input toe. Deze zelfde overeenkomsten zien we dan weer in het vierde element. Hierbij is dit gelijk aan het tweede en derde element van het opgeslagen patroon.
26
Dynamic Time Warping
28
Bij dit voorbeeld is het deel van het opgeslagen patroon samengedrukt naar de input sequentie toe. Eens het beste pad gevonden is, kan de totale afstand tussen de twee sequenties berekend worden.
5.3.3 Procedure voor het berekenen van de afstand.
De procedure voor het berekenen van de afstand tussen twee sequenties bestaat er in om alle mogelijke routes doorheen het rooster te vinden en voor elk van deze de afstand te berekenen. Wanneer deze afstand gevonden is, is het vereist om het kleinste verschil tussen de afzonderlijke afstanden te delen door de som van de warping function. Deze dient om de afstanden te normaliseren ten opzichte van de lengte van het pad.
5.3.4 Actionscript 3 voorbeeld
public function DTWDistance(s[]:Array, t[]:Array):int { var DTW[][]:Array = new Array(); //aanmaak van multidimensionele array var n:int = s.length; // dimensie van array var m:int = t.length; // dimensie van array var i:int; // teller var j:int; // teller var cost:int; // cost for(i = 0; i < n; i++) { for(j=0; j<m; j++) { cost = s[i]+t[j]; DTW[i][j] = cost + minimum(DTW[i-1][j], DTW[i][j1],DTW[i-1][j-1]); } } return DTW[n][m]; } Codevoorbeeld 3 - Actionscript 3.0 uitwerking DTW
29
6
6.1
Gesture gestuurde controllers
Nintendo Wii
6.1.1 Geschiedenis
De eerste prototypes van de Wii zijn ontstaan rond het jaar 2000. Deze protoypes werden niet voor het publiek bekend gemaakt tot in. Het doel van de Nintendo Wii is om het console game concept een heel andere wending te geven. Heel wat mensen waren enorm verbaasd wat de Wii concepten te bieden hadden, maar waren ook angstig dat deze technieken nooit gemaakt zouden kunnen worden voor het grote publiek. Deze zorgen werden snel aan de kant gezet wanneer Nintendo in 2005 de Wii Remote voorstelde op TGS27. In 2006 werd de Wii op de markt gebracht zoals we die nu kennen. De vraag was immers zo groot dat er niet genoeg consoles waren om de feestdagen mee rond te komen. Vele mensen boden tot zelfs duizend euro om een exemplaar te bemachtigen op eBay en Amazon. Maar dit succes kwam er natuurlijk niet vanzelf. In 2001 werd door Nintendo de GameCube gelanceerd. De GameCube was relatief succesvol, maar bij de R&D28 afdeling van Nintendo hadden ze het gevoel dat er veel meer kon gedaan worden met de beschikbare technologieën. Op datzelfde moment werd ook de laatste hand gelegd aan de Nintendo DS. Veel van de concepten die in deze twee consoles gebruikt werden liggen aan de basis van de Nintendo Wii. Het kostte de ontwikkelaars, ingenieurs en programmeurs veel bloed, zweet en tranen om de Nintendo Wii te maken. Eerst en vooral moest hij betaalbaar zijn, want hoe goed de Wii ook zou zijn, de consument zou hem nog steeds moeten kunnen betalen. Nintendo gaf dan ook van in het begin aan dat de Wii vooral op families gericht zou zijn. De richtprijs was relatief laag in vergelijking met andere consoles en hoogtechnologische snufjes. Ten tweede zou de Wii vooral een revolutionair stuk speelgoed zijn en vooral verder gaan dan de normale consoles. Nintendo wou vooral de speler het gevoel geven 100% in het game betrokken te worden. Door de juiste tools te gebruiken kon dit een wereld van verschil geven in de game experience. Realistische graphics konden niet verkregen worden omdat de processorsnelheid hiervoor te laag lag, maar dit werd ruimschoots goed gemaakt door het gebruik van zeer realistische bewegingen.
27
Tokyo Game Show
28
Research en Development: Afdeling binnen een bedrijf die zich toespitst op het onderzoek naar nieuwe technieken.
30
Als laatste grote vereiste moesten de games vooral fun zijn om te spelen. Dit in combinatie met een zeer interactieve gameplay29 zorgde voor een groot succes. Wat ook vooral belangrijk was, was dat de ouders overtuigd moesten worden van het feit dat hun kinderen niet lui zouden worden door voortdurend spelletjes te spelen. Dit is Nintendo enorm goed gelukt want de Wii is zo een rage dat iedereen van alle leeftijden er mee aan de slag gaat. Aan dit succes zijn ook veel naamsveranderingen vooraf gegaan. Een van de namen die aan de top van de lijst stond was: ‘Revolution’. Maar deze naam heeft het uiteindelijk niet gehaald. Dit kwam vooral doordat de managers van Nintendo zich vooral over heel de wereld richtten en een naam wilden die in elke taal gemakkelijk uit te spreken was. Omdat het doel van Nintendo was om een soort band te creëren tussen de mensen die het spelen, dachten ze aan het gebruik van WE30 in de naam. De spelling van de naam veranderde al snel naar Wii om zo de link tussen Nintendo en Wii sneller te maken bij het lezen van de naam. Niemand kan ontkennen dat de Nintendo Wii een gigantisch succes kent. Sinds 2007 is het een van de best verkochte consoles van de wereld. Door dit grote succes zijn ook andere fabrikanten, zoals Sony en Microsoft gaan denken aan innovatieve interactietechnieken met de gebruiker binnen games.
6.1.2 Controllers
Nintendo heeft sinds de release in 2005 heel wat extra accessoires uitgebracht die de functionaliteit van de Wii vergroten. Standaard wordt bij elke Wii een Wii Remote en Nunchuck bijgeleverd. De Wii Remote bevat vooral een accelerometer sensor en een infrarood ontvanger. De Nunchuck zelf bevat nog een extra accelerometer sensor, zij het iets minder gevoelig dan die in de Wii Remote. De Nunchuck wordt via een speciale connector aangesloten op de Wii Remote. In sommige spellen is het verplicht om deze Nunchuck aan te sluiten, omdat anders in het spel maar de helft van de functionaliteiten meer werken.
Afbeelding 14 – Nunchuck links, Wii Remote rechts - (bron:http://wallpapersdiq.org/wallpapers/21/Wii_Remote_%28Wiimote%29_and_Wii_Nunchuck.jpg)
29
Spelverloop
30
Staat voor ‘wij’ in het engels
31
Om een optimale interactie te hebben met de spellen is het aangeraden gebruik te maken van een Wii Sensorbar. Deze straalt infrarood licht uit dat opgevangen wordt door de Wii Remote. Aan de hand van de hoeveelheid en de sterkte van het infrarode licht kan nagegaan worden hoe ver de Wii Remote zich van het scherm bevindt en naar welke positie de Wii Remote wijst. Dit is vooral handig in spellen waar de positie van de aanwijzer op het scherm belangrijk is. In 2006 bracht Nintendo ook een Classic Controller uit. Deze moet de nostalgie van oude arcade games terug brengen naar de nieuwere technieken, zoals de Wii. Deze controller heeft eigenlijk niets met de Wii methodiek te maken, maar maakt het makkelijker om oude spellen, van bijvoorbeeld op de GameCube, ook op de Wii te spelen.
Afbeelding 15 - Wii Classic Controller - (bron: http://www.excheap.com/images/W-JDSB-Wii-classiccontroller-752.jpg)
Om bepaalde spellen makkelijker te spelen, zoals een racespel of een FPS31, bracht Nintendo speciale houders uit die de ergonomie in functie van het spel moeten vergemakkelijken. Een van deze houders is het Wii Wheel die het spelen van racespellen makkelijker moet maken. Een andere is de Wii Zapper die het richten op het scherm een beetje levensecht maakt.
Afbeelding 16 - Wii Zapper & Wii Wheel - (bronnen: http://www.consoleshop.nl/images/product/56393/nintendo-wii-zapper.jpg & http://www.gamecyte.com/wp-content/uploads/2008/09/wii-wheel.jpg)
31
First Person Shooter, schietspel waarbij je in de huid kruipt van een personage, alles wordt dan ook bekeken door de ogen van deze persoon.
32
Een add-on32 die de bewegingen accurater en preciezer moet opnemen is de Wii MotionPlus. Deze wordt onderaan de Wii Remote bevestigd en heeft een nauwkeurige ingebouwde gyroscoop33. Door het toevoegen van deze gyroscoop wordt nu niet alleen de versnelling gemeten, maar ook de hoek waaronder de Wii Remote gehouden wordt. Deze Wii MotionPlus zal ook gebruikt worden in het project Astro Quest om zo de gestures preciezer te laten herkennen.
Afbeelding 17 - Wii Remote met MotionPlus - (bron: http://www.techgadgets.in/images/nintendo-wiimotionplus-accessory.jpg)
Al deze toestellen maken het spelen van een spel dus interactiever en meer levensecht dan bijvoorbeeld een normale XBOX controller.
32
Hard- of software die extra functionaliteiten biedt.
33
Een apparaat dat de oriëntatie van een bepaald voorwerp meet.
33
6.1.3 Praktische voorbeelden
Een tof voorbeeld van hoe je de Wii Remote kan gebruiken om apparaten mee aan te sturen, is er eentje van een aantal Chinese studenten die er niets beters op gevonden hebben dan het Wii Wheel te gebruiken om een rijdend platform mee aan te sturen. Het uiteindelijke resultaat kan je bekijken in onderstaand filmpje op YouTube.
Afbeelding 18 - Wii Kart - (bron: http://www.youtube.com/watch?v=BA6G2K6jwTA)
Een ander voorbeeld dat gebruik maakt van de Wii Remote en de Wii SensorBar is het volgende:
Afbeelding 19 - Head tracking with the Wii Remote - (bron: http://www.youtube.com/watch?v=Jd3-eiidUw)
Dit voorbeeld maakt gebruik van de Wii Sensorbar om de infraroodstraling uit te zenden richting de Wii Remote. De data die de Wii Remote dan opvangt wordt dan omgezet en gebruikt voor het renderen34 van de 3D-wereld. Zoals eerder al vermeld kan de Wii Remote dus gebruikt worden voor allerlei soorten opstellingen en experimenten. De Wii Remote heeft hierbij vooral als groot voordeel een accuraat toestel te zijn en daarbij relatief goedkoop is voor de mogelijkheden die het bezit.
34
Proces dat een beeld genereert door middel van programmeercode.
34
6.2
iPhone – iPod Touch – iPad
Afbeelding 20 - iPhone, iPod Touch & iPad - (bron: http://www.tipb.com/images/stories/2010/03/iphone_ipad_ipod_touch.png)
6.2.1 Inleiding
Iedereen kent het ondertussen wel al, de iPhone of iPod Touch, en sinds kort ook de iPad. De revolutie van Apple laat niemand links liggen, ook game developers niet. De laatste jaren zijn er heel wat applicaties voor de iPhone en/of iPod Touch ontwikkeld. Niettegenstaande de enorm gesloten cultuur van Apple en de manieren die ze aanbieden om applicaties en games te ontwikkelen, heeft dit een enorm groot succes gekend de laatste jaren. Allerlei applicaties en games werden ontwikkeld die gebruik maken van de ingebouwde motion sensor en natuurlijk ook het multi-touch scherm van deze apparaten. Deze beide technieken hebben, net zoals we zien bij de Wii, de game cultuur heel wat verandert. Het gaat zelfs zo ver dat de iPhone en iPod touch een groot marktaandeel hebben in de wereld van het mobiel gamen!
6.2.2 Gebruik maken van multi-touch en de motion sensor
Om applicaties voor de iPhone/iPod/iPad te ontwikkelen moet je de iPhone SDK35 downloaden van de site van Apple. Het schrijven van applicaties zelf gebeurt in Objective-C. Indien je deze taal niet meester bent bestaan er wel programma’s die code porten36 naar een andere taal. Adobe bracht met zijn Flash Professional CS5 zo’n programma uit. Jammer genoeg heeft Apple nu beslist dat er geen dergelijke programma’s meer mogen gebruikt worden om applicaties te maken voor de App Store37 bij de release van het iPhone OS 4.0.
35
Software Development Kit: omgeving met programma’s en klassen om applicaties specifiek voor een bepaald apparaat te ontwikkelen.
36
Omzetten van ene programmeer taal naar een andere.
37
Online winkel voor het kopen en publiceren van applicaties voor producten van Apple. Beschikbaar in iTunes.
35
6.3
Project Natal (XBOX 360)
Afbeelding 21 - Project Natal logo - (bron: http://www.youtube.com/xboxprojectnatal#p/u/1/_UzcnTYqc4)
6.3.1 Wat is Project Natal?
Project Natal is een project ontwikkeld door Microsoft dat je toelaat games en applicaties op de XBOX 360 te besturen zonder gebruik te maken van een controller. De manier zoals ze het nu voorstellen op de website maakt dit concept echt revolutionair. De gebruikte technieken laten ons toe het lichaam van de avatar binnen het game volledig te besturen met ons eigen lichaam, en dit in een 3D-wereld. Ook spraakcommando’s mogen niet in deze lijst ontbreken, deze worden op een naturelle manier geïntegreerd binnen de volledige beleving van het spel. Project Natal werd voor het eerst aangekondigd op de E338 beurs in 2009. Op deze beurs worden alle nieuwe snufjes in verband met games tentoongesteld. Op de E3 beurs in Los Angeles werden een paar demo’s tentoongesteld. Een eerste demo, genaamd ‘ricochet’, is een spel waarbij je je hele lichaam gebruikt om in een 3Dwereld blokken kapot te maken door middel van het terugtrappen en gooien van ballen. Een tweede demo die voorgesteld werd was schilderapplicatie waarmee je virtueel een doek kon beschilderen door gebruik te maken van je handen en door je lichaam te bewegen. Voor deze technische demo’s verwijs ik u graag door naar volgende website: http://www.xbox.com/en-US/live/projectnatal/ De release van Project Natal staat gepland rond kerstmis 2010. Natal betekent immers kerstmis in het Portugees. Er gaan ook geruchten dat er een nieuwe XBOX 360 zal uitkomen op dezelfde dag waarbij dat Project Natal gereleased wordt. Een volledig nieuwe versie zal dit waarschijnlijk niet zijn, maar misschien komt er een design versie uit die gelinkt wordt aan Project Natal.
38
Electronic entertainment expo
36
6.4
Plastation 3 Move
Afbeelding 22 - Playstation Move logo - (bron: http://www.gamemania.be/Portals/0/PlayStation%20Move%20logo.jpg)
6.4.1 Wat is de Playstation Move en hoe werkt die?
Playstation Move is een bewegingsgevoelige controller ontwikkeld door Sony voor de Playstation 3. De Playstation Move bestaat uit twee controllers. Eentje dient voor het navigeren, de andere om bewegingen te detecteren. Op een van die controllers is een bolvormige RGB lamp of led geplaatst. De kleuren die voortkomen uit deze bol worden door de Playstation Eye webcam gelezen en zo kan de plaats van de controller bepaald worden in de ruimte. De afstand tot de webcam wordt berekend door de grootte van de lichtbol die waargenomen wordt door de webcam. Door deze lichtbol te gebruiken als maatstaf is het mogelijk om de positie in een 3D-wereld enorm precies en met een lage foutmarge te detecteren. In diezelfde controller zit ook een accelerometer ingebouwd om diverse bewegingen en gestures te kunnen waarnemen. Deze controller bevat ook een gyroscoop die de hoek waaronder de Playstation Move gehouden wordt, meet. Ook is er een magnetometer ingebouwd die de oorspronkelijke houding ten opzichte van het magnetische veld op de aarde bijhoudt, en zo ook plotse veranderingen in de data van de andere sensoren tegengaat.
De navigatie controller dient vooral als extra hulp bij de Playstation Move en bij het navigeren door menu’s. Afbeelding 23 - Playstation Move rechts, navigatie controller links - (bron: http://upload.wikimedia.org/wikipedia/en/3/3a/PlayStation_Move_Final_Design.png)
De Playstation Move werd voor het eerst voorgesteld op de E3 beurs in 2009. De verwachte release datum valt ergens in het derde of vierde kwartaal van 2010.
37
6.5
Microsoft Surface
Afbeelding 24 - Microsoft Surface - (bron: http://www.fahad.com/pics/microsoft_surface.jpg)
6.5.1 Wat is de Microsoft Surface?
Microsoft Surface is een multi-touch project dat gebruikers toelaat via gestures en voorwerpen te communiceren met een virtuele wereld. Microsoft Surface zelf bestaat uit een 360° oppervlak dat door vijf infrarood camera’s in de gaten gehouden wordt en elke beweging registreert. Een projector zorgt voor het tonen van het beeldmateriaal. Het oppervlak zelf is zodanig gemaakt dat het tot 52 aanraakpunten tegelijk kan registreren en interpreteren. Microsoft Surface is ook in staat om barcodes te lezen en zo bijvoorbeeld extra informatie te geven bij het product dat op deze tafel staat. Microsoft Surface wordt vooral gebruikt in winkels, restaurants en hotels. Zo is het bijvoorbeeld mogelijk om in een hotel je volledige vakantie te plannen via de Surface en ook direct via een kaartlezer je reis te betalen.
6.5.2 Mogelijkheden
Microsoft Surface biedt de gebruiker vier grote mogelijkheden. Ten eerste hebben we de directe interactie, die de gebruiker toelaat met een vinger taken uit te voeren. Als tweede is er de multi-touch ervaring die je toelaat om met meerdere vingers tegelijk actie te ondernemen. Het is ook mogelijk om de tafel te bedienen met meerdere personen tegelijk en daarbij ook objecten te gebruiken. Een voorbeeld bij het gebruiken van objecten, is een paint applicatie waarbij je een echte borstel gebruikt om te schilderen. Dit laat de gebruiker toe om op een realistische manier om te gaan met Microsoft Surface, zonder behulp van speciaal materiaal. Zo kan je bijvoorbeeld ook een bestand letterlijk naar de andere kant van de tafel schuiven of gooien naar een medegebruiker.
38
Het herkennen van voorwerpen wordt mogelijk gemaakt door een 850 nanometer infrarood led lichtbron die zich op het oppervlak richt. Wanneer het scherm wordt aangeraakt of een object op het scherm wordt geplaatst, worden de infrarood stralen teruggekaatst richting de camera’s en kan zo de beweging van het object bijgehouden worden. De Microsoft Surface wordt standaard met een paar leuke applicaties geleverd. Een van de applicaties laat je toe om je muziekbibliotheek te bedienen via multi-touch, door je foto’s te bladeren, video’s te bekijken enz. Microsoft Surface werd reeds in 2008 uitgebracht. Momenteel kan dit speelgoed gekocht worden voor een prijs tussen de 5000 en 10000 euro. Deze prijzen zullen waarschijnlijk zakken wanneer er eind 2010 ook producten voor consumenten op de markt komen.
39
7
Praktijk
7.1
WiiFlash
7.1.1 Inleiding
Een veel gebruikte library in de wereld van Wii gestures is WiiFlash. Deze library is geschreven in Actionscript 3.0 en biedt de programmeur de mogelijkheid om de Wii Remote te gebruiken als apparaat om applicaties mee te besturen die gemaakt zijn in Flash Professional CS4 of Flex Builder 3. Wanneer je de library downloadt op http://wiiflash.googlecode.com/files/WiiFlash%200.4.5.zip krijg je een zip bestand waarin de WiiFlash Server zich bevindt, dit zowel voor pc als Mac. Bijhorende WiiFlash API bronbestanden en .swc39 file zitten in een afzonderlijke map. Ook worden er een paar voorbeelden meegeleverd alsook een map met documentatie.
7.1.2 WiiFlash Server en de connectie van de Wii Remote
Om de Wii Remote te kunnen gebruiken in een Flash of Flex applicatie is het nodig om deze via Bluetooth met de computer te verbinden. WiiFlash Server zorgt er dan voor dat de data tussen de Wii Remote en de applicatie gelezen wordt. De connectie van de Wii Remote gaat als volgt:
Stap 1: Open een Bluetooth programma naar keuze en zoek naar apparaten. Stap 2: Houd de 1- en 2- knop op de Wii Remote ingedrukt tot dat deze herkend wordt. Stap 3: Laat de knoppen los wanneer een apparaat in de lijst verschijnt met volgende naam: Nintendo RVL-CNT-01 Stap 4: Wanneer de Wii Remote gevonden is selecteer je die en ga je naar de volgende stap.
39
Een .swc bestand is een archiefbestand, net als een .zip of .rar bestand. Het is een verzameling van bestanden en gebruikt worden voor ontwikkeling in Flex Builder 3 en Flash Professional CS4. Je kan er ook naar verwijzen als klassenbibliotheek.
40
Stap 5: Vervolgens wordt er gevraagd om een eventuele paringscode in te voeren. Hierbij kiezen we om de Wii Remote te koppelen zonder code, mits er geen numeriek toetsenbord aanwezig is op de Wii Remote. Stap 6: Wanneer de Wii Remote succesvol verbonden is zou het eerste lichtje van de Wii Remote moeten branden. Stap 7: Start nu de WiiFlash Server op, indien alles goed verlopen is zou nu de Wii Remote moeten trillen en zichtbaar zijn in de WiiFlash Server applicatie.
7.1.3 Hoe WiiFlash gebruiken?
Structuur Deze WiiFlash library heeft drie grote packages waarin verschillende klassen genest zijn. Deze zijn: Org.wiiflash Org.wiiflash.events Org.wiiflash.utils
Org.wiiflash bevat vooral de core van de WiiFlash API40 klasses. Onder deze core verstaan we vooral de Wii Remote klasse, Buttontype, IR, etc. Het events package bevat dan weer alle events nodig om de objecten dynamisch te kunnen aanspreken. Deze package bevat volgende klassen: ButtonEvent PeakEvent WiimoteEvent
Verder hebben we nog een laatste package, de utils package. Die bevat één enkele klasse die de pieken registreert vanuit de data van de Wii Remote. Dit zal vooral enorm handig zijn om gestures te gaan herkennen uit de data die de Wii Remote uitzendt.
Aanmaak Wii Remote object Eerst en vooral moeten de nodige klassen geïmporteerd worden, en een Wii Remote object worden aangemaakt. Na het initialiseren van het Wii Remote object moet de connectie gelegd worden tussen de WiiFlash server en de Actionscript klasse. Dit kan heel eenvoudig met volgende code:
40
Application Programming Interface – omgeving bestaande uit klassen die het mogelijk maken om nieuwe applicaties te bouwen.
41
import org.wiiflash.Wiimote; private var wiimote:Wiimote; public function init():void { wiimote = new Wiimote(); wiimote.addEventListener( Event.CONNECT, connectHandler ); wiimote.connect(); } private function connectHandler( evt:Event ):void { trace( "Wiimote is connected" ); } Codevoorbeeld 4 - Hoe connecteer ik de Wii Remote?
Wanneer het Wii Remote object is aangemaakt kan alle data afkomstig van de Wii Remote gelezen worden met volgende functie: this.addEventListener( Event.ENTER_FRAME, enterFrameHandler ); private function enterFrameHandler( evt:Event ):void { trace( wiimote.sensorX ); trace( wiimote.roll ); } Codevoorbeeld 5 - Geüpdate data uit Wii Remote halen.
Een andere manier om de geüpdate data van de Wii Remote te verkijgen is door gebruik te maken van het Wii Remote UpdateEvent. Hierbij een belangrijke opmerking. Wanneer je deze manier gebruikt dan wordt de data doorgestuurd aan 100Hz, dit wil dus zeggen dat er 100 pakketten data verstuurd worden per seconde. Het is dus enorm belangrijk te weten hoe je data later zal verwerkt worden en daar dus van in het begin rekening mee te houden. Een verkeerd gebruik van deze updatehandler kan leiden tot data die niet meer bruikbaar is voor bepaalde doelen. Indien je toch deze methode wil gebruiken, kan je deze Actionscript code gebruiken: wiimote.addEventListener( WiiMoteEvent.UPDATE, wiimoteUpdateHandler ); private function wiimoteUpdateHandler( wevt:WiiMoteEvent ):void { trace( wiimote.sensorX ); trace( wiimote.roll ); } Codevoorbeeld 6 - Let op bij het gebruik van het WiiMote Update Event!
42
Gebruik maken van de Wii Remote data De accelerometer die ingebouwd is in de Wii Remote meet g-krachten41. De Wii Remote zelf kan g-krachten meten van -3.6g tot + 3.6g. Om van deze krachten effectief gebruik te maken, passen we een paar filters toe op deze inkomende data. Eerst en vooral kijken we of de Wii Remote wel degelijk in beweging is. Wanneer de Wii Remote niet in beweging is zullen de sensorX, sensorY en sensorZ waarden -1 of +1 bedragen. Met de volgende code kunnen we dus bepalen of de Wii Remote in beweging is of niet. private const THRESHOLD:Number = 1.01; private function wiimoteUpdateHandler( evt:WiimoteEvent ):void { _x = evt.target.sensorX; _y = evt.target.sensorY; _z = evt.target.sensorZ; var euLength:Number; /* check for "NO MOTION" */ euLength = Math.sqrt( _x*_x + _y*_y + _z*_z ); /** set Force Feedback - for positiv direction **/ wiimote.rumble = ( _x>3 || _y>3 || _z>3 ); if(euLength>THRESHOLD){ trace(‘motion’); } } Codevoorbeeld 7 - Kijken of de Wii Remote bewogen wordt. (Martens, 2009)
Niet alleen de sensorX, sensorY en sensorZ waarden kunnen gebruikt worden om gestures te herkennen, ook de ‘roll’ en ‘yaw’ properties kunnen aangesproken worden. Deze twee properties worden beide in radialen uitgedrukt en dienen om de hoek te bepalen waarin de Wii Remote zich bevindt. De ruwe data die uit de Wii Remote voortvloeit, is zeer precies en moet voor verder gebruik afgevlakt worden. Dit afvlakken gebeurt door de data door een lowpass filter te sturen. In Actionscript 3.0 ziet een dergelijke filter er zo uit:
41
Gravitatie of zwaartekracht: aantrekkende krachten die twee massa’s op elkaar uitoefenen.
43
/* const for filtering values */ private const FILTER_FACTOR:Number = 0.1; /* high pass filter */ private function highPassFilter( oldValue:Number, value:Number ):Number{ return value - lowPassFilter( oldValue, value ); } /* low pass filter */ private function lowPassFilter( oldValue:Number, value:Number ):Number{ return value * FILTER_FACTOR + oldValue * (1.0 - FILTER_FACTOR ); } private function wiimoteUpdateHandler( evt:WiimoteEvent ):void{ _x = this.lowPassFilter( _x, evt.target.sensorX ); _y = this.lowPassFilter( _y, evt.target.sensorY ); _z = this.lowPassFilter( _z, evt.target.sensorZ ); /* do something with the data */ } Codevoorbeeld 8 - High- en Lowpass filter. (Martens, 2009)
Wanneer deze afgevlakte data beschikbaar is kunnen we overgaan tot het detecteren van gestures. Een relatief simpele gesture is het snel van links naar rechts bewegen van de Wii Remote. Om een dergelijke gesture te herkennen is het vereist om de pieken in de data te gaan detecteren. Sebastian Martens42 heeft voor dit probleem een klasse geschreven die gebruik maakt van de Wii Remote data. Ten eerste moet de constructor43 gedefinieerd worden.
42
http://blog.sebastian-martens.de/
43
Functie die allereerst uitgevoerd wordt bij het aanspreken van de klasse.
44
public class PeakDetect { private var _history:Vector.
; private var _historyLength:int; private var _kernelLength:int; private var _peakFactor:Number; private var _lastPeak:Boolean; /** * @constructor * @param kernelLength Number of values which represent the actual motion * @param historyLength Number of values which are taken as history of motion * @param peakFactor If distance between history and actual motion greater than this value motion is detected * */ public function PeakDetect( kernelLength:int=2, historyLength:int=32, peakFactor:Number=0.2 ){ var i:int; _history = new Vector.(); _kernelLength = kernelLength; _historyLength = historyLength; _peakFactor = peakFactor; _lastPeak = false; // init with 0 for(i=0;i<_historyLength;i++){ _history[i] = 0; } } Codevoorbeeld 9 - Klasse voor het detecteren van pieken in de data. (Martens, 2009)
Vervolgens worden de overeenkomsten berekend tussen de waarden in de array: /** * @param startIndex to get avarage value from the history list */ private function _getIntersection( startIndex:int, length:int ):Number{ var i:int; var mValue:Number=0; for(i=startIndex;(i<(startIndex+length)&&i<_historyLength);i++){ mValue += _history[i]; } return (mValue/length); } Codevoorbeeld 10 - Geeft percentage overeenkomende waarden terug. (Martens, 2009)
45
Nadat deze functie is uitgevoerd moet er nagegaan worden of er een piek in de waarden is gedetecteerd. Dit kan eenvoudig berekend worden met de volgende functie: private function _checkForPeak():Number { var pValue:Number; var aValue:Number; var peakVal:Number; var multiPl:int; pValue = _getIntersection(0,_historyLength); aValue = _getIntersection( _historyLength-_kernelLength, _kernelLength ); if( aValue>0 ){ peakVal = multiPl = }else{ peakVal = multiPl = }
(aValue-pValue); 1; (pValue-aValue); -1;
return ( peakVal>_peakFactor )?(peakVal*multiPl):0; } /** * Adds a new value to item history. Return true if peak is detected. * @param value Number* @return Boolean */ public function addValue( value:Number ):Number { _history.shift(); _history[ (_historyLength-1) ] = value; return this._checkForPeak(); } Codevoorbeeld 11 - Haalt de pieken uit de data. (Martens, 2009)
Wanneer de data verwerkt is kunnen we door middel van een timer gaan meten welke gesture er gemaakt wordt. Wanneer een piek gedetecteerd is start de timer, wanneer een andere piek gedetecteerd wordt tijdens het lopen van de timer, kan een gesture herkend worden, indien de volgorde van de pieken overeenkomt.
46
Wii Draught Masters
Afbeelding 25 - World Draught Masters, Stella Artois - (bron: http://vimeo.com/5277603)
Een voorbeeld dat enorm mijn aandacht trok wanneer ik het voor de eerste maal tegenkwam, is er eentje van Stella Artois. Dit maakt gebruik van de Wii Remote en bijhorende Nunchuck om een perfecte Stella Artois te tappen. De Nunchuck wordt gezien al het glas, de Wii Remote zelf als de tap of het mes dat dient om het overige schuim te verwijderen. Alle stappen om een perfecte Stella te tappen werden met een camera opgenomen, zo ook de stappen die een slecht getapte Stella opleverden. Door het bewegen van de Wii Remote en Nunchuck werden dan de verschillende beelden gebruikt om één vloeiende animatie te verkrijgen. Deze opstelling werd in een mobiele container geplaatst zodat iedereen kon testen hoe je een perfect glas bier tapt. Het is zeker de moeite waard om de video eens te bekijken!
47
7.2
Muis gerelateerde gestures
7.2.1 Inleiding
Zoals eerder al besproken zijn mouse gestures44 een veel voorkomend fenomeen binnen de internet wereld. Vaak worden deze gestures gebruikt om een site van navigatie te voorzien. Ook programma’s, zoals de browser Firefox, kunnen door middel van addons45 met mouse gestures bestuurd worden. Door dat dit eindwerk zich vooral toespitst op Flash en Actionscript 3 zal ik voor dit onderdeel de mouse gesture library46 van Didier Brun47 bespreken. Deze biedt een gemakkelijke implementatie voor het gebruik van deze gestures binnen een Flash of Flex applicatie. Deze library download je via deze link: http://www.didierbrun.com/foxaweb/demos/mousegesture/mouse_gesture_v1_0.zip
7.2.2 Hoe mouse gestures gebruiken?
De gesture library van Didier Brun is heel gemakkelijk te gebruiken. Deze API bestaat uit twee klasses, enerzijds de klasse ‘GestureEvent’, anderzijds de klasse ‘MouseGesture’. Om het gebruik en de aanmaak van de gestures beter te verstaan, krijgen we best eerst inzicht in hoe deze library werkt. Zoals eerder al vermeld, kan het herkennen van gestures op verschillende manieren gebeuren. In het geval van deze library is er gekozen voor het gebruik van de Levenshtein afstand. Om de patronen die gebruikt worden voor het aanmaken van de gestures later beter te herkennen, zijn de gestures opgedeeld in acht secties of onderdelen. Elke beweging van de muis wordt gezien als een van de onderstaande acht aangegeven richtingen.
Afbeelding 26 - Werking van mouse gestures - (bron: http://www.didierbrun.com/foxaweb/demos/mousegesture/mg_algo01.png)
44
Gestures gemaakt door middel van de muis, meestal gebruikt op een webpagina of binnen het besturingssysteem van de computer door middel van een extra geïnstalleerd programma. 45
Een extra programma of plug-in die binnen de omgeving van de browser wordt geïnstalleerd en voor extra functionaliteit zorgt. 46
Verzameling van klassen die in andere applicaties geïmplementeerd kunnen worden.
47
http://www.didierbrun.com/
48
Door deze acht richtingen is het heel gemakkelijk om nieuwe gestures aan te maken. Bij de aanmaak van een nieuwe gesture moet er telkens een string van cijfers worden meegegeven aan de de ‘addGesture()’ functie. Deze string van cijfers wordt bepaald door het aantal stappen van de gesture, en in welke richting deze worden uitgevoerd. gesture=new MouseGesture(stage); //stage = plaats waar gestures herkend worden. gesture.addGesture("B","260123401234"); gesture.addEventListener(GestureEvent.MATCH,matchHandler); Codevoorbeeld 12 - Aanmaak van nieuwe gesture.
Om bijvoorbeeld de letter B te maken zijn er twaalf cijfers nodig, dus bestaat deze gesture uit twaalf stappen. Telkens de muis beweegt wanneer de linker muisknop ingedrukt is, wordt de beweging bijgehouden. Wanneer de knop losgelaten wordt, dan kijkt de functie ‘matchGesture()’ en het Levenshtein model als een voorgedefinieerde gesture met deze overeenkomt. Indien er een overeenkomst is, dan wordt de matchHandler van de gesture uitgevoerd. function matchHandler(e:GestureEvent):void { trace (e.datas+" matched !") } Codevoorbeeld 13 - Wordt uitgevoerd wanneer een gesture herkend is.
7.2.3 Gebruikte technieken voor het meten van gestures
Zoals eerder reeds vermeld in de vorige paragraaf maakt deze library gebruik van het Levenshtein model om de gestures van elkaar te onderscheiden. In dit onderdeel gaan we dieper in op hoe dit in Actionscript 3.0 gedaan werd. Eerst en vooral moet gedefinieerd worden welke gesture er moet toegevoegd worden aan het gesture object. Dit gebeurt in de onderliggende code op deze manier: public function addGesture(o:*,gesture:String,matchHandler:Function=null):void { var g:Array=[]; for (var i:uint=0;i
In deze functie worden twee verplichte argumenten meegegeven. Het eerste argument is de naam van de gesture, het tweede bedraagt de gesture bestaande uit de cijfers nodig om die op te bouwen. Wanneer deze argumenten meegegeven zijn worden alle characters in een array geplaatst. 49
Wanneer een beweging geregistreerd wordt dan wordt deze toegevoegd aan de variabele moves via de functie addMove() . Deze variabele houdt alle bewegingen bij die de mouse heeft gemaakt gedurende het opnemen van de gesture. protected function addMove(dx:int,dy:int):void{ var angle:Number=Math.atan2(dy,dx)+sectorRad/2; if (angle<0)angle+=Math.PI*2; var no:int=Math.floor(angle/(Math.PI*2)*100); moves.push(anglesMap[no]); } Codevoorbeeld 15 - Voegt elke beweging toe aan de array. (Brun, 2009)
In deze functie wordt er telkens ook gekeken in welk kwadrant de beweging zich bevindt, om zo later te kunnen uitmaken in welke richting, en dus ook welk cijfer er moet worden aan gekoppeld. Wanneer het opnemen van de gesture begint worden er een paar belangrijke variabelen aangemaakt. protected function startCapture(e:MouseEvent):void { // moves moves=[]; points=[]; rect={ minx:Number.POSITIVE_INFINITY, maxx:Number.NEGATIVE_INFINITY, miny:Number.POSITIVE_INFINITY, maxy:Number.NEGATIVE_INFINITY}; // event dispatchEvent(new GestureEvent(GestureEvent.START_CAPTURE)) // last point lastPoint=new Point(mouseZone.mouseX,mouseZone.mouseY); // start the timer timer.start(); } Codevoorbeeld 16 - Start het opnemen van de gesture. (Brun, 2009)
Zo worden de moves bijgehouden en de punten die de muis tijdens het bewegen overloopt. Ook wordt er een rechthoek bijgehouden die een positie heeft waarbij elke waarde in het oneindige ligt.
50
Als laatste stap moet er worden gekeken als de gesture overeen komt met een van de vooraf gedefinieerde gestures. Dit gebeurt met de functie ‘matchGesture()’. protected function matchGesture():void{ var bestCost:uint=1000000; var nbGestures:uint=gestures.length; var cost:uint; var gest:Array; var bestGesture:Object=null; var infos:Object={points:points, moves:moves,lastPoint:lastPoint, rect:new Rectangle(rect.minx,rect.miny,rect.maxx-rect.minx,rect.maxyrect.miny)}; for (var i:uint=0;i
Deze maakt gebruik van de Levenshtein afstand om te berekenen of de gesture wel degelijk overeen komt met de gemaakte gesture. Hierbij wordt er voor elke gemaakte beweging gekeken hoe groot het verschil is met de oorspronkelijke beweging. Wanneer deze kleiner is dan de toegelaten afwijking, wordt er overgegaan tot het toewijzen van de gesture. Indien de variabele ‘bestGesture’ niet gelijk is aan null dan werd de gesture herkend.
51
8
8.1
WOW project
Inleiding
Afbeelding 27 - Logo Astro Quest - (bron: Astro Quest)
“Astro Quest, een spel dat de wereld van de ondergang moet redden!”
Om dit onderzoek naar het gebruik van Wii gestures kracht bij te zetten en natuurlijk ook een praktische uitwerking te hebben, werk ik samen met met Joachim Coppens een spel uit dat zowel physics gebruikt als speelbaar is met de Wii Remote en muis. Omdat het onderzoek naar physics en de Wii gestures voor één persoon te belastend is en quasi niet haalbaar zou zijn, hebben Joachim en ik besloten samen te werken. Joachim staat in voor het schrijven van de games met bijhorende physics, ikzelf zal de implementatie van de Wii Remote verzorgen. Om deze twee aspecten van het game tot één geheel samen te krijgen hebben we besloten om een 3D-wereld van planeten te maken waarbij elke planeet een game voorstelt. Deze wereld noemen we de hub. Deze hub zal volledig in Actionscript 3.0 en in samenwerking met Papervision3D48 opgebouwd worden. Oorspronkelijk was voorzien dat ik de volledige hub voor mijn rekening zou nemen, maar wegens de nogal grote omvang hebben we beslist om dit samen te realiseren. De samenwerking heeft ook vele voordelen, en dit niet alleen op vlak van werkdruk. Zo kan je met twee personen de ideeën beter uitwerken en steun je elkaar doorheen het hele productieproces. Door de combinatie van deze twee technologieën hopen we een eindproduct af te leveren dat zowel leuk is om te spelen, als de kracht van deze twee technieken toont en ondersteunt.
48
http://blog.papervision3d.org
52
8.2
Concept en opbouw Om het spel visueel aantrekkelijk te maken hebben we besloten een algemene wereld te bouwen waar het zonnestelsel centraal staat. In het midden van dit zonnestelsel bevindt zich een zwart gat dat alle planeten opzuigt. Nu is het de bedoeling om al deze planeten, en dus onze hele beschaving, van de ondergang te redden! Door het spelen van vier minigames, telkens gebaseerd op physics en Wii controls, kan je verhinderen dat het volledige zonnestelsel in het zwarte gat wordt gezogen. Voor het maken van de vier minigames blijven we echter bij een 2D-aanpak. Na onderzoek van Joachim bleek dat de engines die voor een 3D-simulatie zorgen, net iets te complex zijn om in ons project in te bouwen. Bij het uitspelen van elk minigame krijg je een puzzelstuk die een onderdeel van een zwaartekrachtmachine voorstelt. Als je alle levels succesvol doorlopen hebt, en na het uitschakelen van het oppermachtige zwarte gat, krijg je een puzzel voorgeschoteld waarbij je de machine terug in elkaar moet steken. Breng je deze taak binnen een bepaalde tijd tot een goed einde dan worden alle negatieve zwaartekrachten geneutraliseerd en vernietigt het zwarte gat zichzelf.
8.3
Gebruik van de Wii Remote Het hoofddoel van deze praktische uitwerking is om de mogelijkheden van een Wii Remote binnen interactieve games en Actionscript 3.0 te laten zien. Tijdens vele brainstormsessies rond het maken van de games, en welke technieken er gebruikt zouden worden, hebben we telkens bedacht welke soort gestures we kunnen gebruiken bij welke actie. Uit voorafgaand onderzoek in deze bachelorproef blijkt dat het maken en implementeren van gestures door middel van Actionscript 3.0 nogal wiskundig in elkaar zit. Met dat opzicht in het achterhoofd bepaalden we welke gestures haalbaar zijn en welke bewegingen passen bij een bepaalde actie. Voor elk van de games hebben we een korte lijst opgesteld die weergeeft welke technieken bruikbaar zijn en hoe deze juist vertaald zullen worden naar Actionscript 3.0 in samenwerking met WiiFlash.
53
8.4
Implementatie van gestures Na grondig onderzoek heb ik beslist om waar mogelijk de gestures zelf te programmeren. Voor de overige gestures baseer ik mij op de bestaande mouse gesture library van Didier Brun49. Eerst en vooral breid ik de huidige mouse gesture library uit met een klasse die pieken in de data komende van de Wii Remote detecteert. Dit is vooral handig om zo onnodige data uit de datastroom te filteren. Na het filteren van deze data gaan we over tot het detecteren of de Wii Remote in beweging is of niet. Indien we niet zouden detecteren of er beweging is, bestaat de kans dat de gestures slecht herkend worden en zo een foute waarde teruggeven aan het spel. Om de Wii Remote als aanwijzer te kunnen gebruiken binnen de hub en in sommige games heb ik er uiteindelijk toch voor gekozen om de Wii Sensorbar te implementeren. Deze implementatie maakt het gemakkelijker om de positie van de Wii Remote ten opzichte van het scherm te bepalen.
8.4.1 Gebruikte technieken
Bij elk spel gaan we uit van de bestaande ontwikkelde mouse controls en kijken we welke gestures of bewegingen bij deze controls passen. Eenmaal we dit stadium voorbij zijn gaan we ook na of we geen passende gesture kunnen inbouwen die ook iets met de ruimte en planeten te maken heeft. In onderstaande tekst geven we een kort overzicht van welke gestures bij welk game gebruikt zullen worden en hoe ik dit ga realiseren. Dropzone Bij het spel dropzone is het de bedoeling dat pakketjes uit het ruimteschip gedropt worden in een bepaalde zone van het spel. Om dit gameconcept met de Wii Remote te realiseren hadden we het idee om bij dit game een basisnavigatie te voorzien die het ruimteschip van links naar rechts, en omgekeerd, doet bewegen. Dit realiseren is een hele opgave omdat eerst het systeem van de Sensorbar gekend moet zijn. Na onderzoek blijkt de Sensorbar niets meer te zijn dan vier ledjes die infrarood licht uitstralen. De Afbeelding 28 - Screenshot Dropzone béta versie - (bron: Astro Quest) Wii Remote vangt deze op en geeft een bepaalde waarde terug. Deze waarde staat gelijk aan de hoeveelheid infrarood licht de Wii Remote bereikt heeft (afstand tot aan de Sensorbar) en welke led in de Wii Remote dit opgevangen heeft. Door het gebruik van deze techniek kan je het ruimteschip van links naar rechts laten bewegen.
49
http://www.didierbrun.com
54
Bij het droppen van een pakket is het besturen een pak eenvoudiger. Door de B-knop achteraan de Wii Remote in te drukken laat je een pakketje naar beneden vallen. Bij dit game hebben we ook gezocht naar een alternatieve besturing van het ruimteschip. Hierbij gebruiken we de Nunchuck die gekoppeld is aan de Wii Remote. Deze Nunchuck heeft een joystick die zich perfect leent tot het bewegen van een voorwerp in een bepaalde ruimte.
Black hole golfing Bij black hole golfing is het de bedoeling met een zwaartekrachtmachine balletjes af te vuren en deze zodanig rond de planeten te krullen dat ze in het zwarte gat terecht komen. Hoe langer het balletje er over doet, hoe meer punten je krijgt. Dit is de eindfase van het Astro Quest spel waarbij je het zwarte gat moet verslaan. De controls bij black hole golfing zijn iets ingewikkelder dan de voorgaande. Hier komt heel wat meer wiskunde en piekdetectie bij Afbeelding 29 - Screenshot Black hole kijken. Voor het richten van het balletjeskanon golfing béta versie - (bron: Astro Quest) maak ik gebruik van de roll functie van de Wii Remote. Door de Wii Remote horizontaal te kantelen krijg je een waarde terug tussen -1.5 en +1.5. Deze waarde gebruik ik dan verder om een bepaalde hoek in graden te berekenen en zo dan door te geven in het spel. Om de kracht te berekenen die de zwaartekrachtmachine moet uitoefenen om een balletje weg te schieten maak ik gebruik van de ingebouwde accelerometer. Deze meet g-krachten tussen -3.6 en +3.6. Door middel van de piekdetectie filter die ik reeds opgebouwd heb, ga ik na wat de maximale waarde is die de Wii Remote behaalt binnen één bepaalde beweging. Deze beweging kan bijvoorbeeld een golfbeweging zijn of met de Wii Remote van je wegslaan. Hoe sneller je deze beweging uitvoert, hoe harder het balletje gelanceerd zal worden.
55
Meteor shield Bij meteor shield is het de bedoeling dat je meteoren die willekeurig op je planeet afkomen, afkaatst via een schild. Hoe meer meteoren je tegenhoudt, des te meer punten je krijgt. Hoe langer je het volhoudt, hoe meer meteoren er op je af komen. Voor het spelen van dit spel met de Wii Remote hebben we gekozen voor een nogal excentrieke manier. Door Wii Remote snel in een cirkel te bewegen laten we het schild rond de planeet Afbeelding 30 - Screenshot Meteor Shield draaien om op die manier zoveel mogelijk béta versie - (bron: Astro Quest) meteoren af te kaatsen. Om dit te realiseren gaan we terug na wat de pieken zijn in zowel de x- als de y-as. Uit deze data kunnen we uiteindelijk afleiden in welke richting de Wii Remote beweegt door telkens een array op te stellen met de informatie. Indien de Wii Remote bijvoorbeeld van boven naar rechts beweegt in het eerste kwadrant, dan kan je uit de data afleiden dat de er een positieve piek is op de x-as en een geleidelijk negatieve op de y-as. Een alternatieve manier van besturen zou zijn om terug de Nunchuck te gebruiken en snelle cirkels met de joystick te maken. Power core
Afbeelding 31 - Screenshot Power Core alfa versie - (bron: Astro Quest)
Dit spel speelt zich af in een fabriek waar de energieniveaus van de zwaartekrachtmachine uit balans zijn. Het is aan jou om deze terug op pijl te brengen door in de juiste tank blokjes te laten vallen. Een moeilijkheid, er zijn onderweg obstakels die dit verhinderen. Bewegende platformen maken het des te moeilijker om het blokje in de juiste tank te krijgen. Wanneer een blokje in de verkeerde tank terechtkomt wordt de waarde van de tank verminderd met die van het voorwerp. Hoe langer het duurt om een blokje in een tank te plaatsen, hoe minder energie er bij de tank geteld wordt.
Voor de besturing van power core hebben we gekozen voor een manier die tot de verbeelding spreekt. Om een bepaald soort blokje te laten vallen, moet je het gewoon in de lucht tekenen. Door hierbij de data van de accelerometer en de omgebouwde mouse gesture library van Didier Brun te gebruiken, kunnen we heel simpel vormen herkennen. Wanneer het object is herkend blijft dezelfde op dezelfde plaats als de Wii Remote pointer. Om het blokje te laten vallen volstaat het om de A-knop van de Wii Remote in te drukken.
56
8.4.2 Hoe game controls aan gestures koppelen?
Heel belangrijk binnen een spel is dat de juiste gestures en bewegingen aan het juiste spel gekoppeld worden. Om dit probleem op te lossen gaan we, wanneer de spellen volledig op punt staan, een globale klasse schrijven die nagaat in welk spel we zitten. In deze klasse zullen functies geplaatst worden die de globale Wii Remote data verwerkt tot data die bruikbaar is binnen een bepaald spel.
8.4.3 Problemen
De problemen die ik tot nog toe vooral tegengekomen ben is het begrijpen van de vele wiskundige modellen die gesture libraries gebruiken. Dit heb ik zoveel mogelijk trachten op te lossen door deze modellen te bespreken in deze bachelorproef en extra onderzoek uit te voeren. Ook heb ik geprobeerd zoveel mogelijk van de code te begrijpen door er kleine aanpassingen in te maken om zo de werking te achterhalen. Op dit moment snap ik alle principes maar blijft het moeilijk om deze in code om te zetten. Om dit probleem op te lossen baseer ik me niet alleen op de Actionscript 3.0 libraries, maar ook op bijvoorbeeld WiiGee50 dat in Java geschreven is. Een ander groot probleem, waar ik tot op heden nog geen oplossing voor vond, stelt zich bij het aansluiten van de Wii Remote aan de computer via Bluetooth. Om een goede workflow te hebben zou het handig zijn dat telkens wanneer ik Windows 7 opstart, hij de Wii Remote automatisch herkent. Dit is op dit moment totaal het geval niet. Telkens ik de Wii Remote wil aansluiten moet ik deze eerst verwijderen uit de opgeslagen Bluetooth apparaten, waarna ik deze opnieuw moet koppelen. Dit is enorm tijdrovend, zeker wanneer je snel iets wil testen. Ik blijf naar een geschikte oplossing zoeken.
8.4.4 Conclusie
Na het onderzoek over het gebruik van de Wii Remote bij het maken van gestures en gebruik in een game, kom ik vooral tot de conclusie dat dit veel inzicht vraagt in de wereld van de wiskunde. Dit is niet onoverkomelijk dus proberen we hier zoveel als mogelijk aan te werken. Het gebruik van WiiFlash bij het opvangen van Wii Remote data is een fluitje van een cent. De bibliotheek zit goed in elkaar en met een minimum aan code heb je al snel resultaat.
50
http://www.wiigee.org
57
9
Besluit
Hidden Markov Model, Dynamic Time Warping en het Levenshtein model, het zijn allemaal begrippen die je in de wereld van de gesture recognition vaak tegenkomt. Mijn conclusie rond deze modellen is dat sommige, zoals het HMM, enorm wiskundig zijn en vaak te ingewikkeld voor simpele toepassingen. Hierbij denken we dan vooral aan het herkennen van gestures met de Wii Remote. Een goede manier om deze modellen te begrijpen en onder de knie te krijgen is het bekijken en aanpassen van programmeercode, in welke taal dan ook. In dit opzicht is de mouse gesture library van Didier Brun een goed startpunt. Deze biedt een goede uitwerking van het Levenshtein model in Actionscript 3.0. Dit Levenshtein model blijkt na dit onderzoek het meeste geschikt om gestures met de Wii Remote te herkennen. Om deze gestures uiteindelijk in games te verwerken is een duidelijk stramien en stappenplan vereist. Bij elke actie ga je best eerst na of de bestaande libraries een oplossing bieden of je een eigen methodiek moet gaan uitdenken. Een van de belangrijkste voordelen van de Wii Remote is dat hij relatief goedkoop is voor de mogelijkheden die hij biedt. Er zijn tal van voorbeelden op het web te vinden die deze Wii Remote gebruiken voor toepassingen die soms enorm duur zijn om aan te kopen, maar toch op een kwalitatieve manier werken. Denk maar aan een whiteboard. Als algemeen besluit kunnen we dus stellen dat het ontwikkelen van gestures niet over een nacht ijs gaat. Het vraagt redelijk wat inzicht in de wiskunde in combinatie met doordacht gebruik van apparaten zoals een accelerometer. Toch raad ik iedereen aan die een beetje kennis heeft van programmeren aan de slag te gaan met de Wii Remote en zo de wondere wereld van de gestures te ontdekken!
58
10 Lijst van figuren en tabellen
Afbeelding 1 – Vredessymbool - (bron: http://www.bodylanguageuniversity.com/public/images/170.jpg) .............................. 10 Afbeelding 2 - Analoge accelerometer - (bron: http://www.vexrobotics.com/media/catalog/product/cache/11/image/296x/5e06319ed a06f020e43594a9c230972d/a/c/accelerometer-c.jpg) ................................................ 13 Afbeelding 3 - MEMS accelerometer - (bron: http://openlearn.open.ac.uk/file.php/3071/T207_1_032i.jpg) ................................... 14 Afbeelding 4 - Array van infrarode LEDs met bijhorende Wii Remote - (bron: http://www.eblackwelder.com/projects/curb-appeal/images/led_array.jpg) ............... 16 Afbeelding 5 - Herkennen van patronen d.m.v. camera's (bron: ) ............................... 18 Afbeelding 6 - Stappen voor het herkennen van gestures (bron: http://www.wiigee.org/download_files/gesture_recognition_with_a_wii_controllerschloemer_poppinga_henze_boll.pdf) ......................................................................... 20 Afbeelding 7 - Mouse gesture applicatie in Actionscript 3.0 - (bron: http://marc.virtuallypreinstalled.com/SimpleGesture) ............................................... 21 Afbeelding 8 - Finger tracking met Wii Remote - (bron: http://www.youtube.com/watch?v=0awjPUkBXOU) ................................................ 21 Afbeelding 9 - Whiteboard gestuurd door Wii Remote en infrarood pen - (bron: http://www.youtube.com/watch?v=5s5EvhHy7eQ) .................................................. 22 Afbeelding 10 - Lasergestures - (bron: http://ashishrd.blogspot.com/2006/12/gesturerecognition-using-webcam-and.html) ......................................................................... 22 Afbeelding 11 - Hidden Markov Chain - (bron: http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/HMMGraph.svg/708px -HMMGraph.svg.png) ................................................................................................ 25 Afbeelding 12 - Berekening van Levenstein afstand - (bron: http://www.merriampark.com/ld.htm) ...................................................................... 26 Afbeelding 13 - Dynamic Time Warping grid - (bron: http://web.science.mq.edu.au/~cassidy/comp449/html/dtw.gif) ................................ 28 Afbeelding 14 – Nunchuck links, Wii Remote rechts - (bron:http://wallpapersdiq.org/wallpapers/21/Wii_Remote_%28Wiimote%29_and_Wii_Nunchuck.jpg) ...... 31 Afbeelding 15 - Wii Classic Controller - (bron: http://www.excheap.com/images/WJDSB-Wii-classic-controller-752.jpg) .......................................................................... 32 Afbeelding 16 - Wii Zapper & Wii Wheel - (bronnen: http://www.consoleshop.nl/images/product/56393/nintendo-wii-zapper.jpg & http://www.gamecyte.com/wp-content/uploads/2008/09/wii-wheel.jpg) .................. 32 Afbeelding 17 - Wii Remote met MotionPlus - (bron: http://www.techgadgets.in/images/nintendo-wii-motionplus-accessory.jpg) .............. 33 59
Afbeelding 18 - Wii Kart - (bron: http://www.youtube.com/watch?v=BA6G2K6jwTA) ................................................ 34 Afbeelding 19 - Head tracking with the Wii Remote - (bron: http://www.youtube.com/watch?v=Jd3-eiid-Uw) ...................................................... 34 Afbeelding 20 - iPhone, iPod Touch & iPad - (bron: http://www.tipb.com/images/stories/2010/03/iphone_ipad_ipod_touch.png) ........... 35 Afbeelding 21 - Project Natal logo - (bron: http://www.youtube.com/xboxprojectnatal#p/u/1/-_UzcnTYqc4) ............................ 36 Afbeelding 22 - Playstation Move logo - (bron: http://www.gamemania.be/Portals/0/PlayStation%20Move%20logo.jpg)................... 37 Afbeelding 23 - Playstation Move rechts, navigatie controller links - (bron: http://upload.wikimedia.org/wikipedia/en/3/3a/PlayStation_Move_Final_Design.png) ................................................................................................................................... 37 Afbeelding 24 - Microsoft Surface - (bron: http://www.fahad.com/pics/microsoft_surface.jpg) .................................................... 38 Afbeelding 25 - World Draught Masters, Stella Artois - (bron: http://vimeo.com/5277603) ....................................................................................... 47 Afbeelding 26 - Werking van mouse gestures - (bron: http://www.didierbrun.com/foxaweb/demos/mousegesture/mg_algo01.png) ............ 48 Afbeelding 27 - Logo Astro Quest - (bron: Astro Quest)............................................ 52 Afbeelding 28 - Screenshot Dropzone béta versie - (bron: Astro Quest) .................... 54 Afbeelding 29 - Screenshot Black hole golfing béta versie - (bron: Astro Quest) ........ 55 Afbeelding 30 - Screenshot Meteor Shield béta versie - (bron: Astro Quest) .............. 56 Afbeelding 31 - Screenshot Power Core alfa versie - (bron: Astro Quest) .................. 56
Codevoorbeeld 1 - Hidden Markov parameters - (bron: http://en.wikipedia.org/wiki/Hidden_Markov_Model) ............................................... 24 Codevoorbeeld 2 - Praktische uitwerking van het Levenshtein model in Actionscript 3.0 - (bron: mouse gesture library Didier Brun) .......................................................... 27 Codevoorbeeld 3 - Actionscript 3.0 uitwerking DTW ................................................ 29 Codevoorbeeld 4 - Hoe connecteer ik de Wii Remote? .............................................. 42 Codevoorbeeld 5 - Geüpdate data uit Wii Remote halen. .......................................... 42 Codevoorbeeld 6 - Let op bij het gebruik van het WiiMote Update Event! ................ 42 Codevoorbeeld 7 - Kijken of de Wii Remote bewogen wordt. (Martens, 2009).......... 43 Codevoorbeeld 8 - High- en Lowpass filter. (Martens, 2009) ..................................... 44 Codevoorbeeld 9 - Klasse voor het detecteren van pieken in de data. (Martens, 2009) ................................................................................................................................... 45
60
Codevoorbeeld 10 - Geeft percentage overeenkomende waarden terug. (Martens, 2009) .......................................................................................................................... 45 Codevoorbeeld 11 - Haalt de pieken uit de data. (Martens, 2009) ............................. 46 Codevoorbeeld 12 - Aanmaak van nieuwe gesture...................................................... 49 Codevoorbeeld 13 - Wordt uitgevoerd wanneer een gesture herkend is. .................... 49 Codevoorbeeld 14 - Voegt een gesture toe aan de library. (Brun, 2009)..................... 49 Codevoorbeeld 15 - Voegt elke beweging toe aan de array. (Brun, 2009)................... 50 Codevoorbeeld 16 - Start het opnemen van de gesture. (Brun, 2009) ........................ 50 Codevoorbeeld 17 - Kijkt of de gesture overeenkomt. (Brun, 2009)........................... 51
61
11 Lijst van geraadpleegde werken
Deze lijst werd telkens in een apart document handmatig aangevuld naar de APA norm en later bij deze bachelorproef bijgevoegd.
WiiFlash graffiti gestures (2008). Geraadpleegd op 27 februari 2010 via http://udon.nudoru.com/category/flash/wiiflash-flash/. Foley, J. (2008). Deskop VR from Flash – Wiimote project #3. Geraadpleegd op 27 februari 2010 via http://www.madvertices.com/2008/02/desktop-vr-from-flashwiimote-project-3.html. Wii tracking system: Gesture recognition & optical triangulation (2008). Geraadpleegd op 28 februari 2010 via http://www.youtube.com/watch?v=76sVQqd9xcA. Englund, M. (2009). Gesture recognition in GWT and IT Mill Toolki: Simple gesture. Geraadpleegd op 28 februari 2010 via http://marcenglund.blogspot.com/2009/04/gesture-recognition-in-gwt-and-itmill.html. Mouse gestures with GWT (2009). Geraadpleegd op 28 febrari 2010 via http://www.neurosoftware.ro/programming-blog/tag/gesture-recognition/. Grden, J. (2009). WiiFlash + Papervision3D. Geraadpleegd op 2 maart 2010 via http://rockonflash.wordpress.com/2007/06/01/wiiflash-papervision3d-mmm/. Muller, C. & Posner, R. (1998). The semantics and pragmatics of everyday gestures. Geraadpleegd op 3 maart 2010 via http://weidlerverlag.de/Reihen/KZKda/kzk9/kzk9.html. http://www.interactivegestures.com/index.php?title=Main_Page geraadpleegd op 7 maart 2010. Wii Remote + Flash/Flex = ? (2007). Geraadpleegd op 7 maart 2010 via http://jwopitz.wordpress.com/2007/05/10/wii-remote-flashflex/. http://www.wiigee.org/ geraadpleegd op 20 maart 2010. Richard, R. (2009). New PS3 motion control details. Geraadpleegd op 20 maart 2010 via http://tech-reviews.co.uk/news/new-ps3-motion-control-details/. http://johnnylee.net/projects/wii/. Geraadpleegd op 28 februari 2010. Geere, D. (2010). Android to get gesture recognition. Geraadpleegd op 7 april 2010 via http://www.pocket-lint.com/news/31881/android-to-get-gesture-recognition. XBOX 360 gesture recognition (2008). Geraadpleegd op 9 april via http://www.youtube.com/watch?v=Pr85EsHCz1g. Standaert, W. (2009). The portfolio of wout standaert. Geraadpleegd op 9 april via http://www.blobkat.com/index.php?pag=works&project=thesis.
62
How to do gesture recognition using accelerometers (2008). Geraadpleegd op 10 april via http://stackoverflow.com/questions/198982/how-to-do-gesture-recognition-usingaccelerometers Brunings, V., Eleuterio, C., George, L., Haars, R. Werry, C (2010). Minicollege gestural interfaces. Geraadpleegd op 13 maart 2010 via http://www.slideshare.net/krizzii/designthis-minicollege-gestural-interfaces Reiman, T. (2010). History of gestures. Geraadpleegd op 14 maart 2010 via http://www.bodylanguageuniversity.com/public/170.cfm. Hans, M., Slayden, A., Smith, M., Banerjee, B., Gupta, A. (2005). DJammer: a new digital, mobile, virtual, personal musical instrument. Geraadpleegd op 14 maart 2010 via http://www.hpl.hp.com/techreports/2005/HPL-2005-81.pdf. Cravotta, R. (2007). Recognizing gestures: Interface design beyond point-and-click. Geraadpleegd op 20 maart 2010 via http://www.edn.com/article/CA6466206.html. Derhgawen, A. (2006). Gesture recognition using webcam and laser pointer. Geraadpleegd op 22 maart 2010 via http://ashishrd.blogspot.com/2006/12/gesturerecognition-using-webcam-and.html. Gilleland, M. (2008). Levenshtein distance, in three flavors. Geraadpleegd op 29 maart 2010 via http://www.merriampark.com/ld.htm. Dynamic Time Warping (2009). Geraadpleegd op 30 maart 2010 via http://web.science.mq.edu.au/~cassidy/comp449/html/ch11s02.html. Schlömer, T., Poppinga, B., Henze, N., Boll, S. (2008). Gesture recognition with a Wii controller. Afstudeerwerk, University of Oldenburg. Eickeler, S., Kosmala, A., Rigoll, G. (2007). Hidden Markov Model Based Continuous Online Gesture Recognition. Afstudeerwerk, University Duisburg, Faculty of Electrical Engineering – Computer Science. Freemand, W., Roth, M. (1994). Orientation histograms for hand gesture recognition. Mitsubishi electric research laboratories, Cambridge research center. Olthof, T. (2008). Wiimote in rich internet applications. Bachelorproef, VU Amsterdam. Standaert, W. (2009). Performance based musicmaking. Masterproef, Communicatie & Multimediadesign, Hogeschool Limburg. Roels, R. (2008). Eindverslag: Gesture recognition. Afstudeerwerk, VUB. http://www.xbox.com/en-US/live/projectnatal/ geraadpleegd op 3 mei 2010. Goldsborough, L. (2008). The history of the Nintendo Wii. Geraadpleegd op 4 mei 2010 via http://www.articlesbase.com/card-games-articles/the-history-of-the-nintendo-wii531108.html. Dynamic Time Warping. Geraadpleegd op 30 maart 2010 via http://www.answers.com/topic/dynamic-time-warping.
63
Wiimote project forum. Geraadpleegd op 4 mei 2010 via http://www.wiimoteproject.com/index.php?action=forum Patel, N. (2009). Sony announces new PS3 motion controller. Geraadpleegd op 20 maart 2010 via http://www.engadget.com/2009/06/02/sony-announces-new-ps3-motioncontroller/. Saffer, D. (2009, tweede druk). Designing Gestural Interfaces. Sebastopol: O’Reilly Media. Brun, D. (2009). Mouse gesture recognition library. Opgehaald van ByteArray.org: http://www.bytearray.org/?p=91 Martens, S. (2009). Blog Sebastian Martens. Opgehaald van http://blog.sebastianmartens.de/2009/08/use-your-wii-remote-with-the-flashplayer-wiiflash/ Warakagoda, N. (1996). Definition of Hidden Markov Model. Opgehaald van http://jedlik.phy.bme.hu/~gerjanos/HMM/node4.html#SECTION0022000000000000 0000
64
12 Bijlagen
Bijlage I: Logboek bachelorproef en WOW project. LOGBOEK WOW-project / bachelorproef MMP 2009-2010 Student: D’Hollandere Andreas Onderwerp: Gestures and WiiMote, how do they interact? Externe promotor: Tommy Van De Velde Interne promotor: Philippe De Pauw - Waterschoot
datum 01/10/2009
actie Briefing 1
26/11/2009
Thema
03/12/2009
Telefonisch contact
Mail 04/12/2009
Mail
05/12/2009
Mail
06/12/2009
Mail
07/12/2009
Mail
9/12/2009
Mail Mail
Mail
25/01/2010 Tem 05/03/2010 08/02/2010
Inhoud Afspraken / uitleg rond werking WOW-project & bachelorproef Indienen van het onderwerp voor de bachelorproef. Vraag aan Frederik Heyninck tot externe promotor. Doorsturen concept naar externe promotor Mail van Frederik Heyninck i.v.m. toewijzing promotor Mail naar Frederik Heyninck i.v.m. toewijzing promotor Toewijzing promotor Frederik Heyninck. Maken van afspraak voor ondertekenen contracten Vastleggen datum voor ondertekening contracten Aanstelling van Tommy Van De Velde tot eindwerkpromotor. Vastleggen datum voor ondertekening contracten met Tommy. + vraag naar extra informatie.
to do Onderwerkkeuze uitwerken op basis van briefing -
Afspreken datum ondertekenen contract. Vastleggen afspraak op woensdag 10 februari. Bezoek aan bibliotheek Gent. Meeting met Tommy voor ondertekening contract.
-
opmerkingen Deadline 26 november -
Doorsturen concept
-
Ondertekening contracten Datum vastleggen -
-
STAGE
Mail Mail
09/02/2010
Research
10/02/2010
Meeting
-
Indienen contract op school.
65
12/02/2010
Opbouw BP
15/02/2010
Meeting
20/02/2010
Informatie opzoeken
21/02/2010
Meeting
23/02/2010
Meeting
25/02/2010
Developing HUD
27/02/2010
Lezen
03/03/2010
Bibliografie opstarten
09/03/2010
Planning
11/03/2010
Mail
Mail van interne promotor met vraag om hem te updaten ivm WOW project.
12/03/2010
Research
15/03/2010
Research Meeting
Opzoekingen in Mediatheek Metropolia (website) Boeken ophalen Meeting met Joachim op skype ivm HUD/HUB WOW project Maken van HUD
HUD 16/03/2010
Research/Schrijven
17/03/2010
Opmaak
19/03/2010
Schrijven
22/03/2010
Aanvullen logboek
25/03/2010
Meeting
28/03/2010
Mindmap/Poster
29/03/2010 30/03/2010
HUD Research
31/03/2010
HUD HUD
01/04/2010
Research omtrent wii remote / gesture recognition Opmaak van bachelorproef In Word Schrijven van inhoud bachelorproef – Inhoudstafel + corpus. Aanvullen van het logboek dmv extern logboek Meeting met Joachim ivm poster / HUD Maken van mindmap over BP Maken van HUD Research mbt gesture recognition Research + code 3D space Coderen 3D Space
Research / schrijven
Schrijven van deel over basic gestures
Mail
Updaten externe promotor van WOW project. Coderen van planeten + sterren Coderen van planeten + sterren
Developing HUD 02/04/2010
Opbouw van eindwerk opstellen Meeting met joachim ivm informatie over bachelorproef Opzoeken van informatie omtrent Wii gesture recognition Meeting met Joachim tijdens de busreis naar FITC Amsterdam. Meeting met Joachim voor het bedenken van een naam voor het WOW project. Opzoekingen omtrent Papervision3D Lezen van boek: Schrijven van verslag tot eindwerk. Opstarten van bibliografie adv APA norm in word bestand. Opmaken van planning v1.0
Developing HUD
Aanpassingen invoegen. Opzoeken relevante informatie.
19 februari 2010
Informatie in PDF zetten Bedenken van concept en naam.
Verdere research voor opbouw sterrenhemel
Bijvoegen bij mindmap Doormailen van Poster, mindmap, doelstellingen, planning… Boeken ophalen Verdere research Maken van HUB
Research ivm particles/3D in PV3D Literatuurlijst bijhouden.
21/3/2010
-
logboek
research
Camera zoom – midden van view Verdere research / fouten verbeteren / herschikken. Updaten van FB en Twitter. Aparte klasses opstellen
66
03/04/2010
Developing HUD
Toevoegen van materialen
05/04/2010 06/04/2010
Schrijven Developing HUD Schrijven
07/04/2010
Developing HUD
Schrijven van Eindwerk Addition of XML data Schrijven bachelorproef – Gesture recognition met Wii. Herschikken van de klasses
10/04/2010
Schrijven
11/04/2010
Research
12/04/2010
Telefonisch contact Schrijven Developing HUD Telefonisch contact
14/04/2010
Developing HUD
15/04/2010 16/04/2010
Developing HUD Schrijven eindwerk
18/04/2010
Assets maken HUD
20/04/2010 21/04/2010 22/04/2010
Schrijven eindwerk Schrijven eindwerk Mail
23/04/2010
HUD Developing
24/04/2010
Schrijven eindwerk
27/04/2010
Opschonen code HUD Mail
28/04/2010
Schrijven eindwerk
03/05/2010
Schrijven eindwerk Wii research
05/05/2010
Mail
Mail
Mail
Schrijven eindwerk 07/05/2010
Mail Mail
08/05/2010
Schrijven eindwerk
Schrijven bachelorproef Gesture recognition Research ivm sensorbar wiimote + AS3 Contact met externe promoter Schrijven van Bachelorproef XML import + informationplane Telefonisch contact met externe promotor ivm updates XML implementatie
Aparte klasses opstellen Werkend krijgen
HUD op plane bij elke planeet.
Updaten over eindwerk. Structureren Evt mailen naar Tommy Aanbeveling aanpassen XML code in WOW project. Scene wordt nie correct aangesproken
Developing Schrijven deel accelerometer + wiimote Material toekennen aan plane Verbeteren fouten Contact met interne promotor: updaten status WOW project - eindwerk Informatie per planeet implementeren IR position control + pattern recognition Implementeren van klok Antwoord interne promoter: Alleen wiiremote is voldoende. IR position control / pattern recognition Levenshtein model Gesture porting/development Contact met externe promoter. Antwoord van externe promotor: Zal dit zo snel mogelijk nalezen. Contact met interne promotor: voorstellen aanvullingen bij inhoud eindwerk. DTW HMM LSM – webcam gestures Contact met externe promoter Contact met interne promoter Gesture gecontroleerde
Vraag over gebruik Wii Remote
Debuggen
tweaking Doormailen van draft versie eindwerk.
Draft versie eindwerk doormailen. Herschikken hoofdstuk Doormailen van draft v2 eindwerk. Doormailen draft v3 eindwerk.
67
09/05/2010
Schrijven eindwerk
10/05/2010
Schrijven eindwerk
11/05/2010
Schrijven eindwerk Mail
controllers +afwerken hs over wiskundige modellen Praktische deel ivm wow project + WiiFlash en mouse library Gesture gecontroleerde controllers Lijst geraadpleegde werken opstellen. Contact met externe promoter.
Mail
Contact met interne promoter.
12/05/2010
Schrijven eindwerk
13/05/2010 14/05/2010
Schrijven eindwerk Opmaak / layout Verbeteren eindwerk Mail
Gesture gestuurde controllers MS/Sony Praktisch gedeelte Aanpassen titels Na nalezen Joachim Contact met externe promotor. Contact met interne promoter. Voorpagina maken + layout document Fouten verbeteren + ontbrekende delen aanvullen Finaliseren van mijn bachelorproef, spellingscheck + cross check. Telefonisch contact met externe promotor met de vraag voor goedkeuring Telefonisch contact met externe promotor of er nog correcties in het eindwerk aangebracht moeten worden. Doormailen van BP naar drukker Indienen digitale en geprinte bachelorproef. Skype en mailverkeer met Joachim Coppens ivm WOW project en BP. Updaten van Facebook en twitter pagina.
15/05/2010
Mail Layout Schrijven eindwerk
16/05/2010 En 17/05/2010
Finaliseren bachelorproef
17/05/2010
Telefonisch contact
Telefonisch contact
18/05/2010
Afdrukken
20/05/2010
Indienen
Gemiddeld 5x per week
Skype / Mail
Gemiddeld 4x per week.
Facebook / Twitter
Apple apparaten + MS/Sony afwerken
Deadline 12/05/2010
Doormailen draft v3 eindwerk. + vragen toestemming om naam op BP te vermelden. Doormailen draft v3 eindwerk. + update lopend WOW project
Final versie + poster doormailen Final versie + poster doormailen
68
Bijlage II: Poster horend bij deze bachelorproef en WOW project.
69
Bijlage III: CD met poster horend bij deze bachelorproef
Achteraan deze bachelorproef bevindt zich een CD met daarop de digitale versie van de poster vermeld in de vorige bijlage.
70