18
1 Projektrapport Interaction Wiith Balance Board Arbete Människa Teknik Projekt MAM032 Adrian Nae Andreas Edmundsson David Sandberg Hannes Gruber Förändringshistorik Version Datum Tid Ansvarig Förändring 0.1 081128 11.00 Adrian Skapad 0.2 081210 10.00 Hannes Utökade mål 0.3 090112 14.00 Hannes Arbetsbeskrivning 0.4 090316 10.00 Andreas EON och Utvärdering 0.5 090316 11.00 Hannes Resultat och Utvärdering 0.6 090316 12.00 David Avgränsningar och Reflektion 0.7 090316 15.00 Adrian Utvidgningar 0.8 090317 23.00 Hannes Övergripande ändringar efter granskning 0.9 090324 10.00 Hannes Slutsats 1.0 090414 11.30 Hannes Slutliga ändringar innan inlämning

Projektrapport - LTH · 1 Projektrapport Interaction Wiith Balance Board Arbete Människa Teknik Projekt MAM032 Adrian Nae Andreas Edmundsson David Sandberg Hannes Gruber

  • Upload
    vuhanh

  • View
    220

  • Download
    1

Embed Size (px)

Citation preview

1

Projektrapport

Interaction Wiith Balance Board

Arbete Människa Teknik Projekt MAM032

Adrian Nae Andreas Edmundsson David Sandberg Hannes Gruber

Förändringshistorik

Version Datum Tid Ansvarig Förändring 0.1 081128 11.00 Adrian Skapad 0.2 081210 10.00 Hannes Utökade mål 0.3 090112 14.00 Hannes Arbetsbeskrivning 0.4 090316 10.00 Andreas EON och Utvärdering 0.5 090316 11.00 Hannes Resultat och Utvärdering 0.6 090316 12.00 David Avgränsningar och Reflektion 0.7 090316 15.00 Adrian Utvidgningar 0.8 090317 23.00 Hannes Övergripande ändringar efter granskning 0.9 090324 10.00 Hannes Slutsats 1.0 090414 11.30 Hannes Slutliga ändringar innan inlämning

2

Innehåll 1  INTRODUKTION ....................................................................................................................................... 3 

1.1  INLEDNING ................................................................................................................................................ 3 1.2  SYFTE ........................................................................................................................................................ 3 1.3  MÅL .......................................................................................................................................................... 3 1.4  AVGRÄNSNINGAR ...................................................................................................................................... 3 

2  METOD ........................................................................................................................................................ 3 

2.1  PERSONALORGANISATION ......................................................................................................................... 3 2.1.1  Möten i projektgruppen ................................................................................................................... 4 2.1.2  Kontakt med handledare ................................................................................................................. 4 2.1.3  Blogg ............................................................................................................................................... 4 

2.2  ARBETSBESKRIVNING ................................................................................................................................ 4 2.3  STANDARDER OCH HJÄLPMEDEL ................................................................................................................ 5 

2.3.1  Specifikationer av programhjälpmedel, tekniker och metoder ........................................................ 5 2.3.2  GlovePie .......................................................................................................................................... 6 2.3.3  EON Professional ............................................................................................................................ 6 

3  RESULTAT ................................................................................................................................................. 6 

3.1  WIIMOTE – PEKANDE ................................................................................................................................ 6 3.2  BALANCE BOARD – LUTANDE .................................................................................................................... 6 3.3  BALANCE BOARD – GÅENDE ..................................................................................................................... 7 

4  ANALYS OCH DISKUSSION ................................................................................................................... 7 

4.1  REFLEKTION .............................................................................................................................................. 7 4.2  UTVÄRDERING AV INTERAKTIONSFORMER ................................................................................................ 7 

4.2.1  Wiimote – Pekande .......................................................................................................................... 7 4.2.2  Balance board – Lutande ................................................................................................................ 8 4.2.3  Balance board – Gående ................................................................................................................. 8 

4.3  POTENTIELLA UTVIDGNINGAR ................................................................................................................... 9 

5  SLUTSATS ................................................................................................................................................... 9 

6  REFERENSER .......................................................................................................................................... 10 

APPENDIX A ...................................................................................................................................................... 11 

KOPPLING MELLAN ENHETERNA ....................................................................................................................... 11 

APPENDIX B ...................................................................................................................................................... 12 

EON PROFESSIONAL ......................................................................................................................................... 12 

APPENDIX C ...................................................................................................................................................... 13 

GLOVEPIE ......................................................................................................................................................... 13 

APPENDIX D ...................................................................................................................................................... 14 

SCRIPT FÖR BALANCE BOARD – LUTANDE ........................................................................................................ 14 

APPENDIX E ...................................................................................................................................................... 15 

SCRIPT FÖR WIIMOTE – PEKANDE ..................................................................................................................... 15 

APPENDIX F ...................................................................................................................................................... 16 

SCRIPT FÖR BALANCE BOARD – GÅENDE .......................................................................................................... 16 

3

1 Introduktion

1.1 Inledning Projektet genomfördes under kursen Arbete människa teknik, projekt (MAM032) vilken pågick under höstterminen 2008 samt under början av vårterminen 2009 vid Lunds tekniska högskola (LTH). Projektet hade mycket fria riktlinjer och det var upp till deltagarna att definiera innehållet, finna en handledare och planlägga arbetet. Projektet inriktades mot utveckling och utvärdering av nya interaktionsformer med stöd av befintlig hårdvara från Nintendos spelkonsol Wii. De nya interaktionsformerna var tänkta att förbättra effektiviteten och/eller upplevelsen vid användning i virtuella miljöer.

1.2 Syfte Projektets huvudsakliga syfte var att upptäcka nya interaktionsmöjligheter med hjälp av Nintendos spelkonsol Wii och att utvärdera dessa utifrån ett användbarhetsperspektiv. Möjligheten att utifrån resultaten utveckla en kommersiell produkt var även det ett område för utvärdering.

1.3 Mål Vid projektets start var fanns många frågetecken om vad som var möjligt samtidigt som det fanns gott om idéer kring vad som skulle kunna åstadkommas. Konkreta mål var något som successivt växte fram snarare än något som spikades i projektets början, delvis på grund av att vi helt enkelt inte visste vilken hård- och mjukvara vi skulle ha tillgång till. Under projektets gång sattes följande målsättningar upp: • Att med hjälp av befintlig och/eller egenutvecklad mjukvara åstadkomma meningsfull

kommunikation mellan delar av Nintendo Wii hårdvara och en PC. • Att teoretiskt undersöka möjligheter och potentialer hos nya interaktionsformer

baserade på delar av hårdvara från Nintendo Wii. • Att praktiskt undersöka ovanstående. • Förbättra navigeringen i VR-miljön jämfört med den ursprungliga (mus, tangentbord

och joystick). • Ta fram olika navigeringsmöjligheter med Balance board, Wiimote, Nunchuck. • Utvärdera för- och nackdelar med alternativen, jämfört med varandra och ursprunglig

navigering.

1.4 Avgränsningar • I detta projekt har våra metoder utvecklats och testats i laborationsmiljö. Metoderna har

därmed testats under kontrollerade former där yttre påverkningar har minimerats. • Våra metoder har utvecklats med utgångspunkt från programvaran GlovePIE [1] och

därmed begränsats till dess funktionalitet och redigeringsmöjligheter.

2 Metod

2.1 Personalorganisation Projektgruppen bestod av fyra medlemmar vilkas roller fördelades enligt tabell 1. I tabellen framgår vem vår handledare var.

4

Tabell 1 Rollfördelning i projektet

Namn Roll Ansvarsområden Kontaktinformation Adrian Nae Student Kommunikation PC-Wii [email protected] Andreas Edmundsson Student Konfiguration av EON [email protected] David Sandberg Student Konfiguration av EON [email protected] Hannes Gruber Student Kommunikation PC-Wii [email protected] Mattias Wallergård Handledare Granskning och vägledning [email protected]

Under projektet har vi även fått mycket hjälp av Joakim Eriksson som bl.a. lärt och visat oss hur programmet EON fungerar.

2.1.1 Möten i projektgruppen Projektgruppen har haft regelbundna möten ungefär två gånger per vecka under projektets gång för arbete samt planering av det fortsatta arbetet.

2.1.2 Kontakt med handledare Projektgruppen har haft kontinuerlig kontakt med handledaren för vägledning och feedback på det producerade arbetet.

2.1.3 Blogg Vid projektstart skapade projektgruppen en blogg [2]. Bloggens huvudsakliga syfte var att underlätta uppföljningen av projektet för utomstående personer som exempelvis vår handledare. Under projektets gång har material lagts ut i form av bilder, video och text. Efter varje framsteg uppdaterades bloggen med en kort beskrivning av det delmål som hade uppnåtts.

