report.tex 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. \documentclass[10pt,a4paper]{article}
  2. \usepackage[dutch]{babel}
  3. \usepackage[utf8]{inputenc}
  4. \usepackage{amsmath,hyperref,graphicx,booktabs,float}
  5. % Link colors
  6. \hypersetup{colorlinks=true,linkcolor=black,urlcolor=blue}
  7. % Paragraph indentation
  8. \setlength{\parindent}{0pt}
  9. \setlength{\parskip}{1.5ex plus 0.5ex minus 0.2ex}
  10. \title{Bachelor thesis\\Universal multi-touch event mechanism}
  11. \author{\begin{tabular}{ll}
  12. Name: & Taddeüs Kroes\\
  13. Student number: & 6054129\\
  14. E-mail address: & \texttt{taddeus.kroes@student.uva.nl}\\
  15. Adres: & Wethouder van Wijckstraat 40, 1107 BR Amsterdam\\
  16. Phone number: & 06-23437025\\
  17. supervisor: & Dr. R.G. Belleman (UvA)\\
  18. \end{tabular}}
  19. \begin{document}
  20. \maketitle
  21. \pagebreak
  22. \tableofcontents
  23. \pagebreak
  24. \section{Introduction}
  25. % Ruwe probleemstelling
  26. Multi-touch interaction is becoming increasingly common, mostly due to the wide
  27. use of touch screens in phones and tablets. When programming applications using
  28. this method of interaction, the programmer needs an abstraction of the raw data
  29. provided by the touch driver of the device. This abstraction exists in several
  30. multi-touch application frameworks like Nokia's
  31. Qt\footnote{\url{http://qt.nokia.com/}}. However, applications that do not use
  32. these frameworks consequently have no access to multi-touch events.
  33. % Aanleiding
  34. This problem was observed during an attempt to create a multi-touch
  35. ``interactor'' class for the Visualization Toolkit
  36. (VTK\footnote{\url{http://www.vtk.org/}}).
  37. % Ruw doel
  38. The goal of this thesis is to define a universal multi-touch event triggering mechanism.
  39. - Om een universeel multi-touch event 'gesture'-detectie te definiëren.
  40. % Setting/afbakening
  41. Dit onderzoek heeft als einddoel een Proof of Concept te maken, namelijk een
  42. toepassing van de universele multi-touch gesture-detectie in een VTK interactor.
  43. \subsection{Opbouw verslag}
  44. In hoofdstuk \ref{sec:vraagstelling} wordt de probleemstelling vertaald naar
  45. een doelstelling en een centrale vraagstelling.
  46. Hoofdstuk \ref{sec:deelvragen} verdeelt de centrale vraagstelling in een
  47. aantal deelvragen, die elk kort worden toegelicht.
  48. Na de vraagstelling wordt in hoofdstuk \ref{sec:afbakening} de afbakening van
  49. het onderzoeksgebied aangegeven.
  50. Vervolgens wordt de gebruikte onderzoeksmethodiek beschreven in hoofdstuk
  51. \ref{sec:methodiek}, bestaande uit een faseverdeling en een globale
  52. tijdsplanning.
  53. Tot slot wordt in hoofdstuk \ref{sec:gerelateerd} een blik geworpen op een
  54. gerelateerd project.
  55. \emph{- Rest v/d hoofdstukken beschrijven}
  56. \section{Vraagstelling}
  57. \label{sec:vraagstelling}
  58. \subsection{Doelstelling}
  59. Het doel van dit onderzoek is om een bijdrage te leveren aan het ontwikkelen
  60. van een universeel datavisualisatie-programma.
  61. In dit projectvoorstel zal naar het programma worden verwezen met de afkorting
  62. ``UVA'' (Universal Visualizaton Appliance).
  63. \subsection{Centrale vraag}
  64. Hoe kan een Proof of Concept voor een universeel datavisualisatie-programma
  65. worden gerealiseerd, gericht op 3D-visualisatie en met multi-touch interactie?
  66. \subsection{Deelvragen}
  67. \label{sec:deelvragen}
  68. \begin{itemize}
  69. \item \emph{Welke taal (en evt. framework) zijn de beste keuze om het
  70. programma in te ontwikkelen?}
  71. Het kiezen van een taal is vooral afhankelijk van de beschikbaarheid van zgn.
  72. ``libraries'' met multi-touch ondersteuning. Voor
  73. Python\footnote{\url{http://python.org}} bestaat bijvoorbeeld het
  74. applicatieframework Kivy\footnote{\url{http://kivy.org}}.
  75. \item \emph{Hoe werkt de communicatie met de multi-touch tafel?}
  76. Het is nodig om te weten wat voor ``events'' er worden ondersteund door
  77. frameworks als Kivy, om te bepalen welke touch-gebaren kunnen worden
  78. geïmplementeerd.
  79. \item \emph{Welke soorten 3D datasets zijn er en welke daarvan zijn relevant
  80. om te ondersteunen in het Proof of Concept?}
  81. De term ``3D dataset'' is een generieke benaming. Omdat de multi-touch
  82. tafel in het bezit van de UvA is, zal het onderzoek zich in eerste
  83. instantie richten op bestandsformaten die op de UvA worden gebruikt om de kans op
  84. daadwerkelijk gebruik van het programma te vergroten.
  85. \item \emph{Hoe kunnen de verschillende 3D datasets worden gevisualiseerd?}
  86. Is het bijvoorbeeld makkelijk om OpenGL commando's te gebruiken? En wanneer er
  87. vele duizenden vectoren zijn, is het dan nuttig om bijvoorbeeld clusters van
  88. vectoren te groeperen tot een enkele vector?
  89. \item \emph{Hoe kunnen multi-touch gebaren worden gebruikt in de interactie
  90. met 3D datasets?}
  91. Er moet een intuïtieve manier worden ontwikkeld voor de interactie met 3D data
  92. op een 2D scherm.
  93. \item \emph{Wat is een goede structuur die toestaat om in de toekomst nieuwe
  94. visualisatiemethodes toe te voegen?}
  95. Een universeel programma moet flexibel zijn zodat ontwikkelaars gemakkelijk
  96. nieuwe methodes kunnen toevoegen. Een voorbeeld van een al bestaand is
  97. Eclipse. Elk component van Eclipse wordt gezien is een ``plugin''. Zo'n plugin
  98. heeft een vast formaat waardoor het kan worden gebruikt in combinatie met
  99. andere plugins. Een soortgelijke structuur is wellicht nuttig om te hanteren
  100. in het UVA-programma.
  101. De structuur moet flexibel genoeg zijn om een verschillende frameworks te
  102. kunnen gebruiken in verschillende visualisatiemethodes. Kivy maakt
  103. bijvoorbeeld gebruik van een eigen main loop (een functie die zorgt voor het
  104. functioneren van de grafische interface). De loop is ``blocking'', dus is het
  105. mogelijk nodig om gebruik te maken van threads voor continue taken.
  106. \end{itemize}
  107. \subsection{Afbakening}
  108. \label{sec:afbakening}
  109. Het onderzoek zou waarschijnlijk het best tot zijn recht komen wanneer het zou
  110. worden uitgevoerd door meerdere onderzoekers. Omdat er echter slechts een
  111. enkele onderzoeker is, en er een beperkte tijd voor het onderzoek beschikbaar
  112. is, is besloten tot het maken van een Proof of Concept.
  113. %Omdat het UVA-programma expliciet als opdracht is geformuleerd, wordt in dit
  114. %onderzoek aangenomen dat er nog geen universeel programma voor
  115. %datavisualisatie bestaat.
  116. \subsection{Programma-onderdelen}
  117. \emph{- Multitouch-library}
  118. \emph{- front-end in VTK}
  119. \section{Relatie met vergelijkbaar onderzoek}
  120. \label{sec:gerelateerd}
  121. Er is gezocht naar programma's met een soortgelijke strekking met
  122. het doel er inspiratie uit op te doen, zo is het programma ``UDAV'' gevonden.
  123. UDAV\footnote{\url{http://udav.sourceforge.net/}} is een programma waarmee
  124. data op verschillende manieren kan worden gevisualiseerd met behulp van
  125. MathGL\footnote{\url{http://mathgl.sourceforge.net/}}. Om dit programma te
  126. kunnen gebruiken is kennis nodig van de MathGL syntax, waar het UVA-programma
  127. juist als eigenschap heeft dat er weinig kennis nodig is van de gebruiker.
  128. Het zou echter wel een optie zijn om visualisatiemogelijkheden in de MathGL
  129. library onder te brengen in een module voor het UVA-programma.
  130. \section{Onderzoeksmethodiek}
  131. \label{sec:methodiek}
  132. \subsection{Methode}
  133. Het UVA-programma is een nieuw soort programma, er is nog geen bestaande
  134. variant van. Dit onderzoek maakt daarom gebruik van een experimentele
  135. onderzoeksmethode\footnote{\url{http://artikelen.foobie.nl/verslagen-scripties/onderzoeksmethode-samenvatting/}}:
  136. tijdens de ontwikkeling van het programma wordt geëxperimenteerd met de
  137. beschikbare opties voor implementatie, en wordt bepaald in hoeverre deze
  138. opties voldoen aan de vooraf gestelde eisen.
  139. \subsection{Fases}
  140. Het onderzoek kan worden verdeeld in vier hoofdfases:
  141. \subsubsection*{Oriëntatiefase}
  142. De eerste fase is de oriëntatie op het werken met de multi-touch interface, en
  143. op het weergeven van voorbeeld-datasets in 3D (gebruik makend van de OpenGL-
  144. bindings\footnote{\url{http://kivy.org/docs/api-kivy.graphics.opengl.html}} in
  145. Kivy).
  146. Er moet bijvoorbeeld worden uitgezocht welke touch-gebaren worden herkend. Dit
  147. kan worden getest met behulp van een testprogramma dat een bericht toont op
  148. het moment dat een event optreedt.
  149. Ook is het nuttig om een testprogramma te maken dat met behulp van de eerder
  150. genoemde OpenGL-bindings een 3D plot maakt van een voorbeeld-dataset, om
  151. bekend te worden met de OpenGL functionaliteit.
  152. Daarnaast moet worden bepaald welke soorten 3D data gaan worden gebruikt, en
  153. hoe het formaat hiervan eruit ziet.
  154. \subsubsection*{Ontwerpfase}
  155. Met de kennis die is opgedaan tijdens de oriëntatiefase kan een ontwerp worden
  156. gemaakt van het kerncomponent van het programma, en de aansluiting hiervan op
  157. de 3D/multi-touch visualisatiecomponenten.
  158. \subsubsection*{Implementatiefase}
  159. Deze fase bevat het daadwerkelijk programmeren van de ontworpen onderdelen.
  160. Tijdens deze fase zullen ook ontwerpproblemen op een gedetailleerd niveau
  161. worden opgelost. Denk aan het invullen van de grafische interface met knoppen
  162. en eventuele widgets.
  163. \subsubsection*{Verslaglegging}
  164. Het is de bedoeling dat al tijdens de eerste drie fases wordt gewerkt aan de
  165. basis van de afstudeerscriptie. Tijdens die fases kunnen een aantal deelvragen
  166. worden beantwoord.
  167. Er zal een logboek worden bijgehouden in de vorm van Version Control. Het
  168. gebruikte Version Control systeem is Git\footnote{\url{http://git-scm.com/}}.
  169. Bij de ``commits'' worden ``commit messages'' ingevuld zodat zichtbaar is op
  170. welk moment (in welke commit) bepaalde taken zijn uitgevoerd.
  171. Tijdens de laatste fase worden de antwoorden op de deelvragen waar nodig
  172. aangevuld, en worden de overige hoofdstukken geschreven.
  173. \section{Het TUIO-protocol}
  174. \emph{- Vertellen dat het op een UDP poort binnenkomt}\\
  175. \emph{- wat komt er dan binnen?}\\
  176. \emph{- wat doet de implementatie ermee?}
  177. \section{Multitouch-library}
  178. \subsection{Threads}
  179. \emph{- Meerdere threads nodig omdat er 3 loops zijn}\\
  180. \emph{- Daemon threads voor stabiliteit}
  181. \subsection{Gebaarherkenning}
  182. \subsubsection*{Rotatie}
  183. \emph{- Tangens-vergelijking voor rotatie om centroid}
  184. \subsubsection*{``Pinch''}
  185. \emph{- Relatief verschil in afstand tot centroid}
  186. \subsubsection*{Slepen met meerdere vingers}
  187. \emph{- meerdere vingers in dezelfde richting genereert drag event met beweging van
  188. centroid}
  189. \subsection{Afvuren ``event''}
  190. \emph{- Event binding uitleggen}\\
  191. \emph{- Waarom deze manier handig is}\\
  192. \emph{- Eventueel: beschrijven welk design pattern dit is}
  193. \subsection{Toewijzing aan ``event window''}
  194. \emph{- TUIO coördinaten zijn over het hele scherm en van 0.0 tot 1.0, dus moeten worden vertaald naar pixelcoördinaten binnen een ``window''.}
  195. \section{Experimenten}
  196. \emph{- draw.py}\\
  197. \emph{- UVA front-end}
  198. \section{Conclusies}
  199. \section{Referenties}
  200. \begin{itemize}
  201. \item Homepage Robert Belleman \url{http://staff.science.uva.nl/~robbel/}
  202. \item Python homepage \url{http://python.org}
  203. \item Definitie experimentele onderzoeksmethode \url{http://artikelen.foobie.nl/verslagen-scripties/onderzoeksmethode-samenvatting/}
  204. \item Kivy homepage \url{http://kivy.org}
  205. \item Kivy OpenGL-bindings documentatie \url{http://kivy.org/docs/api-kivy.graphics.opengl.html}
  206. \item Git homepage \url{http://git-scm.com/}
  207. \item UDAV homepage \url{http://udav.sourceforge.net/}
  208. \item MathGL homepage \url{http://mathgl.sourceforge.net/}
  209. \end{itemize}
  210. \end{document}