mirror of
https://github.com/yoboujon/dumber.git
synced 2025-06-09 22:30:49 +02:00
283 lines
No EOL
8.6 KiB
TeX
283 lines
No EOL
8.6 KiB
TeX
\begin{appendices}
|
|
\section{Annexes}
|
|
|
|
\subsection{Messages robot-superviseur}
|
|
\label{sec:sec:comm_rob_sup}
|
|
|
|
La communication fonctionne sur le principe d'une communication synchrone de type requête. La communication ne peut être initiée que par le superviseur.
|
|
|
|
Toutes les communications ont par défaut un retour en cas d'erreur. Ce retour est porté par la valeur de {\tt messageID} d'un objet {\tt Message}. Si la communication s'est bien déroulée la valeur MESSAGE\_ANSWER\_ACK est retournée, sinon une valeur de retour correspondante à l'un des cas d'erreur suivant est produite :
|
|
\begin{itemize}
|
|
\item MESSAGE\_ANSWER\_ROBOT\_TIMEOUT : la réponse n'est pas arrivée avant 80 ms,
|
|
\item MESSAGE\_ANSWER\_ROBOT\_UNKNOWN\_COMMAND : la commande n'a pas été comprise par le robot,
|
|
\item MESSAGE\_ANSWER\_ROBOT\_ERROR : la commande n'est pas conforme à sa définition.
|
|
\end{itemize}
|
|
\FloatBarrier
|
|
|
|
Les messages envoyés au robot sont composés d'une entête codée sur un octect ({\tt char}) correspondant à l'ordre à réaliser. Certains ordres sont aussi accompagnés d'une donnée codée sur un entier ({\tt int}). Le tableau~\ref{tab:ordre_robot} décrit les entêtes.
|
|
|
|
\begin{table}[htp]
|
|
\begin{center}
|
|
\begin{tabular}{|l|c|l|c|c|}
|
|
\hline
|
|
Entête (\scriptsize{MESSAGE\_ROBOT\_}) & Données & Description & Retour\\
|
|
\hline\hline
|
|
{\scriptsize PING} & -- & Teste la disponibilité de la communication & --\\
|
|
{\scriptsize RESET} & -- & Demande un redémarrage du robot & --\\
|
|
\hline
|
|
{\scriptsize START\_WITHOUT\_WD} & -- & Démarre le robot sans le {\it watchdog} & -- \\
|
|
{\scriptsize START\_WITH\_WD} & -- & Démarre le robot avec le {\it watchdog} & -- \\
|
|
{\scriptsize RELOAD\_WD} & -- & Recharge le {\it watchdog} & --\\
|
|
\hline
|
|
{\scriptsize BATTERY\_GET} & -- & Retourne le niveau de la batterie & niv. batterie\\
|
|
{\scriptsize STATE\_GET} & -- & Retourne l'état du robot & état\\
|
|
\hline
|
|
{\scriptsize GO\_FORWARD} & -- & Déplace le robot en avant & -- \\
|
|
{\scriptsize GO\_BACK} & -- & Déplace le robot en arrière & -- \\
|
|
{\scriptsize GO\_LEFT} & -- & Fait tourner dans le sens anti-horaire & -- \\
|
|
{\scriptsize GO\_RIGHT} & -- & Fait tourner dans le sens horaire & -- \\
|
|
{\scriptsize STOP\_MOVE} & -- & Stoppe le mouvement du robot & -- \\
|
|
\hline
|
|
{\scriptsize MOVE} & distance & Déplace en ligne droite & --\\
|
|
{\scriptsize TURN} & angle & Tourne d'un angle donné & -- \\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\caption{Liste des messages du superviseur vers le robot}
|
|
\label{tab:ordre_robot}
|
|
\end{table}%
|
|
\FloatBarrier
|
|
|
|
Le niveau de la batterie peut prendre comme valeur :
|
|
\begin{itemize}
|
|
\item BATTERY\_UNKNOWN : la mesure n'a pas abouti,
|
|
\item BATTERY\_EMPTY : niveau vide,
|
|
\item BATTERY\_LOW : niveau faible,
|
|
\item BATTERY\_FULL: niveau haut.
|
|
\end{itemize}
|
|
|
|
Les états possibles du robot sont :
|
|
\begin{itemize}
|
|
\item MESSAGE\_ROBOT\_STATE\_BUSY : le robot est en train de réaliser un mouvement,
|
|
\item MESSAGE\_ROBOT\_STATE\_NOT\_BUSY : le robot ne réalise pas de mouvement.
|
|
\end{itemize}
|
|
|
|
%%%%%%%%%%%%%%%
|
|
|
|
\subsection{Messages moniteur-superviseur}
|
|
\label{sec:comm_mon_sup}
|
|
|
|
\subsubsection{Moniteur vers Superviseur}
|
|
\label{sec:mts}
|
|
|
|
Les message envoyés du moniteur vers le superviseur sont composés d'un entête de trois octets et d'une donnée d'un octet. Le tableau~\ref{tab:mts} décrit ces entêtes et les données. Certains messages nécessitent une réponse par un acquittement (cf. messages section~\ref{sec:stm}). Les messages spécifiques pour le robot ont les même entêtes que la communication entre le robot et le superviseur.
|
|
|
|
|
|
\begin{table}[htp]
|
|
|
|
\begin{center}
|
|
\begin{tabular}{|l|p{7cm}|}
|
|
\hline
|
|
{\bf Id} & {\bf Description} \\
|
|
\hline
|
|
MESSAGE\_ROBOT\_COM\_OPEN & Demande d'ouverture de la comm. avec le robot\\
|
|
MESSAGE\_ROBOT\_COM\_CLOSE & Demande de fermeture de la comm. avec le robot \\
|
|
\hline
|
|
\multicolumn{2}{|l|}{{\bf Acquittement} : oui}\\
|
|
\hline
|
|
\hline
|
|
MESSAGE\_ROBOT\_* & Message portant un ordre pour le robot (voir tableau précédent)\\
|
|
\hline
|
|
\multicolumn{2}{|p{\textwidth}|}{{\bf Acquittement} : les messages MESSAGE\_ROBOT\_START\_WITH\_WD et MESSAGE\_ROBOT\_START\_WITHOUT\_WD nécessitent un acquitement}\\
|
|
\hline
|
|
\hline
|
|
MESSAGE\_CAM\_OPEN & Demande d'ouverture de la caméra\\
|
|
MESSAGE\_CAM\_CLOSE & Demande de fermeture de la caméra\\
|
|
MESSAGE\_CAM\_ASK\_ARENA & Demande de détection de l'arène \\
|
|
MESSAGE\_CAM\_ARENA\_CONFIRM & L'arène est la bonne\\
|
|
MESSAGE\_CAM\_ARENA\_INFIRM & L'arène n'est pas la bonne\\
|
|
MESSAGE\_CAM\_POSITION\_COMPUTE\_START & Calcul de la position du robot\\
|
|
MESSAGE\_CAM\_POSITION\_COMPUTE\_STOP & Arrêt du calcul de la position du robot\\
|
|
\hline
|
|
\multicolumn{2}{|p{\textwidth}|}{{\bf Acquittement} : les messages MESSAGE\_CAM\_OPEN et MESSAGE\_CAM\_CLOSE attendent un acquittement.}\\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\caption{Description des messages du moniteur vers le superviseur}
|
|
\label{tab:mts}
|
|
\end{table}%
|
|
|
|
\newpage
|
|
%%%%%%%%%
|
|
\subsubsection{Superviseur vers Moniteur}
|
|
\label{sec:stm}
|
|
|
|
Les messages du superviseur vers le moniteur sont composés d'une entête de 3 octets et de données de taille variables. Le tableau~\ref{tab:stm} décrit ces messages.
|
|
|
|
\begin{table}[htp]
|
|
\begin{center}
|
|
\begin{tabular}{lcl}
|
|
\hline
|
|
Entête & Données & Description\\
|
|
\hline
|
|
\hline
|
|
MESSAGE\_ANSWER\_ACK & -- & Message d'acquittement en cas de succès\\
|
|
MESSAGE\_ANSWER\_NACK & -- & Message d'acquittement en cas d'échec\\
|
|
MESSAGE\_MONITOR\_LOST & -- & Signale la perte de la comm. avec le robot\\
|
|
MESSAGE\_CAM\_IMAGE & Image & Envoi d'une image\\
|
|
MESSAGE\_CAM\_POSITION & Position & Envoi de la postion du robot\\
|
|
MESSAGE\_ROBOT\_BATTERY\_LEVEL & int & Envoi du niveau de la batterie\\
|
|
\hline
|
|
\end{tabular}
|
|
\end{center}
|
|
\caption{Liste des messages du moniteur vers le superviseur}
|
|
\label{tab:stm}
|
|
\end{table}%
|
|
\FloatBarrier
|
|
|
|
\newpage
|
|
\section{Diagramme de classe des bibliothèques}
|
|
\label{ann:diag_class}
|
|
|
|
%
|
|
%@startuml
|
|
%skinparam monochrome true
|
|
%
|
|
%class Message{
|
|
%-MessageID messageID
|
|
%
|
|
%+Message()
|
|
%+Message(MessageId id)
|
|
%+string ToString()
|
|
%+bool CompareID(MessageID id)
|
|
%+MessageID GetID()
|
|
%+void SetID(MessageID id)
|
|
%-bool CheckID(MessageID id)
|
|
%}
|
|
%
|
|
%
|
|
%class MessageBattery{
|
|
% -BatteryLevel level
|
|
% +MessageBattery(MessageID id, BatteryLevel level)
|
|
% +BatteryLevel GetLevel()
|
|
% +void SetLevel(BatteryLevel level)
|
|
%}
|
|
%
|
|
%class MessagePosition{
|
|
% -Position pos
|
|
% +MessagePosition(MessageID id, Position& pos)
|
|
% +Position GetPosition()
|
|
% +void SetPosition(Position& pos)
|
|
%}
|
|
%
|
|
%class MessageImg{
|
|
% -Img* image
|
|
% +MessageImg(MessageID id, Img *image)
|
|
% +Img* GetImage()
|
|
% +void SetImage(Img* image)
|
|
%}
|
|
%
|
|
%class MessageInt{
|
|
% - int value
|
|
% + MessageInt(MessageID id, int val)
|
|
% +int GetValue()
|
|
% +void SetValue(int val)
|
|
%}
|
|
%
|
|
%class MessageString{
|
|
% - string s
|
|
% +MessageString(MessageID id, string s)
|
|
% +string GetString()
|
|
% +void SetString(string s)
|
|
%}
|
|
%
|
|
%Message <|-down- MessageImg
|
|
%Message <|-down- MessageInt
|
|
%Message <|-up- MessageString
|
|
%Message <|-up- MessageBattery
|
|
%Message <|-- MessagePosition
|
|
%
|
|
%class ComRobot {
|
|
% +int Open()
|
|
% +int Open(string usart)
|
|
% +int Close()
|
|
% +Message *Write(Message* msg)
|
|
% +void Write_Pre()
|
|
% +void Write_Post()
|
|
% +Message *Ping()
|
|
% +Message *Reset()
|
|
% +Message *PowerOff()
|
|
% +Message *StartWithWD()
|
|
% +Message *StartWithoutWD()
|
|
% +Message *ReloadWD()
|
|
% +Message *Move(int length)
|
|
% +Message *Turn(int angle)
|
|
% +Message *Stop()
|
|
% +Message *GoForward()
|
|
% +Message *GoBackward()
|
|
% +Message *GoLeft()
|
|
% +Message *GoRight()
|
|
% +Message *GetBattery()
|
|
% +Message *GetState()
|
|
%}
|
|
%
|
|
%class ComMonitor {
|
|
% +int Open(int port)
|
|
% +void Close()
|
|
% +int AcceptClient()
|
|
% +void Write(Message *msg)
|
|
% +void Write_Pre()
|
|
% +void Write_Post()
|
|
% +Message *Read()
|
|
% +void Read_Pre()
|
|
% +void Read_Post()
|
|
%}
|
|
%class Img{
|
|
% +ImageMat img
|
|
% +Img(ImageMat imgMatrice)
|
|
% +string ToString()
|
|
% +Jpg ToJpg()
|
|
% +Arena SearchArena()
|
|
% +int DrawRobot(Position robot)
|
|
% +int DrawArena(Arena arenaToDraw)
|
|
% +std::list<Position> SearchRobot(Arena arena)
|
|
%}
|
|
%
|
|
%class Camera{
|
|
% +Camera(int size, int fps);
|
|
%
|
|
% +bool Open();
|
|
% +void Close();
|
|
% +Img Grab();
|
|
% +int GetWidth() const;
|
|
% +int GetHeight() const;
|
|
%
|
|
% +bool IsOpen();
|
|
% +void SetSize(int size);
|
|
%}
|
|
%
|
|
%class Position{
|
|
% +cv::Point2f center
|
|
% +cv::Point2f direction
|
|
% +float angle
|
|
% +int robotId
|
|
%}
|
|
%
|
|
%class Arena{
|
|
% +cv::Rect arena
|
|
% +Arena()
|
|
% +bool IsEmpty()
|
|
%}
|
|
%
|
|
%@enduml
|
|
|
|
\begin{figure}[htbp]
|
|
\begin{center}
|
|
\includegraphics[scale=0.55]{./figures_pdf/classes1}
|
|
\includegraphics[scale=0.55]{./figures_pdf/classes2}
|
|
\caption{Diagramme de classes des bibliothèques De Stijl}
|
|
\label{fig:diag17}
|
|
\end{center}
|
|
\end{figure}
|
|
\FloatBarrier
|
|
\end{appendices} |