2.2 Arbetsbeskrivning Projektets inledande fas bestod av många projektgruppsmöten, både med och utan handledare, där olika idéer bollades fram och tillbaka. Diskussionerna kretsade kring hur man skulle kunna använda Wii-kontrollerna och hur detta potentiellt skulle kunna förbättra interaktionen i exempelvis en VR-miljö. Inspiration hämtades i många fall från Johnny Lees projekt med Wii-hårdvara vilka finns demonstrerade i videoklipp på Youtube.com samt hans hemsida [3]. Vår handledare gav även många värdefulla tips om eventuella inriktningar och även befintlig mjukvara som skulle kunna vara till hjälp. Ett exempel är programmet GlovePie som blev en central del av projektet då det hanterar kommunikationen mellan en Wii-kontroll och en PC. På vår handledares inrådan inriktade vi oss delvis på att undersöka hur en Wii Balance board kan användas i enlighet med projektets syfte. Detta var något vi från början inte hade övervägt då vi främst varit inriktade på Wiimote och Nunchuck. Vårt första delmål blev att helt enkelt lyckas få igång någon form av kommunikation mellan en Wiimote och en PC. Till en början verkade Bluetooth-kopplingen mellan Wiimote och PC vara relativt instabil med många avbrott. Dessutom betedde sig Wiimoten tillsammans de enkla test-skript vi skrivit i GlovePie inte alltid helt konsekvent. Vissa knappar kunde sluta att fungera till synes utan anledning och så vidare. Dessa problem löstes efterhand genom uppdaterade Bluetooth-drivrutiner och allteftersom vi började förstå oss på GlovePies små underligheter. De skript vi skrev blev mer och mer avancerade efter hand. Från början handlade det endast om att med knapptryckningar på Wiimoten simulera exempelvis knapptryckningar på datorns

5

tangentbord. Efter mycket experimenterande lyckades vi få Wiimoten att styra musrörelser på datorns skärm, detta med hjälp av den batteridrivna sensorbar som en gruppmedlem konstruerat. Senare tillverkades även en sensorbar som drevs med ström från en USB-kontakt. Efter en tids experimenterande med GlovePie ville vi testa interaktionen i en VR-miljö. Eftersom Eon redan hade stöd för styrning via joystick valde vi att låta GlovePie simulera en virtuell joystick med hjälp av programmet PPJoy [4]. På så vis kunde vi mappa olika rörelser med Wiimote eller på Balance board till olika utslag och knapptryckningar på den virtuella joysticken. En fördel vi såg var också att vi då kunde använda Windows inbyggda kalibrering av joysticks för att kalibrera Balance boarden. Detta var något som behövdes då vi upptäckt att de fyra sensorerna var olika känsliga och gav olika värden. Mycket tid lades på att försöka konfigurera GlovePIE, PPJoy och Eon. Efter många försök lyckades vi få interaktionen i Eon att fungera som vi ville, men det var uppenbart att PPJoy var väldigt instabilt för ändringar och att programmet helt enkelt inte var tillräckligt tillförlitligt. Exempelvis krävdes det oftast omstarter av datorn för att få konfigurationerna av de virtuella joystickarna att fungera. Vi beslutade därför att försöka skippa PPJoy helt och hållet och därmed bli av med ett mellanled. Istället riktade vi in oss på att simulera musrörelser direkt i GlovePIE och sedan använda dessa för att styra interaktionen i Eon. Nackdelen med detta var att vi var tvungna att ta hand om kalibreringen av utslagen själva. Speciellt gällde detta vid amvändanet av Balance boarden. En översiktsbild av kommunikationsvägarna och hur de olika komponenterna fungerar tillsammans återfinns i Appendix A. Vi hade under tiden arbetat på tre olika varianter av interaktion, en där Wiimote används och två med Balance board. De skript vi skrivit i GlovePie förbättrades allteftersom med kalibreringsalgoritmer och efter mycket testande fungerade de tillfredställande för interaktion i Eon. Närmare förklaring av interaktionsformerna finns under kapitel 3 och skripten i Appendix D,E och F.

2.3 Standarder och hjälpmedel Nedan specificeras de redskap som har används vid skapandet av kod och dokument samt vilka standarder som gällt under projektet.

2.3.1 Specifikationer av programhjälpmedel, tekniker och metoder • För produktion av dokument används MS Word 97-2003. • Figurer ritas med hjälp av valfritt datorbaserat ritverktyg. • Dokument, kod och annat producerat arbete lagras på en Subversion-server (SVN) för

att projektmedlemmarna alltid ska ha tillgång till de senaste versionerna. • TortoiseSVN [5] används för åtkomst till Subversion-server. • För att hantera kommunikationen mellan Wii och PC används GlovePIE version 0.3 i

samband med Parallell Port Joystick (PPJoy) version 0.83. • Interaktionen sker i en VR-miljö skapad i Eon Professional version 5.5 [6].

