\chapter{Experiment 1: Original Movement Behaviour}
\todo{}
\section{Setup}

\begin{figure}[htbp]
 \centering
 \includegraphics[width=0.45\textwidth]{./images/IMAGE_00079.jpg}
 \caption{Roomba with netbook\label{fig:roombasetup}}
\end{figure}
\begin{figure}[htbp]
 \centering
 \includegraphics[width=0.6\textwidth]{./images/IMAGE_00148.jpg}
 \caption{Measuring turn angles with laser pointer\label{fig:laserpointer}}
\end{figure}

The test equipment consisted of a small Intel Atom netbook which was mounted on
an iRobot Roomba~500 robot. The netbook controlled the Roomba over a
\acs{USB}-to-serial converter plugged into the Open Interface port on the
Roomba, and hosted as the environment for executing the Wiselib code (see
fig.~\ref{fig:roombasetup}).

In the first experiment, the original movement behaviour of the Roomba was
measured to establish a pool of data for correction approaches to work on.
There was no error correction involved, and the Roomba started right off with
the full velocity the movement was executed with; so there was no control to
adhere a constant acceleration when starting or stopping the movement.

The tests were done in two atomic drive modes: letting the Roomba drive a
specific straight distance with a specific velocity in its viewing direction and
letting it turn on the spot with a specific velocity about a specific angle.
Each of the two modes was carried out on two different floor types, a laminated
floor and a carpet floor, to see if the movement behaviour significantly
depended on the floor type.

The actual travelled distance of the straight drive tests were determined using
a measuring tape with an accuracy of 1~mm. Only the distance in the Roomba's
original viewing direction was considered, as the offset perpendicular to the
viewing direction and a possible shift in orientation were too small to be
measured precisely.

The actual turn angles of the turn tests were determined using a DIN~A0 sheet
of paper with a printed polar coordinate system in which a circular hole was cut
in the center to let the Roomba's wheels touch the floor. The sheet was fixed
on the floor, and the Roomba was aligned in the center of the paper. A laser
pointer attached to the Roomba pointed to the current orientation on the paper,
as shown in fig.~\ref{fig:laserpointer}. The accuracy for these tests was
1~degree.

After the initial setup, the application \definition{\cmd{roomba\_tests}} (see
section~\ref{sec:impl:measuring}) was started on the netbook for half-automatic
testing. It used a predefined array of nominal distances, angles and velocities
and for each pair of distance (for straight drive tests) or angle (for turn
tests) and velocity it used the Wiselib implementation to move the Roomba. Then
it asked the user to input the measured distance or angle the Roomba had moved
and repeated the process until each combination of distance/angle and velocity
was used. The nominal and input values were written to a log file, as well as
the floor type, the Roomba ID, the \ac{SVN} revision the program was built
from, the battery status, and other internal implementation-specific values.

For the straight drive tests, the arrays with predefined values were:\\
\begin{tabular}[h!]{ll}
  Distances: & 20, 50, 100, 200, 500, 1000, 2000, and 4000~mm \\
  Velocities: & 20, 50, 70, 100, 150, 200, 300, and 400~mm/s \\
\end{tabular}

For the turn tests, the arrays with predefined values were:\\
\begin{tabular}[h!]{ll}
  Turn angles: & 5, 15, 30, 45, 90, 120, 180, 360, 530, and 720~degree \\
  Velocities: & 20, 50, 70, 100, 150, 200, 300, and 400~mm/s \\
\end{tabular}
According to the implementation of the Wiselib Roomba control, the velocities
were given in mm/sec and referred to the distance the wheels travelled when
the Roomba turned on the spot, which was a circle of 230~mm in diameter.


\section{Results}

The following graphs show the difference from the measured value to the input
value for driving or turning with different velocities. Positive values mean
that the Roomba had turned too much or travelled more than the target value,
negative values mean that the Roomba had turned or travelled less.

\begin{figure}[pt!]
 \centering
 \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf}
 \caption{Original behaviour on laminated floor, straight drive tests
  \label{fig:orig:lam:drive}}
\end{figure}
\begin{figure}[pb!]
 \centering
 \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf}
 \caption{Original behaviour on laminated floor, turn tests
  \label{fig:orig:lam:turn}}
\end{figure}
\begin{figure}[pt!]
 \centering
 \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf}
 \caption{Original behaviour on carpet floor, straight drive tests
  \label{fig:orig:carpet:drive}}
\end{figure}
\begin{figure}[pb!]
 \centering
 \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf}
 \caption{Original behaviour on carpet floor, straight drive tests
  \label{fig:orig:carpet:turn}}
\end{figure}

Figure~\ref{fig:orig:lam:drive} shows that the error becomes greater
with increasing input distance when driving straight on the
laminated floor, however, in fig.~\ref{fig:orig:carpet:drive} we see the
opposite effect on the carpet floor, the error decreases with greater input
distance. This could happen due to imprecise measurement of distances in either
the Roomba's sensors or the Wiselib implementation that controls the Roomba, or
both. Also slippage of the wheels on the laminated floor could be possible,
explaining the descending
On the other hand, rising the velocity always seems to cause the
error to increase.

\todo{statistical values, stddev?}
