From 656ed2ada1064d9874a45e1f55bba8cea4d01d6f Mon Sep 17 00:00:00 2001 From: Roland Hieber Date: Wed, 6 Jul 2011 03:05:04 +0200 Subject: [PATCH] zwischenstand, +makeindex" --- Ausarbeitung/experiment1.tex | 73 +++++++++++++++++++++------------ Ausarbeitung/experiment2.tex | 49 ++++++++++++++-------- Ausarbeitung/implementation.tex | 1 + Ausarbeitung/main.tex | 11 +++-- Ausarbeitung/preliminaries.tex | 20 +++++---- 5 files changed, 101 insertions(+), 53 deletions(-) diff --git a/Ausarbeitung/experiment1.tex b/Ausarbeitung/experiment1.tex index bf488d6..ca605b9 100644 --- a/Ausarbeitung/experiment1.tex +++ b/Ausarbeitung/experiment1.tex @@ -1,5 +1,4 @@ \chapter{Experiment 1: Original Movement Behaviour} -\todo{} \section{Setup} \begin{figure}[htbp] @@ -13,24 +12,32 @@ \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}). +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}). 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. +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. 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, 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 behaviour +significantly depended on the floor type. 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 @@ -42,11 +49,11 @@ 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. +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 \definition{\cmd{roomba\_tests}} (see +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 @@ -55,7 +62,8 @@ 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, 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:\\ \begin{tabular}[h!]{ll} @@ -68,37 +76,42 @@ For the turn tests, the arrays with predefined values were:\\ 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. +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. \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 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. +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. -\begin{figure}[pt!] +\todo{clearpage, cleardoublepage?} +%\clearpage +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/iz250flur_drive_data.pdf} \caption{Original behaviour on laminated floor, straight drive tests \label{fig:orig:lam:drive}} \end{figure} -\begin{figure}[pb!] +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/iz250flur_turn_data.pdf} \caption{Original behaviour on laminated floor, turn tests \label{fig:orig:lam:turn}} \end{figure} -\begin{figure}[pt!] +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/seminarraum_drive_data.pdf} \caption{Original behaviour on carpet floor, straight drive tests \label{fig:orig:carpet:drive}} \end{figure} -\begin{figure}[pb!] +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/seminarraum_turn_data.pdf} \caption{Original behaviour on carpet floor, straight drive tests @@ -111,9 +124,17 @@ 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 +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?} diff --git a/Ausarbeitung/experiment2.tex b/Ausarbeitung/experiment2.tex index 4dc3386..1dbe336 100644 --- a/Ausarbeitung/experiment2.tex +++ b/Ausarbeitung/experiment2.tex @@ -1,37 +1,54 @@ \chapter{Experiment 2: Movement Behaviour with Mean Correction} \todo{} -\section{Setup} -Fit function from data in experiment 1; algorithm determined target value for -distance from fit function and input distance and input velocity. - -approach: correct imprecise measurement +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 of the +target velocity and target distance or angle as well as possible, and then +adapting 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. -Setup was the same as in experiment 1. Application on netbook was -"`mean\_correction\_test"', same procedure as in first experiment. +Fitting the function\index{fit function} was done with \acs{GNU} R\index{GNU R} +through a wrapper script which is explained in section~\ref{sec:impl:eval}. In +this experiment, a linear fit of the form $o = a*v+b*i+c$ was used, with $o$ +being the measured value, $v$ the input velocity, $i$ the target distance or +angle, and $a,b,c \in \mathbb{R}$. The fitted values \todo{how? least +square?} for $a, b, c$ were then used in the algorithm to calculate the adapted +target distance or angle. -expectations \& were they fulfilled? +\section{Setup} +The hardware setup was exactly the same as in Experiment 1. However, in this +experiment the application \cmd{mean\_correction\_test} was used to measure +data. It did exactly the same as the application from Experiment 1, except that +it adapted the target distance resp. target angle according to the algorithm +described above. \section{Results} -\begin{figure} +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/iz250flur_drive-mean_data.pdf} - \caption{foo} + \caption{Behaviour with mean correction on laminated floor, straight drive +tests} \end{figure} -\begin{figure} +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/iz250flur_turn-mean_data.pdf} - \caption{foo} + \caption{Behaviour with mean correction on laminated floor, turn tests} \end{figure} -\begin{figure} +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/seminarraum_drive-mean_data.pdf} - \caption{foo} + \caption{Behaviour with mean correction on carpet floor, straight drive +tests} \end{figure} -\begin{figure} +\begin{figure}[p!] \centering \includegraphics[width=\textwidth]{images/seminarraum_drive-mean_data.pdf} - \caption{foo} + \caption{Behaviour with mean correction on carpet floor, turn tests} \end{figure} results better than in experiment 1, very accurate for laminate floor, carpet diff --git a/Ausarbeitung/implementation.tex b/Ausarbeitung/implementation.tex index 764d592..66c7a3d 100644 --- a/Ausarbeitung/implementation.tex +++ b/Ausarbeitung/implementation.tex @@ -37,6 +37,7 @@ concept like wiselib::ControlledMotion and takes care of increasing/decreasing velocity via timer. \section{Evaluation} +\label{sec:impl:eval} \todo{} bash/perl scripts in wiselib/trunk/pc\_apps/roomba\_tests/logs, using gnuplot diff --git a/Ausarbeitung/main.tex b/Ausarbeitung/main.tex index bde1edb..c165562 100644 --- a/Ausarbeitung/main.tex +++ b/Ausarbeitung/main.tex @@ -2,13 +2,15 @@ \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage[ngerman,english]{babel} -\usepackage{hyperref,color,url,acronym,graphicx} +\usepackage{hyperref,color,url,acronym,graphicx,makeidx,amsfonts} % FIXME hyperref setup +\makeindex + \newcommand{\todo}[1]{\textcolor{red}{\index{Todo}\LARGE TODO:~#1}} -\newcommand{\definition}[1]{#1} % FIXME: add to glossary and/or index -\newcommand{\cmd}[1]{\texttt{#1}} % FIXME: add to glossary and/or index +\newcommand{\definition}[1]{#1\index{#1}} % FIXME: add to glossary and/or index +\newcommand{\cmd}[1]{\texttt{#1}\index{#1}} % FIXME: add to glossary and/or \author{Roland Hieber} \title{Error modeling of an autonomous, mobile robot} @@ -66,6 +68,7 @@ Braunschweig, den \today \acro{GPS}{Global Positioning System} \acro{USB}{Universal Serial Bus} \acro{SVN}{Subversion} + \acro{GNU}{GNU's Not Unix} \end{acronym} \pagenumbering{arabic} @@ -80,6 +83,8 @@ Braunschweig, den \today \input{conclusion} \input{implementation} +\printindex + \bibliographystyle{plain} \bibliography{biblio} diff --git a/Ausarbeitung/preliminaries.tex b/Ausarbeitung/preliminaries.tex index 06701fd..d47a81b 100644 --- a/Ausarbeitung/preliminaries.tex +++ b/Ausarbeitung/preliminaries.tex @@ -18,18 +18,21 @@ time, or are even impreciser than relative approaches\cite{umbmark}, so dead reckoning can still be useful for the time being. \section{iRobot Roomba 500} -Originally, the \definition{Roomba 500} is an autonomous vacuum cleaning robot, +Originally, the \definition{Roomba~500} is an autonomous vacuum cleaning +robot, manufactured by the US-based company \definition{iRobot}. It has the size of a disc of about 34~cm in diameter and 9~cm in height; and normally follows its own, non-customizable logic to detect dirt and clean rooms. However, it is also easily controllable over a serial port, which provides a two-way communication at 5~V TTL levels over a Mini-DIN connector, with a speed of either 19,200 or 115,200 Baud. Over this serial port, the Roomba speaks a -specified protocol, called the iRobot Roomba Open Interface \cite{irobot-oi}, -which allows the user to interact with the robot's internal logic, reading its -sensor values, and control its movements and cleaning behaviour. +specified protocol, called the \definition{iRobot Roomba Open +Interface}~\cite{irobot-oi}, which allows the user to interact with the robot's +internal logic, reading its sensor values, and control its movements and +cleaning behaviour. -In our setup, the iRobot Roomba 500 is used as an instance of an autonomous, +In our setup, the iRobot \index{Roomba~500} is used as an instance of an +autonomous, mobile robot to conduct the experiments described afterwards. For that, the Open Interface is used to control the Roomba's movements from a netbook which is running Wiselib code. @@ -45,8 +48,9 @@ platforms are diverse sensor node platforms, like iSense, Contiki and TinyOS, but there are as well implementations for the diverse x86-compatible Personal Computer platforms, and the Shawn sensor network simulator. -Moreover, the Wiselib includes code to control the iRobot Roomba over a +Moreover, the Wiselib includes code to control the iRobot \index{Roomba|see +{Roomba~500}} over a serial interface, and getting access to its internal sensor data, using the -iRobot Roomba Open Interface mentioned earlier. \todo{cite Wisebed book -chapter on Roomba code} +iRobot Roomba Open Interface mentioned earlier. +\todo{cite Wisebed book chapter on Roomba code} -- 2.20.1