\chapter{Preliminaries}

\section{Dead reckoning}
The process of \definition{dead reckoning} describes an inexpensive method for
relative positioning by computing a vehicle's position from an initial
starting position and the covered distance and course it has moved. In the case
of mobile robots, the covered distance can be simply computed in real time from
the revolution of its wheels, or by accelerometers the robot may be equipped
with. However, since the vehicle's current position is based on its previous
position, and the distance measurement may be imprecise, dead reckoning has the
disadvantage that errors in position calculation can cumulate and the error
of the calculated position grows with time.

Another approach to determine a vehicle's position is absolute positioning, for
example satellite-based, over navigation beacons or by map matching. Still,
these techniques are rather expensive to deploy, cannot (yet) be used in real
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,
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.

In our setup, the iRobot 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.

\section{Wiselib}
The \definition{Wiselib}\cite{wiselib} is a C++ algorithm library for sensor
networks, containing for example algorithms for routing, localization and time
synchronization, and is strongly focused on portability and cross-platform
development. In particular, it allows the user to develop applications that run
on different hardware platforms without the need to change the code, and it
strongly uses C++ templates to achieve that feature. Amongst the supported
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
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}