Den ursprungliga SVN servern Assembla.com som vid projektets start var gratis, övergick under hösten till att ta betalt för sina tjänster. Detta gjorde att projektgruppen bestämde sig för att byta till XP-Dev.com.

6

2.3.2 GlovePie GlovePIE (Glove Programmable Input Emulator) är en gratisprogramvara som kan användas för att kunna koppla och emulera externa enheter. Den klarar diverse enheter från enkla gamepads och joysticks till VR handskar och Bluetooth-enheter som inte ens var tänkta att fungera med Windows. Efter att enheterna har kopplats till datorn, skrivs egna skripts in för att säga till operativsystemet vilka kommandon som skall utföras beroende på vilka knappas som trycks in på den externa enheten. Programmeringsspråket som GlovePIE använder sig av är lättanvänt även för en inte allt för van programmerare. Det kan mycket mer än bara mappa knappar rakt av. Den kan även användas för att göra matematiska beräkningar eller flöden av funktioner. Eftersom ingen i gruppen hade någon tidigare erfarenhet av detta program tillbringades mycket tid för att lära sig hur det fungerar. Tyvärr hittade vi inte någon manual eller beskrivning till hur programmeringsspråket i GlovePie används så mycket tid gick till att testa sig fram och till att söka på Google efter lösningar eller andra skripts som utförde de efterfrågade funktionerna. För de användare som vill efterfrågar en motsvarighet till Mac OSX finns programmet DarwiinRemote. Detta program har vi dock inte testat. Gränssnittet för GlovePie finns presenterat i Appendix C.

2.3.3 EON Professional Eon Professional är ett program för att skapa och hantera interaktiva tredimensionella VR-miljöer. Programmets användargränssnitt är relativt komplext och eftersom vårt mål inte var att lära oss skapa VR-miljöer använde vi oss av en redan färdig VR-miljö. Den fiktiva miljö vi använde oss av var ett tidigare samarbete mellan Malmö Stad och IKDC som resulterade i ett kvarter skapat utifrån Malmö år 1692. För att skapa en naturlig interaktion var vi tvungna att jobba mycket med inställningar i Eon, där allt ifrån hur finkänsligt programmet skulle styras i X, Y och Z-led modifierades till om pekaren skulle visas eller ej. Gränssnittet för EON Professional återfinns i Appendix B.

3 Resultat Under projektet har vi utvecklat i huvudsak tre nya typer av interaktion och navigering i VR-miljön. Dessa förklaras i var sitt kapitel nedan.

3.1 Wiimote – Pekande Denna interaktionsform baseras på att användaren använder en Wiimote för att peka i den riktning man vill röra sig. Detta kan åstadkommas genom att den infraröda kameran i Wiimoten registrerar ljuset från utplacerade sensorbars i VR-miljön. På så sätt kan musrörelser simuleras vilka styr navigeringen. Hastighet och acceleration bestäms av hur långt ifrån VR-miljöns mittpunkt användaren pekar. Ju längre ifrån centrum desto högre acceleration. Det skript vi skrev för denna navigeringsform återfinns i Appendix E.

3.2 Balance board – Lutande Även denna interaktionsform bygger på att musrörelser simuleras. I detta fall sker det dock genom att användaren står på en Balance board och fördelar sin vikt åt det håll rörelsen i VR-miljön ska ske. För att röra sig framåt lutar man sig med andra ord framåt, för att vrida sig

7

lutar man sig åt sidan o.s.v. Acceleration och hastighet bestäms av hur mycket användaren lutar sig i likhet med föregående interaktionsform. Denna form av interaktion kan även varieras på så sätt att användaren istället sitter på Balance boarden och enbart använder lutningen på sin överkropp för att styra navigeringen. Båda varianterna av denna interaktionsform kan använda samma skript men detta kan behöva kalibreras eftersom den ”neutrala” viktfördelningen kan skilja sig mellan stående och sittande. Skriptet vi skrivit återfinns i Appendix D.

3.3 Balance board – Gående Detta är på sätt och vis en vidareutveckling av föregående interaktionsform. Istället för att luta sig framåt skall användaren gå på Balance boarden. Vridning fungerar som tidigare genom att man fördelar sin vikt åt sidan. Hur mycket acceleration som uppnås i VR-miljön beror i detta fall på hur snabbt användaren trampar. Skriptet som användes och vidareutvecklades för denna interaktionsform finns i Appendix F.

4 Analys och diskussion

