Commit d509d424 authored by Taddeüs Kroes's avatar Taddeüs Kroes

Improved 'Introduction' and 'Design - Supporting multiple drivers' in report.

parent 019f0e6d
...@@ -114,3 +114,25 @@ ...@@ -114,3 +114,25 @@
x-fetchedfrom = "Bibsonomy", x-fetchedfrom = "Bibsonomy",
year = 2012 year = 2012
} }
@misc{mssurface,
author = "Corporation, Microsoft",
howpublished = "\url{http://www.samsunglfd.com/product/feature.do?modelCd=SUR40}",
title = "{Microsoft Surface}",
year = "2011"
}
@misc{kinect,
author = "Corporation, Microsoft",
howpublished = "\url{http://www.microsoft.com/en-us/kinectforwindows/}",
title = "{Microsoft kinect}",
year = "2010"
}
@misc{leap,
author = "{David Holz}, Michael Buckwald (the Leap Motion team)",
howpublished = "\url{http://leapmotion.com/}",
title = "{Leap}",
year = "2012"
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
\hypersetup{colorlinks=true,linkcolor=black,urlcolor=blue,citecolor=DarkGreen} \hypersetup{colorlinks=true,linkcolor=black,urlcolor=blue,citecolor=DarkGreen}
% Title Page % Title Page
\title{A generic architecture for the detection of multi-touch gestures} \title{A generic architecture for gesture-based interaction}
\author{Taddeüs Kroes} \author{Taddeüs Kroes}
\supervisors{Dr. Robert G. Belleman (UvA)} \supervisors{Dr. Robert G. Belleman (UvA)}
\signedby{Dr. Robert G. Belleman (UvA)} \signedby{Dr. Robert G. Belleman (UvA)}
...@@ -30,57 +30,72 @@ ...@@ -30,57 +30,72 @@
\chapter{Introduction} \chapter{Introduction}
% TODO: put Qt link in bibtex Surface-touch devices have evolved from pen-based tablets to single-touch
Multi-touch devices enable a user to interact with software using intuitive trackpads, to multi-touch devices like smartphones and tablets. Multi-touch
hand gestures, rather with interaction tools like mouse and keyboard. With the devices enable a user to interact with software using hand gestures, making the
increasing use of touch screens in phones and tablets, multi-touch interaction is interaction more expressive and intuitive. These gestures are more complex than
becoming increasingly common.The driver of a touch device provides low-level primitive ``click'' or ``tap'' events that are used by single-touch devices.
events. The most basic representation of these low-level events consists of Some examples of more complex gestures are so-called ``pinch''\footnote{A
\emph{down}, \emph{move} and \emph{up} events. ``pinch'' gesture is formed by performing a pinching movement with multiple
fingers on a multi-touch surface. Pinch gestures are often used to zoom in or
More complex gestures must be designed in such a way, that they can be out on an object.} and ``flick''\footnote{A ``flick'' gesture is the act of
represented by a sequence of basic events. For example, a ``tap'' gesture can grabbing an object and throwing it in a direction on a touch surface, giving
be represented as a \emph{down} event that is followed by an \emph{up} event it momentum to move for some time after the hand releases the surface.}
within a certain time. gestures.
The translation process of driver-specific messages to basic events, and events The complexity of gestures is not limited to navigation in smartphones. Some
to multi-touch gestures is a process that is often embedded in multi-touch multi-touch devices are already capable of recognizing objects touching the
application frameworks, like Nokia's Qt \cite{qt}. However, there is no screen \cite[Microsoft Surface]{mssurface}. In the near future, touch screens
separate implementation of the process itself. Consequently, an application will possibly be extended or even replaced with in-air interaction (Microsoft's
developer who wants to use multi-touch interaction in an application is forced Kinect \cite{kinect} and the Leap \cite{leap}).
to choose an application framework that includes support for multi-touch
gestures. Moreover, the set of supported gestures is limited by the application The interaction devices mentioned above generate primitive events. In the case
framework. To incorporate some custom event in an application, the chosen of surface-touch devices, these are \emph{down}, \emph{move} and \emph{up}
framework needs to provide a way to extend existing multi-touch gestures. events. Application programmers who want to incorporate complex, intuitive
gestures in their application face the challenge of interpreting these
% Hoofdvraag primitive events as gestures. With the increasing complexity of gestures, the
The goal of this thesis is to create a generic architecture for the support of complexity of the logic required to detect these gestures increases as well.
multi-touch gestures in applications. To test the design of the architecture, a This challenge limits, or even deters the application developer to use complex
reference implementation is written in Python. The architecture should gestures in an application.
incorporate the translation process of low-level driver messages to multi-touch
gestures. It should be able to run beside an application framework. The The main question in this research project is whether a generic architecture
definition of multi-touch gestures should allow extensions, so that custom for the detection of complex interaction gestures can be designed, with the
gestures can be defined. capability of managing the complexity of gesture detection logic.
% Deelvragen Application frameworks for surface-touch devices, such as Nokia's Qt \cite{qt},
To design such an architecture properly, the following questions are relevant: include the detection of commonly used gestures like \emph{pinch} gestures.
\begin{itemize} However, this detection logic is dependent on the application framework.
\item What is the input of the architecture? This is determined by the Consequently, an application developer who wants to use multi-touch interaction
output of multi-touch drivers. in an application is forced to choose an application framework that includes
\item How can extendability of the supported gestures be accomplished? support for multi-touch gestures. Therefore, a requirement of the generic
% TODO: zijn onderstaande nog relevant? beter omschrijven naar "Design" architecture is that it must not be bound to a specific application framework.
% gerelateerde vragen? Moreover, the set of supported gestures is limited by the application framework
\item How can the architecture be used by different programming languages? of choice. To incorporate a custom event in an application, the application
A generic architecture should not be limited to one language. developer needs to extend the framework. This requires extensive knowledge of
\item How can the architecture serve multiple applications at the same the framework's architecture. Also, if the same gesture is used in another
time? application that is based on another framework, the detection logic has to be
\end{itemize} translated for use in that framework. Nevertheless, application frameworks are
a necessity when it comes to fast, cross-platform development. Therefore, the
architecture design should aim to be compatible with existing frameworks, but
% Afbakening provide a way to detect and extend gestures independent of the framework.
The scope of this thesis includes the design of a generic multi-touch detection
architecture, a reference implementation of this design, and the integration of An application framework is written in a specific programming language. A
the reference implementation in a test case application. generic architecture should not limited to a single programming language. The
ultimate goal of this thesis is to provide support for complex gesture
interaction in any application. Thus, applications should be able to address
the architecture using a language-independent method of communication. This
intention leads towards the concept of a dedicated gesture detection
application that serves gestures to multiple programs at the same time.
The scope of this thesis is limited to the detection of gestures on multi-touch
surface devices. It presents a design for a generic gesture detection
architecture for use in multi-touch based applications. A reference
implementation of this design is used in some test case applications, whose
goal is to test the effectiveness of the design and detect its shortcomings.
% FIXME: Moet deze nog in de introductie?
% How can the input of the architecture be normalized? This is needed, because
% multi-touch drivers use their own specific message format.
\section{Structure of this document} \section{Structure of this document}
...@@ -109,9 +124,7 @@ the reference implementation in a test case application. ...@@ -109,9 +124,7 @@ the reference implementation in a test case application.
gestures and flexibility in rule definitions, over-complexity can be gestures and flexibility in rule definitions, over-complexity can be
avoided. avoided.
% oplossing: trackers. bijv. TapTracker, TransformationTracker gescheiden \section{Gesture recognition implementation for Windows 7}
\section{Gesture recognition software for Windows 7}
The online article \cite{win7touch} presents a Windows 7 application, The online article \cite{win7touch} presents a Windows 7 application,
written in Microsofts .NET. The application shows detected gestures in a written in Microsofts .NET. The application shows detected gestures in a
...@@ -128,6 +141,7 @@ the reference implementation in a test case application. ...@@ -128,6 +141,7 @@ the reference implementation in a test case application.
feature by also using different gesture trackers to track different gesture feature by also using different gesture trackers to track different gesture
types. types.
% TODO: This is not really 'related', move it to somewhere else
\section{Processing implementation of simple gestures in Android} \section{Processing implementation of simple gestures in Android}
An implementation of a detection architecture for some simple multi-touch An implementation of a detection architecture for some simple multi-touch
...@@ -168,50 +182,69 @@ the reference implementation in a test case application. ...@@ -168,50 +182,69 @@ the reference implementation in a test case application.
multi-touch gesture detection architecture. The chapter represents the multi-touch gesture detection architecture. The chapter represents the
architecture as a diagram of relations between different components. architecture as a diagram of relations between different components.
Sections \ref{sec:driver-support} to \ref{sec:event-analysis} define Sections \ref{sec:driver-support} to \ref{sec:event-analysis} define
requirements for the archtitecture, and extend the diagram with components requirements for the architecture, and extend the diagram with components
that meet these requirements. Section \ref{sec:example} describes an that meet these requirements. Section \ref{sec:example} describes an
example usage of the architecture in an application. example usage of the architecture in an application.
\subsection*{Position of architecture in software} \subsection*{Position of architecture in software}
The input of the architecture comes from some multi-touch device The input of the architecture comes from a multi-touch device driver.
driver. The task of the architecture is to translate this input to The task of the architecture is to translate this input to multi-touch
multi-touch gestures that are used by an application, as illustrated in gestures that are used by an application, as illustrated in figure
figure \ref{fig:basicdiagram}. In the course of this chapter, the \ref{fig:basicdiagram}. In the course of this chapter, the diagram is
diagram is extended with the different components of the architecture. extended with the different components of the architecture.
\basicdiagram{A diagram showing the position of the architecture \basicdiagram{A diagram showing the position of the architecture
relative to the device driver and a multi-touch application.} relative to the device driver and a multi-touch application. The input
of the architecture is given by a touch device driver. This output is
translated to complex interaction gestures and passed to the
application that is using the architecture.}
\section{Supporting multiple drivers} \section{Supporting multiple drivers}
\label{sec:driver-support} \label{sec:driver-support}
The TUIO protocol \cite{TUIO} is an example of a touch driver that can be The TUIO protocol \cite{TUIO} is an example of a touch driver that can be
used by multi-touch devices. Other drivers do exist, which should also be used by multi-touch devices. TUIO uses ALIVE- and SET-messages to communicate
supported by the architecture. Therefore, there must be some translation of low-level touch events (see appendix \ref{app:tuio} for more details).
driver-specific messages to a common format in the arcitecture. Messages in These messages are specific to the API of the TUIO protocol. Other touch
this common format will be called \emph{events}. Events can be translated drivers may use very different messages types. To support more than
to multi-touch \emph{gestures}. The most basic set of events is one driver in the architecture, there must be some translation from
$\{point\_down, point\_move, point\_up\}$. Here, a ``point'' is a touch driver-specific messages to a common format for primitive touch events.
object with only an (x, y) position on the screen. After all, the gesture detection logic in a ``generic'' architecture should
not be implemented based on driver-specific messages. The event types in
A more extended set could also contain more complex events. An object can this format should be chosen so that multiple drivers can trigger the same
also have a rotational property, like the ``fiducials''\footnote{A fiducial events. If each supported driver adds its own set of event types to the
is a pattern used by some touch devices to identify objects.} type common format, it the purpose of being ``common'' would be defeated.
in the TUIO protocol. This results in $\{point\_down, point\_move,\\
point\_up, object\_down, object\_move, object\_up, object\_rotate\}$. A reasonable expectation for a touch device driver is that it detects
simple touch points, with a ``point'' being an object at an $(x, y)$
The component that translates driver-specific messages to events, is called position on the touch surface. This yields a basic set of events:
the \emph{event driver}. The event driver runs in a loop, receiving and $\{point\_down, point\_move, point\_up\}$.
analyzing driver messages. The event driver that is used in an application
is dependent of the support of the multi-touch device. The TUIO protocol supports fiducials\footnote{A fiducial is a pattern used
by some touch devices to identify objects.}, which also have a rotational
When a sequence of messages is analyzed as an event, the event driver property. This results in a more extended set: $\{point\_down, point\_move,
delegates the event to other components in the architecture for translation point\_up, object\_down, object\_move, object\_up,\\ object\_rotate\}$.
to gestures. Due to their generic nature, the use of these events is not limited to the
TUIO protocol. Another driver that can keep apart rotated objects from
simple touch points could also trigger them.
The component that translates driver-specific messages to common events,
will be called the \emph{event driver}. The event driver runs in a loop,
receiving and analyzing driver messages. When a sequence of messages is
analyzed as an event, the event driver delegates the event to other
components in the architecture for translation to gestures. This
communication flow is illustrated in figure \ref{fig:driverdiagram}.
A touch device driver can be supported by adding an event driver
implementation for it. The event driver implementation that is used in an
application is dependent of the support of the touch device.
\driverdiagram{Extension of the diagram from figure \ref{fig:basicdiagram}, \driverdiagram{Extension of the diagram from figure \ref{fig:basicdiagram},
showing the position of the event driver in the architecture.} showing the position of the event driver in the architecture. The event
driver translates driver-specific to a common set of events, which are
delegated to analysis components that will interpret them as more complex
gestures.}
\section{Restricting gestures to a screen area} \section{Restricting gestures to a screen area}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment