checkpoint
[bachelor-thesis/written-stuff.git] / Ausarbeitung / preliminaries.tex
index a6124b4..1796dcb 100644 (file)
@@ -1,166 +1,8 @@
 \chapter{Preliminaries}
-This chapter describes the preliminary topics. \todo .
+In the following, basic concepts used in this thesis are described. In
+particular, there is a description of the iRobot Roomba, its hardware
+and software, and an overview of the Wiselib algorithm library that is used to
+control the Roomba.
 
-\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} is an autonomous vacuum cleaning robot,
-manufactured by the US-based company \definition{iRobot}. The 500 series
-currently represents the third generation of iRobot's cleaning robots, and the
-first generation of robots controllable over an external interface.
-
-\subsection{Hardware design}
-\todo{diagram?}
-\paragraph{Wheels}
-The Roomba lives in a cylindrical case with diameter of about 34~cm and height
-of about 7~cm. It has two main wheels which are positioned slightly behind the
-centerline, so the Roomba leans forward due to gravity, and a small caster on
-the front to prevent it from sliding on the floor. The main wheels can be
-controlled over two independent motors, each one allowing to turn the connected
-wheel with a minimum of 10~mm/s and a maximum of 500~mm/s in each direction.
-One of the main wheel motors consumes about 300~mA in their slowest rotation
-speed, and about 1000~mA when driving with normal speed. Each wheel is also
-equipped with a drop sensor that tells if the respective wheel has dropped into
-a hole or similar, and does not reach the ground anymore. These sensors are
-realized with a spring pushing the wheel towards the ground, with the spring
-force adjusted to the Roomba's weight, and a micro switch which triggers if the
-wheel drops below a specified level. Furthermore, both wheels feature rotating,
-toothed discs, which in conjunction with an LED and a photo-electric resistor
-act as an optical interrupter. This system can be used to measure the wheel's
-current speed by counting the optical interruptions the wheel causes while
-moving.
-
-\paragraph{Brushes}
-In addition to the wheel motors, the Roomba has a motor which operates the
-vacuum brush, and a small motor on the front connected to a side brush, to allow
-cleaning of room corners.
-
-\paragraph{Bumper shield}
-Since the main movement direction in normal operation is forward, the front of
-the Roomba consists of a crecent-shaped bumper shield which contains several
-sensors. This bumper\index{Roomba!bumper} is spring-loaded and on the one
-hand absorbs shock to reduce damage, on the other hand, it allows the Roomba to
-detect obstacles in front of it, both via infrared sensors as well as by
-mechanical means. There are two sensors for mechanical bump detection, located
-30° to the left and to the right of the bumper's center, each implemented as
-photo-electrical interruptors. Additionally, six infrared sensors are unevenly
-distributed over the bumper, facing away from it in a star-like manner. Each one
-of them allows the Roomba to recognize objects in a maxmimum distance of 10~cm.
-Finally, the bumper shield contains four infrared sensors facing downwards,
-acting as cliff sensors \index{Roomba!cliff sensor} to recognize steps or
-similar chasms which could be dangerous for the Roomba to drive towards.
-
-The back part of the Roomba contains the main vacuum brush\index{Roomba!vacuum
-brush}, and the reservoir for holding dirt. Both of them can be removed, though
-the removal of the main brush reduces the Roomba's weight and slightly
-unbalances the Roomba so the springs used for the wheel drop sensors are not in
-balance anymore and push the Roomba upwards, so it tilts more to the front when
-accelerating forwards. There is also a sensor on the underside
-\index{Roomba!dirt sensor} for detecting particularly dirty regions of the
-floor, which is implemented as a capacitive touch sensor.
-
-\paragraph{Battery}
-The battery\index{Roomba!battery} is placed in the front part behind the bumper,
-it is a rechargeable NiMH battery and holds a capacity of 3300~mAh which lasts
-for about 90 to 120 minutes under normal operation. The Roomba can also find its
-home base and charge itself when it has finished cleaning or runs out of energy
-by using a special infrared sensor mounted on top of the Roomba. This sensor can
-see in all directions and is able to detect the home base by looking for a
-special infrared signal the home base\index{Roomba!home base} emits. The same
-principle is used for so-called "`virtual walls"'\index{virtual wall} which can
-be placed by the user in regions the Roomba should not move into.
-
-\subsection{Behaviour}
-\paragraph{Intended Behaviour}
-The Roomba normally follows its own, non-customizable algorithm to detect dirt
-and clean rooms. It is kind of a random walk\index{random walk}, controlled by
-the internal logic, which tries to keep the Roomba away from dangers like
-stairs and walls (by evaluating the cliff and bump sensors), and direct it to
-the more dusty regions of the room (by using the dirt sensor). The random walk
-concept allows a more or less complete coverage of the room, given the time for
-cleaning is large enough, while at the same only needing very little information
-about the environment. Of course, that concept is not very efficient when it
-comes to cleaning rooms, but cleaning time is not neccessarily the constraining
-factor, and the robot still saves the human some time.
-
-\paragraph{Roomba Open Interface}
-However, robots of the Roomba 500 series are 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
-\ignoreoutput{\ac{ROI}}\definition{\acl{ROI}} (\acs{ROI})~\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.
-
-After starting the communication with the Roomba by sending the \cmd{Start}
-command, the robot is in a state called \definition{Passive mode}. In this mode,
-the user cannot control the robot by himself, but the internal logic defines
-icants behaviour. However, the user is able to read the internal sensors. The
-\ac{ROI} then allows the user to set the Roomba into two different modes:
-\begin{itemize}
-  \item In \definition{Safe mode}, the Roomba monitors the wheel drop, cliff
-    and internal charger sensors, and reverts into Passive mode if safety
-    conditions occur, so the Roomba is not harmed.
-  \item In \definition{Full mode}, the user has full control over the Roomba,
-    and has to take care not to harm the Roomba by evaluating the wheel drop,
-    cliff and internal charger sensors by himself.
-\end{itemize}
-
-In particular, every command is assigned an \ac{opcode} of one byte length,
-followed by a fixed amount of bytes as parameters which depend on the opcode.
-For example, to drive straight with a velocity of 1000~mm, one would send the
-following bytes over the serial interface:
-\begin{verbatim}
-0x80,             // start byte
-0x83,             // safe mode
-0x89,             // drive
-0x03, 0xe8        // drive: parameter velocity: 0x03e8 == 1000
-0x80, 0x00        // drive: parameter radius: special value "straight"
-\end{verbatim}
-
-A little disadvantage of the \ac{ROI} \cmd{Drive} command is that the robot is
-modeled as a state machine. In the previous example, the Roomba would keep on
-driving until it runs out of energy, or a safety condition occurs which causes
-the Roomba to revert into Passive mode, or a new \cmd{Drive} command with the
-velocity parameter set to zero is sent. Thus, if the user wants to drive a
-specific distance, he has to calculate the time interval the robot needs to
-travel that distance, measure the time interval, and stop the robot after that
-time interval has passed.
-
-In our setup, an iRobot Roomba~530 is used as an instance of an autonomous,
-mobile robot to conduct the experiments described afterwards. For that, the
-Roomba's movements are controlled over a netbook mounted on top of the Roomba
-(cf.~Figure~\ref{fig:roombasetup}), 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\index{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}
+\input{roomba}
+\input{wiselib}
This page took 0.02697 seconds and 4 git commands to generate.