final tweaks
[bachelor-thesis/written-stuff.git] / Ausarbeitung / experiment1.tex
index bf488d6..abc2a7e 100644 (file)
@@ -1,52 +1,72 @@
-\chapter{Experiment 1: Original Movement Behaviour}
-\todo{}
+\chapter{Experiment 1: Original Movement Behavior}
+\label{sec:exp1}
+
+The concepts described in the previous chapter are now used to set up a test
+series with the purpose to measure the error in the Roomba's movement and
+to improve its accuracy.
+
+In the first experiment, the Roomba's original movement behavior was
+measured to get an overview of the errors that occur while moving, and to
+establish a pool of data for correction approaches to work on later.
+There was no error correction involved (apart from any possible error
+correction the Roomba itself implements in its underlying logic, and which is
+not known to anyone except iRobot). To achieve this, the Wiselib Roomba Control
+is used to access the Roomba over the \ac{ROI}\index{Roomba Open Interface}.
+
 \section{Setup}
 \section{Setup}
+The test equipment consisted of a small x86 netbook\index{netbook} which was
+mounted on an iRobot Roomba~530\index{Roomba} robot, as seen in
+Figure~\ref{fig:roombasetup}. The netbook controlled the Roomba over a
+\acs{USB}-to-serial converter plugged into the \ac{ROI}\index{Roomba
+Open Interface} port on the Roomba, and hosted as the environment for
+executing the Wiselib \index{Wiselib} code.
 
 
-\begin{figure}[htbp]
+\label{sec:exp1:setup}
+\begin{figure}
  \centering
  \includegraphics[width=0.45\textwidth]{./images/IMAGE_00079.jpg}
  \caption{Roomba with netbook\label{fig:roombasetup}}
 \end{figure}
  \centering
  \includegraphics[width=0.45\textwidth]{./images/IMAGE_00079.jpg}
  \caption{Roomba with netbook\label{fig:roombasetup}}
 \end{figure}
-\begin{figure}[htbp]
+\begin{figure}
  \centering
  \includegraphics[width=0.6\textwidth]{./images/IMAGE_00148.jpg}
  \caption{Measuring turn angles with laser pointer\label{fig:laserpointer}}
 \end{figure}
 
  \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 this experiment, the Roomba started and stopped with the full velocity the
+movement was executed with; so there was (ideally speaking) an infinite
+acceleration and deceleration at the start and the end of the movement. As
+mentioned before, due to limitations in the \ac{ROI}\index{Roomba 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, keeps track of the turned angle
+and covered distance, and then stops the Roomba if these values exceed the
+target values.
 
 
-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
+The tests were done in two atomic drive modes: letting the Roomba walk 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.
 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.
+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 behavior
+significantly depended on the floor type. The side brush was removed, since the
+Roomba tends to turn slightly towards the left when driving straight on a
+carpet floor. Without the side brush, this was not the case.
 
 
-The actual travelled distance of the straight drive tests were determined using
+The actual traveled 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
 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
+original viewing direction was considered, as it turned out that 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
+\acs{ISO}/\acs{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 \prog{roomba\_test} (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
 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
@@ -55,65 +75,78 @@ 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
 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.
+from, the battery status\index{battery status}, and other internal
+implementation-specific values.
 
 For the straight drive tests, the arrays with predefined values were:\\
 
 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 \\
+\begin{tabular}{@{}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}
 
 \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 \\
+For the turn tests, the arrays with predefined values were: \\
+\begin{tabular}{@{}ll@{}}
+Turn angles: & \phantom{0}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}
 \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.
 
 
+According to the implementation of the Wiselib Roomba control, the velocities
+were given in mm/s and referred to the distance the wheels traveled when the
+Roomba turned on the spot, which was a circle of 230~mm in diameter.
 
 \section{Results}
 
 \section{Results}
-
+\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
 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.
+that the Roomba had turned too much or traveled more than the target value,
+negative values mean that the Roomba had turned or traveled 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.
 
 
-\begin{figure}[pt!]
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf}
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf}
- \caption{Original behaviour on laminated floor, straight drive tests
+ \caption{Original behavior on laminated floor, straight drive movements
   \label{fig:orig:lam:drive}}
 \end{figure}
   \label{fig:orig:lam:drive}}
 \end{figure}
-\begin{figure}[pb!]
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf}
  \centering
  \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf}
- \caption{Original behaviour on laminated floor, turn tests
+ \caption{Original behavior on laminated floor, turn movements
   \label{fig:orig:lam:turn}}
 \end{figure}
   \label{fig:orig:lam:turn}}
 \end{figure}
-\begin{figure}[pt!]
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf}
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf}
- \caption{Original behaviour on carpet floor, straight drive tests
+ \caption{Original behavior on carpet floor, straight drive movements
   \label{fig:orig:carpet:drive}}
 \end{figure}
   \label{fig:orig:carpet:drive}}
 \end{figure}
-\begin{figure}[pb!]
+\begin{figure}[p!]
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf}
  \centering
  \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf}
- \caption{Original behaviour on carpet floor, straight drive tests
+ \caption{Original behavior on carpet floor, turn movements
   \label{fig:orig:carpet:turn}}
 \end{figure}
 
   \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
+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 Figure~\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
 On the other hand, rising the velocity always seems to cause the
-error to increase.
+error to increase. This illustrates the effect of accumulating errors which
+represents the crucial drawback of dead reckoning\index{dead reckoning}.
+
+The same effects also apply for turn tests. Additionally, there could be errors
+resulting from false assumptions about the Roomba's wheel base\index{wheel
+base}, resulting in bogus calculations of the circle the Roomba's wheels
+describe while turning, and therefore leading to false results.
 
 
-\todo{statistical values, stddev?}
+In the following, two approaches to correct errors and improve the accuracy of
+the movement are presented.
This page took 0.03532 seconds and 4 git commands to generate.