ca605b90b498213b4158efedc361c8d6ee893c3c
[bachelor-thesis/written-stuff.git] / Ausarbeitung / experiment1.tex
1 \chapter{Experiment 1: Original Movement Behaviour}
2 \section{Setup}
3
4 \begin{figure}[htbp]
5 \centering
6 \includegraphics[width=0.45\textwidth]{./images/IMAGE_00079.jpg}
7 \caption{Roomba with netbook\label{fig:roombasetup}}
8 \end{figure}
9 \begin{figure}[htbp]
10 \centering
11 \includegraphics[width=0.6\textwidth]{./images/IMAGE_00148.jpg}
12 \caption{Measuring turn angles with laser pointer\label{fig:laserpointer}}
13 \end{figure}
14
15 The test equipment consisted of a small Intel Atom \index{netbook} which was
16 mounted on
17 an iRobot Roomba~500\index{Roomba~500} robot. The netbook controlled the Roomba
18 over a
19 \acs{USB}-to-serial converter plugged into the Open Interface \index{Open
20 Interface|see {iRobot Roomba Open Interface}} port on the
21 Roomba, and hosted as the environment for executing the Wiselib \index{Wiselib}
22 code (see fig.~\ref{fig:roombasetup}).
23
24 In the first experiment, the original movement behaviour of the Roomba was
25 measured to establish a pool of data for correction approaches to work on.
26 There was no error correction involved, and the Roomba started right off with
27 the full velocity the movement was executed with; so there was no control to
28 adhere a constant acceleration when starting or stopping the movement. Due to
29 limitations in the iRobot Roomba Open Interface\index{Open Interface} it is only
30 possible to explicitly start and stop the Roomba's movements at different times,
31 so the Wiselib's implementation of the Roomba control code first starts the
32 Roomba's movement, calculates the time needed until the movement should be
33 finished, and then stops the Roomba.
34
35 The tests were done in two atomic drive modes: letting the Roomba drive a
36 specific straight distance with a specific velocity in its viewing direction and
37 letting it turn on the spot with a specific velocity about a specific angle.
38 Each of the two modes was carried out on two different floor types\index{floor
39 type}, a laminated floor and a carpet floor, to see if the movement behaviour
40 significantly depended on the floor type.
41
42 The actual travelled distance of the straight drive tests were determined using
43 a measuring tape with an accuracy of 1~mm. Only the distance in the Roomba's
44 original viewing direction was considered, as the offset perpendicular to the
45 viewing direction and a possible shift in orientation were too small to be
46 measured precisely.
47
48 The actual turn angles of the turn tests were determined using a DIN~A0 sheet
49 of paper with a printed polar coordinate system in which a circular hole was cut
50 in the center to let the Roomba's wheels touch the floor. The sheet was fixed
51 on the floor, and the Roomba was aligned in the center of the paper. A laser
52 pointer\index{laser pointer} attached to the Roomba pointed to the current
53 orientation on the paper, as shown in fig.~\ref{fig:laserpointer}. The accuracy
54 for these tests was 1~degree.
55
56 After the initial setup, the application \cmd{roomba\_tests} (see
57 section~\ref{sec:impl:measuring}) was started on the netbook for half-automatic
58 testing. It used a predefined array of nominal distances, angles and velocities
59 and for each pair of distance (for straight drive tests) or angle (for turn
60 tests) and velocity it used the Wiselib implementation to move the Roomba. Then
61 it asked the user to input the measured distance or angle the Roomba had moved
62 and repeated the process until each combination of distance/angle and velocity
63 was used. The nominal and input values were written to a log file, as well as
64 the floor type, the Roomba ID, the \ac{SVN} revision the program was built
65 from, the battery status\index{battery status}, and other internal
66 implementation-specific values.
67
68 For the straight drive tests, the arrays with predefined values were:\\
69 \begin{tabular}[h!]{ll}
70 Distances: & 20, 50, 100, 200, 500, 1000, 2000, and 4000~mm \\
71 Velocities: & 20, 50, 70, 100, 150, 200, 300, and 400~mm/s \\
72 \end{tabular}
73
74 For the turn tests, the arrays with predefined values were:\\
75 \begin{tabular}[h!]{ll}
76 Turn angles: & 5, 15, 30, 45, 90, 120, 180, 360, 530, and 720~degree \\
77 Velocities: & 20, 50, 70, 100, 150, 200, 300, and 400~mm/s \\
78 \end{tabular}
79 According to the implementation of the Wiselib Roomba control,
80 the velocities were given in mm/sec and referred to the distance the wheels
81 travelled when the Roomba turned on the spot, which was a circle of 230~mm in
82 diameter.
83
84
85 \section{Results}
86 \label{exp1:results}
87 The following graphs show the difference from the measured value to the input
88 value for driving or turning with different velocities. Positive values mean
89 that the Roomba had turned too much or travelled more than the target value,
90 negative values mean that the Roomba had turned or travelled too less. The
91 plots show multiple test runs; given are the minimum, the maximum and the
92 arithmetic mean\index{arithmetic mean} of all results for a data point.
93
94 \todo{clearpage, cleardoublepage?}
95 %\clearpage
96 \begin{figure}[p!]
97 \centering
98 \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf}
99 \caption{Original behaviour on laminated floor, straight drive tests
100 \label{fig:orig:lam:drive}}
101 \end{figure}
102 \begin{figure}[p!]
103 \centering
104 \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf}
105 \caption{Original behaviour on laminated floor, turn tests
106 \label{fig:orig:lam:turn}}
107 \end{figure}
108 \begin{figure}[p!]
109 \centering
110 \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf}
111 \caption{Original behaviour on carpet floor, straight drive tests
112 \label{fig:orig:carpet:drive}}
113 \end{figure}
114 \begin{figure}[p!]
115 \centering
116 \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf}
117 \caption{Original behaviour on carpet floor, straight drive tests
118 \label{fig:orig:carpet:turn}}
119 \end{figure}
120
121 Figure~\ref{fig:orig:lam:drive} shows that the error becomes greater
122 with increasing input distance when driving straight on the
123 laminated floor, however, in fig.~\ref{fig:orig:carpet:drive} we see the
124 opposite effect on the carpet floor, the error decreases with greater input
125 distance. This could happen due to imprecise measurement of distances in either
126 the Roomba's sensors or the Wiselib implementation that controls the Roomba, or
127 both, adding up over the time the movement continues. Also slippage of the
128 wheels on the laminated floor could be possible, as well as slowdown through
129 the carpet floor, explaining why the error increases on the laminated floor, but
130 decreases into negative values on the carpet floor when the distance grows.
131
132 On the other hand, rising the velocity always seems to cause the
133 error to increase.
134
135 The same effects also apply for turn tests. Additionally, there could be errors
136 resulting from false assumptions about the Roomba's wheelbase\index{wheelbase}
137 diameter, resulting in false calculations of the circle the Roomba's wheels
138 describe while turning, and therefore leading to false results.
139
140 \todo{statistical values, stddev?}
This page took 0.057739 seconds and 3 git commands to generate.