4.1 Reflektion Då detta projekt belyser interaktionsdesign, gränssnittdesign samt kodprogrammering har problemomfattningen varit väldig utbredd. Detta har bidragit till att vi åtskilliga gånger varit tvungna att återigen diskutera och specificera målsättningar under och inför varje projektfas. Projektets omfång har med andra ord gjort det svårt att behålla koncentrationen på våra målsättningar. Projektet har till stor del varit praktiskt vilket också har gjort det lätt att komma på sidospår och ägna mycket tid åt detaljer som inte är i direkt anknytning till målen. Eftersom vi arbetat med EON Professional utan några större bakgrundskunskaper försvårades projektet då varje justering i programmet krävde djup förståelse. Vi använde oss av EON´s användarmanual samt ytterligare en övningsbok för EON. Dessa böcker räckte dock inte alltid till och informationssökningar på internet var fruktlösta då det fanns oerhört lite information om programmet att tillgå. Som tur var kunde vi få mycket hjälp av en lärare vid institutionen. Denne lärare fanns självklart inte alltid på plats och det var därför många gånger frustrerande att inte kunna utföra nödvändiga justeringar direkt.

4.2 Utvärdering av interaktionsformer

4.2.1 Wiimote – Pekande Eftersom interaktionsformen baseras på användarens hand och armrörelser, i likhet med musinteraktion, är precisionen mycket hög. Precisionen är betydligt bättre än den som uppnås med joystick och interaktionen upplevs även mer intuitiv. Den stora fördelen med Wiimoten är att användaren kan navigera med endast en arm vilket inte är möjligt med mus eller joystick utan hjälpmedel i form av t.ex. ett podium eller ett bord. En annan betydande fördel är att användaren inte är begränsad till en fast punkt i rummet utan kan röra sig fritt. Under experimenterandet med denna interaktionsform upptäckte vi dock ett problem av teknisk karaktär. Ibland verkade nämligen Wiimoten ”tappa kontakten” med de infraröda dioderna i de sensorbars vi placerat ut i rummet. Detta kunde leda till utebliven respons och ryck i interaktionen när användaren pekade Wiimoten mot ytterkanterna av VR-miljön. Dioderna hamnade då med andra ord utanför den infraröda kamerans synfält. Detta problem

8

kan man säkerligen komma till rätta med genom bättre placerade dioder och det uppträder sannolikt även endast vid användning i stora VR-rum. På grund av material- och tidsbrist löstes dock inte problemet till fullo under projektet. Till skillnad från en Balance board behöver en Wiimote inte kalibreras efter användaren. Detta är en tydlig fördel som underlättar användandet. Överlag var Wiimoten den interaktionsform vi tyckte bäst om att använda då den gav bäst precision och frihetskänsla.

4.2.2 Balance board – Lutande I jämförelse med navigering med hjälp av mus eller joystick ger Balance boarden större frihet eftersom användarens båda händer är fria. Det innebär dock en begränsning i rörelsefriheten i det fysiska VR-rummet eftersom Balance boarden står fast på golvet. Användaren kan alltså inte smidigt förflytta sig såsom är möjligt med Wiimoten. Precisionsmässigt är det svårare att använda Balance boarden än både Wiimote och mus. Det är svårare att exakt justera hastighet genom ändrad viktfördelning och det går dessutom lite långsammare att få det utslag man vill. Precisionen blir dock betydligt bättre om man istället sitter på Balance boarden och man får större kontroll över sina rörelser. Denna interaktionsform kräver självklart större fysisk ansträngning än Wiimote, mus och joystick. Detta kan såklart vara både positivt och negativt beroende på målet med interaktionen och det ger stora möjligheter för användning inom t.ex. rehabilitering och balansträning. Den största svårigheten vi upplevde var att hålla en viss lutning under en längre tid, exempelvis om man ska förflytta sig en längre sträcka rakt framåt. En potentiell nackdel med denna interaktionsform är även att den kräver viss kalibrering efter användaren eftersom alla människor är olika. Förutom olika vikt skiljer sig även den neutrala viktfördelningen mellan olika personer. Kalibreringen skulle dock kunna lösas genom att programmera skriptet på sådant sätt att en kalibreringsalgoritm automatiskt körs när en ny användare kliver upp på brädan.

4.2.3 Balance board – Gående Denna interaktionsform har stora likheter med den föregående, exempelvis har användaren båda händerna fria men denne har samtidigt inte möjligheten att röra sig fritt i rummet. Den främsta skillnaden är att problemet med att statiskt luta sig åt ett håll inte uppstår eftersom användaren istället ”går” för att ta sig framåt. Detta är en annan form av fysisk ansträngning som efter en viss tids användning är ännu mer krävande. Huruvida detta är positivt eller inte beror som sagt på situationen och syftet med interaktionen. En fördel med att ”gå” på detta sätt är att det känns mer naturligt än att luta sig för att förflytta sig men i vår implementation blev rörelsen i VR-miljön något ryckig. Med mer tid och erfarenhet av både GlovePie och EON är vi dock övertygade om att upplevelsen kan förbättras och detta skulle kunna vara en utgångspunkt för fortsatt arbete. På ett sätt blev precisionen bättre med denna interaktionsform eftersom man fick större kontroll över accelerationen. Detta eftersom det är enklare att ändra och hålla en viss frekvens i trampandet än det är att ändra och hålla en viss viktfördelning på Balance boarden.

