\chapter{Experiment 2: Movement Behavior with Mean Correction}
\label{sec:exp2}

As presumed in Section \ref{exp1:results}, errors in the Roomba's movements
could originate from imprecise measurement of the Roomba's internal sensors or
in the Wiselib implementation. So a natural approach to correct this sort of
errors would be to average the results for each data point from Experiment 1,
find a function that fits the mean measured error depending on the
target velocity and target distance or angle as well as possible, and then to
adapt either one of the target parameters so that the resulting movement
would most likely be the desired target value. In this experiment however, only
the target distance resp. the target angle was adjusted, while the velocity
remained unadjusted.

Fitting the function\index{fit function} was done with \acs{GNU} R\index{GNU R}
through the wrapper script \prog{graph.sh} which is explained in
section~\ref{sec:impl:eval}. In this experiment, a 2-dimensional linear fit for
the measured value was determined by the method of least squares, with target
value (angle or distance) and velocity as input parameters. The fit function was
then used in the algorithm to calculate the adapted target distance or angle.

\section{Setup}
The hardware setup was exactly the same as in Experiment~1. However, in this
experiment the application \prog{mean\_correction\_test} (described in
Section~\ref{sec:impl:mean} was used to measure data.

\section{Results}
\label{sec:exp2:results}
\begin{figure}[p!]
 \centering
 \includegraphics[width=\textwidth]{images/iz250flur_drive-mean_data.pdf}
 \caption{Behavior with mean correction on laminated floor, straight drive
movements}
\end{figure}
\begin{figure}[p!]
 \centering
 \includegraphics[width=\textwidth]{images/iz250flur_turn-mean_data.pdf}
 \caption{Behavior with mean correction on laminated floor, turn movements}
\end{figure}
\begin{figure}[p!]
 \centering
 \includegraphics[width=\textwidth]{images/seminarraum_drive-mean_data.pdf}
 \caption{Behavior with mean correction on carpet floor, straight drive
movements}
\end{figure}
\begin{figure}[p!]
 \centering
 \includegraphics[width=\textwidth]{images/seminarraum_turn-mean_data.pdf}
 \caption{Behavior with mean correction on carpet floor, turn movements}
\end{figure}

For laminated floors, the results are actually better than in Experiment~1,
apart from a huge increase of the absolute error for small input values (50~cm,
5 and 20 degrees). As the error for this values is far into the negative
range, it means that the Roomba has even turned to or driven in the wrong
direction. The reason for that is most probably the fit function, which is below
zero for these target values. Apart from that, higher target values or
velocities correlate with a higher (absolute) error, just as already mentioned
for the original behavior, which is caused by accumulating errors. However,
when it comes to different velocities, the error is not as far distributed as it
is for the original behavior. This makes the behavior of the Roomba more
predictable over different velocities. Apparently, mean correction
significantly improves the accuracy of the Roomba's general movement in this
case.

For carpet floors, the data shows not much difference to the original
behavior, apart from the already mentioned large absolute error for small
target values. Due to the steep drop of the error for large target values, it
could maybe help to apply a quadratic regression for the determination of a fit
function, in order to better represent the measured data. However, this is a
matter for more detailed research and is not covered in this thesis.
