TDDD57 Fysisk interaktion och spelprogrammering
Labbar
Syftet med labbarna är att utforska grundläggande interaktionsdesign med ML-baserad kroppsstyrning, i detta exempel med hand-landmarks-språning, dvs att avkåda 21 stycken skelettpunkter på 2 samtidiga händer i kamera-bielden.
Forka gitlab-repot ni blivit inbjuda till i samband med kursstart och skapa ett eget gitlab-repo. Skapa där ett projekt med labb-kod och projekt-kod. Bjud in eribe22 och och helor34 **som Reporter** till ert repo.
![](https://mediapipe.dev/images/mobile/hand_landmarks.png)
- [https://developers.google.com/mediapipe/solutions/vision/hand_landmarker](https://developers.google.com/mediapipe/solutions/vision/hand_landmarker)
Viktigt att komma ihåg att vårt mål är att bygga en interaktion med en inperfekt sensor och utan haptik, vilket innefattar att kompenserar för sensorns instabilitet, skapa stabila regler för interaktion kring kroppsrörelse, ge feedback för att skapa medvetenhet av vad som händer men även att hålla användaren borta från dåliga positioner samt kompenserar för brist av haptik som förmedlar att man är påväg att klicka t.ex om man fortsätter sin röreles.
Generell gäller:
* Data kan försvinna på vissa frames eller vi kan få konstig data när AIn gissar fel. Vi hantera det genom att jobba med gammal data, släta ut mellan frames, göra medelvärdens, hoppa begräsande avstånd osv...
* Små förändringar kan upplevas som skakigt då vår hjärna ibland lurar oss att tro att vi inte skakar. Vi kan vilja släta ut vissa små förändringar för att det ska upplevas som mer korrekt.
* Regler för interaktion behöver ofta ha två eller flera states där olika regler gäller för att t.ex. klicka och hålla jämfört med att släppa. Ananrs kommer brister i datand och vår inneboeden skakighet att leda till ofrivillig interaktion. Tydliga förändringar behöver även hantera avslappning så att t.ex. man kan greppa med handen men sedan hålla utan att krampaktigt hålla handen stängd.
* Visa kroppsrörelser är mer bekväma än andra. Känslan i kroppen/handen behöver beaktas.
* Kan sensorn gissa fel på vilken hand man håller upp och sammablanda händerna. Hur hanterar vi sådan misstolkning som sker plötsligt.
* Det finns vinklar på handens där datat blir otillförlitlig. Vi behöver undvika dessa zoner och visa användaren saker som gör att man inte ofrivillit går in i dessa lägen. Med feedback får användaren att undvika dåliga positioner.
* I ytterkanterna av kamerabilden bli datat särskillt dåligt. Samma behov av feedback krävs här så att man håller sig kvar i kamerabilden innan man får dålig data.
* Datapunkter kan påverkas av gester. T.ex. kan punkter flytta på sig när man sluter handen. Det gör att man måste ha utrymme för viss förflyttning i samband med gester så att sådan förskjutning inte påverkar interaktionen. MAn måste ha övertydliga marginaler i samband med gester, så att en skelettpunkt som används för att markera ett objekt inte leder till att man avmarkerar objektet.
* Vi behöver visualiera övertidligt med flera states som hanterar att vi kan glida på datat i interaktoinen och skaka lite i händerna:
* Handen kommer snart att vara på objektet
* Handen är nu på en plats på handen där man säkert kommer att markera handen om man gör en gest, för att kunna t.ex. klicka eller greppa.
* Vi har greppat och håller nu objektet
* Objektet är nära och påväg in i en dropzone
* Nu är objektet i dropzonen med marginal för handskakning vid släpp-aktivitet
## Lite mer basinformation
Datat ni jobbar med är skelletpunkter, och jag tänker mig att ni jobbar med t.-ex. finger-toppen eller handflatans “wrist”-punkt för basinterationern i labb 2. Om man representerar handen med en punkt så tenderar hjärnan snart att acceptera det och följa pekaren på skärmen, även om den t.ex. följer en annan del på handen. En bild på en hand med ett finger - som en mus - kan följa bristen lika gärna som fingret om det är stabilt. Men funkar fingret bra är ju det kanske bättre.
För labb 3 behöver vi jobba med olika saker för att kunna representera knuten näve, pinch med finger mot tumme och rotation av handled. Där gäller att välja t.ex. vad man kan mäta för att få bra resultat. T.ex. skakar gärna fingrarna när de kommer nära, men det kan fortfarande vara bra nog, men man kan även titta på vinklar mellan led i fingrar eller annat för att få stabilare data.
I labb 3 får vi interaktions-states mellan att man greppat och man släppt och där olika regler behöver aktivera dem. Det är för att man ska kunna slappna av och inte tappa bara för att man använder samma avstånds- eller vinkelregler på skelettdatat för att avgöra kontakt. Ett typ-exempel är en överdriven grepp-rörelse, där man sedan måste göra en överdriven släpp-rörelse för att man ska kunna hålla handen lite mer avslappnad emellan.
Syftet med lab1, dvs att utreda sensorn, är att skapa se vad som blir bra hjälper, vilka delar av skelettet som kommer funka bra för interaktionen … kanske mest avgörande för labb 3. Så för att bestämma vad man ska mäta och hur man ska lösa labben kan man testa olika saker här. Sedan låser man in och gör det bästa man kan med det. Det finns inte någon bästa lösning, bara olika lösningar man testar och ser hur det blir.,
Vi måste ju sedan göra feedback och interaktionsbegräsningar och söka minsta värden. För labb 2 gäller ju t.ex. avstånd till andra saker man inte ska träffa och hur nära dessa kan vara och hur stor outline för “preventiv” feedback … dvs att man snart kommer att toucha objektet. För labb 3, hur långt in i objektet man behöver komma för att inte avmarkera i grepp eller släppögonblicket.
Målet med labbarna är ju dels att göra interaktionen men också med systemet och testning undersöka olika variabler som minsta avstånd, minst highlightavstånd osv …
Kort svar, lite som en mus i labb 2 med någon punkt på handen, i med labb3 behöver vi bygga regler för states för att särskilja steg men ändå välja bra data från handen. Generellt brukar återkoppling hos skället kunna skaka och därför störa och jag tror att man vill ha en representation av position som inte bara direkt är handen beroende på om det funkar, men kan även testa det. Handmodellerna är mer stabila, men det blir mycket punkter i skärmen som försvårar annan feedback … man får testa
## Labb 1 - Utvärdering
Gör en gedigen teknisk utvärdering hur bra hand-landmarks fungerar. Görs med fördel [direkt på webben](https://mediapipe-studio.webapps.google.com/demo/hand_landmarker). Vissa skillnader kan ju förekomma mot den python-baserade systemet och Godot men det är ok. Här vill vi bygga en förståelse för hur hand-modellen fungerar.
Testa hur datat (stabilitet och korrekthet av skelettpunkter) verkar påverkas av olika:
* Ljusförhållanden i rummet,
* Avstånd till kameran,
* Vinklar på kameran t.ex. för att man har en laptop och vinklar eller kröa via en mobil som ligger på ett bord osv...
* Vinklar på handen mot kamera
* Händer som rör sig snabbt
* Handen i ytterområdena i kamerafältet
* 1 eller 2 händer med t.ex anvseende på stablitet och prestanda
* Vilka skelttdelar av handen är mest stabila i allmänhet
## Labb 2 - Välj genom att peka
Skapa en applikation för att markera ett objekt bland många.Kan t.ex. vara att spräcka en ballong/cirkel när man pekar på den.
Addera feedback så att man ser när man är påväg att peka på objektet så att man även kan låta bli och anpassa en viss marginal för att man verkligen har pekat på det. Man ska kunna ångra sig och inse att man håller på att peka på det. I labben ska ni även testa olika storlekar på highlight för att hitta något slags minsta tjocklek som fungerar bra.
Hur små och hur nära kan olika objekt vara. Här behövs objekt som man inte ska markera och andra man ska markera. Bygg ett litet minispel där man med mindre och midre objekt och tätare objekt kan testa och avgöra hurvida man kan stabilit klicka på det som man ska klicka på och undvika att klicka på felaktiga.
Två olika objekt med t.ex. olika färg, fär man får poäng för att ta alla som är rätt och minuspoäng för fel. Hur små och hur tätt kan objekten vara då man fortfarande får alla rätt?
Skapa och kör experiment för att utreda detta i labben. Ni ska inte bara bygga ett exemple utan bygga och köra för att hitta minsta stabila inställningarna.
Gör det till ett litet "minispel" för att få in tyldigare data.
Låt gärna även andra människor testa.
## Labb 3 - Drag and drop
Här ska användare markera, dra och sedan släppa ett objekt på en drop-zon. Feedback krävs för att markera, greppa och sedan veta att man kan släppa och faktiskt släppa. Reglerna för marker aoch släppa ska vara tydliga men bekväma. Det är också skillnad på själva grepp-ögonblicket och hur man behöver hantera att hålla objektet som man gör mycket lägre. En mer övertydlig grepp-regel gör ockå hadnlingen att greppa tydligare.
I labben ska ni även implementera och testa minst 3 olika grepp-regler som t.ex.:
* sluten hand,
* pinch- finger-mot-tumme
* rotation av hand - handflata upp och ner, eller ner, sida för markering, avmarkering.
Mät hur ofta ett "ofrivilligt" släpp, dvs släpp utanför målet, händer för att kunna bättre kvantifiera minimala värden för reglerna och arbeta igenom alla 3 reglerna.
Låt gärna även andra människor testa.
## Redovisning:
Labbar redovisas muntlig i halv eller fjärdedels klass i lektionssal på campus. Ni ska delta vid ett tillfälle och ni slumpindelade. Redovisning av erfarenheter/resultat från undersökningen och era labbar. Dema gärna live.
Kodinlämning är via ert Repo. Lägg tydligt kod för samliga labbar och skriv slutsater i koden i godot-repot. Länka till dokumentationen via readme.md-filen gärna.
Sidansvarig: Erik Berglund
Senast uppdaterad: 2024-01-30