1 \chapter{Preliminaries
}
3 \section{Dead reckoning
}
4 The process of
\definition{dead reckoning
} describes an inexpensive method for
5 relative positioning by computing a vehicle's position from an initial
6 starting position and the covered distance and course it has moved. In the case
7 of mobile robots, the covered distance can be simply computed in real time from
8 the revolution of its wheels, or by accelerometers the robot may be equipped
9 with. However, since the vehicle's current position is based on its previous
10 position, and the distance measurement may be imprecise, dead reckoning has the
11 disadvantage that errors in position calculation can cumulate and the error
12 of the calculated position grows with time.
14 Another approach to determine a vehicle's position is absolute positioning, for
15 example satellite-based, over navigation beacons or by map matching. Still,
16 these techniques are rather expensive to deploy, cannot (yet) be used in real
17 time, or are even impreciser than relative approaches
\cite{umbmark
}, so dead
18 reckoning can still be useful for the time being.
20 \section{iRobot Roomba
500}
21 Originally, the
\definition{Roomba~
500} is an autonomous vacuum cleaning
23 manufactured by the US-based company
\definition{iRobot
}. It has the size of a
24 disc of about
34~cm in diameter and
9~cm in height; and normally follows its
25 own, non-customizable logic to detect dirt and clean rooms. However, it is also
26 easily controllable over a serial port, which provides a two-way
27 communication at
5~V TTL levels over a Mini-DIN connector, with a speed of
28 either
19,
200 or
115,
200 Baud. Over this serial port, the Roomba speaks a
29 specified protocol, called the
\definition{iRobot Roomba Open
30 Interface
}~
\cite{irobot-oi
}, which allows the user to interact with the robot's
31 internal logic, reading its sensor values, and control its movements and
34 In our setup, the iRobot
\index{Roomba~
500} is used as an instance of an
36 mobile robot to conduct the experiments described afterwards. For that, the
37 Open Interface is used to control the Roomba's movements from a netbook which is
41 The
\definition{Wiselib
}\cite{wiselib
} is a C++ algorithm library for sensor
42 networks, containing for example algorithms for routing, localization and time
43 synchronization, and is strongly focused on portability and cross-platform
44 development. In particular, it allows the user to develop applications that run
45 on different hardware platforms without the need to change the code, and it
46 strongly uses C++ templates to achieve that feature. Amongst the supported
47 platforms are diverse sensor node platforms, like iSense, Contiki and TinyOS,
48 but there are as well implementations for the diverse x86-compatible Personal
49 Computer platforms, and the Shawn sensor network simulator.
51 Moreover, the Wiselib includes code to control the iRobot
\index{Roomba|see
53 serial interface, and getting access to its internal sensor data, using the
54 iRobot Roomba Open Interface mentioned earlier.
56 \todo{cite Wisebed book chapter on Roomba code
}