9

4.3 Potentiella utvidgningar Utifrån utvärderingen ovan kan vi urskilja ett flertal områden för potentiella utvidgningar. Några av dessa är "Interaktion ur träningssypunkt", "Interaktion ur rehabiliteringssynpunkt" och "Interaktion för bättre inlevelse i datorspel". Vi anser att dessa kan vara bra att hålla isär då vissa delar kan motverka varandra. T.ex. kan inlevelsen i spel dämpas om man blir för fysisk trött. Ser vi till träningsaspekten kan vi relatera till Balance boardens ursprungliga mål med "Wii fit" programvaran med balansträning som fokus. I PC miljö finns det inte någon motsvarighet så man skulle vilja undersöka om det finns vinningar att med att göra något motsvarande. Den andra punkten, rehabilitering, har enligt vår vetskap inte undersökts tillräckligt mycket. Man skulle kunna skapa programvaror ämnade för rehabiliteringscenter. Dessa skulle både kunna vara för till för träning av balans och precision men även för mental träning. Ser man till vidareutveckling för att förbättra upplevelsen i datorspel kan man koppla samman fler Wii-kontroller såsom Wiimote och Balance board, eller kanske mus, tangentbord och Balance board för att samtidigt kunna använda fler kroppsdelar för interaktion med datorn. Head tracking kan också göras med en Wiimote. Det hade varit mycket intressant att kombinera detta med t.ex. datorspel. Detta hade inneburit att man i större utsträckning hade kunnat använda sig av människan medfödda reflexer för interaktion och därmed uppnå större inlevelse. Ett exempel är att man instinktivt duckar när någonting farligt kommer flygande mot en eller att man flyttar huvudet i sidled när man vill se runt ett objekt.

5 Slutsats Projektets främsta mål var att utveckla och utvärdera nya interaktionsformer baserade på tillbehören till spelkonsollen Nintendo Wii. Vi känner att vi definitivt uppnått detta då tre olika interaktionssätt tagits fram, ett där en Wiimote används och två som utnyttjar Balance board. Under utvecklingen har programmet GlovePie använts tillsammans med Bluetooth för kommunikationen mellan Wii-kontroller och dator och interaktionen har sedan skett i en VR-miljö skapad i EON Professional. Ingen av projektmedlemmarna hade någon tidigare erfarenhet av dessa program och vi är övertygade om att fortsatt arbete och erfarenhet skulle kunna förbättra interaktionen ytterligare. Vi är dock mycket nöjda med resultatet och vi har konstaterat att de olika interaktionsformerna har olika för- och nackdelar beroende på vad man vill uppnå med interaktionen. Wiimoten är minst ansträngande att använda och ger dessutom mycket hög precision och skulle mycket väl kunna ersätta joystick eller mus under presentationer i VR-miljön. De två interaktionsformerna som använder Balance board är däremot mer lämpade när man vill uppnå viss ansträngning och syftet är rolig snarade än effektiv interaktion. Dessa två former passar även bra om det är viktigt att användaren kan använda båda sina händer fritt under interaktionen. Vi ser stora möjligheter att forska vidare inom detta område, framförallt genom att kombinera olika interaktionssätt för att uppnå större inlevelse och roligare eller effektivare interaktion. Våra resultat kan med fördel användas som utgångspunkt i fortsatta projekt och de skript vi har utvecklat kan användas fritt. Förhoppningsvis kan fortsatt arbete underlätta användningen

10

av de nya interaktionsformerna och medföra att de kommer användas och förbättra användares upplevelser av VR-miljöer.

6 Referenser [1] Carl.Kenner - GlovePIE

http://carl.kenner.googlepages.com/glovepie

[2] Project Wii http://projectwii.blogg.se

[3] Johnny Chung Lee - Human Computer Interaction Research http://www.cs.cmu.edu/~johnny/

[4] PPJoy - Parallel Port Joystick driver for Windows 98, Me, 2000 and XP http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm

[5] TortoiseSVN http://tortoisesvn.tigris.org/

[6] EON Reality – EON Professional http://www.eonreality.com/products_professional.html

11

Appendix A

Koppling mellan enheterna

12

Appendix B

