Software

Der Roboter wird von einem Computer gesteuert indem mit Matlab Daten an einen zweiten Arduino gesendet werden. Dieser sendet die Befehle über ein nRF24L01+ Funkmodul weiter an den Roboter. Der Roboter führt dann die entsprechenden Aktionen aus und sendet gegebenenfalls eine Antwort zurück. Für die Steuerung des LDVBOTs wurde ein Befehlssatz und eine Softwarebibliothek entwickelt.

 

Softwarebibliothek

Die Softwarebibliothek besteht aus drei Klassen. Neben der Klasse LDVBOT enthält sie noch AccelStepper zur Steuerung der Motoren und RF24 zum senden und empfangen von Daten über das Funkmodul. AccelStepper und RF24 wurden unverändert von den jeweiligen Bibliotheken übernommen. Die Klasse LDVBOT enthält alle Funktionen, die zur Steuerung des Roboters benötigt werden.

 

Befehlssatz

Zur Steuerung des Roboters wurde ein Befehlssatz entwickelt. Der LDVBOT empfängt einen von Matlab gesendeten Befehl und führt diesen aus. Falls erforderlich sendet des Roboter eine Antwort zurück. Zur Erkennung der Befehle wird immer das entsprechende Befehlsbyte gesendet (s. Befehlssatz). Über die Funkverbindung zwischen den beiden NRF-Modulen werden immer acht Bytes gesendet. Um eine ausfallsichere Datenübertragung zu gewährleisten wird als erstes Byte imme das Erkennungsbyte gesendet. Da es möglich ist, dass ein Befehl weniger als acht Byte benötigt, enthält das zweite Byte die Anzahl der Bytes, die relevante Daten enthalten. Alle Bytes, die keine relevanten Daten enthalten, werden nach dem Empfangen nicht weiter verarbeitet. Als Drittes wird das Befehlsbyte übertragen. Die restlichen fünf Bytes sind für Daten vorgesehen. Soll z.B. der analoge Werte des Sensors 10 (Bodensensor mitte) an den Computer gesendet werden, empfängt der Roboter folgenden Befehl:

Byte 1:   234   (Erkennungsbyte)

Byte 2:   4      (Anzahl der relevanten Bytes)

Byte 3:   5      (Befehlsbyte)

Byte 4:   10    (wählt den Sensor aus)

Byte 5:   x      (nicht relevant)

Byte 6:   x      (nicht relevant)

Byte 7:   x      (nicht relevant)

Byte 8:   x      (nicht relevant)

 

Der Roboter liest z.B. den Wert 510 aus und sendet folgende Antwort zurück:

Byte 1:   234   (Erkennungsbyte)

Byte 2:   5      (Anzahl der relevanten Bytes)

Byte 3:   100   (Befehlsbyte)

Byte 4:   254   (Analogdaten des Sensors)

Byte 5:   1      (Analogdaten des Sensors)

Byte 6:   x      (nicht relevant)

Byte 7:   x      (nicht relevant)

Byte 8:   x      (nicht relevant)

Da analoge Messwerte des Arduinos aus 10 Bit bestehen, müssen sie auf zwei Bytes aufgeteilt werden

 

Matlab

Matlab sendet und empfängt die Daten des zweiten Microcontrollers über eine serielle Schnittstelle. Um die Kommunikation zu beginnen, muss ein virtueller COM-Port mit serialopen geöffnet werden. Zum Austausch der Daten wurden drei Funktionen implementiert:

serialwrite:         sendet Befehle, die keine Antwort erwarten

serialwriteread:   sendet Befehle und liest dann die empfangene Antwort ein

serielread:          liest vom Roboter gesendete Daten ein, die keine Antwort auf einen Befehl sind 

 

Steuerung des Roboters


Alle Aktionen können entweder durch einen Befehl von Matlab oder durch ein entsprechendes Programm auf dem Roboter ausgeführt werden. Bei einer Steuerung mit Matlab muss einmal das Funkmodul mit configure_nrf konfiguriert werden. Anschließend muss durchgehend die Funktion receivenrf aufgerufen werden. Dadurch können Daten empfangen und gegebenenfalls eine Antwort gesendet werden.

 

Akkumulator

Um einen irreversiblen Schaden des Akkus zu vermeiden, kann durch wiederholtes aufrufen der Funktion batterycheck ein sinken der Akkuspunnung auf unter 7,4 V durch aufleuchten der roten LED angezeigt werden. Außerdem kann der Ladezustand mit readbattery oder analogreadbattery sowohl mit dem Roboter als auch mit Matlab abgefragt werden.

 

Sensoren

Die Sensoren können auf zwei Arten abgefragt werden. Einerseits kann der gemessene analoge Wert zurückgegeben werden. Andererseits kann direkt überprüft werden, ob der gemessene Wert größer oder kleiner als der jeweilige Schwellwert ist. Ist er größer als der Schwellwert, wird eine 1 zurückgegeben, sonst eine 0. Die Nummerierung der Sensoren kann den zwei Bildern entnommen werden

 

 

 

 

 

 

 

 

Motoren

Zum Ansteuern der Motoren wurde die Funktion drive entwickelt. Sie kann direkt vom Roboter oder von Matlab in gleicher Weise aufgerufen werden. Die Funktion benötigt drei Parameter: drive(Geschwindigkeit, Strecke, Winkel). Die Geschwindigkeit wird in +-100% der Maximalgeschwindigkeit angegeben. Die Stecke ist zwischen 0 und 65535 mm wählbar. Der Winkel kann zwischen +-360° eingestellt werden. 

 

LEDs

Die gelbe und die blau LED können frei verwendet werden. Dazu muss einmal die Funktion enable_led aufgerufen werden und beide Jumper auf die Hauptplatine gesteckt werden.

 

Erweiterungen

Für Erweiterungen ist eine I2C Schnittstelle verfügbar. Die Schnittstelle kann anstatt der gelben und blauen LED genutzt werden. Dafür müssen beide Jumper entfernt werden. Die Pinbelegung der Buchse kann dem Bild entnommen werden.

 

 

 

 

 

Anhänge:
Diese Datei herunterladen (LDVBOT Befehlssatz.pdf)LDVBOT Befehlssatz.pdf[ ]%2015-%01-%22 %0:%Jan%+01:00
Diese Datei herunterladen (LDVBOT Library Reference.pdf)LDVBOT Library Reference.pdf[ ]%2015-%01-%22 %0:%Jan%+01:00
Diese Datei herunterladen (LDVBOT Matlab Reference.pdf)LDVBOT Matlab Reference.pdf[ ]%2015-%01-%22 %0:%Jan%+01:00