|
|
@@ -93,85 +93,77 @@ To design such a mechanism properly, the following questions are relevant:
|
|
|
detection could swallow up more processing resources than desired.
|
|
|
\end{itemize}
|
|
|
|
|
|
-\chapter{Related work}
|
|
|
+\chapter{Preliminary inquiries}
|
|
|
+
|
|
|
+ \section{The TUIO protocol}
|
|
|
+
|
|
|
+ The TUIO protocol \cite{TUIO} defines a way to geometrically describe
|
|
|
+ tangible objects, such as fingers or fiducials on a multi-touch table. The
|
|
|
+ table used for this thesis uses the protocol in its driver. Object
|
|
|
+ information is sent to the TUIO UDP port (3333 by default).
|
|
|
+
|
|
|
+ For efficiency reasons, the TUIO protocol is encoded using the Open Sound
|
|
|
+ Control (OSC)\footnote{\url{http://opensoundcontrol.org/specification}}
|
|
|
+ format. An OSC server/client implementation is available for Python:
|
|
|
+ pyOSC\footnote{\url{https://trac.v2.nl/wiki/pyOSC}}.
|
|
|
+
|
|
|
+ A Python implementation of the TUIO protocol also exists:
|
|
|
+ pyTUIO\footnote{\url{http://code.google.com/p/pytuio/}}. However, the
|
|
|
+ execution of an example script yields an error regarding Python's built-in
|
|
|
+ \texttt{socket} library. Therefore, the reference implementation uses the
|
|
|
+ pyOSC package to receive TUIO messages.
|
|
|
+
|
|
|
+ The two most important message types of the protocol are ALIVE and SET
|
|
|
+ messages. An ALIVE message contains the list of session id's that are
|
|
|
+ currently ``active'', which in the case of multi-touch a table means that
|
|
|
+ they are touching the screen. A SET message provides geometric information
|
|
|
+ of a session id, such as position, velocity and acceleration.
|
|
|
+
|
|
|
+ Each session id represents an object. The only type of objects on the
|
|
|
+ multi-touch table are what the TUIO protocol calls ``2DCur'', which is a
|
|
|
+ (x, y) position on the screen.
|
|
|
+
|
|
|
+ ALIVE messages can be used to determine when an object touches and releases
|
|
|
+ the screen. For example, if a session id was in the previous message but
|
|
|
+ not in the current, The object it represents has been lifted from the
|
|
|
+ screen.
|
|
|
+
|
|
|
+ SET provide information about movement. In the case of simple (x, y)
|
|
|
+ positions, only the movement vector of the position itself can be
|
|
|
+ calculated. For more complex objects such as fiducials, arguments like
|
|
|
+ rotational position is also included.
|
|
|
+
|
|
|
+ TUIO coordinates range from $0.0$ to $1.0$, with $(0.0, 0.0)$ being the
|
|
|
+ left top corner of the screen and $(1.0, 1.0)$ the right bottom corner. To
|
|
|
+ focus events within a window, a translation to window coordinates is
|
|
|
+ required in the client application, as stated by the online specification
|
|
|
+ \cite{TUIO_specification}:
|
|
|
+ \begin{quote}
|
|
|
+ In order to compute the X and Y coordinates for the 2D profiles a TUIO
|
|
|
+ tracker implementation needs to divide these values by the actual
|
|
|
+ sensor dimension, while a TUIO client implementation consequently can
|
|
|
+ scale these values back to the actual screen dimension.
|
|
|
+ \end{quote}
|
|
|
|
|
|
% TODO
|
|
|
|
|
|
-\chapter{Methods}
|
|
|
+\chapter{Experiments}
|
|
|
|
|
|
-% TODO
|
|
|
+% testimplementatie met taps, rotatie en pinch. Hieruit bleek:
|
|
|
+% - dat er verschillende manieren zijn om bijv. "rotatie" te
|
|
|
+% detecteren, (en dat daartussen onderscheid moet kunnen worden
|
|
|
+% gemaakt)
|
|
|
+% - dat detectie van verschillende soorten gestures moet kunnen
|
|
|
+% worden gescheiden, anders wordt het een chaos.
|
|
|
+% - Er zijn een aantal keuzes gemaakt bij het ontwerpen van de gestures,
|
|
|
+% bijv dat rotatie ALLE vingers gebruikt voor het centroid. Het is
|
|
|
+% wellicht in een ander programma nodig om maar 1 hand te gebruiken, en
|
|
|
+% dus punten dicht bij elkaar te kiezen (oplossing: windows).
|
|
|
+
|
|
|
+% Tekenprogramma dat huidige points + centroid tekent en waarmee
|
|
|
+% transformatie kan worden getest Link naar appendix "supported events"
|
|
|
|
|
|
- \subsection{Preliminary inquiries}
|
|
|
-
|
|
|
- \subsubsection{The TUIO protocol}
|
|
|
-
|
|
|
- The TUIO protocol \cite{TUIO} defines a way to geometrically describe
|
|
|
- tangible objects, such as fingers or fiducials on a multi-touch table.
|
|
|
- The table used for this thesis uses the protocol in its driver. Object
|
|
|
- information is sent to the TUIO UDP port (3333 by default).
|
|
|
-
|
|
|
- For efficiency reasons, the TUIO protocol is encoded using the Open
|
|
|
- Sound Control
|
|
|
- (OSC)\footnote{\url{http://opensoundcontrol.org/specification}} format.
|
|
|
- An OSC server/client implementation is available for Python:
|
|
|
- pyOSC\footnote{\url{https://trac.v2.nl/wiki/pyOSC}}.
|
|
|
-
|
|
|
- A Python implementation of the TUIO protocol also exists:
|
|
|
- pyTUIO\footnote{\url{http://code.google.com/p/pytuio/}}. However, the
|
|
|
- execution of an example script yields an error regarding Python's
|
|
|
- built-in \texttt{socket} library. Therefore, the reference
|
|
|
- implementation uses the pyOSC package to receive TUIO messages.
|
|
|
-
|
|
|
- The two most important message types of the protocol are ALIVE and SET
|
|
|
- messages. An ALIVE message contains the list of session id's that are
|
|
|
- currently ``active'', which in the case of multi-touch a table means
|
|
|
- that they are touching the screen. A SET message provides geometric
|
|
|
- information of a session id, such as position, velocity and acceleration.
|
|
|
-
|
|
|
- Each session id represents an object. The only type of objects on the
|
|
|
- multi-touch table are what the TUIO protocol calls ``2DCur'', which is
|
|
|
- a (x, y) position on the screen.
|
|
|
-
|
|
|
- ALIVE messages can be used to determine when an object touches and
|
|
|
- releases the screen. For example, if a session id was in the previous
|
|
|
- message but not in the current, The object it represents has been
|
|
|
- lifted from the screen.
|
|
|
-
|
|
|
- SET provide information about movement. In the case of simple (x, y)
|
|
|
- positions, only the movement vector of the position itself can be
|
|
|
- calculated. For more complex objects such as fiducials, arguments like
|
|
|
- rotational position is also included.
|
|
|
-
|
|
|
- TUIO coordinates range from $0.0$ to $1.0$, with $(0.0, 0.0)$ being the
|
|
|
- left top corner of the screen and $(1.0, 1.0)$ the right bottom corner.
|
|
|
- To focus events within a window, a translation to window coordinates is
|
|
|
- required in the client application, as stated by the online
|
|
|
- specification \cite{TUIO_specification}:
|
|
|
- \begin{quote}
|
|
|
- In order to compute the X and Y coordinates for the 2D profiles a
|
|
|
- TUIO tracker implementation needs to divide these values by the
|
|
|
- actual sensor dimension, while a TUIO client implementation
|
|
|
- consequently can scale these values back to the actual screen
|
|
|
- dimension.
|
|
|
- \end{quote}
|
|
|
-
|
|
|
- \subsection{Experiments}
|
|
|
-
|
|
|
- % testimplementatie met taps, rotatie en pinch. Hieruit bleek:
|
|
|
- % - dat er verschillende manieren zijn om bijv. "rotatie" te
|
|
|
- % detecteren, (en dat daartussen onderscheid moet kunnen worden
|
|
|
- % gemaakt)
|
|
|
- % - dat detectie van verschillende soorten gestures moet kunnen
|
|
|
- % worden gescheiden, anders wordt het een chaos.
|
|
|
- % - Er zijn een aantal keuzes gemaakt bij het ontwerpen van de gestures,
|
|
|
- % bijv dat rotatie ALLE vingers gebruikt voor het centroid. Het is
|
|
|
- % wellicht in een ander programma nodig om maar 1 hand te gebruiken, en
|
|
|
- % dus punten dicht bij elkaar te kiezen (oplossing: windows).
|
|
|
-
|
|
|
- % Tekenprogramma dat huidige points + centroid tekent en waarmee
|
|
|
- % transformatie kan worden getest Link naar appendix "supported events"
|
|
|
-
|
|
|
- % Proof of Concept: VTK interactor
|
|
|
+% Proof of Concept: VTK interactor
|
|
|
|
|
|
% -------
|
|
|
% Results
|
|
|
@@ -219,19 +211,17 @@ To design such a mechanism properly, the following questions are relevant:
|
|
|
|
|
|
% TODO: Network protocol (ZeroMQ)
|
|
|
|
|
|
-\chapter{References}
|
|
|
-
|
|
|
\bibliography{report}{}
|
|
|
\bibliographystyle{plain}
|
|
|
|
|
|
\appendix
|
|
|
|
|
|
-\section{Schema of mechanism structure}
|
|
|
+\chapter{Schema of mechanism structure}
|
|
|
\label{app:schema}
|
|
|
|
|
|
% TODO: "dia"
|
|
|
|
|
|
-\section{Supported events in reference implementation}
|
|
|
+\chapter{Supported events in reference implementation}
|
|
|
\label{app:supported-events}
|
|
|
|
|
|
% TODO
|