EON Professional

13

Appendix C

GlovePie

14

Appendix D

Script för Balance board – Lutande var.FR = Wiimote.BalanceBoard.RawFrontRight var.FL = Wiimote.BalanceBoard.RawFrontLeft var.BR = Wiimote.BalanceBoard.RawBackRight var.BL = Wiimote.BalanceBoard.RawBackLeft + 16200 var.diffX = 2/5 var.diffY = 3/5

var.x = var.FR + var.FL - var.BR - var.BL var.y = - var.FR + var.FL - var.BR + var.BL

var.x1 = (var.x/10000) + var.diffX var.y1 = (var.y/10000) + var.diffY

Mouse.LeftButton = Keyboard.A Mouse.X = var.x1 Mouse.Y = var.y1

debug = "x: " + var.x1 + " y: " + var.y1

15

Appendix E

Script för Wiimote – Pekande // Wiimote mouse script for Windows desktop // Requires a sensor bar var.ButtonFreezeTime = 250ms var.PointerBump = KeepDown(Pressed(wiimote.A),var.ButtonFreezeTime) or KeepDown(Pressed(wiimote.B),var.ButtonFreezeTime) Wiimote.Led1 = true

// Mouse movement if wiimote.PointerVisible but not var.PointerBump then

mouse.x = wiimote.PointerX mouse.y = wiimote.PointerY

end if

// Mouse Buttons mouse.LeftButton = Wiimote.A and KeepDown(Wiimote.PointerVisible,0.5s)

mouse.RightButton = Wiimote.B and KeepDown(Wiimote.PointerVisible,0.5s)

mouse.MiddleButton = Wiimote.Home and KeepDown(Wiimote.PointerVisible,0.5s)

mouse.XButton1 = Wiimote.Minus mouse.XButton2 = Wiimote.Plus

// Mouse Wheel if wiimote.Up then

mouse.WheelUp = true wait 30ms mouse.WheelUp = false wait 30ms

end if

if wiimote.Down then mouse.WheelDown = true wait 30ms mouse.WheelDown = false wait 30ms

end if

16

Appendix F

Script för Balance board – Gående

// // The Balance Board Walker 1.0 by kuradon // // Usage: // 1. Start script and wait for detect Balance board. // 2. Press Balance board button to calibrate. // 3. Stand on the board straight while message "Neutral" display. // 4. Now, you can control cursor key and left mouse button. // // Control: // Walking on the board: Up cursor // Continuous Left: Left cursor // Continuous Right: Right cursor // Continuous Back: Down cursor // Continuous Front: Left click // Blance Board button: Calibrate and Center mouse cursor // // // // Initialize section: // Detect first Balance board. // Read Factory Calibration Values. // if var.BalanceID = 0 then if Wiimote1.HasBalanceBoard then var.BalanceID = 1 Wiimote1.BalanceBoard.LED = true // dummy reading value var.AA = ( WiimotePeek(1, 0x04A40024) shl 8 ) + WiimotePeek(1, 0x04A40025) // first reading returns FF only var.A0 = ( WiimotePeek(1, 0x04A40024) shl 8 ) + WiimotePeek(1, 0x04A40025) var.B0 = ( WiimotePeek(1, 0x04A40026) shl 8 ) + WiimotePeek(1, 0x04A40027) var.C0 = ( WiimotePeek(1, 0x04A40028) shl 8 ) + WiimotePeek(1, 0x04A40029) var.D0 = ( WiimotePeek(1, 0x04A4002A) shl 8 ) + WiimotePeek(1, 0x04A4002B) var.A1 = ( WiimotePeek(1, 0x04A4002C) shl 8 ) + WiimotePeek(1, 0x04A4002D) var.B1 = ( WiimotePeek(1, 0x04A4002E) shl 8 ) + WiimotePeek(1, 0x04A4002F) var.C1 = ( WiimotePeek(1, 0x04A40030) shl 8 ) + WiimotePeek(1, 0x04A40031) var.D1 = ( WiimotePeek(1, 0x04A40032) shl 8 ) + WiimotePeek(1, 0x04A40033) var.A2 = ( WiimotePeek(1, 0x04A40034) shl 8 ) + WiimotePeek(1, 0x04A40035) var.B2 = ( WiimotePeek(1, 0x04A40036) shl 8 ) + WiimotePeek(1, 0x04A40037) var.C2 = ( WiimotePeek(1, 0x04A40038) shl 8 ) + WiimotePeek(1, 0x04A40039) var.D2 = ( WiimotePeek(1, 0x04A4003A) shl 8 ) + WiimotePeek(1, 0x04A4003B) endif else // // Actual procedure // // Reading sensor. if var.BalanceID = 1 then var.P0A = Wiimote1.BalanceBoard.RawFrontRight var.P0B = Wiimote1.BalanceBoard.RawFrontLeft var.P0C = Wiimote1.BalanceBoard.RawBackRight var.P0D = Wiimote1.BalanceBoard.RawBackLeft endif // Calculate weight on each sensor. if var.P0A < var.A1 then var.P1A = 68 * (var.P0A - var.A0) / (var.A1 - var.A0) else var.P1A = 68 * (var.P0A - var.A1) / (var.A2 - var.A1) + 68 endif if var.P0B < var.B1 then var.P1B = 68 * (var.P0B - var.B0) / (var.B1 - var.B0) else var.P1B = 68 * (var.P0B - var.B1) / (var.B2 - var.B1) + 68 endif if var.P0C < var.C1 then var.P1C = 68 * (var.P0C - var.C0) / (var.C1 - var.C0) else var.P1C = 68 * (var.P0C - var.C1) / (var.C2 - var.C1) + 68 endif if var.P0D < var.D1 then var.P1D = 68 * (var.P0D - var.D0) / (var.D1 - var.D0) else var.P1D = 68 * (var.P0D - var.D1) / (var.D2 - var.D1) + 68 endif // // Balance Board Button: Reset ZERO Calibration Values and start walking. //

