Nibo Serial Protocol: Unterschied zwischen den Versionen

Aus Nibo Wiki
Wechseln zu: Navigation, Suche
(Links)
Zeile 152: Zeile 152:
 
==Links==
 
==Links==
 
* [http://www.roboter.cc/index.php?option=com_nicaiwci&view=project&projectid=1100 NIBO2 - Terminal] Terminalfirmware für den NIBO 2
 
* [http://www.roboter.cc/index.php?option=com_nicaiwci&view=project&projectid=1100 NIBO2 - Terminal] Terminalfirmware für den NIBO 2
* [http://www.roboter.cc/index.php?option=com_nicaiwci&view=project&projectid=1145 NIBO2 - Terminal] Terminalfirmware für den NIBObee
+
* [http://www.roboter.cc/index.php?option=com_nicaiwci&view=project&projectid=1145 NIBObee - Terminal] Terminalfirmware für den NIBObee

Version vom 29. November 2012, 16:26 Uhr

Das Protokoll dient zur Datenübertragung zwischen einem Host-Gerät (Smartphone/PC) und einem NIBO 2 bzw. NIBObee Roboter.

Mögliche Übertragungsmedien:

Die Standarddatenrate beträgt 9600 Baud.

Grundlagen

Es werden reine Textdaten (ASCII) über eine serielle Verbindung übertragen. Die Datenübertragung ist in Transaktionen unterteilt. Eine einzelne Transaktion besteht immer aus eine Anfrage und einer Antwort. Die Anfrage (request) kommt immer vom Host, die Antwort (reply) vom Roboter. Jede Anfrage und jede Antort bestehen aus einer Zeile, jede Zeile endet mit einem Zeilenumbruch.

Die Transaktionen können in zwei veschiedenen Formaten erfolgen:

  • Terminalmode: Leicht zu lesendes Übertragungsformat, sehr gut geeignet zum experimentieren.
  • Hexmode: Effizentes Übertragungsformat

Das Format gilt jeweils für eine Transaktion. Beginnt die Anfrage mit request wird der Terminalmodus verwendet, beim Hexmodus beginnt die Anfrage mit einem $-Zeichen.

Für die Verwendung des Protokolls reicht es aus den Terminalmodus zu verstehen. Im Terminalmodus wird nur das dezimale Zahlenformat verwendet.


Befehlsübersicht

Eine Zeile mit der Zeichenkette help gibt eine Hilfe aus, welche die Kommandos und die Registerbelegung enthält:

command     short  parameter           function
-------     -----  ---------           --------
help                                   show this help
request            {sequence}          begin decimal request, sequence number is optional
            $      {sequence}          begin hexadecimal request, sequence number is optional
 set        !      {register},{value}  set register with value
 get        ?      {register}          get register data once
 report     #      {register}          report register data always
 unreport   ~      {register}          don't report register data


Register NIBO 2

 0: BOT ID
 1: Version
 2: Supply Voltage [mV]
 3: red LEDs
 4: green LEDs
 5: PWM white LEDs
 6: Motor Mode 
 7: Motor PWM L 
 8: Motor PWM R 
 9: Motor PID L 
10: Motor PID R 
11: Motor current L 
12: Motor current R 
13: Odometry L 
14: Odometry R 
15: Floor L
16: Floor R
17: Line L
18: Line R
19: Dist L
20: Dist FL
21: Dist F
22: Dist FR
23: Dist R 

Register NIBObee

 0: BOT ID
 1: Version
 2: Supply Voltage [mV]
 3: LEDs
 4: Sense
 5: -
 6: Motor Mode 
 7: Motor PWM L 
 8: Motor PWM R 
 9: Motor PID L 
10: Motor PID R 
11: Motor current L 
12: Motor current R 
13: Odometry L 
14: Odometry R 
15: -
16: Line C
17: Line L
18: Line R

Kommandos

Setzen eines Registers:

Beispiel: Die 4 niedrigsten Bits des LED Registers (Register 0) sollen gesetzt werden (Wert binär: 00001111, dezimal: 15 = 8+4+2+1)

Anfrage:
request set 0, 15

Antwort:
reply

Setzen mehrerer Register:

Beispiel: PID links (Register 3) auf 20 Ticks/sec, rechts (Register 4) auf 25 Ticks/sec und den Motor Mode (Register 5) auf 3 setzen

Anfrage:
request set 3, 20 set 4, 25 set 5, 3

Antwort:
reply

Einmalige Abfrage:

Beispiel: Liniensensoren (Register 8, 9 und 10) abfragen (Werte: Links=111, Mitte=104, Rechts=127)

Anfrage:
request get 8 get 9 get 10

Antwort: 
reply set 8, 111 set 9, 104 set 10, 127

Regelmäßige Abfrage:

Beispiel: Odometrie links und rechts anfordern (Werte: Links=1514, Rechts=1520)

Anfrage:
request report 6 report 7

Antwort:
reply set 6, 1514 set 7, 1520

Jede weitere Anfrage enthält die Werte:

Anfrage:
request

Antwort: 
reply set 6, 1514 set 7, 1520

Sequenznummern

Jede Anfrage kann mit einer Sequenznummer versehen werden. Die Nummer wird bei der zugehörigen Antwort wiederholt. Beispiel: Alle LEDs (Register 0) sollen ausgeschaltet werden, Sequenznummer 33

Anfrage:
request 33 set 0, 0

Antwort:
reply 33

Hexmodus

Im Hexmodus werden die Daten effizienter übertragen. Im Prinzip entspricht die Übertragung dem Terminalmodus. Alle Schlüsselwörter werden durch ihre Kurzform ersetzt, aus request wird ein einzelnes $-Zeichen, aud get ein ?-Zeichen. Zusätzlich entfallen alle Leerzeichen. Die Zahlen werden im Hexadezimalen Format übertragen, statt der Dezimalzahl 200 wird die hexadezimale Zahl c8 übertragen.

Als Beispiel die regelmäßige Abfrage der Odometriewerte mit Sequenznummern:

Terminalmode                                 Hexmode
============                                 =======
request 9 report 6 report 7          -->     $9#6#7
reply 9 set 6, 1514 set 7, 1520      -->     $9!6,5ea!7,5f0
request 10                           -->     $a
reply 10 set 6, 1514 set 7, 1520     -->     $a!6,5ea!7,5f0
request 11                           -->     $b
reply 11 set 6, 1514 set 7, 1520     -->     $b!6,5ea!7,5f0


Links