X-Git-Url: http://git.rohieb.name/bachelor-thesis/written-stuff.git/blobdiff_plain/df75c351fb7b1deeb49fa444b1bef90e13c76290..656ed2ada1064d9874a45e1f55bba8cea4d01d6f:/Ausarbeitung/experiment1.tex

diff --git a/Ausarbeitung/experiment1.tex b/Ausarbeitung/experiment1.tex
index bea1dc6..ca605b9 100644
--- a/Ausarbeitung/experiment1.tex
+++ b/Ausarbeitung/experiment1.tex
@@ -1,57 +1,140 @@
 \chapter{Experiment 1: Original Movement Behaviour}
-\todo
 \section{Setup}
 
-\begin{figure}[htp]
+\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.45\textwidth]{./images/IMAGE_00079.jpg}
- \caption{Roomba with netbook}
+ \caption{Roomba with netbook\label{fig:roombasetup}}
 \end{figure}
-\begin{figure}[htp]
+\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.6\textwidth]{./images/IMAGE_00148.jpg}
- \caption{Measuring turn angles with laser pointer}
+ \caption{Measuring turn angles with laser pointer\label{fig:laserpointer}}
 \end{figure}
 
-Description of experiment setup: netbook on Roomba, application
-"`roomba\_tests"' started which took care of the input values, user was asked
-to measure \& input the data. there were Turn tests and straight drive tests,
-different floor types: laminate and carpet floor.
+The test equipment consisted of a small Intel Atom \index{netbook} which was
+mounted on
+an iRobot Roomba~500\index{Roomba~500} robot. The netbook controlled the Roomba
+over a
+\acs{USB}-to-serial converter plugged into the Open Interface \index{Open
+Interface|see {iRobot Roomba Open Interface}} port on the
+Roomba, and hosted as the environment for executing the Wiselib \index{Wiselib}
+code (see fig.~\ref{fig:roombasetup}).
 
-drive tests: measuring was done with measuring tape. error perpendicular to
-roomba's viewing direction was too small to be measured.
+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. Due to
+limitations in the iRobot Roomba Open Interface\index{Open Interface} it is only
+possible to explicitly start and stop the Roomba's movements at different times,
+so the Wiselib's implementation of the Roomba control code first starts the
+Roomba's movement, calculates the time needed until the movement should be
+finished, and then stops the Roomba.
 
-velocities =  20, 50, 70, 100, 150, 200, 300, 400 mm/s \\
-distances =  20, 50, 100, 200, 500, 1000, 2000, 4000 mm
+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\index{floor
+type}, a laminated floor and a carpet floor, to see if the movement behaviour
+significantly depended on the floor type.
 
-turn tests: measuring with polar coordinate system of about 1~m diameter, roomba
-in the center, laser pointer points to measured value.
+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\index{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 \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\index{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.
 
-velocities =  20, 50, 70, 100, 150, 200, 300, 400  mm/s\\
-turn angles =  5, 15, 30, 45, 90, 120, 180, 360, 530, 720 degree
 
 \section{Results}
-\begin{figure}
+\label{exp1: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 too less. The
+plots show multiple test runs; given are the minimum, the maximum and the
+arithmetic mean\index{arithmetic mean} of all results for a data point.
+
+\todo{clearpage, cleardoublepage?}
+%\clearpage
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf}
- \caption{foo}
+ \caption{Original behaviour on laminated floor, straight drive tests
+  \label{fig:orig:lam:drive}}
 \end{figure}
-\begin{figure}
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf}
- \caption{foo}
+ \caption{Original behaviour on laminated floor, turn tests
+  \label{fig:orig:lam:turn}}
 \end{figure}
-\begin{figure}
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf}
- \caption{foo}
+ \caption{Original behaviour on carpet floor, straight drive tests
+  \label{fig:orig:carpet:drive}}
 \end{figure}
-\begin{figure}
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf}
- \caption{foo}
+ \caption{Original behaviour on carpet floor, straight drive tests
+  \label{fig:orig:carpet:turn}}
 \end{figure}
 
-Absolute error becomes greater with increasing velocity and input value, but
-error is smaller on carpet floor.
+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, adding up over the time the movement continues. Also slippage of the
+wheels on the laminated floor could be possible, as well as slowdown through
+the carpet floor, explaining why the error increases on the laminated floor, but
+decreases into negative values on the carpet floor when the distance grows.
+
+On the other hand, rising the velocity always seems to cause the
+error to increase.
+
+The same effects also apply for turn tests. Additionally, there could be errors
+resulting from false assumptions about the Roomba's wheelbase\index{wheelbase}
+diameter, resulting in false calculations of the circle the Roomba's wheels
+describe while turning, and therefore leading to false results.
+
 \todo{statistical values, stddev?}