17

if Wiimote1.BalanceBoard.Button or Wiimote2.BalanceBoard.Button or Wiimote3.BalanceBoard.Button or Wiimote4.BalanceBoard.Button then

var.C1A = var.P1A var.C1B = var.P1B var.C1C = var.P1C var.C1D = var.P1D var.starting = true var.leftframe = 0 var.rightframe = 0 var.neutralframe = 0 Mouse.X = 0.5 Mouse.Y = 0.5 endif // Calibrate weight. var.P1A = var.P1A - var.C1A var.P1B = var.P1B - var.C1B var.P1C = var.P1C - var.C1C var.P1D = var.P1D - var.C1D // // GlovePIE 0.30 reads wrong: B=FrontLeft C=BackRight, correct: B=BackRight C=FrontLeft. // var.WeightLeft = var.P1C + var.P1D var.WeightRight = var.P1A + var.P1B var.WeightFront = var.P1A + var.P1C var.WeightBack = var.P1B + var.P1D var.WeightHalf = ( var.P1A + var.P1B + var.P1C + var.P1D ) / 2 var.WeightBalanceX = ( var.WeightRight / var.WeightHalf ) -1 var.WeightBalanceY = ( var.WeightFront / var.WeightHalf ) -1 var.BalanceX = DeadZone( var.WeightBalanceX , 0.1 ) var.BalanceY = DeadZone( var.WeightBalanceY , 0.1 ) // // Walking detection. // // variables: // starting = if pressed button // startcount = if stand stable or not // neutralframe = count continuous standing neutral position // leftframe = count continuous standing left position // rightframe = count continuous standing right position // // After press button. if var.starting = true then // Near ZERO weight don't match for sampling. if var.WeightHalf > 10 then // Check Left/Right Balance. if var.WeightBalanceX < -0.25 then var.leftframe++ var.rightframe = 0 var.neutralframe = 0 if var.startcount = true then if var.leftframe = 3 then display "LEFT FORWARD" key.UP = true wait 50ms key.UP = false elseif var.leftframe > 30 then display "LEFT LEFT" key.LEFT = true wait 50ms key.LEFT = false var.leftframe = 15 endif endif elseif var.WeightBalanceX > 0.25 then var.leftframe = 0 var.rightframe++ var.neutralframe = 0 if var.startcount = true then if var.rightframe = 3 then display "RIGHT FORWARD" key.UP = true wait 50ms key.UP = false elseif var.rightframe > 30 then display "RIGHT RIGHT" key.RIGHT = true wait 50ms key.RIGHT = false var.rightframe = 15 endif endif else var.leftframe = 0 var.rightframe = 0 var.neutralframe++ if var.neutralframe = 5 then var.startcount = true

18

display "Neutral" elseif var.neutralframe > 20 then if var.BalanceY > 0.4 then display "Neutral click" Mouse.LeftButton = true wait 50ms Mouse.LeftButton = false elseif var.BalanceY < -0.4 then display "Neutral back" key.DOWN = true wait 50ms key.DOWN = false endif var.neutralframe = 4 endif endif else var.leftframe = 0 var.rightframe = 0 var.neutralframe = 0 var.startcount = false display "Stand straight on the board to walk." endif else display "Balance Board ID:" + var.BalanceID + " Press Button to start." endif endif