Denna vecka har arbetet gått mycket bra.
Systemarkitekturen har tagit form. Ett UML-diagram av programmet i detta skede finns uppdelat i tre delar för algoritmer (länk kommer), interfaces (länk kommer) och klasser (länk kommer).
För att datan som produceras av Wii Remote:n skall kunna användas tillsammans med HMM måste den anpassas. Accelerometrarna producerar accelerationsvärden i x-, y- och z-led, med andra ord en tredimensionell vektor för varje tidpunk. En markovkedja arbetar däremot bara med diskreta tillstånd. Den tredimensionella vektorn måste med andra ord omvandlas till en dimension. Detta görs med en algoritm som kallas k-means. Den har även den fördelen att två rörelser som representerar samma gest omvandlas till liknande värden även om indatan skiljde sig åt.
Algoritmen fungerar som så att man placerar ut ett antal s.k. centroider i dataområdet. Därefter noterar man för varje punkt vilken centroid som ligger närmast. Därefter flyttar man centroiden så att den ligger i mittpunkten mellan alla datapunkter som hade associerats till den specifika centroiden. Detta upprepas tills dess att centroiderna inte flyttas mer. Man har då en lista där varje datapunkt tillhör en viss centroid. Dessa centroiders id:n används sedan som tillstånd i markovmodellen.
Den bästa strategin för utplacering av startpositioner för centroider verkar vara att uniformt distribuera dessa i en minimal ellipsoid som innesluter samtliga mätpunkter. Vår lösning är att placera dessa utefter cirklar i varje par av plan. Steget efter att ha initierat dessa centroider innebär att vi låter varje punkt associeras till dess närmsta centroid. Centroiden flyttas därefter till mittpunkten av gruppen av punkter den är associerad till, vilket görs genom att beräkna det aritmetiska medelvärdet över denna grupp. Sedan associeras punkter på nytt och denna procedur utförs tills centroiderna inte längre byter position eller att deras nya position inte överskrider ett minsta avstånd ε. När detta är utfört kommer vi ha en endimensionell representation av rörelsen.
Serialisering implementerades också i liten skala fredags. Nu har vi möjlighet att spara icke behandlad accelerometerdata avläst från Wiimoten och sedan läsa in den vid önskat tillfälle. Denna funktion kommer att komma väl till användning när vi utvecklar tillämpningen. Vi kommer att spara tid vid implementering och testning eftersom vi inte är beroende av att ha en Wiimote till hands och utföra gester "live" eftersom vi kan skicka gamla redan inspelade gester till applikationen och vidare till tillämpningen.
Vårt GUI har utvecklats en aning och ser nu ut som följande.
