first generation of robots controllable over an external interface.
\subsection{Hardware design}
+\begin{SCfigure}
+ \centering
+ \includegraphics[width=.5\textwidth]{images/Roomba-Diagram.pdf}
+ \caption[Diagram of the Roomba 500 series]{Diagram of the Roomba 500 series,
+ view from below\label{fig:roomba-diagram} \\
+ 1:~front~caster, 2:~battery, 3:~side~brush, 4:~main~wheels, 5:~main~brush,
+ 6:~vacuum~bin, 7:~front~bumper, 8:~cliff~sensors}
+\end{SCfigure}
+
The Roomba lives in a cylindrical case with diameter of about 34~cm and height
-of about 7~cm, so it can crawl easily under furniture for cleaning.
-\todo{diagram?}
+of about 8~cm, so it can crawl easily under furniture for cleaning.
+Figure~\ref{fig:roomba-diagram} shows a diagram of the Roomba seen from below.
+
+The top side features several buttons which vary between the different models,
+most notably the ``Clean'' and ``Spot'' buttons for manual control of the
+cleaning routine, and the ``Dock'' button to send the Roomba to its home base.
+The cover on the top side can be removed, and covers the connector for
+the \ac{ROI} which is discussed in Section~\ref{sec:roi}.
+
+On the side, a socket for a coaxial \acs{DC} power connector can be found, which
+is used for external charging.
+
\paragraph{Wheels}
The Roomba has two rubberized main wheels which are positioned slightly behind
the centerline, so the Roomba leans forward due to gravity, and a small caster
factor, and the robot still saves the human some time.
\paragraph{Roomba Open Interface}
+\label{sec:roi}
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, in mode 8N1
-(8 data bits, no parity, 1 stop bit). Over this serial port, the Roomba speaks a
-specified protocol, called the \ignoreoutput{\ac{ROI}}\definition{\acl{ROI}}
+serial port, which provides a two-way communication at 5~V~\acs{TTL} levels over
+a 7-pin mini-\acs{DIN} connector, with a speed of either 19,200 or 115,200 Baud,
+in mode \acused{8N1} \ac{8N1} (\acl{8N1}). Over this serial port, the Roomba
+speaks a specified protocol, called the \acused{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.
0xb6 // checksum: 0x5 + 0x1d + 0x2 + 0x19 + 0xd + 0x0 + 0xb6 = 0x100
\end{verbatim}
+\paragraph{Latency}
+On the connection, there is a certain latency between the time the command is
+sent to the Roomba and the time the Roomba receives this command and carries out
+the motion. At 19,200 baud, mode \ac{8N1}, the transfer of a 5-byte \cmd{Drive}
+command needs $(5 \times 9) \div 19200 = 2.3$~ms. The time the Roomba
+logic needs to process the command is not mentioned in the \ac{ROI}
+Specification, and there was no way to measure it sufficiently. It is however
+short enough that a human would describe it as ``instant''.
+
+The same latency of course also exists in the opposite directions when the
+Roomba is sending sensor data to the user. However, the sensor data are sent by
+the Roomba every 15~ms (which is the internal speed at which the data is
+updated from the sensors) and according to the wheel's maximum velocity of
+500~mm/s (which means that a sensor data packet is received every $0.03$~mm when
+driving at this speed), this is acceptible for real-time evaluation of the data.
+
+
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