Departement Industriële Wetenschappen Opleiding Elektronica-ICT
Artesis Hogeschool Antwerpen
Multi-Touch Screen
Auteur: Nick Van den Vonder & Dennis De Quint Interne Promotor: Jeroen Doggen Externe Promotor: Kristof Valkenborgh, Item Solutions
Scriptie ingediend tot het behalen van de graad van Professionele Bachelor in de elektonica-ICT Optie Informatie & Communicatietechnologie Academiejaar 2008-2009
Voorwoord
Het kan ook anders. Tot op heden was het enkel mogelijk om een computer te bedienen met behulp van muis en toetsenbord. Hiermee kan je maar één functie tegelijkertijd uitvoeren. Door gebruik te maken van een multi-touch screen willen we op een andere manier interageren met de computer. Zo hopen we dat er een meer natuurlijke interactie zal plaatsvinden tussen mens en machine door gebruik te maken van handbewegingen. Met ons project nemen we dit onder handen. We vervangen de muis en het toetsenbord door een zelf ontwikkeld scherm. De vingers nemen de plaats in van de muis. Op het virtueel toetsenbord wordt ook getypt met de vingers. Een multi-touch screen heeft het grote voordeel ten opzichte van een normaal touch screen dat je het zowel met meerdere vingers als met meerdere mensen tegelijk kan bedienen. Antwerpen, Juni 2009 Dennis De Quint & Nick Van den Vonder
i
Inhoudsopgave Voorwoord
i
Verklarende woordenlijst
vii
1 Inleiding 1.1 Hoe zijn we tot onze bachelorproef bekomen 1.1.1 Nick . . . . . . . . . . . . . . . . . . 1.1.2 Dennis . . . . . . . . . . . . . . . . . 1.2 Samenwerk . . . . . . . . . . . . . . . . . . 1.3 Globale schets van de bachelorproef . . . . .
. . . . .
. . . . .
2 Multi-touch Technologieën 2.1 Frustrated Total Internal Reflection . . . . . . . 2.1.1 Eigenschappen FTIR . . . . . . . . . . . 2.2 Diffused Illumination . . . . . . . . . . . . . . . 2.2.1 Eigenschappen DI . . . . . . . . . . . . . 2.2.2 Voorbeeld: Microsoft Surface . . . . . . 2.2.3 Tracking Your Fingers with the Wiimote 2.2.4 Eigenschappen Wiimote . . . . . . . . . 2.3 ’GAP’ . . . . . . . . . . . . . . . . . . . . . . . 2.4 Active Matrix LCD . . . . . . . . . . . . . . . . 2.5 Beperkingen technologieën . . . . . . . . . . . . 2.5.1 FTIR . . . . . . . . . . . . . . . . . . . 2.5.2 DI . . . . . . . . . . . . . . . . . . . . . 2.5.3 Wiimote . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
1 1 1 1 2 2
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
3 3 5 5 6 6 7 7 7 8 8 8 9 10
3 Software 3.1 Tracking software . . . . . . . . . . . . . . . . . . . . 3.1.1 reacTIVision . . . . . . . . . . . . . . . . . . 3.1.2 Touchlib . . . . . . . . . . . . . . . . . . . . . 3.1.3 CCV (Comunity Core Vision) vroeger: T-Beta 3.2 Gateway applicaties . . . . . . . . . . . . . . . . . . . 3.2.1 Flosc . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
11 11 11 12 13 13 13
ii
. . . . . . . . . . . . .
. . . . . . . . . . . . .
iii
Inhoudsopgave
3.3
3.2.2 TUIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3 Cliënten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Ontwikkeling 4.1 Algemeen . . . . . . . . . . . . 4.1.1 Benodigdheden . . . . . 4.1.2 Plexiglas . . . . . . . . . 4.1.3 Infrarode led’s . . . . . . 4.1.4 Projectiedoek . . . . . . 4.1.5 Compliant surface . . . . 4.1.6 Camera . . . . . . . . . 4.1.7 Projector . . . . . . . . 4.2 Opbouw . . . . . . . . . . . . . 4.2.1 Materialen . . . . . . . . 4.2.2 Kosten van het materiaal
14 14 15
. . . . . . . . . . .
16 16 16 16 17 18 18 19 19 19 19 21
5 Testopstelling 5.1 Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Start en opbouw . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22 22 22
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
6 Experimenten, metingen, tests 35 6.1 Verschillende materialen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.1.1 Sulky Solvy vs. bare acylic . . . . . . . . . . . . . . . . . . . . . . . 35 6.1.2 Rosco grey vs. bare acylic . . . . . . . . . . . . . . . . . . . . . . . 35 6.1.3 Rosco Grey met Sulky Solvy als compliant surface . . . . . . . . . . 35 6.1.4 Bare acylic vs Rosco Grey in combinatie met Sulky Solvy als compliant surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2 IR folie tegen overvloedig infrarood licht . . . . . . . . . . . . . . . . . . . 37 6.3 Gezandstraald plexiglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 7 Handleiding voor het installeren van de benodigde software 7.1 Beschrijving van het programma . . . . . . . . . . . . . . . . . 7.2 Configuratie van CCV . . . . . . . . . . . . . . . . . . . . . . 7.3 Kalibratie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Config.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Update: naamsverandering . . . . . . . . . . . . . . . . 7.5 Running Flash Demos . . . . . . . . . . . . . . . . . . . . . . 7.6 Multi Touch Vista . . . . . . . . . . . . . . . . . . . . . . . . 7.6.1 Installatie driver . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
39 39 41 42 44 45 47 48 49
iv
Inhoudsopgave 8 Verklaring van de code achter het opstartprogramma 8.1 Bespreken van de code . . . . . . . . . . . . . . . . . . 8.1.1 Het schrijven naar een logfile . . . . . . . . . . . 8.1.2 Verwijderen van processen . . . . . . . . . . . . 8.1.3 Opstarten Community Core Vision (CCV) . . . 8.1.4 Acties Community Core Vision . . . . . . . . . 8.1.5 Opstarten Multi Touch Vista . . . . . . . . . . 9 Conclusie
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
52 52 53 55 57 58 62 64
Lijst van figuren 2.1 2.2 2.3 2.4 2.5 2.6
FTIR . . . . . . . . TIR . . . . . . . . . schema TIR . . . . . Diffused Illumination Microsoft Surface . . Wiimote whiteboard
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
4 4 5 6 7 8
3.1 3.2 3.3 3.4
Fiducial . . . . . . . . . . . . Touchlib vensters in Windows Blob’s in Touchlib . . . . . . . TUIO . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
11 12 12 14
4.1 4.2
Led brekingshoek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 21
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17
Prototype in SketchUp . . . . . . . . . . . . . houten frame . . . . . . . . . . . . . . . . . . Het led ribbon in het aluminium frame . . . . Webcam SPC900NC . . . . . . . . . . . . . . Webcam SPC900NC na bewerking . . . . . . Webcam met filter . . . . . . . . . . . . . . . CCV . . . . . . . . . . . . . . . . . . . . . . Calibratie . . . . . . . . . . . . . . . . . . . . Source Properties . . . . . . . . . . . . . . . Calibratiescherm . . . . . . . . . . . . . . . . Einde Calibratie . . . . . . . . . . . . . . . . Rosco Grey aangespannen onder het plexiglas Toegemaakt frame . . . . . . . . . . . . . . . send TUIO . . . . . . . . . . . . . . . . . . . Ocra . . . . . . . . . . . . . . . . . . . . . . . BumpTop . . . . . . . . . . . . . . . . . . . . BumpTop menu . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
23 24 24 25 25 26 26 27 27 28 29 29 30 31 33 34 34
6.1
Sulky solvy vs bare acylic . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
v
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
vi
Lijst van figuren 6.2 6.3 6.4
Rosco vs bare acylic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sulky Solvy en Rosco Grey . . . . . . . . . . . . . . . . . . . . . . . . . . Final test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36 37 37
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9
CCV GUI . . . . . . . . . . . . . CCV (Tbeta) settings . . . . . . CCV update . . . . . . . . . . . CCV geminimaliseerd . . . . . . Flash player security settings . . Visual Studio include header files MTV service console . . . . . . . WPF configuration . . . . . . . . Driver-console . . . . . . . . . .
39 42 45 46 47 49 50 50 51
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
Verklarende woordenlijst • Blob: Een aanraakpunt op het oppervlak dat door de camera geregistreerd wordt. • Multi-touch: Een interactieve techniek die het mogelijk maakt om met één of meerdere users een grafisch display met meer als één vinger te controleren. • Blob tracking: Aan elke blob wordt een ID (identificatienummer) toegekend. Bij elke momentopname (bij onze webcam 30 beelden per seconde of 30fps) moeten we de blob’s met elkaar vergelijken om ervoor te zorgen dat bij het verschuiven van een vinger over het scherm het blob ID hetzelfde blijft. • Blob detection: het proces dat de blob’s gaat detecteren in een camerabeeld en vervolgens de coördinaten, ID’s en meerdere gegevens gaat doorsturen naar de applicatie. • Tracker: Het programma dat beelden neemt van een camera, dat beeld bewerkt door er filters op toe te passen en dan uiteindelijk de positie, grootte en beweging van een blob doorstuurt naar de gewenste ontvanger. • Tracking data: Coördinaten van de blob, blob-formaat, touch-events. • Touch-events: Multi-touch bewegingen die herkend worden door de tracking software zoals vinger omhoog of omlaag bewegen, de vingers uit elkaar bewegen voor een afbeelding te vergroten enz. • TUIO: Een protocol (gebruikt door CCV (Tbeta) en Touchlib) dat de positie, grootte, en de relatieve bewegingen van blob’s doorgeeft. Het is gebaseerd op OSC en de gegevens worden doorgestuurd via het UDP protocol. • Cliënt: Een programma dat de tracking informatie van de blob tracker ontvangt. • IRcamera: Een camera zonder infra-rood filter die speciaal ontworpen is voor het opvangen van infra-rood licht. Het is ook mogelijk om een standaard webcam te nemen en de IR filter de verwijderen. 1 Voor meer info over het verwijderen van de infrarode filter in een webcam, ga naar de volgende website: http://www.thuisexperimenteren.nl/apparatuur/IRWebCam/irwebcam.htm 1
vii
Hoofdstuk 0. Verklarende woordenlijst
viii
• Hovering: Hovering is de mogelijkeid om blob’s te creëren zonder werkelijk het scherm aan te raken, dit is mogelijk door gebruik te maken van de 3de zwakkere dimensie die aanwezig is bij een DI setup.
Hoofdstuk 1 Inleiding 1.1 1.1.1
Hoe zijn we tot onze bachelorproef bekomen Nick
Een van deze voorstellen die we voorhanden kregen leek mij zeer interessant, namelijk multi-touch technologie. Vandaar dat ik contact opnam met de contactpersoon van het bedrijf namelijk Kristof Valkenborgh, daarna werd ik uitgenodigd om eens langs te komen en te bespreken wat de bachelorproef juist zou inhouden. Het werd al snel duidelijk dat dit een niet te onderschatten project zou worden, maar wel zeer interessant waardoor het volgens mij wel mogelijk was om het project te doen slagen.
1.1.2
Dennis
Waarom dit project mij aanspreekt is om volgende redenen. Ik vind dat dit project beide vakken (zowel ICT als elektronica) omvat. Nog een reden waarom dit mij zo fascineert is de, net op de markt gekomen, touch screen GSM’s zoals de Iphone. Wat mij echt heeft overtuigd is een filmpje dat ik op youtube heb gevonden van Jeff Han 1 , waar een demonstratie over de mogelijkheden van een multi-touch screen staat.
1
http://www.youtube.com/watch?v=UcKqyn-gUbY
1
Hoofdstuk 1. Inleiding
1.2
Samenwerk
1.3
Globale schets van de bachelorproef
2
Het einddoel van onze bachelorproef is het ontwerpen en realiseren van een multi-touch screen. Enkele aspecten die we tijdens deze stage uitvoeren zijn: de verschillende technieken onderzoeken waarmee we het einddoel zouden kunnen realiseren, de benodigde materialen zoeken waarmee we het multi-touch screen kunnen bouwen, zoals webcam of IRcamera, projector, opstelling, grootte scherm enz... Het onderzoek naar de verschillende technieken gebeurt in de eerste semester. In de 2de fase (2de semester), na de onderzoeksfase, bouwen we het multi-touch screen. We zullen elke optie bekijken in verband met het gebruik van tracking software (Tbeta, Touchlib, Reactable, ...). Met tracking software bedoelen we de software die nodig is voor het opvangen van de blob’s. Die software zal de coördinaten doorgeven naar de gewenste applicaties. Verder zijn er veel opties mogelijk, een van deze opties is het maken van applicaties in een .NET omgeving zoals o.a. in WPF2 en Silverlight3 . Een andere optie is om gebruik te maken van de ingebouwde multi-touch functie van de nieuwe versie van Windows die momenteel nog in bèta versie is, namelijk Windows 7.
2 3
http://en.wikipedia.org/wiki/Windows_Presentation_Foundation http://silverlight.net/
Hoofdstuk 2 Multi-touch Technologieën In dit hoofdstuk beschrijven we de verschillende technieken die gebruikt kunnen worden om een multi-touch screen te maken. Dit werk is grotendeels in de eerste semester verricht, deze technieken en technologieën blijven steeds evolueren aan een hoog tempo.
2.1
Frustrated Total Internal Reflection
Een projector projecteert de video-out van een computer op het scherm, van onder- of bovenaf. Het scherm bestaat (vaak) uit een acrylplaat, siliconenlaag en projectiedoek. Op de zijkant van het plexiglas is een rij IR ledjes gemonteerd, die hun IR licht in de plaat richten. Door de totale interne breking, total internal reflection, blijven de IR stralen door het plexiglas heen weerkaatsen. Wanneer er iets op het scherm wordt geplaatst, bijvoorbeeld een vinger, wordt die breking onderbroken of gefrustreerd, waardoor het IR licht op dat punt naar buiten de plaat wordt gericht waar er een IRcamera (of webcam zonder IR filter) is bevestigd om het infra rode licht op te vangen, vervolgens zal de tracker de coördinaten bepalen en deze doorzenden naar de applicaties via een protocol zoals TUIO in CCV. TIR Total Internal Reflection. Totale interne reflectie (TIR) is een optisch verschijnsel dat optreedt als licht onder een bepaalde hoek invalt op een scheidingsvlak met een optisch minder dicht materiaal (zie figuur 2.3 op pagina 5). Vanaf een bepaalde hoekgrootte (=kritische hoek), wordt het licht niet meer gebroken, maar volledig inwendig weerkaatst. TIR wordt onder andere gebruikt in glasvezeloptica.
3
Hoofdstuk 2. Multi-touch Technologieën
Figuur 2.1: FTIR
Figuur 2.2: TIR
4
Hoofdstuk 2. Multi-touch Technologieën
5
Figuur 2.3: schema TIR
2.1.1
Eigenschappen FTIR
• Infrarood licht wordt in de plaat geschenen door middel van led’s. • Door interne breking blijven de IR stralen door de plaat heen schieten. • Wanneer er druk op de plaat wordt uitgeoefend, door bijvoorbeeld een vinger, wordt die breking onderbroken. • Er is onderaan een IRcamera aanwezig om het IR licht op te vangen als er op het scherm wordt gedrukt. • De software vangt dit camerabeeld op, filtert de ruis er uit en geeft de coördinaten van de blob door. • Over het scherm wordt een projectiedoek gelegd. • Er is een projector aanwezig die langs onder op het scherm schijnt en het beeld op het projectordoek projecteert.
2.2
Diffused Illumination
Bij deze techniek wordt het scherm van onderaf beschenen door IR-kanonnen, (meestal) cirkelvormige platte lampen, gevuld met IR led’s. Over het scherm wordt weer een projectiedoek gelegd, waar het IR licht enigszins doorheen kan schijnen. Als nu bijvoorbeeld een hand over het scherm wordt gezwaaid, of op het scherm wordt gedrukt, wordt het IR licht verstrooid, wat vervolgens weer gedetecteerd wordt door een IRcamera, die de tracker dan weer omzet in tracking data. Dan wordt er gebruik gemaakt van een protocol om deze data door te sturen zoals TUIO.
Hoofdstuk 2. Multi-touch Technologieën
6
Figuur 2.4: Diffused Illumination
2.2.1
Eigenschappen DI
• De plaat van plexiglas (of acrylic) wordt van onderaan beschenen met IR licht. • Over het scherm wordt een projectiedoek gelegd waar het IR licht doorheen kan schijnen • Wanneer er over het scherm wordt gezwaaid of op het scherm wordt gedrukt met een hand, vinger of voorwerp, wordt het IR licht verstrooid. • Dit wordt opgevangen door een IR camera die het weer omzet in digitale signalen die de software kan aansturen. • Er is een projector aanwezig die langs onder op het scherm schijnt en het beeld op het projectordoek projecteert. • Er is een 3de maar zwakkere dimensie aanwezig, ook boven het scherm kunnen bewegingen opgevangen worden. Dit komt doordat wanneer men het scherm niet aanraakt, er nog steeds schaduwen aanwezig zijn die gedetecteerd kunnen worden als blob’s.
2.2.2
Voorbeeld: Microsoft Surface
Zoals te zien is op de figuur 2.5 op pagina 7 bestaat Microsoft Surface uit 5 verschillende IR camera’s en een projector, en natuurlijk een computer om de gegevens te verwerken
Hoofdstuk 2. Multi-touch Technologieën
7
voor het creëren van de blobs’s. De multi-touch tafel van Microsoft is zo geperfectioneerd dat de 3de dimensie te verwaarlozen is.
Figuur 2.5: Microsoft Surface
2.2.3
Tracking Your Fingers with the Wiimote
Door middel van een led array en reflecterende tape kan je de infrarood camera in de Wiimote[16] gebruiken om objecten zoals onder andere vingers in de lucht te traceren. (Zie figuur 2.6 op pagina 8) Dit maakt het mogelijk om met de computer te communiceren simpelweg door met je handen in de lucht te zwaaien (vergelijking met film ’Minority Report’) 1 2
2.2.4
Eigenschappen Wiimote
• De Wiimote kan tot 4 punten tegelijk detecteren. • Er is een bron van IR licht nodig op het te detecteren punt. • De Wiimote is verbonden met de pc via Bluetooth3 .
2.3
’GAP’
Een weinig bekende/toegepaste techniek waarbij twee lagen worden gemaakt. Een scherm laat dat ongeveer 0,5mm tussen zichzelf en een plexiglazen plaat zodat wanneer er op dat http://www.imdb.com/title/tt0181689/ youtube: http://www.youtube.com/watch?v=NwVBzx0LMNQ 3 http://www.bluetooth.com/bluetooth/ 1 2
Hoofdstuk 2. Multi-touch Technologieën
8
Figuur 2.6: Wiimote whiteboard plexiglas gedrukt wordt, de lagen elkaar aanraken en IR licht gaan verstrooien, wat weer kan worden opgepikt door een camera.
2.4
Active Matrix LCD
De techniek waarbij IR licht & camera’s overbodig zijn. De ’touch’ wordt afgevangen door bijvoorbeeld lichtgevoelige diodes, geplaatst tussen de projectiediodes, of op een andere manier waarbij een elektrische matrix wordt gebruikt. Voorbeelden hiervan zijn de iPod Touch en iPhone. Het grote voordeel aan deze techniek is de ruimtebesparing doordat je geen gebruik met maken van een projector. Helaas zijn er nog geen low budget oplossingen voor, en blijft het ontwikkelen van een LCD beperkt tot bedrijven die een grote financiële armslag en een R&D afdeling hebben. Bedrijven, academici en DIY particulieren zijn echter druk bezig deze vorm te ontwikkelen, en hierin ligt dan ook de toekomst van multi-touch. De reden dat we geen gebruik gemaakt hebben van deze technologie is omdat we hier minder spelingvrijheid hebben en vanwege de hoge kost.
2.5 2.5.1
Beperkingen technologieën FTIR
FTIR heeft in vergelijking met andere technologieën geen al te grote beperkingen. De allergrootste is dat het plexiglas ingecoat moet worden met een soort rubber, dit noemt men een compliant surface (meer daarover in hoofdstuk 4), zonder een compliant surface worden de blob’s niet duidelijk weergegeven en moet je stevig druk uitoefenen op het
Hoofdstuk 2. Multi-touch Technologieën
9
plexiglas wat ook niet de bedoeling is. Voor- en nadelen De voor en nadelen van FTIR Voordelen • Er is geen gesloten kast nodig. • De blob’s hebben een sterk contrast. • Mogelijkheid tot variabele blob pressure. • Met een compliant oppervlak kan een zeer klein drukpunt gebruikt worden, zoals bijvoorbeeld dat van een penpunt. Nadelen • De set-up vraagt voor een soort van LED frame (solderen is nodig). • Vereist een compliant oppervlak (silicone rubber). • Kan geen voorwerpen of herkenningstekens herkennen. (Zie hoofdstuk 3 voor meer informatie over fiducials) • Men kan geen glazen oppervlak gebruiken (plexiglas is nodig).
2.5.2
DI
DI heeft als grootste beperking dat het minder gevoelig en nauwkeurig is als de FTIR methode, er is ook een 3de maar zwakke dimensie aanwezig wat het touch oppervlak gevoeliger maakt voor omgeving licht, bijvoorbeeld als het multi-touch screen te dicht bij het raam staat of door invallende lichtstralen en extra IR stralen afkomstig van Tl-buizen of lampen. Voor- en nadelen De voor en nadelen van DI Voordelen • Er is geen compliant oppervlak nodig. • Geen LED frame nodig. • Niet solderen.
Hoofdstuk 2. Multi-touch Technologieën
10
• Een simpele set-up. • Kan objecten, vingers, herkenningsvoorwerpen traceren, heeft ook een extra dimensie. Nadelen • Moeilijk om helder beeld te krijgen. • De blob’s hebben een lager contrast waardoor ze moeilijker te traceren zijn door de tracking software. Een lager contrast kan veroorzaakt worden doordat er weinig IR licht weerkaatst wordt. • Grotere kans op valse blob’s door de aanwezigheid van de 3de zwakke dimensie. • Gesloten kast is nodig.
2.5.3
Wiimote
De Wiimote heeft als allerbelangrijkste beperking dat er maar tot 4 punten tegelijkertijd geregistreerd kunnen worden door de Wiimote, en hierdoor is deze methode niet echt geschikt als multi-touch applicatie. Men kan met deze technologie wel een multi-touch whiteboard maken. Ook een ander nadeel is dat je steeds een bron van infra rood licht in je hand moet hebben, of iets dat IR licht weerkaatst van een IRbron.
Hoofdstuk 3 Software In dit hoofdstuk bespreken we de verschillende applicaties die gebruikt kunnen worden om blob’s te detecteren, en op welke manier deze naar de applicaties worden doorgestuurd.
3.1 3.1.1
Tracking software reacTIVision
ReacTIVision1 is een open-source programma voor het detecteren van blob input’s. Het heeft als mogelijkheid het herkennen van fiducial markers (zie figuur 3.1 op pagina 11). Fiducial markers kan je op een bepaald voorwerp kleven, aan de software kan je dan vertellen op wat voor voorwerp je dit aan hebt bevestigd. Zo kan je door voorwerpen op het scherm te leggen, bepaalde applicaties starten. Bijvoorbeeld: Je kleeft een fiducial op een factuur, je geeft aan de software mee welk factuurnummer bij deze fiducial hoort. Wanneer je de fiducial dan op het scherm legt zal de factuur geopend worden en kan je dit bekijken op het multi-touch screen. Dit is niet mogelijk met een FTIR set-up, dit is ook de reden waarom we geen gebruik gaan maken van ReacTIVision.
Figuur 3.1: Fiducial 1
http://reactivision.sourceforge.net/
11
12
Hoofdstuk 3. Software
3.1.2
Touchlib
Touchlib2 is een blob tracker voor het maken van multi-touch interactie oppervlakken. Het beheert de blob’s van infrarood licht, en stuurt deze gebeurtenissen naar programma’s door, zoals ’finger down’ ,’finger movement’, en ’finger release’. Touchlib omvat een configuratieapplicatie en een paar demo’s die je direct kunt gebruiken, en is compatibel zijn met de meeste types van webcams en video opname apparatuur.
Figuur 3.2: Touchlib vensters in Windows
Figuur 3.3: Blob’s in Touchlib 2
www.nuigroup.com/touchlib/
Hoofdstuk 3. Software
3.1.3
13
CCV (Comunity Core Vision) vroeger: T-Beta
CCV3 (zie figuur 7.2 op pagina 42) is een open source/cross platform solution voor computer vision en multi-touch sensing. Het neemt een video stream als input welk door de webcam wordt opgevangen, bewerkt deze input frames (30 of 60 frames per seconde bij een webcam) en stuurt tracking data zoals coördinaten, identificatienummer, omvang van de blob’s, als output. CCV bevat een configuratie applicatie die meer uitgebreid is als die van Touchlib maar in feite hetzelfde doet, maar het verschil ligt er in dat CCV meer gebruikersvriendelijk is. CCV bevat ook een foto demo om je op weg te zetten, en je multi-touch screen te testen. CCV kan communiceren met de meeste types van webcams en andere video capture devices.
3.2
Gateway applicaties
Gateway applicaties brengen de blob informatie door naar de cliënt applicaties die de input van deze gateway applicaties verwachten. Zoals te zien is op figuur 3.4 op pagina 14. Met cliënt applicaties bedoelen we de speciaal voor multi-touch ontworpen applicatie waarmee de gebruiker in contact komt.
3.2.1
Flosc
Flosc[2]4 is een Java server die met iedere applicatie die van het OSC protocol gebruik maakt kan communiceren. De voornaamste reden waarom wij FLOSC gebruiken is omdat het kan communiceren met Macromedia Flash (versie 5 en later) door gebruik te maken van de XMLSocket feature. Flosc gedraagt zich als een gateway tussen OSC en flash, het laat toe berichten in beide richtingen te verzenden. Flosc kan ook meerdere input behandelen van verschillende OSC connecties en Flash cliënten, en kan ook meerdere berichten naar verschillende Flash cliënten sturen, maar maakt geen gebruik van routing. De meest eenvoudige manier om Flosc te bekijken is als een gateway (of brug) tussen de UDP wereld van OSC en de TCP wereld van Flash XMLSockets. Open Sound Control (OSC) OSC[9]5 is een protocol dat gebruikt wordt bij het communiceren tussen computers, sound synthesizers en andere multimedia toepassingen die geoptimaliseerd zijn voor moderne netwerk technologieën. OSC brengt de voordelen van communicatie (networking) naar de wereld van elektronische muziekinstrumenten. OSC werkt op breedband netwerk snelheden en kan versturen over meerdere transport protocollen, maar de meest gebruikte is UDP vanwege de snelste overbrenging van data naar de bestemming. http://ccv.nuigroup.com http://benchun.net/flosc/ 5 http://en.wikipedia.org/wiki/OpenSound_Control 3 4
14
Hoofdstuk 3. Software
3.2.2
TUIO
TUIO6 [14] [15] is een open protocol (zie schema 3.4 op pagina 14) dat de gegevens doorzendt zoals touch events en tangible object statussen (fiducials). Het protocol encodeerd data van een tracker applicatie en TUIO cliënt libraries voor allerlei programmeer omgevingen, zowel als applicaties die het protocol ondersteunen. TUIO is gebaseerd op OSC en werkt op dezelfde manier. TUIO kan dus makkelijk geïmplementeerd worden op elk platform dat OSC ondersteunt.7
Figuur 3.4: TUIO
3.2.3
Cliënten
We gaan het hier alleen over de cliënt spreken die wij zelf gebruiken namelijk Multi Touch Vista. Als we het hier over een cliënt hebben hebben we het over een programma dat de blob data gaat ontvangen. Er bestaan ook talrijke andere cliënten zoals Creative, ReacTIVision (zowel tracker als cliënt), TouchSpy. Multi Touch Vista (MTV) MTV is een user input management layer die input van verschillende soorten trackers kan behandelen zoals Touchlib en CCV dat gebruik maakt van TUIO, multiple mice dat toelaat met meerdere muizen aangesloten op de pc elk verschillend te besturen. Het laat dat toe standaard applicaties herschaalt te worden en geroteerd worden in een multi-touch stijl en ontvangt gestandaardiseerde input. Het is een framework waarop multi-touch input WPF applicaties kunnen gebouwd worden. MTV ondersteund Windows 7, vista en XP. In MTV zit een driver voor Windows 7 waardoor we gebruik kunnen maken van de standaard ingebouwde multi-touch functies van Windows 7. 6 7
http://www.tuio.org/ http://mtg.upf.edu/reactable/pdfs/GW2005-KaltenBoverBencinaConstanza.pdf
Hoofdstuk 3. Software
3.3
15
Conclusie
Nadat we alle technologieën naast elkaar hebben gelegd, hebben we samen met Item Solutions beslist om FTIR als techniek te kiezen voor het maken van het multi-touch screen. De redenen waarom we voor FTIR kiezen zijn: minder storingsgevoelig (3de dimensie van DI is hier niet aanwezig), er wordt gebruik gemaakt van led’s die in de zijkanten van het plexiglas schijnen waardoor we geen extra IRbron onderaan in de opstelling moeten hebben. Hier staan namelijk al een projector en IRcamera, een IRbron zou de opstelling van deze andere twee bemoeilijken. Ook een beslissende factor in de keuze voor FTIR was het feit dat er veel meer info te vinden was op het internet en fora waardoor de bouw (hardwarematig) van het multi-touch screen zou bespoedigen, ook bij eventuele problemen zouden we niet radeloos moeten zoeken naar een oplossing, maar is er meer kans dat andere mensen dit probleem al eerder voor hebben gehad en het hebben kunnen oplossen. Dit bespaart ons veel tijd, en er is veel tijd nodig (vanwege de gloednieuwe techniek) voor het bouwen van de applicaties, of het compatibel maken van reeds bestaande applicaties die gemaakt zijn met het oog op multi-touch. Als blob tracker hebben we gekozen voor CCV welk gebruik maakt van het TUIO protocol.
Hoofdstuk 4 Ontwikkeling 4.1
Algemeen
De benodigde materialen nodig voor het construeren van een FTIR multi-touch screen.
4.1.1
Benodigdheden
• Acrylic/Polycarbonate/Plexiglas. • Infrarode led’s (of een gelijkaardige IRbron). • Compliant Surface (silicone rubber bv. Sorta Clear 401 , Elastosil2 , Lexel3 , etc. ). • Projectie opperplak (Rosco Grey4 , Vellum5 , Mylar6 , etc.). • Infrarode Camera/gemodificeerde webcam.
4.1.2
Plexiglas
Bij de aanschaf ervan werd rekening gehouden met de dikte, afhankelijk van de oppervlakte van het scherm. Doorbuigen van een groot, maar dun scherm werkt niet prettig, verstoort het IR licht in het plexiglas en beïnvloedt het projectiebeeld. Daarom is er een minimum dikte van 8mm nodig, bij een scherm met een oppervlakte groter dan 1 vierkante meter raden we zeker een dikte van 12mm aan. http://www.reynoldsam.com/index.php?cPath=2_1115_1134 http://www.wacker.com/cms/en/products-markets/trademarks/elastosil/elastosil.jsp 3 http://www.sashcosealants.com/Home_Improvement/Lexel.aspx 4 http://www.rosco.com/us/screens/roscoscreen.asp 5 Vellum is een soort perkament, dat is ongelooide dierenhuid, vooral bedoeld als materiaal om op te schrijven en te schilderen. 6 http://www.dalite.com/products/product.php?cID=10&pID=403 1 2
16
Hoofdstuk 4. Ontwikkeling
4.1.3
17
Infrarode led’s
De led’s schijnen infrarood licht van de zijkant in het plexiglas. Hierbij hebben een aantal factoren een invloed, namelijk: • De helderheid van de zijkant van het plexiglas. Hoe helderder, hoe beter. Begin daarom met grof schuurpapier te schuren aan de zijkanten van het plexiglas, en verklein langzaam de korrel (tot waterschuurpapier niveau), tot het plexiglas langs de zijkanten glashelder is. Een andere optie die veel eenvoudiger is, is bij aankoop van het plexiglas de zijkanten laten polijsten, dit bespaart veel tijd en garandeert een goede gepolijste rand. • De hoek van de zijkant van het plexiglas. Het doel is de IR straal zo kort mogelijk door de dikte van het plexiglas te laten schieten, dus veel raakpunten creëren op de boven- en onderkant. Hierdoor gaat logischerwijs de gevoeligheid van het scherm omhoog. Het is de bedoeling dat je de stralingshoek van de led goed kiest zodat er zoveel mogelijk raakpunten zijn in het plexiglas. (Zie figuur 4.1 op pagina 18) • De Golflengte van de IR led’s. De ideale Golflengte ligt rond de 880 nm, omdat de webcam meer gevoelig is voor deze Golflengte. 880nm ligt namelijk dichter bij het zichtbaar licht waar een webcam voor gemaakt is om op te vangen. • De lichtsterkte van de IR led’s. De ideale intensiteit, vooral voor grote oppervlaktes, ligt op minimaal 120 mW/sr. De gemiddelde intensiteit van een IR led ligt tussen de 10-40 mW/sr, voor dit moet je zeker uitkijken dat je wel een juist maximaal vermogen led hebt omdat een te zwakke led niet genoeg vermogen zal hebben om de het licht te laten breken in het plexiglas. Een led met voldoende vermogen zal zonder problemen het plexiglas vullen met infrarood licht. • De stralingshoek van de IR led’s. Er zijn 2 types led’s, led’s met een platte kop, en de anderen met bolle kop. De platte kop levert een grotere hoek op (zo’n 160 graden), dus hebben logisch gezien een betere verstrooiing van het licht in het plexiglas, en ze kunnen tegen de plaat aan gemonteerd worden. De bolle kop heeft een kleinere hoek (zo’n 30 graden), maar levert met een schuine hoek van het plexiglas hetzelfde effect op. Een eenvoudigere oplossing is het aanschaffen van infrarode led strips (infrared led ribbon). Dit is voor gefabriceerd led lint dat je zo in het frame kan plakken zonder zelf te hoeven solderen. Dit led lint is hier speciaal voor gemaakt en levert een uistekend resultaat. Deze strips zijn verkrijgbaar7 in 850nm en 980nm. Ledstrips zullen duurder uitkomen als gewone led’s, maar zijn veel eenvoudiger te gebruiken, zo verklein je ook je foutenmarge. http://www.led1.de/shop/product_info.php?pName=led-smd-modul-flexible-cuttable-50cm-infrared850nm-p-1194 en http://www.environmentallights.com/products/12395/Dimmable_LED_Ribbon_foot_IR850 7
18
Hoofdstuk 4. Ontwikkeling
Figuur 4.1: Led brekingshoek
4.1.4
Projectiedoek
Wat betreft het projectiedoek hangt het ervan af of de projector van voor of achter op het doek projecteert. In de meeste FTIR gevallen zal dit van onder- of achteraf zijn. Op deze manier heeft de projectie minder last van omgevingslicht. Dit betekent wel dat het doek enigszins lichtdoorlatend8 moet zijn. Een ander belangrijk gegeven is dat hoe donkerder het doek is, hoe meer (en beter) contrast te zien is. Bij (professioneel) doek betekent dit dat de kijkhoek vermindert naarmate het doek donkerder is, en dat het ook minder licht doorlaat. Ervaringen van de NUI Group[8] laten zien dat Rosco Grey de beste keus is en dit doek wordt ook beschreven door Jeff Han[5] die een van de grondleggers van de FTIR techniek is.
4.1.5
Compliant surface
Zonder deze laag moet er wel heel hard gedrukt worden wil er een duidelijke blob ontstaan. De techniek er achter is eigenlijk eenvoudig. De siliconenlaag vormt een extensie van het plexiglas, het infrarode licht dringt daar ook in door. Als het in wordt gedrukt, wat gemakkelijk gaat vanwege de eigenschappen van polymeren/rubberachtigen, wordt het interne IR licht verstoord. Zodoende levert het met minder druk sneller een duidelijkere blob op. Wat betreft de dikte zijn er dunne lagen (<1mm) die goedkoper zijn, vanwege het gebruik van minder siliconenpasta voor het gieten, en minder kans op luchtbelletjes in de siliconen opleveren, die het infrarode licht geen goed doen. Maar ze kunnen minder goede blob’s opleveren. Bij dikkere lagen (1-2 mm) zijn er sneller goede blob’s. 8
Zoals onder andere Rosco Grey.
Hoofdstuk 4. Ontwikkeling
19
Het aan te raden product hiervoor is: Sort A Clear 409 . De manier van aanbrenging is als volgt: Je rolt met een verfroller de silicone uit over het projectiedoek en laat het dan drogen, dit herhaal je 2 of 3 maal tot er een laag van ongeveer 1mm op het doek ligt.
4.1.6
Camera
De functie van de camera is het opvangen van IR licht. Op elke webcam is een infrarood filter aangebracht. Dit is omdat infrarood licht het beeld zou verstoren en de kleuren zouden niet correct weergegeven worden door het infrarode licht dat voldoende aanwezig is in het dagelijkse leven (TL buizen, zonlicht,...). Een webcam kan dus geschikt gemaakt worden om voor IR licht te ontvangen door deze filter eruit te demonteren. (Zie figuur 5.5 op pagina 25)
4.1.7
Projector
De projector projecteert het beeld op het projectiedoek dat op of onder de plexiglazen plaat ligt. Er moet rekening gehouden worden met de afstand waarop de projector van het scherm staat, het volledige beeld moet erop kunnen geprojecteerd worden. Als men de afstand tot de plaat niet erg groot wenst (bijvoorbeeld voor bureauhoogte van 70cm, of nog lager voor koffietafelhoogte op ongeveer 40cm) kan men gebruik maken van een groothoek-projector, deze kunnen bijvoorbeeld op een afstand van 30cm geplaatst worden en het dezelfde projectie oppervlak hebben als een standaard projector die op 2 meter afstand moet geplaatst moet worden.
4.2
Opbouw
We zijn op zoek gegaan naar de meest geschikte materialen die we voor dit project zouden gebruikt kunnen worden. Op basis van een vergelijkende studie hebben we besloten de volgende materialen aan te kopen.
4.2.1
Materialen
• Plexiglas: We hebben 2 platen met volgende afmetingen: 56 x 100 cm (10mm dik), en 176 x 99 cm (12mm dik). • Hout: Genoeg om het hele frame op te bouwen. • Aluminium: 4 u-frames van 12cm dik om het plexiglas in te leggen, en de IR ribbons in te plaatsen zodanig dat het IR licht in het plexiglas geschenen wordt. 9
http://www.reynoldsam.com/index.php?cPath=2_1115_1134
Hoofdstuk 4. Ontwikkeling
20
• Infrarode led’s: We hebben IR lint besteld van een Duitste fabrikant 10 met een lengte van 5m. We hebben voor de 850nm ledstrips gekozen omdat een webcam deze Golflengte duidelijker kan waarnemen, onze IR bandpassfilter is ook gekozen op deze Golflengte van 850nm. • Projector: Om het beeld te projecteren op de projectiedoek onder het plexiglas, hiervoor hebben we de projector SANYO PLC XL 5111 gekozen. • Projectiedoek: We hebben gekozen voor Rosco Grey vanwege de goede eigenschappen als projectiedoek en vanwege de documentatie van Jeff Han (Zie bijgevoegde PDF ’p115-han.pdf’). • Neutrale lens: Een lens zonder IR filter, 4.3mm CCTV camera board lens IR DVR gekocht op www.ebay.com. Dit is een lens zonder IR filter. • IR band-pass filter: Een band-pass filter gekozen op de Golflengte van de IR led’s, in ons geval 850nm.
10 11
http://www.led1.de http://www.limitview.com/sanyo-plcxl51-p-247.html
21
Hoofdstuk 4. Ontwikkeling
4.2.2
Kosten van het materiaal
Zoals te zien is in figuur 4.2 op pagina 21 zijn de ledstrips, de projector, projectiedoek en het plexiglas de duurste uitgaven. Op de projector kan bespaard worden. Er kan voor een standaard projector gekozen worden en deze met spiegels12 laten projecteren op het projectiedoek. Op het projectiedoek kan eveneens bespaard worden door een doek van een goedkoper merk te kopen. De uiteindelijke kostprijs van het multi-touch scherm komt uit op ongeveer 3000 Euro, wat nog steeds veel minder is dan de multi-touch tafel van Microsoft. Deze kost minimum 10000 Euro13 .
Figuur 4.2: Kosten
http://robertpriewasser.com/stuff_projects/programming/rearproject/shockwave/index.html http://gizmodo.com/gadgets/touch-me/microsoft-surface-confirmed-touch+sensitive-10k-minorityreport-table-264338.php 12 13
Hoofdstuk 5 Testopstelling 5.1
Prototype
Omdat we geen ervaring hadden in het bouwen van een multi-touch screen leek het ons erg verstandig om niet direct aan het grote werk te beginnen en eerst een prototype te maken. Zo kunnen we de software testen en kunnen we ook de verhoudingen van IRcamera (goedkope webcam in dit geval) en het plexiglas bepalen, ook met de verhouding van projector en plexiglazen plaat kunnen we op deze manier experimenteren. Het uiteindelijke scherm zou op een ratio 16:9 (99cm x 176cm) gemaakt worden, en zal met een aluminium frame gemaakt worden. Het prototype zullen we uit hout maken op schaal 1/3 (56cm x 100cm).
5.1.1
Start en opbouw
Bij de start zijn we gestart met de opbouw van het prototype, allereerst hebben we materiaal gaan kopen in een plaatselijke doe-het-zelf zaak zoals hout, aluminium, schroeven, enz. We hebben van het hout een frame gemaakt voor het plexiglas te dragen. Frame en projector We hebben een digitaal prototype ontwikkeld met Google SketchUp1 om een idee te krijgen van het uiteindelijke ontwerp. (Zie figuur 5.1 op pagina 23) Op basis van dit prototype hebben we het eigenlijke frame gebouwd. Bouw van het frame Om te beginnen hebben we een ondersteunend frame gebouwd waar het glas komt op te liggen. Daar hebben we dan poten onder bevestigd. Al snel bleek dat dit ontwerp niet stevig genoeg ging zijn om een goede werking te hebben van onze tafel. Door het inzien 1
http://sketchup.google.com/
22
Hoofdstuk 5. Testopstelling
23
Figuur 5.1: Prototype in SketchUp van onze fout hebben we onderaan de poten verstevigingsbalken geplaatst waardoor het een steviger geheel zou worden. Nadat de projector geleverd was hebben we een lastige ontdekking gedaan. De projector moest verder buiten het kader van de tafel komen dan we oorspronkelijk hadden berekend doordat de hoek waaronder de projector straalt groter was dan oorspronkelijk gedacht. Hierdoor hebben we nog een stuk aan de tafel moeten aanbouwen waar de projector op kan geplaatst worden. Het stuk dat we voor de projector moesten aanbouwen was niet zo eenvoudig vanwege de hoek waaronder de projector op het scherm projecteert. Met het nodige meetwerk hebben we de projector toch op de juiste plaats gekregen om het geprojecteerde beeld op het doek te krijgen. Het was zeer belangrijk bij de constructie dat we rekening hielden met de projection distance van de projector. Deze is namelijk -4cm (ter referentie: de projectiedoek is het nulpunt) voor deze grootte van scherm. Met andere woorden, de projector steekt 4 cm uit boven het scherm en moet op een afstand van ongeveer 30cm geplaatst worden. Hierdoor kwamen we ook tot de vaststelling dat het geprojecteerde oppervlak iets groter was dan uitgerekend op 16:9 ratio. Omdat het wel de bedoeling is dat heel het beeld op het scherm komt moesten we de projector dus nog hoger plaatsen, namelijk op -5cm en deze iets schuin plaatsen zodat we de keystone moesten bijregelen, hierdoor hebben we dan ook kleine aanpassingen gedaan aan het frame die we niet op voorhand hadden ingepland omdat in de specificaties van de projector de afmetingen van ons scherm wel overeen kwamen.
24
Hoofdstuk 5. Testopstelling
Figuur 5.2: houten frame Aluminium frame en led ribbon
Figuur 5.3: Het led ribbon in het aluminium frame Eenmaal de ruwe bouw van de tafel klaar was, dan hebben we het aluminium frame op maat gezaagd. Daar kleven we het IR ledribbon in. Voordat we het led ribbon in het frame zouden plakken hebben we eerst getest of dit werkte. Dit hebben we moeten doen met de al reeds gemodificeerde webcam omdat IR licht niet zichtbaar is met het blote oog. Ook niet voor een normaal fototoestel sinds hier ook een IR filter op geplaatst is. Dit was helemaal niet zo moeilijk want er was aan de led ribbon al een kleefband voorzien. Vervolgens plaatsen we het plexiglas in het aluminium frame, het alluminium frame met plexiglas op de houten constructie leggen en starten met testen van de blob detectie.
25
Hoofdstuk 5. Testopstelling Webcam
Allereerst hebben we de webcam gedemonteerd om de IR filter te verwijderen, dit is ons niet gelukt bij dit type webcam waardoor het ons nodig leek om een andere lens te bestellen zonder filter. We hebben ook besloten om een volledig nieuwe behuizing te maken voor deze webcam zodat de montage onder het scherm makkelijker zou zijn. Eveneens hebben we een nieuwe lens in de webcam geplaatst. Afbeelding 5.5 Omdat de filter niet op de lens gemonteerd kon worden hebben we hier ook een extra behuizing voor moeten maken zodat we de filter recht boven de lens kan geplaatst worden en dat er alleen IR licht in de lens kan schijnen. Afbeelding 5.6
Figuur 5.4: Webcam SPC900NC
Figuur 5.5: Webcam SPC900NC na bewerking
26
Hoofdstuk 5. Testopstelling
Figuur 5.6: Webcam met filter CCV (vroeger T-Beta genaamd) Nadat grotendeels het hardwarematige gerealiseerd was konden we het softwarematige gedeelte meer uitgewerkt worden, namelijk de blobdetectie.
Figuur 5.7: CCV We moeten CCV volledig afstellen om perfecte blob detectie te hebben. Dit hebben we kunnen verwezenlijken door de verschillende instellingen te wijzigen tot er perfecte blobs tevoorschijn kwamen. Deze verschillende instellingen zijn de Threshold Slider, de Smooth Slider, de Highpass Blur Slider en Highpass Noise en ten slot de Amplify Slider. De methode om deze instellingen te optimaliseren is toegelicht in hoofdstuk 7 1. Threshold Slider - Past het niveau van de toelaatbare Tracked pixels aan. Pixels
27
Hoofdstuk 5. Testopstelling
Figuur 5.8: Calibratie minder dan de drempelwaarde worden verwijderd en de pixels boven de drempelwaarde worden opgespoord en bijgehouden. 2. Remove Background Button - Vangt het huidige bron beeldframe op en gebruikt het als een statische achtergrond afbeelding, dit word afgetrokken van de huidige actieve frame waardoor de achtergrond verdwijnt en zwart wordt. 3. Smooth Slider - Effent het beeld en filtert ruis (willekeurige specs) uit de afbeelding. 4. Highpass Blur Slider - Verwijdert de onscherpe delen uit het beeld en behoudt de scherpere meer heldere delen. 5. Highpass Noise - Filtert de noise (willekeurige specs) uit de afbeelding na toepassing highpass Blur. 6. Amplify Slider - Maakt zwakke pixels helderder als blob’s te zwak zijn, dit wordt gebruikt om hen sterker te maken. De volgende stap is het correct instellen van CCV. Eerst moeten we het scherm zo spiegelen dat wanneer je de onderkant van het scherm aanraakt er ook werkelijk aan de onderkant een blob wordt gedetecteerd.
Figuur 5.9: Source Properties
28
Hoofdstuk 5. Testopstelling
Aan de hand van de instellingen weergegeven in figuur 5.9 op pagina 27 gaan we het beeld horizontaal of vertikaal spiegelen. Als de blob’s juist georiënteerd staan moeten we er nu nog voor zorgen dat de blob’s zo goed mogelijk onder de vingers terecht komen. Dit kunnen we makkelijk doen door CCV te kalibreren. Door op C te drukken komen we in deze modus terecht. (Zie figuur 5.10 op pagina 28)
Figuur 5.10: Calibratiescherm In deze modus kan je een aantal aanpassingen doen, namelijk het aantal punten waarmee je het scherm wil afstellen (zowel horizontaal als verticaal). Het is mogelijk om het canvas te verplaatsen, verder zijn er nog een aantal sneltoetsen die gebruikt kunnen worden, namelijk B waardoor de achtergrond terug opnieuw van het beeld wordt afgetrokken. X: hiermee ga je terug naar het vorige scherm (zie figuur 5.7 op pagina 26). C is de belangrijkste toets om te kalibreren. Bij het indrukken krijgen de groene + tekens een rode cirkel om zich heen (zie 5.8 op pagina 27), hier moet je met je vinger zo nauwkeurig mogelijk op drukken tot de cirkel blauw oplicht. Dit doe je voor alle + tekens en dan is het scherm gekalibreerd. Om te kijken of je wel nauwkeurig genoeg hebt gedrukt kan je nu met je vingers over het scherm gaan en kijken of de bollen die verschijnen recht onder je vingers staan. (Zie 5.11 op pagina 29) Als dan de blob’s nauwkeurig onder je vingers staan, dan kunnen we een aantal demo’s gaan uitproberen. De demo’s die we hebben getest zijn die van CCV zelf. De meest interessante demo die we gedaan hebben is de foto demo. Hier kunnen we meerdere foto’s tegelijkertijd verslepen en vergroten met een aantal vingerbewegingen. De andere demo’s die werkte zijn van TouchLib. Dit programma is ook een blob detectie programma dat bijna exact het zelfde werkt dan CCV. Het enige grote verschil zijn de instellingen, deze worden bij TouchLib in meerdere schermen gedaan. Hiermee hebben we een aantal leuke demo’s kunnen doen zoals smoke, piano en ripple2 . Bij deze demo’s worden er rook effecten en water rimpels getoond op het scherm. 2
http://eaict-multitouch.blogspot.com/2009/03/demo.html
29
Hoofdstuk 5. Testopstelling
Figuur 5.11: Einde Calibratie Na verschillende tests Na een hele reeks van tests om de goede blob’s te verkrijgen hebben we de projectiedoek onder het scherm en over het houten frame gespannen. het scherm wordt boven de projectiedoek geplaatst, de reden is dat we anders te zwakke blob’s krijgen. Het belangrijkste is dat het scherm goede blob’s kan doorgeven aan het systeem, zodat je het multi-touch screen goed kan bedienen. Het nadeel aan het plaatsen van de doek onder het scherm is dat hij de neiging heeft om door te hangen. Vandaar dat het belangrijk is dat we het doek zo strak mogelijk onder het scherm op spannen. (Zie figuur 5.12 op pagina 29.)
Figuur 5.12: Rosco Grey aangespannen onder het plexiglas In een latere fase hebben we de tafel helemaal toe gemaakt. Dit hebben we gedaan met op maat gezaagde platen die we tegen het frame hebben genageld. In één van de zijkanten hebben we een deurtje gemaakt. Dit is handig om later nog aanpassingen te kunnen doen aan de tafel.
30
Hoofdstuk 5. Testopstelling
Figuur 5.13: Toegemaakt frame Windows 7 We merkten met het testen van de kalibratie en de demo’s dat de PC die we eerst hadden niet krachtig genoeg was om al deze taken (CCV , Multi Touch Vista) vlot te verwerken. Daarom hebben we besloten om een betere en snellere PC te gebruiken (omdat we hiervoor ook de kans toe hadden) en hier onmiddellijk de nieuwe Windows 7 op te installeren. Windows 7 heeft een ingebouwde multi-touch functie, vandaar dat we hiervoor hebben gekozen. Specificaties PC • Processor: Intel Core2 CPU 6600 @ 2,40GHz • Memory (RAM): 2,00Gb Multi Touch Vista (MTV) Om te starten hebben we alle benodigde software opnieuw geïnstalleerd. Om Windows 7 multi-touch te activeren hebben we een aparte windows 7 multi-touch driver nodig om deze te laten communiceren met de ingebouwde Windows 7 multi-touch functie. Deze windows 7 multi-touch driver kunnen we vinden in MTV 3 , dit is een open-source project dat nog in volle ontwikkeling is. We openen de solutions uit de main source map en compileren in Visual Studio in de volgende volgorde: 1. Multitouch.InputProviders.sln 2. Multitouch.Service.sln 3
http://www.codeplex.com/MultiTouchVista
31
Hoofdstuk 5. Testopstelling 3. Multitouch.Configuration.sln 4. Multitouch.Framework.sln 5. Multitouch.Driver.sln
Om Multitouch.Framework.sln te compileren moet u Windows SDK 4 geïnstalleerd hebben. In deze 5 solutions voegen we een aantal files van CCV in (include) zodat Multitouchvista TUIO kan ontvangen van CCV. Als dit allemaal op een correcte manier gebeurd is, dan moeten er een aantal programma’s in een juiste volgorde gestart worden. Opstarten van CCV.exe en vink de knop send TUIO aan (zie figuur 5.14 op pagina 31). Daarna starten we multitouch.service.console.exe. In multitouch.configuration.wpf.exe (zie figuur 7.8 op pagina 50) veranderen we multiple mice naar TUIO input provider. Ten slotte starten we multitouch.driver.console.exe.
Figuur 5.14: send TUIO Nu kunnen we Windows 7 bedienen met ons multi-touch screen. Niet alle toepassingen of programma’s in Windows 7 kunnen multi-touch bediend worden. Wij hebben al ontdekt dat foto’s vergroot, verkleind en gedraaid kunnen worden door multi-touch bewegingen. In Microsoft Paint kunnen we ook met verschillende vingers tegelijkertijd tekenen, hiervoor moet je wel de brushes selecteren. Automatische opstart Om het opstarten van Windows onmiddellijk multi-touch actief te maken hebben we een programma geschreven in C#. In dit programma worden een aantal configuratiesettings automatisch ingesteld. Het programma omvat het opstarten van Comunity Core Vision.exe (CCV.exe), multitouch.service.console.exe, multitouch.configuration.wpf.exe en multitouch.driver.console.exe. CCV Bij het opstarten van CCV zijn er nog een aantal toetsen die het programma moet zenden. Er zijn 2 mogelijke opstart functies. Dat is de normale startup mode en de kalibratie mode. • Startup mode Bij de startup mode moet er in eerste instantie op B gedrukt worden, dit is om de achtergrond te verwijderen en daarna op spatie, dit is om het programma 4
http://www.microsoft.com: Windows 7 SDK
Hoofdstuk 5. Testopstelling
32
te verkleinen en de fps naar het maximum te krijgen. Hoe hoger de fps waarde hoe sneller bewegingen gedetecteerd zullen worden. • Kalibratie mode Bij de kalibratie mode zal er eerst op B gedrukt worden om de achtergrond te verwijderen. Dan wordt er op C gedrukt, hierdoor gaan we naar het kalibratie scherm. Ten slot druk je nogmaals op C om de kalibratie te starten. Log In het programma houden we een log file bij, moest er ooit een fout optreden dat we kunnen kijken waar de fout zich bevind. Log reset De logfile wordt gereset voordat we deze opnieuw schrijven. We hebben niets aan een logfile die niet recent is. Als de log gereset word is het ook veel eenvoudiger om in de log file een fout te zoeken. Hide Alle programma’s die worden aangeroepen worden naar de achtergrond verplaatst en zijn niet meer zichtbaar voor de gebruiker. Kill We killen eerst alle programma’s die we gaan aanroepen. Dit doen we om er zeker van te zijn dat we niet 2 maal het zelfde programma gaan uitvoeren. Het uiteindelijke programma wordt in de startup folder van de program files op de C schijf van Windows geplaatst. Door dit te doen zal het programma mee opstarten met Windows en zal de multi-touch tafel klaar zijn voor gebruik zonder zelf iets te instellen. Surface SDK Als mogelijke aanvulling op onze bachelorproef hebben we ook geprobeerd om Microsoft Surface te installeren op onze computer. Het gaat hier wel om een simulatieversie sinds Microsoft hun volledige programma niet vrijgeeft op het internet. We kunnen niet bevestigen of deze SDK zal reageren op multi-touch input. Installatie van Surface SDK Verkrijg een MSI file van Surface SDK. Installeer Visual Studio 2008 Express edition of hoger en het XNA 2.0 Framework runtime5 . Installeer Ocra, deze is niet apart verkrijgbaar, download de volledige SDK6 . Verwijder volgende platform checks. Open de SurfaceSDKWE.msi file in Ocra. Selecteer Launchcondition in het linkerpaneel, selecteer dan vervolgens de geselecteerde rijen in de screenshot. (zie 5.15 op pagina 33 ) Rechterklik, en selecteer Drop Row. Dit zal de checks voor 64bit, Windows Vista verwijderen. • Installed OR (VersionNT=600 AND ServicePackLevel>=1) 5 6
http://www.microsoft.com: Microsoft XNA Framework Redistributable 2.0 http://msdn.microsoft.com/en-us/windows/bb980924.aspx
33
Hoofdstuk 5. Testopstelling • Installed OR NOT VersionNT64
• Installed OR VISTASKU="Business"OR VISTASKU="Ultimate"OR VISTASKU="Enterprise"
Figuur 5.15: Ocra Installeer de SDK. Nu dat de MSI file aangepast is om de checks te verwijderen kunnen we de SDK normaal installeren7 . BumpTop Het laatste dat we hebben gedaan is een speciale desktop geïnstalleerd genaamd ’BumpTop’ (zie figuur 5.16 op pagina 34). Dit is een desktop die lijkt op een doos waar je leuke dingen mee kan doen. Het lijkt alsof je de pictogrammen echt onder je vinger hebt. Ze zijn te manipuleren net zoals documenten als in het echte leven. Je kunt pictogrammen aan de muren plakken, door slideshows gaan, van pictogrammen stapels maken enzoverder. Met de rechter muistoets komt er niet het traditionele venster tevoorschijn maar een leuk keuzeronde waar bijna dezelfde functies in staan dan het traditionele venster. (Zie figuur 5.17 op pagina 34 ) http://www.brianpeek.com/blog/archive/2009/03/10/install-the-surface-sdk-on-windows-7-and-orx64.aspx [4] 7
34
Hoofdstuk 5. Testopstelling
Figuur 5.16: BumpTop
Figuur 5.17: BumpTop menu
Hoofdstuk 6 Experimenten, metingen, tests 6.1
Verschillende materialen
Onderstaande test’s zijn ter vergelijking uitgevoerd met dezelfde instellingen, in werkelijkheid hebben we de instellingen zodanig proberen aan te passen van het best mogelijke resultaat te krijgen.
6.1.1
Sulky Solvy vs. bare acylic
We dachten eerst Sulky Solvy te gebruiken als compliant surface, maar door deze test blijkt dat dit hiervoor niet erg geschikt is, het resultaat was niet wat we verwacht hadden. (Zie figuur 6.1 op pagina 36). Het onderste gedeelte van het scherm is bedekt met Sulky Solvy en het andere gedeelte is alleen plexiglas. Op beide vlakken wordt er even hard gedrukt en het resultaat is dat bij gelijke druk de blob minder goed zichtbaar is als bij bare acrylic voor waar we deze bedekte met Sulky Solvy.
6.1.2
Rosco grey vs. bare acylic
In deze test (zie figuur 6.2 op pagina 36) hebben we het effect van Rosco grey zonder compliant surface getest. Zoals duidelijk te zien is op afbeelding 6.1 op pagina 36 is het resultaat zeer slecht en krijg je zelfs wanneer je zeer hard op het scherm drukt geen duidelijke blob’s wanneer er Rosco over het plexiglas ligt.
6.1.3
Rosco Grey met Sulky Solvy als compliant surface
In deze test (zie figuur 6.3 op pagina 37) hebben we het effect vergeleken met de vorige tests als we Rosco over Sulky Solvy leggen. De onderkant van de figuur is bedekt met Sulky Solvy en de linkerkant met Rosco Grey. Resultaat: we krijgen geen blob’s, we kunnen Sulky Solvy dus niet gebruiken als compliant surface.
35
Hoofdstuk 6. Experimenten, metingen, tests
36
Figuur 6.1: Sulky solvy vs bare acylic
Figuur 6.2: Rosco vs bare acylic
6.1.4
Bare acylic vs Rosco Grey in combinatie met Sulky Solvy als compliant surface
Op beide oppervlakken wordt dezelfde kracht uitgeoefend om een blob te produceren. Terwijl bij Rosco Grey en Sulky Solvy niets te zien is, verschijnen er duidelijke en zeer sterke blob’s op het bare acylic, dus hebben we besloten om nog steeds bij bare acylic te blijven en de projectiedoek onder de plexiglazen plaat te leggen. (Zie 6.4 op pagina 37)
Hoofdstuk 6. Experimenten, metingen, tests
37
Figuur 6.3: Sulky Solvy en Rosco Grey
Figuur 6.4: Final test
6.2
IR folie tegen overvloedig infrarood licht
We hebben een infrarood blokkerende folie aangebracht op het oppervlak van het plexiglas. Wanneer er veel infrarood omgevings licht aanwezig is (bijvoorbeeld van Tl-lampen) gaat de kwaliteit van de blob detectie zeer achteruit en moet CCV mogelijk met nieuwe instellingen werken. Het is nodig om dit licht buiten het systeem te houden, daarom hadden we gedacht om een IR folie aan te brengen die 90% van het infrarode licht blokkeert. Dit experiment was geen succes. Het resultaat dat we verkregen was niet hetgeen waar we
Hoofdstuk 6. Experimenten, metingen, tests
38
op gehoopt hadden. De IR folie zorgt ervoor dat De blob’s niet geregistreerd worden wat de folie in de eerste plaats nutteloos maakt waardoor het niet nodig was om met testen door te gaan.
6.3
Gezandstraald plexiglas
Wanneer men probeert te slepen op het oppervlak van ons scherm kan het zijn dat dit niet erg vlot gaat en dat men soms geen vlotte beweging kan maken met de vinger door het oppervlak van het glas. We werden hierdoor geïnspireerd door Microsoft Surface (welk een soort van mat, niet glad, oppervlak heeft), de sleepbeweging met de vinger over het oppervlak gaat bij MS Surface zonder enige wrijving. Het resultaat dat we hiermee verkregen was ronduit slecht. Het mat gemaakte oppervlak zorgde ervoor dat het infrarode licht afkomstig van de IR led’s in de zijkant van het frame niet verspreid werd over het oppervlak. Dit matte plexiglas was dus volledig onbruikbaar voor een FTIR set-up. Het matte glas is bruikbaar bij andere technieken zoals DI.
Hoofdstuk 7 Handleiding voor het installeren van de benodigde software 7.1
Beschrijving van het programma
Figuur 7.1: CCV GUI 39
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
40
1. Source Image - Laat het onbewerkte videobeeld zien van ofwel de camera of een video file. 2. Use Camera Toggle - Neemt als input de camera en de tracker bewerkt elk frame van het camera beeld. 3. Use Video Toggle - Neemt als input video en de tracker bewerkt elk frame van het video beeld. 4. Previous Camera Button - Neemt de vorige camera als input device als er meerdere camera’s zijn aangesloten op de computer. 5. Next Camera Button - Neemt de volgende camera als input device als er meerdere camera’s zijn aangesloten op de computer. 6. Tracked Image - Laat het eind beeld zien na filtering welke gebruikt wordt door blob detectie en tracking. 7. Show IDs Toggle - Laat elk ID nummer zien voor elke blob die de tracker opvangt. 8. Show Outlines Toggle - Laat paarse omgrenzingen zien rond de aanraakpunten op het bronbeeld (source image). 9. Threshold Slider - Pas het aantal pixels aan dat acceptabel is voor te detecteren. Pixels die minder sterk zijn dan de threshold waarde zullen verwijderd worden en pixels boven deze waarde zullen gedetecteerd worden. 10. Remove Background Button - Vangt het huidige bron beeld van de webcam op en gebruikt het om het als statische achtergrond afbeelding afgetrokken te worden van het huidige actieve frame. Druk op deze knop om het huidige beeld te detecteren en een nieuwe achtergrond afbeelding op te slaan. 11. Dynamic Subtract Toggle - De achtergrond afbeelding wordt dynamisch aangepast. Zet dit aan als het omgevingslicht vaak veranderd of als er steeds valse blob’s blijven verschijnen door omgevingsveranderingen. 12. Smooth Slider - Vlakt het beeld af en filtert de ruis uit het beeld. 13. Highpass Blur Slider - Verwijderd de onduidelijke gedeeltes van het beeld. 14. Highpass Noise - Filtert de ruis uit het beeld na de onduidelijke gedeelten uit het beeld te verwijderen. 15. Amplify Slider - Versterkt zwakkere pixels. Als de verkregen blob’s zeer zwak zijn kan je dit gebruiken om ze sterker te maken. 16. On/Off Toggle - Gebruikt op elke filter, dit wordt gebruikt om elke filter uit of aan te kunnen zetten.
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
41
17. Camera Settings Button - opent het camera settings venster, dit venster is eigen aan elke webcam of camera. 18. Flip Vertical Toggle - Draait het scherm vertikaal. 19. Flip Horizontal Toggle - Draait het scherm horizontaal. 20. GPU Mode Toggle - Zet hardware acceleratie aan en gebruikt de GPU. Dit wordt alleen best op nieuwere grafische kaarten gebruikt. 21. Send TUIO Toggle - Selecteer of er TUIO berichten worden gestuurd. 22. Enter Calibration - Laad het calibratie scherm. 23. Save Settings - Sla alle huidige gegevens op in een Config.xml file. Bron1
7.2
Configuratie van CCV
De volgende stappen zijn nodig voor het configureren van CCV. 1. Download CCV van http://ccv.nuigroup.com. Na het downloaden en het unzippen of unrarren van het bestand plaats je de map op een makkelijk terug te vinden plaats zoals direct op de C schijf. Let ook zeker op dat je Quicktime hebt geïnstalleerd voor het runnen van CCV. 2. Als we CCV voor de eerste maal opstarten (.exe, .app, etc.) zal je de instellingen van de filters zo moeten aanpassen dat je duidelijk zichtbare blob’s verkrijgt afhankelijk van de techniek die je gebruikt. 3. CCV laat een beeld zien dat de camera opvangt, dit kan je vinden onder Source image 4. Als er meerdere camera’s aangesloten zijn op de computer en het verkeerde camerabeeld wordt weergeven dan kan je met de knoppen Next- en Previous camera het gewenste camerabeeld selecteren. 5. Wanneer er nog geen vingers aanwezig zijn op het scherm (belangrijk!) druk je op de knop Background remove, of druk je op de toets ’b’ op het toetsenbord. Als je je in een omgeving bevindt met vaak veranderend omgevingslicht, zet dan dynamic substract aan. 1
http://wiki.nuigroup.com/Getting_Started_with_tbeta
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
42
6. Zet amplify en de highpassfilter af, zet de smooth filter op en verhoog deze in kleine stappen tot de ruis verdwenen is. Als de blob’s niet sterk genoeg zijn, zet dan de Highpass en/of amplify aan om ze te versterken. 7. Als laatste stap verander (verhogen en verlagen) je de threshold slider in de tracked image tot alleen nog vingers gedetecteerd worden en valse blob’s niet meer aanwezig zijn. 8. Als alle instellingen correct zijn ingesteld en je duidelijke blob’s te zien krijgt zoals in afbeelding 7.2 op pagina 42 te zien is, kan je op Save settings drukken om deze instellingen te bewaren.
Figuur 7.2: CCV (Tbeta) settings
7.3
Kalibratie
In de volgende stappen wordt de kalibratie toegelicht. Om CCV te kalibreren voor je camera en projector, moet je het kalibratieproces opstarten. Kalibratie zorgt ervoor dat wanneer er ergens het scherm wordt aangeraakt, de touch op de
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
43
juiste plaats wordt geregistreerd. Om dit te doen moet CCV cameraruimte vertalen naar screen ruimte; dit wordt gedaan door de individuele punten tijdens het kalibratieproces aan te raken. In onderstaande stappen leggen we uit hoe je de set-up en kalibratie moet uitvoeren. Als je een beeld op een touch surface projecteert (projector of LCD) moet je de computer zo instellen dat de main monitor de video projector is, zodat CCV op het touchoppervlak geprojecteerd wordt. Wanneer alles geconfigureerd is en blob’s gedetecteerd worden in de tracked image box kunnen we gaan kalibreren. 1. Druk op de enter calibration knop of op ’c’ op het toetsenbord. Een raster van groene plus (+) tekens zal op het scherm verschijnen, dit zijn de kalibratiepunten die je moet aanraken tijdens het kalibratieproces. Er is een witte rand aanwezig die zich rond de kalibratiepunte bevindt. Als de witte rand zichtbaar is en uitgelijnd is met het touchsurface of als er geen visueel beeld wordt geprojecteerd op het touch surface, ga dan verder met stap 3. 2. Als de witte rand niet volledig zichtbaar is of niet uitgelijnd is met het geprojecteerde beeld op het touch surface volg dan de volgende stappen (die in het scherm staan beschreven). Om de randen van de witte box uit te lijnen: • Houd W ingedrukt om de bovenzijde te verschuiven. • Houd A ingedrukt om de linkerzijde te verschuiven. • Houd S ingedrukt om de onderzijde te verschuiven. • Houd D ingedrukt om de rechterzijde te verschuiven. • Tijdens het ingedrukt houden van bovenstaande toetsen samen met de pijltjestoetsen kan je de witte randen verplaatsen 3. Bij gebruik van een breedhoek lens of het meer nauwkeurig maken van een groot scherm kan je het aantal rasterpunten vermeerderen (of verminderen). nota: meerdere rasterpunten beïnvloed de prestatie van CCV niet. Om het aantal rasterpunten te wijzigen. • Druk op ’+’ om het aantal punten op de X-as te vermeerderen druk op ’-’ om te . • Om het aantal punten op de Y-as te veranderen houd je ’shift’ ingedrukt samen met 2 bovenstaande acties.
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
44
4. Wanneer bovenstaande stappen succesvol zijn uitgevoerd kan je beginnen met kalibreren door op ’c’ te drukken. 5. Een rode cirkel duid het huidige touchpunt aan, wanneer dit punt geregistreerd is (door er op te drukken met je vinger) zal het van kleur (blauw) veranderen en doorspringen naar het volgende raster punt. Wanneer er een fout gemaakt wordt druk je op ’r’ om naar een vorig punt terug te keren. Als er valse blob’s aanwezig zijn druk je op ’b’ om de achtergrond opnieuw op te slaan. 6. Na complete kalibratie van het schernm kan je de nauwkeurigheid van het scherm testen door er op te drukken en te kijken om de touch exact onder de vinger geregistreerd wordt. Is dit niet het geval keer terug naar stap 4 of keer terug naar het configuratiescherm (’x’) om de filters aan te passen.
7.4
Config.xml
Tbeta slaagt alle instellingen op in een configuratiefile. Niet alle features van Tbeta hebben het in de interface van de eerste release gehaald en moeten bijgevolg manueel aangepast worden in de config.xml file. Het gaat om volgende features: • Camera resolutie. • Netwerk IP adres en poortnummer. • Test videofile. • Maximum aantal blob’s die gedetecteerd mogen worden. 1. Als CCV geopend is moet je dit programma sluiten voordat je de config file aanpast. 2. De config.xml file kan je in de CCV data folder terugvinden. 3. De config file kan bewerkt worden met een gewone tekst editor. (notepad,..) 4. Deze features kan je manueel aanpassen. • Camera resolutie: je kan de breedte (width) en hoogte (height) aanpassen naar de gewenste waarde. CCV kiest automatisch de dichtstbijzijnde resolutie kiezen die de camera kan leveren. Deze waarde wordt steeds meegeleverd bij de specificaties.
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
45
• Camera framerate: CCV past deze waarde aan naar de dichtst bijzijnde waarde van de camera. Deze waarde wordt steeds meegeleverd bij de specificaties. • Netwerk communicatie settings: Kies de gewenste poort voor het zenden (TUIOPORT_OUT) en ontvangen (TUIOPORT_IN) van TUIO data. • Maximum aantal blob’s: verander het aantal naar het aantal maximum blob’s dat gedetecteerd wordt. 5. Sla de config file op en herstart CCV om de nieuwe instellingen te bekijken.
7.4.1
Update: naamsverandering
Tbeta is van naam veranderd en is een beetje aangepast. Het noemt nu Community Core Vision (CCV). De update is niet groot, maar er zijn toch een aantal ingrijpende veranderingen te zien.
Figuur 7.3: CCV update • De GUI heeft een naam gekregen en de console wordt uit de system tray verwijderd.
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
46
• De achtergrondafbeelding wordt automatisch verwijderd bij het opstarten van CCV. Er is een schuifbalk bijgekomen ’learn speed’ waarmee je de vertragingstijd van het uitvoeren van deze functie kan uistellen. • De track image is met meerdere schuifbalken voorzien voor nog betere instelling, zoals onder andere movement threshold waarmee je het detecteren van blobs bij een beweging gevoeliger kan maken. • Bij de communication kan je nu kiezen uit 2 verschillende mogelijkheden om TUIO te verzenden: rechtstreeks naar flash of TUIO zenden naar een poort zoals in de vorige versie. • Bij het drukken op spatie is het venster grafisch wat aangepast tegenover de vorige versie. (Zie afbeelding 7.4 op pagina 46) Het grote voordeel aan CCV is dat het geen gebruik moet maken van Flosc om een demo uit te voeren. De nieuwe optie is ’send TUIO TCP | for flash’. Dit gaat er voor zorgen dat de flosc functie wordt overgenomen. De nieuwe schuifbalken bieden de mogelijkheid om de nauwkeurigheid en de gevoeligheid in te stellen.
Figuur 7.4: CCV geminimaliseerd
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
7.5
47
Running Flash Demos
1. Open de Tbeta ’Demos’ folder. 2. Dubbelklik op de Launch FLOSC Gateway • JAVA 6+ is vereist voor het runnen van FLOSC: http://java.com/en/download/ Als deze gateway niet zou werken, ga dan naar de flosc folder en open FlashOSCv2_0_4.jar, dit zal ook FLOSC starten. 3. Let er zeker op dat je op start heb gedrukt nadat je FLOSC hebt geopend. 4. Vervolgens moeten de beveiliging settings2 van Flash aangepast worden. 5. Klik op Edit Location en dan op Add location.
Figuur 7.5: Flash player security settings 6. Browse vervolgens naar de demos folder in Tbeta en voeg deze toe. 7. Start een .swf demo met de standalone flashplayer. • Adobe Flash Player 103 - Debugger Versions: Kijk zeker na of Send TUIO aangevinkt is in CCV(Tbeta).
2 3
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html http://www.adobe.com/support/flashplayer/downloads.html
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
7.6
48
Multi Touch Vista
Volgende programma’s zijn nodig: Touchlib en OpenCV, beiden in source code. • Touchlib4 : (laatste versie) • OpenCV5 : • Multi-touch vista6 : Dit programma moet je momenteel nog zelf debuggen omdat de laatste versie geen multi touch ondersteuning biedt voor Windows 7. De driver werkt nog niet op de 64bit versie van Windows 7. Compileer de volgende bestanden in onderstaande volgorde. 1. Multitouch.InputProviders.sln 2. Multitouch.Service.sln 3. Multitouch.Configuration.sln 4. Multitouch.Framework.sln 5. Multitouch.Driver.sln Als je de eerste solution (.sln) wilt builden zal je merken dat je een error krijgt omdat een aantal header files ontbreken. Deze headerfiles kan je vinden in de source van Touchlib en OpenCV. Om deze headerfiles te includen sla je de sourcecode best op een duidelijke vaste locatie op die je makkelijk kan terugvinden. Voor te includen voer je de volgende stappen uit: 1. Open de eerste solution file. 2. Ga naar tools ’ options. 3. Ga naar VC++ directories in Projects and Solutions. 4. Verander Show directories for: naar Include files. 5. Voeg volgende locaties toe door op het mapje te klikken • OpenCV \cxcore\include • OpenCV \cv\include • touchlib-src-win32-20071106 \touchlib\include
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
49
Figuur 7.6: Visual Studio include header files Klik op OK en build de file. Ga vervolgens verder met het builden van de andere solutions, hier zouden geen headerfiles mogen ontbreken.
7.6.1
Installatie driver
How to7 Er zijn verschillende stappen die niet volledig overeenkomen met onze installatie. 1. Opstartvolgorde is licht aangepast dan in de video tutorial. 2. We gebruiken TUIO als inputdevice bij Configuration.WPF Opstartvolgorde van Multi Touch Vista om gebruik te maken van de ingebouwde multitouch functie van Windows 7. De volgende stappen voeren we uit: 1. Start Tbeta.exe en zorg ervoor dat Send TUIO aangevinkt is. 2. Ga naar Multitouch.Driver 3. Klik rechts op de folder Multitouch.Driver met ’Shift’ ingedrukt. 4. Klik op Open Command Window Here. 5. Type ’install driver.cmd’ (met dubbele aanhalingstekens!) http://code.google.com/p/touchlib/downloads/list http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16937&release_id=456897 6 http://multitouchvista.codeplex.com/SourceControl/ListDownloadableCommits.aspx 7 http://www.youtube.com/watch?v=_maaH1gecxw 4 5
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
50
6. Ga naar de device manager in Configuratiescherm. 7. Klik op Human Interface devices 8. Disable Universal Software HID Device. 9. Enable Universal Software HID Device. 10. Ga naar pen and touch in Configuratiescherm. 11. Ga naar tabblad touch. 12. Vink touchpointer aan. 13. Ga in multitouchvista map naar Main Source/output 14. Start Multitouch.Service.Console.exe • Let niet op de rode bollen in de tutorial, deze zijn enkel van toepassing als je meerdere muizen aangesloten hebt.
Figuur 7.7: MTV service console 15. Start Multitouch.Configuration.WPF
Figuur 7.8: WPF configuration
Hoofdstuk 7. Handleiding voor het installeren van de benodigde software
51
16. Kies voor TUIO als input device. 17. Ga in de multitouchvista map naar: Main Source/Multitouch.Driver/Multitouch.Driver.console/bin/debug 18. Start Multitouch.Driver.console.exe
Figuur 7.9: Driver-console 19. Als voorgaande stappen succesvol zijn uitgevoerd is het mogelijk om de standaard in Windows 7 ingebouwde multi-touch functies te gebruiken. 20. Om te testen of de multi-touch functies werken kan je MS Paint openen, selecteer ’brushes’. Er zou nu met meerdere vingers tegelijkertijd getekend moeten kunnen worden. 21. Enkele ander multi-touch functies zijn: foto’s vergroten en verkleinen, draaien, flicks8 .
Flicks zijn snelle handbewegingen over het scherm die bepaalde acties uitvoeren, zoals bijvoorbeeld een pagina terug gaan in je webbrowser. 8
Hoofdstuk 8 Verklaring van de code achter het opstartprogramma In dit hoofdstuk wordt het opstartprogramma in detail besproken. De globale werking en de configuratie werd reeds bondig uitgelegd in hoofdstuk 7. Gebeurtenissen: 1. Starten van Community Core Vision (CCV). 2. Achtergrond verwijderen in CCV. 3. CCV minimaliseren voor minimum CPU gebruik en meer fps. 4. Starten van de verschillende Multi Touch Vista processen in de juiste volgorde. 5. Alle processen naar de achtergrond verhuizen (behalve de GUI van CCV). 6. Alle events in een logfile wegschrijven. 7. Alle processen verwijderen wanneer het startup programma opnieuw gestart wordt.
8.1
Bespreken van de code
Alle verschillende acties die we doen hebben we opgedeeld in verschillende classes. Een class wordt gebruikt om code met eenzelfde verantwoordelijkheid samen te bundelen. Dit is handig om later de code gemakkelijker terug te vinden. Een class moet je instantieren vooraleer ze kan worden gebruikt in een andere class. Zo hebben we 5 verschillende classes: 1. CCVHelper 2. MultiTouchVistaHelper 3. ProcesHelper 52
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
53
4. LogHelper 5. ConfigurationHelper ConfigurationHelper configurationHelper = new ConfigurationHelper(); Dit gebruiken we om een andere class te instantieren. Zo kan de code vanuit een andere class gebruikt worden.
8.1.1
Het schrijven naar een logfile
logHelper.RemoveLog(); We houden tijdens het uitvoeren van het programma een logfile bij. Bij eventuele fouten in het programma kan aan de hand van de logfile onmiddellijk nagekeken worden waar de fout zich bevindt. Hierboven roepen we de methode op waarin we de logfile gaan verwijderen. public void RemoveLog() { { FileInfo MyFile = new FileInfo(GetLogPath()); MyFile.Delete(); } } Met bovenstaande code gaan we bij het opstarten van het programma de logfile verwijderen om vervolgens een nieuwe logfile aan te maken waar we de nieuwe lijn in schrijven. logHelper.SendToLog("Service started"); Hierboven roepen we de methode SendToLog op en geven we de string ("Service started") mee naar onderstaande code. public void SendToLog(string text) { StreamWriter log; if (File.Exists(GetLogPath())) { log = File.AppendText(GetLogPath()); }
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
54
else { log = new StreamWriter(GetLogPath()); } Als de logfile met path ’/logs/logfile.txt’ bestaat dan zal de string die meegegeven is in de bestaande logfile weggeschreven worden. Indien deze file nog niet bestaat dan zal deze aangemaakt worden. log.WriteLine(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") + " - " + text); log.Close(); } In dit gedeelte kan je zien op welke wijze de string in de logfile weggeschreven wordt. En ten slotte afgesloten wordt. private string GetLogPath() { return Environment.CurrentDirectory + "\\logs\\logfile.txt"; } Bovenstaande code geeft weer waar de logfile wordt opgeslagen.
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
8.1.2
55
Verwijderen van processen
processHelper.KillProcesses(ccvAndMTVProcessList); In bovenstaand deel van de code roepen we een methode aan die alle processen die we laten starten eerst gaat beëindigen. Dit is voor het geval dat er nog een process open staat, dit voorkomt dat het 2 maal geopend wordt. PopulateList(ccvAndMTVProcessList, GetCCVAndMTVProcesses()); Hiermee maken we een lijst aan met de meegegeven argumenten. private string GetCCVAndMTVProcesses() { return configurationHelper.GetValueForKey("CcvProcesses") + "," + configurationHelper.GetValueForKey("MTVProcesses"); } De argumenten die nodig zijn om de lijst aan te maken worden hier meegegeven. De processen worden door de GetValueForKey uit de App.config gehaald. public void KillProcesses(List<string> processList) { Process[] processRunning = Process.GetProcesses(); foreach (Process process in processRunning) { if (IsProcessInList(processList, process.ProcessName)) { process.Kill(); } } } Als een process voorkomt in de processlijst zal dit beëindigd worden. Dit zal blijven herhaald worden tot alle processen die nog open staan en in de lijst voorkomen beëindigd zijn. public void PopulateList(List<string> processList, string processes) {
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
56
string[] splitList = processes.Split(’,’); foreach (string process in splitList) { processList.Add(process); } } De lijst die we nodig hebben in de methode KillProcesses maken we aan door 2 strings op te roepen uit de App.config. Deze 2 strings koppelen we aan elkaar vast aan de hand van een komma (,). Nu hebben we nog maar 1 string ter beschikking, de process string. De process string wordt gesplitst aan de hand van een token, in dit geval een ’,’. Hierdoor verkrijgen we een lijst van strings.
De 2 strings die opgeroepen worden in de voorgaande code staat hier in de App.config geschreven. De App.config wordt gebruikt om parameters te kunnen aanpassen zonder de code terug te moeten hercompileren. Hierdoor moet je de waarde maar 1 maal vervangen. Zo maakt men de code meer dynamisch en is de kans op fouten verkleind.
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
8.1.3
57
Opstarten Community Core Vision (CCV)
Process process = ccvHelper.StartProcess(); Dit gedeelte zal de classe oproepen die ervoor zorgt dat CCV wordt opgestart. public Process StartProcess() { Process ccvProcess = new Process(); ccvProcess.StartInfo.FileName = configurationHelper.GetValueForKey("Start.Ccv"); logHelper.SendToLog("Started Ccv"); ccvProcess.Start(); Thread.Sleep(2000); return Process.GetProcessesByName("Ccv")[0]; } We kijken in de config file welke waarde de key ’Start.Ccv’ heeft. Deze key heeft als waarde het path waar de shortcut naar de executable van CCV staat, namelijk: ’C:/MTvista/CCV-1.2-win-bin/Community Core Vision.exe.lnk’ CCV wordt vervolgens opgestart en een nieuwe regel met de melding dat CCV is opgestart wordt in de logfile geschreven. Na het opstarten van CCV wachten we 2 seconden voordat we doorgaan met het uitvoeren van de volgende regel code. Na dat CCV is opgestart moeten er nog een aantal acties op worden uitgevoerd.
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
8.1.4
58
Acties Community Core Vision
ccvHelper.AfhandelenCcv(process); Hiermee roepen we de methode op waar de verschillende acties zullen uitgevoerd worden op CCV. public void AfhandelenCcv(Process process) { process.EnableRaisingEvents = true; SetForegroundWindow(process.Handle); We zetten het proces CCV op de voorgrond, dit is nodig om de keystrokes naar het programma te sturen. if (process.Responding) { if (configurationHelper.IsConfigureOnStartupSet()) { logHelper.SendToLog("Ccv Configuration entered"); SendKeys.SendWait("c"); logHelper.SendToLog("Configuration: c"); Thread.Sleep(2000); SendKeys.SendWait("c"); logHelper.SendToLog("Configuration: c "); logHelper.SendToLog("Ccv Configuration completed"); } Hier hebben we 2 mogelijkheden, CCV in normale modus opstarten of in kalibratiemodus opstarten. Dit kunnen we meegeven door een waarde IsConfigureOnStartupSet in de config file (App.config), als we daar de waarde op ’false’ zetten starten we in normale modus op, geven we de waarde ’true’ mee, dan starten we op in configuratie modus. In de bovenstaande code gaan we in kalibratie modus. Er wordt naar de logfile weggeschreven dat we de kalibratie modus zijn ingegaan. Dan sturen we de volgende keystrokes naar CCV ’c, c’, telkens met een pauze ertussen nodig om het programma de tijd te geven
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
59
om te reageren en de bewerkingen toe te passen. Als de configuratie modus volledig is opgestart wordt er ’configuration complete’ naar de logfile geschreven. In het volgende deel code wordt uitgevoerd als we de waarde in de config file op false zetten. else { logHelper.SendToLog("Startup Mode entered"); Thread.Sleep(5000); SendKeys.SendWait(" "); logHelper.SendToLog("Startup Mode: spatie"); Thread.Sleep(2000); logHelper.SendToLog("Ccv Startup Mode completed"); We schrijven naar de logfile dat we de startup mode zijn ingegaan. We wachten 5 seconden voordat we naar de volgende lijn gaan, dit is om de webcam de tijd te geven om op te starten en niet foutief de achtergrond verwijderen (’b’ drukken). Na het verwijderen van de achtergrond sturen we een ’spatie’ door naar CCV, dit zorgt ervoor dat het programma in mini modus gaat en zo weinig mogelijk system recources worden gebruikt. het aantal frames per second (fps) van de webcam gaat ook hoger liggen. processHelper.ShowHideProcess(configurationHelper.GetValueForKey ("CcvProcesses"), false, true); Hier roepen we de key ’CcvProcesses’ op, deze geeft de waarde CCV terug, we krijgen ook nog 2 waarden mee die afkomstig zijn van een ander methode in de processhelper. public void ShowHideProcess(string processName, bool hide, bool minimize) { List<string> processList = new List<string>(); processList.Add(processName); ShowHideProcesses(processList, hide, minimize); }
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
60
Het gegeven dat we terugkrijgen (CCV) is momenteel nog een string, en moet in een lijst geplaatst worden. Vervolgens geven we ook nog 2 waarden mee, namelijk ’hide’ en ’minimize’. Omdat het niet nodig is om het proces te verbergen (dit hebben we ergens anders nodig) zetten we deze waarde op ’false’. We moeten CCV minimaliseren zodat het console venster van CCV op de voorgrond staat, hiervoor geven we de waarde ’true’ mee. processHelper.ShowHideProcesses (mtvProcessesList, true, false); logHelper.SendToLog("Hidden all processes"); } Om geen last meer te hebben van de programma’s die gestart zijn om het multi-touch screen te laten werken gaan we deze programma verbergen door naar een andere classe te gaan door bovenstaande code. public void ShowHideProcess(string processName, bool hide, bool minimize) { List<string> hideProcessList = new List<string>(); hideProcessList.Add(processName); ShowHideProcesses(hideProcessList, hide, minimize); } Hier wordt de lijst van processen die van het scherm moeten verwijderd worden opgehaald. public void ShowHideProcesses(List<string> hideProcessList, bool hide, bool minimize) { Process[] processRunning = Process.GetProcesses(); foreach (Process process in processRunning) { if (IsProcessInList(hideProcessList, process.ProcessName)) { Thread.Sleep(500); int hWnd = process.MainWindowHandle.ToInt32(); if (hide) {
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
61
ShowWindow(hWnd, 0); } else { ShowWindow(hWnd, 6); } } } } In deze methode kijken we welke programma’s er allemaal geopend zijn. De programma’s in onze lijst gaan we daar mee vergelijken en als ze overeen komen verbergen we het programma. Dit doen we doen voor al de programma’s die in onze lijst voorkomen. Dit is enkel als we de lijst meegeven van de programma’s die op de achtergrond moeten runnen. PopulateList(mtvProcessesList, GetMTVProcesses()); Deze lijst wordt meegegeven om de programma’s te doen verbergen.
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
8.1.5
62
Opstarten Multi Touch Vista new MultiTouchVistaHelper().StartenMultiTouchVista(); Thread.Sleep(5000);
Deze code zal de bovenstaande methode StartenMultiTouchVista() opstarten die zich in classe MultiTouchVistaHelper() bevindt. Alle Multi Touch Vista programma’s zullen één voor één opgestart worden. public void StartenMultiTouchVista() { ConfigurationHelper configurationHelper = new ConfigurationHelper(); LogHelper logHelper = new LogHelper(); Hier wordt nogmaals een andere classe aangesproken. In dit geval is het om de logfile te schrijven en om het path van de programma’s te weten te komen. logHelper.SendToLog("started MTVista "); Eerst laten we in de logfile schrijven dat het opstarten van de verschillende programma’s van MTVista gestart is. Process.Start(configurationHelper.GetValueForKey("Multitouch.Service.Console")); logHelper.SendToLog("Started Multitouch.Service.Console"); Thread.Sleep(5000); Nu laten we het programma ’Multitouch.Service.Console’ starten’. Dit schrijven we dan ook in de logfile om aan te tonen dat dit ook werkelijk gestart is. Hierop volgt een wachttijd, dit is om te voorkomen dat de programma’s niet in de juiste volgorde opgestart worden. Process.Start(configurationHelper.GetValueForKey("Multitouch.Configuration.WPF")); logHelper.SendToLog("Started Multitouch.Configuration.WPF"); Thread.Sleep(5000); Process.Start(configurationHelper.GetValueForKey
Hoofdstuk 8. Verklaring van de code achter het opstartprogramma
63
("Multitouch.Driver.Console")); logHelper.SendToLog("Started Multitouch.Driver.Console"); logHelper.SendToLog("MTVista completed"); } Als vervolgens de 2 andere programma’s opgestart worden, namelijk ’Multitouch.Configuration.WPF’ en ’Multitouch.Driver.Console’. Ook nu wordt er in de logfile weggeschreven dat de 2 programma’s opgestart zijn. Tussen het opstarten van de 2 programma’s wordt er een wachttijd van 5 seconden ingesteld.
Hoofdstuk 9 Conclusie Het maken van een multi-touch screen is heel leerzaam geweest. We hebben nieuwe dingen ondekt waarvan we dachten dat ze onmogelijk waren. Na het nodige opzoekwerk en onderzoek hebben we besloten om FTIR te gebruiken. Dit leek ons de beste technologie om een multi-touch screen te ontwikkelen. Met deze kennis zijn we gestart met het maken van een prototype. Dit prototype heeft ons geholpen verschillende problemen die niet waren te voorzien op te lossen. Wanneer dit prototype werkte hebben we enkele bestaande demo’s getest. Tijdens het testen hebben we Tbeta en later CCV zeer goed kunnen en leren afstellen. Als laatste stap hebben we Multi Touch Vista aangepast zodat het correct samenwerkt met onze hard- en software. Een van de meest grote beproevingen was het schrijven van een opstartcode. Dit auto startup programma hebben we geschreven in C# en zorgt ervoor dat de nodige drivers en appicaties (zoals blob tracker) automatisch op de achtergrond worden opgestart. Van nul een multi-touch screen bouwen gaat niet vlot zonder grondige voorstudie. Tijdens de constructie kom je ongetwijfeld een hele boel hindernissen tegen die je moeilijk kon voorzien. Het oplossen van deze moeilijkheden was een van de uitdagingen van het maken van een multi-touch screen. De gekozen projector was niet de ideale oplossing, een projector die niet onder een bepaalde hoek projecteert zou makkelijker zijn om te gebruiken. Bijvoorbeeld het type Epson EMP400W LCD projector.
64
Bibliografie [1] Community core vision, blob tracker. http://nuicode.com/projects/tbeta/files. [2] Flosc documentatie. http://benchun.net/flosc/. 13 [3] Ftir building process. http://wiki.nuigroup.com/Building_Process. [4] Installatie surface sdk. http://www.brianpeek.com/blog/archive/2009/03/10/ install-the-surface-sdk-on-windows-7-and-or-x64.aspx. 33 [5] Jeff han documenting ftir. http://multi-touchscreen.com/. 18 [6] Multi touch vista, driver windows 7. http://www.codeplex.com/MultiTouchVista. [7] Multitouching.nl, nederlandse wiki met informatie over de verschillende technieken. http://www.multitouching.nl/wiki/index.php?title=Main_Page. [8] Nuigroup, multi-touch forum voor verschillende technieken en methoden. http://en. wikipedia.org/wiki/Multi-touch. 18 [9] Osc documentatie. http://en.wikipedia.org/wiki/OpenSound_Control. 13 [10] Perceptive pixel. http://www.perceptivepixel.com/. [11] Perceptive pixel documentatie. http://cs.nyu.edu/~jhan/ftirtouch/. [12] Reactivision, blob tracker. http://reactivision.sourceforge.net/. [13] Totale interne reflectie.
reflectie.
http://nl.wikipedia.org/wiki/Totale_interne_
[14] Tuio documentatie. http://mtg.upf.edu/reactable/pdfs/ GW2005-KaltenBoverBencinaConstanza.pdf. 14 [15] Tuio official homepage. http://www.tuio.org/. 14 [16] Wiimote, jonny chung lee. http://www.cs.cmu.edu/~johnny/projects/wii/. 7
65