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