MaDeCo

Aus Callooh Wiki
Zur Navigation springen Zur Suche springen

MaDeCo - Protokoll zur Kommunikation im RoLoMa Projekt

MaDeCo ist ein sehr einfaches textbasiertes Protokoll für die Kommunikation zwischen den Beteiligten im RoLoMa Projekt, den NIBObee Einheiten und der Basisstation, dem LPC2478.

Rollen

Es gibt unter den Beteiligten zwei festgelegte Rollen, Sender und Empfänger. Der Sender überträgt Information, der Empfänger hingegen hat eine überwiegend passive Funktion, er quittiert Nachrichten und übermittelt einen Acknowledge Code. Während der Kommunikation werden diese Rollen nicht gewechselt.

Format

Eine Nachricht besteht aus genau zwei Datensätzen, ein Datensatz besteht jeweils aus einem 3 Zeichen breiten Header Teil, und einem 2 Zeichen breiten Datenteil. Für kleinere Datenteile erfolgt ein Padding mit Leerzeichen.

Beide Teile der Nachricht werden unmittelbar hintereinander gesendet, also z.B. als SEQ13OPMSM. In untenstehenden Beispielen werden die beiden Teile der Nachricht allerdings durch einen Zeilenumbruch getrennt, um die Nachricht lesbarer zu machen.

Eine Nachricht, wie sie ein Sender erstellt, besteht aus:

<Sequence>
<Command>
<Sequence> besteht aus dem Header SEQ, der Datenteil aus einer Nummer zwischen 1 und 99.
<Command> besteht aus dem 3 Zeichen langen Command-Code, und einem entsprechenden Datenteil.

Eine Nachricht muss mit einer Antwort quittiert werden. Diese besteht aus:

<Acknowledge>
<Acknowledge Code>
<Acknowledge> besteht aus dem Header ACK und der zu bestätigenden Sequence Number.
<Acknowledge Code> besteht aus den Header ACC und dem Code.

Beispiel:

SEQ1 
OPMSM

ACK1 
ACC00

SEQ2
EOC

ACK2 
ACC00


Commands

EOC ... end of communication, signalisiert das Ende einer Kommunikation
OPM ... Operation Mode (siehe Betriebsmodus)
WAP ... Waypoint (siehe Wegpunkte)
DIR ... Angabe der Richtung im GO Betriebsmodus (siehe Kürzester Weg)

Acknowledge Codes

00 .. OK, Command acknowledged
01 .. unknown Command
02 .. invalid data
11 .. unbekannter Betriebsmodus (e.g. OPMXX)
21 .. Command refused, Labyrinth erkunden (OPMSM) vor NIBObee#Kalibrierung (OPMGA)

Betriebsmodus

GA ... Kalibrieren (siehe NIBObee#Kalibrierung)
SM ... Labyrinth erkunden
GO ... kürzesten Weg nehmen (siehe Kürzester Weg)

Wegpunkte

Die Übertragung eines Wegpunkts erfolgt durch Angabe der Richtung (S,W,N,E), gefolgt von der Anzahl der Streckenteile.

Beispiel: WAPS4   der Wegpunkt befindet sich 4 Streckenteile südlich des zuletzt übertragenen Wegpunkts

Ablauf

Im RoLoMa Projekt muss die Kommunikation aus Nachricht-Antwort Sequenzen bestehen. Wird eine gesendete Nachricht nicht bestätigt, erfolgt eine Neuübertragung nach dem RETRANSMISSION_TIMEOUT Interval. Erfolgt auch nach RETRANSMISSION_COUNT Wiederholungen keine Antwort, wird die Übertragung abgebrochen und ein Fehler signalisiert.

Kommunikationen überschneiden sich nicht, das bedeutet, es findet zu jedem Zeitpunkt nur eine Kommunikation zwischen den Beteiligten statt. Daher ist auch zu jedem Zeitpunkt genau ein Teilnehmer der Sender, und ein Teilnehmer der Empfänger.

Use Cases

Im folgenden werden Beispiele für die Kommunikation der unterschiedlichen Betriebsarten dargestellt. Daten vom Borad werden normal, die von der NIBObee fett dargestellt.

Kalibrieren

Beim Kalibrieren wird das Kommando vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (sonst würde es zu einem Timeout kommen). Nachdem die Kalibrierung abgeschlossen ist wird die Verbindung getrennt.

Beispiel:

SEQ1 
OPMGA

ACK1 
ACC00

SEQ2
EOC

ACK2 
ACC00

Labyrinth erkunden

Das Kommando wird vom Board an die NIBObee geschickt und auch bei Erhalt sofort quittiert (es muss vorher allerdings eine Kalibrierung durchgeführt worden sein). Danach werden laufend die Punkte geschickt die abgefahren werden. Wenn das ganze Labyrinth erfasst wurde wir die Kommunikation wieder beendet.

Beispiel:

SEQ1 
OPMSM

ACK1 
ACC00

SEQ2
WAPN3

ACK2 
ACC00

SEQ3
WAPO1

...

SEQ32
EOC

ACK32 
ACC00

Kürzester Weg

Hier werden Richtungsanweisungen übertragen, die es der NIBObee ermöglichen, in einem Labyrinth den kürzesten Weg zu nehmen. Beispiel (ohne ACKs), der kürzeste Weg wird als S(üd)-N(ord)-W(est)-S(üd) angegeben:

SEQ1 
OPMGO

SEQ2 
DIRS 

SEQ3 
DIRN 

SEQ4 
DIRW 

SEQ5 
DIRS 

SEQ6 
EOC