Azurit Firmware (Deutsch): Unterschied zwischen den Versionen

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche
(I2C Bus / Fehlertöne)
(I2C Fehler)
Zeile 448: Zeile 448:
 
Der I2C Bus muss einwandfrei funktionieren. Eine Konsolenausgabe welche bei der Zeile 'initL3G4200D' anhält deutet auf einen fehlerhaften I2C Bus hin.
 
Der I2C Bus muss einwandfrei funktionieren. Eine Konsolenausgabe welche bei der Zeile 'initL3G4200D' anhält deutet auf einen fehlerhaften I2C Bus hin.
 
Falls die Fehlermeldung "I2C bus error. Could not clear. SCL clock line held low" auftritt, kann der I2C Bus nicht angesteuert werden. Ursachen könnte sein: RTC-Modul nicht vorhanden oder I2C-Bus fehlerhaft.
 
Falls die Fehlermeldung "I2C bus error. Could not clear. SCL clock line held low" auftritt, kann der I2C Bus nicht angesteuert werden. Ursachen könnte sein: RTC-Modul nicht vorhanden oder I2C-Bus fehlerhaft.
 +
 +
Verschiedene Komponenten (Arduino Nano, RTC, IMU, usw.) kommunizieren über den I2C Bus (SDA/SCL Leitung). diese Leitungen sollten sehr kurz sein (evt. verdrillt) und sie sollten weit weg von DC/DC Wandlern und Motortreibern sein. Wenn es ein Kommunikationsproblem gibt, wird der Fehlerzähler erhöht und der Roboter piepst beim Starten. Der Fehlerzähler kann über die pfodApp eingesehen werden.
  
 
=== Serieller Monitor auf Android-App ausgeben ===
 
=== Serieller Monitor auf Android-App ausgeben ===

Version vom 8. Juli 2017, 11:41 Uhr

Diese Seite beschreibt, wie das Mähroboter-Programm auf den Arduino aufgespielt wird, wie man den Mähroboter konfiguriert und wie nach Fehlern gesucht werden kann.

Voraussetzungen zum Testen

Warning.pngSicherheitshinweis: Aus Sicherheitsgründen sind die Mähmesser bei den ersten Tests nicht zu montieren!

Warning.pngWichtig: Für die ersten Getriebemotortests sollte der Roboter hochgebockt werden so dass die Räder keinen Kontakt zum Boden haben!

Programm herunterladen und Arduino programmieren

TIPP: Wenn du noch nie mit Arduino gearbeitet hast, lies den Abschnitt 'Erste Schritte mit dem Arduino'.

1. Ein Ardumower-Release unter Github herunterladen

2. Die Arduino IDE herunterladen mit der wir das Programm auf dem Arduino übertragen.

3. Die Arduino IDE starten und das richtige Board auswählen (Mega 2560 oder Due).

4. In der Datei 'mower.h' das richtige PCB wählen (PCB_1_2 oder PCB_1_3) - Beispiel für die Auswahl von PCB 1.3 (eine Zeile welche mit // beginnt wird ignoriert):

// #define PCB_1_2    
#define PCB_1_3

5. In der Datei 'mower.h' den richtigen Robotertyp auswählen (ROBOT_ARDUMOWER oder ROBOT_MINI)

6. In der Datei 'mower.h' den richtigen Motortreiber auswählen (DRIVER_MC33926 oder DRIVER_L298N) - in den meisten Fällen ist DRIVER_MC33926 der richtige

7. Den Arduino Code in den Arduino hochladen

Serielle Konsole

Nachdem die Software erfolgreich hochgeladen ist, in der Arduino IDE die Serialle Konsole öffnen und Baudrate 19200 auswählen. Nun solltest Du eine Ausgabe wie folgt sehen:

ADCMan: found calib data
---ADC calib---
ADC sampleRate=38462
AD0	min=9999	max=-9999	diff=-19998	ofs=334
AD1	min=9999	max=-9999	diff=-19998	ofs=417
...
SETUP
matchSignal size=24
subSample=4
capture size=192
1	0	-1	0	1	-1	1	-1	0	1	-1	1	0	-1	0	1  -1	0	1	-1	0	1	0	-1	
IMU error: no calib data
--------
accOfs=0.00,0.00,0.00
accScale=2.00,2.00,2.00
comOfs=0.00,0.00,0.00
comScale=2.00,2.00,2.00
--------
initL3G4200D
gyro read error
gyro read error
gyro read error
loadSaveErrorCounters: read
loadSaveErrorCounters addrstop=423
loadUserSettings
EEPROM USERDATA: NO EEPROM USER DATA
PLEASE CHECK AND SAVE YOUR SETTINGS
loadSaveRobotStats: read
loadSaveRobotStats addrstop=822
START
Ardumower 1.0a8-Azurit-dev  PCB 1.3  Arduino Mega  IOREF=5.00
Robot: Mini
press...
 d for menu
 v to change console output (sensor counters, values, perimeter etc.)
sen_counters
t     1 L  0 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat 677.0 chg 677.0  0.0 imu  0 adc  0 Mini


Motor Test

Beim Motor-Test wollen wir sicherstellen dass die richtigen Motoren angesteuert werden und diese in die richtige Richtung laufen.

Warning.pngWichtig: Den Roboter für den Motortest aufbocken so dass die Räder keinen Kontakt zum Boden haben!

1. In der Arduino IDE die serielle Konsole öffnen, dann Taste 'd' und ENTER drücken um ins Hauptmenü zu gelangen - folgendes sollte erscheinen:

MAIN MENU:
1=test motors
2=test odometry
3=communications menu
5=calibrate IMU acc next side
6=calibrate IMU com start/stop
7=delete IMU calib
8=ADC calib (perimeter sender, charger must be off)
9=save user settings
c=test RTC
l=load factory settings
r=delete robot stats
x=print settings
e=delete all errors
0=exit

2. Taste '1' und ENTER drücken um den Motortest zu starten. Linker und rechter Getriebemotor sollten in die gezeigte Richtung laufen.

testing left motor (forward) half speed...
t   741 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   742 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   743 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   744 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   745 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
testing left motor (reverse) full speed...
t   747 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat   6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   748 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   749 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   751 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   752 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat   6.8 chg  0.1  0.9 imu  0 adc  0 Mini
testing right motor (forward) half speed...
t   754 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   755 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   756 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   757 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   758 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat   6.8 chg  0.1  0.9 imu  0 adc  0 Mini
testing right motor (reverse) full speed...
t   760 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   761 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   762 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   763 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini
t   764 L5790 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.1  0.9 imu  0 adc  0 Mini

Falls der falsche Motor läuft, die Kabel vom linken und rechten Motor tauschen. Falls ein Motor in die falsche Richtung läuft, die Adern des Motors tauschen (+/-).

Odometrie

1. Stelle sicher dass die Odometrie-Leitungen alle korrekt angeschlossen sind. Wir werden nun die Motor-Encoder und Verbindung von diesen überprüfen. Über das Hauptmenü (siehe oben) Taste '2' und ENTER eingeben für den Odometrie-Test. Beide Odometrie-Zähler (links und rechts) sollten mit ungefähr derselben Geschwindigkeit anfangen hochzuzählen:

Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=0  right=0
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=1  right=1
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=2  right=1
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=3  right=2
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=4  right=3
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=6  right=4
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=7  right=5
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=8  right=6
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution, '0' exit  left=9  right=7
...

Ein Rad leicht mit der Hand festhalten, um zu sehen ob der richtige Zähler absinkt. Falls die falsche Seite absinkt, Odometrie-Kabel links und rechts wechseln.

2. Taste 'o' und ENTER drücken um eine volle Radumdrehung zu testen. Das Rad sollte eine ganze Umdrehung machen und dann ungefähr an der Ausgangsposition wie gezeigt stoppen (in diesem Beispiel verwende ich den Ardumower Mini und PCB1.3):

Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=0  right=0
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=0  right=1
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=1  right=1
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=1  right=2
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=2  right=2
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=3  right=2
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=3  right=3
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=4  right=3
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=4  right=4
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=5  right=4
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=5  right=5
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=6  right=5
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=7  right=5
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=7  right=6
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=8  right=6
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=8  right=7
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=9  right=7
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=9  right=8
Press'f' forward, 'r' reverse, 'z' reset, 's' stop, 'o' one revolution  left=10  right=8

3. Mit Taste '0' und ENTER gelangt man zurück ins Hauptmenü.

Erster Testlauf

Nachdem der Motor- und Odometrie-Test erfolgreich verlaufen sind können wir einen ersten Testlauf starten.

Warning.pngWichtig: Für den ersten Testlauf den Roboter aufgebockt lassen so dass die Räder den Boden nicht berühren.

Um den Mähroboter zu starten wird ein Taster und ein Piezo-Summer benötigt. Es gibt verschiedene Modi (Drücke Taster bis du x Töne hörst):

1 Piep  : Normales mähen (verwendet, wenn verfügbar, Messermodulation)
2 Pieps : Normales mähen (ohne Messermodulation)
3 Pieps : Fahren mit Fernsteuerung (RC)
4 Pieps : Fahren ohne mähen
5 Pieps : Finde Perimeterschleife und folge ihr

Drücke nun den Taster für 1 Piep lang und die Räder sollten anfangen nach vorn zu drehen und der Zustand von OFF wechseln zu FORW wie folgt:

t     2 L5731 m0 OFF  rpm    0    0 set    0    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.3  0.9 imu  0 adc 97 Mini
t     0 L5942 m0 FORW rpm    0    0 set   50   50 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.3  0.9 imu  0 adc  0 Mini
t     0 L5942 m0 FORW rpm   60   60 set   50   50 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.3  0.9 imu  0 adc 90 Mini
t     1 L3764 m0 FORW rpm   60   60 set   50   50 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.3  0.9 imu  0 adc 97 Mini
t     2 L4160 m0 FORW rpm   60   60 set   50   50 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat  6.8 chg  0.3  0.9 imu  0 adc 97 Mini

Falls der Roboter für mindestens eine Minute nicht im Zustand 'FORW' verbleibt, löst höchstwahrscheinlich ein Sensor aus und die Einstellungen für diesen Sensor (Empfindlichkeit) müssen korrigiert werden.

Sensorzähler und Sensorwerte

Es gibt verschiedene Ansichten auf die Sensorik:

m0  - Zähler für Sensor-Trigger (Standard-Ansicht)
m1  - aktuelle Sensor-Werte
m2  - Schleifen-Werte

Du kannst zwischen den Ansichten mit 'v' und ENTER wechseln. Du siehst die aktuelle Ansicht in der Konsole wie folgt:

t     4 L177 m0  ...

Es gibt einen Zähler für jeden Sensor. Sobald der Sensor anspricht, zählt der entsprechende Zähler um eins hoch. In dem Beispiel unten hat der Mähmotor-Strom ausgelöst und daher ist der Sensor für den Mähmotor um eins hochgegangen. Zusätzlich hat der Roboter vom Zustand 'FORW' (vorwärts) in den Zustand 'REV' (rückwärts) gewechselt:

t     4 L177 m0 FORW spd   33   33    0 sen    0    0    0 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat 20.8 chg 21.7  0.0 imu  0 adc  0 Ardumower
t     5 L177 m0 REV  spd  -26  -26    0 sen    0    0    1 bum    0    0 dro    0    0 son   0 yaw   0 pit   0 rol   0 bat 20.8 chg 21.7  0.0 imu  0 adc  1 Ardumower


Hier ist eine Beschreibung der einzelnen Spalten:

t    - Dauer des aktuellen Zustands (FORW, REV, ROLL, usw.) (ms)
L    - loop()-Schleifendurchläufe pro Sekunde
m    - gewählte Ansicht (0=Zählerstände/1=aktuelle Sensor-Werte/2=aktuelle Perimeter-Werte)
FORW - aktueller Zustand (FORW, REV, ROLL usw.)
spd  - aktuelle Drehzahl der Motoren: links, rechts, Mähmotor
set  - Sollwerte ür die Motoren: links, rechts, Mähmotor
sen  - Überstromzähler der Motoren: links, rechts, Mähmotor
bum  - Bumper Zähler: links, rechts
son  - Ultraschall Abstandsschwelle unterschritten (Zähler)
pit/roll - Neigung (berechnet von Beschleunigungssensor)
com  - Kompass Kurs
per  - Perimeterschleife erkannt: Zähler
bat  - Akku Spannung
chg  - Ladestrom


Fehlerzähler / Fehlertöne

Gibt es ein Kommunikationsproblem oder ein anderes ernstes Problem, zählt der entsprechende Fehlerzähler hoch. der Fehlerzähler kann über die pfodApp eingesehen. Zusätzlich Piept der Roboter beim starten.

Siehe Abschnitt Troubleshooting für Details zu allen Fehlern.

Einstellungen

Der Roboter verwendet Grundeinstellungen die du für deinen Roboter und deine Umgebung anpassen kannst. Die Grundeinstellungen (factory settings) werden in der Konfigurationsdatei 'mower.cpp' gespeichert. In dieser Datei findest Du auch eine kurze Beschreibung aller Grundeinstellungen.

Diese Grundeinstellungen können später über ein Android-Handy verändert werden (pfodApp). Diese veränderten Einstellung haben dann höhere Priorität als die Grundeinstellungen. Alle geänderten Einstellungen können jederzeit auf Grundeinstellung (Werkseinstellung) zurückgesetzt werden.

Wichtig: Wenn du eine neue Softwareversion auf deinen Arduino lädst, setze alle Einstellungen über die pfodApp auf die Grundeinstellungen zurück (Settings->Factory reset). Das löscht alle vorhandenen Einstellungen. Alte Einstellungen können zu Fehlfunktionen führen, wenn sich das interne Einstellungsformat geändert hat.

Konsolen-Befehle

Du kannst die Sensoren manuell über die serielle Konsole auslösen lassen. Desweiteren kannst Du über die serielle Konsole den Roboter in einen bestimmten Zustand versetzen.

'd': Testmenü, Abgleich IMU, Bluetooth
'v': Anzeigemodus(zeigt Werte oder Zähler
'h': Fahr zur Ladestation
'p': Schleifenfahrt
'l': simuliert linken Bumper
'r': simuliert rechten Bumper
's': simuliert Rasensensor
'm': schaltet Mähmotor
'c': simuliert Laden
'+': drehen 90 Grad
'-': drehen 90 Grad 
'3': aktiviert Fernsteuerung
'0': Aus
'1': Automode, Mähmotor an


Bluetooth-Modul

Ardumower live monitoring configuration debugging.jpg

Der Ardumower kann drahtlos mit einem Android-Gerät (Handy/Tablet) überwacht und gesteuert werden. Bevor Du die Android App verwenden kannst musst Du das Bluetooth-Modul am Roboter konfigurieren, so dass die Baudrate mit der im Code übereinstimmt.

1. Das Bluetooth-Modul (HC-05) an die Position des PCB einsetzen wo das Pinout des Moduls dem des PCB entspricht.

2. Am Bluetooth-Modul den kleinen KEY-Taster drücken und halten und dann den Roboter einschalten. Die Bluetooth-LED sollte nun langsam blinken.

3. In der Arduino IDE die serielle Konsole starten, Baudrate 19200 auswählen und 'd' und ENTER drücken um ins Ardumower Hauptmenü zu gelangen.

4. Taste '3' und ENTER drücken um das Kommunikations-Menü zu erhalten - Du solltest etwas wie folgt erhalten:

COMMUNICATIONS MENU  == Bluetooth ==
 1=Select other communication method
 2=setup BT module config (quick baudscan (recommended))
 3=setup BT module config (extensive baudscan)
 0=Main Menu

5. Taste '2' und ENTER drücken um die Bluetooth Konfiguration zu starten - mehrere Zeilen sollten als erfolgreich ('success') angezeigt werden:

trying baudrate 38400 config 0...
send: AT
send: AT
 received: OK
=>success
detecting BT type...
send: AT+VERSION
send: AT+VERSION?
 received: +VERSION:2.0-20100601
OK
=>must be a HC03/04/05 ?
setting name Mini...
send: AT+NAME=Mini
 received: OK
=>success
setting pin 1234...
send: AT+PSWD=1234
 received: OK
=>success
setting baudrate 19200...
send: AT+UART=19200,0,0
 received: OK
=>success
You may restart BT module now!

6. Nachdem das Modul erfolgreich konfiguriert wurde die App 'ArduRemote' auf Dein Android-Gerät herunterladen Alternativ kannst Du auch die App 'pfodApp' verwenden.

7. Das Bluetooth-Modul muss nun noch mit dem Android-Gerät erstmalig verbunden werden. Wähle auf dem Android-Gerät das Symbol "Einstellungen" (über Android Menü). Nun wähle "Drahtlos und Netzwerke/Bluetooth->Bluetooth Einstellungen" und "Finde Gerät(Scannen)". Wurde der Ardumower in der Liste der gefundenen Geräte angezeigt, wählt man ihn aus und sagt dann -verbinden-. Nach der Eingabe der Sicherheits-PIN (als Vorgabe "1234"), sollte das Bluetooth-Modul des Arduino mit dem Handy gepaart sein (paired).

Wenn Du Dich nun mit dem Roboter verbindest, sollte folgendes Hauptmenü erscheinen:

Arduremote ardumower.png

PC/Mac remote control application

In addition to the Android App, we have developed a remote control application for PC/Mac/Linux (developed in Processing/Java). The Mac standalone version has to be created within Processing, the Windows version is already available as standalone version:

  1. Download Windows 64 bit executable and extract it:

https://drive.google.com/uc?export=download&confirm=EYiA&id=0B90Bcwohn5_HRFFMUUFYWF9OdW8

  1. Download and install Java runtime (version 8 or higher): https://java.com/de/download/
  2. Plug-in an USB bluetooth dongle on your PC
  3. In Windows, pair the USB bluetooth dongle with the Ardumower bluetooth module - two new serial ports will be created on your PC (the first for incoming bluetooth connections, the 2nd one for outgoing bluetoth connections)
  4. Run 'processing_remote.exe', all available serial ports will be shown - select the serial port for outgoing connections

The code for Processing can be found here: https://github.com/Ardumower/ardumower/tree/master/code/Test_und_Entwicklung/processing_remote

Processing can be downloaded here: https://processing.org/

Sensor-Protokollierung

For PC data analysis, algorithm modelling and optimization, you can collect robot sensor data using pfodApp like this:

  1. Using your Android pfodApp, connect to your robot and choose 'Log sensors'. The logged sensor data will be displayed. Click 'Back' to stop logging (NOTE: for ArduRemote, press Android menu button before and choose 'Enable logging' to enable file logging).
  2. Connect your Android phone to the PC, if being asked on the phone choose 'Enable as USB device', so you phone shows as a new Windows drive on your PC.
  3. On your PC, launch Windows Explorer and choose the new Android drive, browse to the 'pfodAppRawData' folder (for ArduRemote: 'ArduRemote' folder), and copy the data file to your PC (you can identify files by their Bluetooth name and date).

Fehlersuche

Jedesmal, wenn ein Sensor anspricht, zählt ein korrespondierender Sensorzähler um 1 hoch. Die Zählerstände der Sensorzähler sowie die aktuellen Sensorwerte kann man in der seriellen Konsole oder mittels der App ansehen. Die folgenden Werte werden in der seriellen Konsole angezeigt:

  1. Zeit des state machine's Status (ms)
  2. Schleifendurchläufe pro sec
  3. gewählter Anzeige-Modus (0=Zählerstände/1=aktuelle Werte/2=aktuelle Werte)
  4. aktueller state machine Status (FORW, REV, ROLL usw.)
  5. Fährt in Ladestation? (1/0)
  6. "spd" - Ansteuerung/Drehzahl der Motoren: links (PWM), rechts (PWM), Mähmotor (RPM)
  7. "sen" - Überstromzähler der Motoren: links, rechts, Mähmotor
  8. "bum" - Bumper Zähler: links, rechts
  9. "son" - Ultraschall Abstandsschwelle unterschritten (Zähler)
  10. "pit/roll" - Neigung (berechnet von Beschleunigungssensor)
  11. "com" - Kompass Kurs
  12. "per" - Perimeterschleife erkannt: Zähler
  13. "bat" - Akku Spannung
  14. "chg" - Ladestrom

Mittels der Taste 'v' kann zwischen Sensor-Zählerständen und den aktuellen Sensorwerten umgeschaltet werden.

Warning.png Zusätzlich kannst du mit Hilfe der Android-App 'pfodApp' die Sensorenausgaben über die Zeit grafisch darstellen (Zählerstände und aktuelle Werte). Das ermöglicht die drahtlose Überwachung deines Mähroboters zur Fehlersuche. Es ist sehr zu empfehlen.

Hardwarefehler finden

Um Fehler beim Zusammenbau oder den elektronischen Bauteilen zu finden wird empfehlen ein Oszilloskop zu verwenden (z.B. Pocket-Oszilloskop DSO201). Ein Oszilloskop ermöglicht das Messen von kurzzeitigen Einbrüchen bei der Versorgungsspannung, des Senders und Empfängers der Induktionsschleife, Odometrie-Signale und mehr.

Dso201.jpg

Anleitung für ein Pocket-Oszilloskop: http://www.ardumower.de/index.php/de/forum/anleitungen-hilfe/142-bedienung-oszilloskop-dso201


Fehlercodes

Wenn dein Ardumower periodisch piepst (4 Töne - Pause), ist er in einem Fehler-Status. Um den genauen Fehler zu finden, kann man die serielle Konsole oder die APP ('pfodApp->Error Counters') benutzen. Mögliche Lösungsvorschläge für jeden Fehler werden nachfolgend gegeben. Detaillierte Angaben zu deinen Robotereinstellungen, siehe Einstellungen.

 ERR_CPU_SPEED           Fehler CPU Geschwindigkeit
                         * I2C-Kabel überprüfen (z.B. Kabellängen kürzen)
 ERR_MOTOR_LEFT          Fehler  linker Getriebemotor
                         * Überprüfe Motortreiber und linken Getriebemotor
                         * MC33926: stelle sicher, dass der SLEW Jumper nicht gesteckt ist
                         * beim Fahren: veringere 'Motor-Max-PWM' und 'Tracking-P' um EMF zu veringern
 ERR_MOTOR_RIGHT         Fehler rechter GetriebemotorRight gear motor error
                         * Überprüfe Motortreiber und rechten Getriebemotor
                         * MC33926: stelle sicher, dass der SLEW Jumper nicht gesteckt ist
                         * beim Fahren: veringere 'Motor-Max-PWM' und 'Tracking-P' um EMF zu veringern
 ERR_MOTOR_MOW           Mähmotor Fehler 
                         * Überprüfe Motortreiber und Mähmotor
                         * MC33926: stelle sicher, dass der SLEW Jumper nicht gesteckt ist
                         * Veringere Motor-Max-Power, damit Überstrom früher erkannt wird
 ERR_MOW_SENSE           Mähmotor Überstrom
                         * Überprüfe Mähmotor-Treiber und Mähmotor
                         * Vergrößere Motor-Max-Power, damit Überstrom später erkannt wird
 ERR_IMU_COMM            IMU Kommunikationsfehler
                         * Überprüfe die Verbindung zum IMU-Modul
 ERR_IMU_CALIB           IMU Abgleich-Fehler
                         * Start 'IMU Abgleich' (entweder über die Konsole oder über pfodApp->Settings->IMU)                     
 ERR_IMU_TILT            IMU Neigungsfehler
                         * Überprüfe IMU-Modul und Ausrichtung des Roboters
 ERR_RTC_COMM            RTC Kommunikationsfehler
                         * Überprüfe die Verbindung zum RTC-Modul, RTC-Batterie usw.
 ERR_RTC_DATA            RTC-Daten sind fehlerhaft
                         * stelle und speichere Datum und Zeit
 ERR_PERIMETER_TIMEOUT   Perimeter-Signal, Zeitüberschreitung 
                         * Überprüfe Perimeter-Sender, Schleife usw.
                         * Überprüfe die Polarität der Perimeterspule
                         * veringere 'Perimeter-smag', damit die Auszeit größer wird
                         * Erhöhe 'Perimeter-timeout-seconds', damit die Auszeit größer wird
                         * Überprüfe, ob das Signal-Rausch-Verhältnis größer 1 ist.
 ERR_TRACKING            Perimeter-Folge-Fehler 
                         * Überprüfe Perimeter-Sender, Schleife usw.
                         * Erhöhe 'Perimeter-tracking-timeout', damit die Auszeit größer wird
 ERR_ODOMETRY_LEFT       Odometrie-Fehler linker Motor 
                         * Überprüfe das linke Odometrie-Kabel
                         * Überprüfe die Drehrichtung des linken Motors 
 ERR_ODOMETRY_RIGHT      Odometrie-Fehler rechter Motor 
                         * Überprüfe das rechte Odometie-Kabel
                         * Überprüfe die Drehrichtung des rechten Motors
 ERR_BATTERY             Akku-Fehler 
                         * Überprüfe Akku-Verbindung
 ERR_CHARGER             Ladefehler 
                         * Überprüfe Verbindung zum Ladegerät 
 ERR_GPS_COMM            GPS Kommunikationsfehler 
                         * Überprüfe GPS-Kabel
 ERR_GPS_DATA            GPS Datenfehler 
                         * Überprüfe GPS-Antenne und -Kabel
 ERR_ADC_CALIB           ADC Abgleich-Fehler
                         * Starte 'ADC calibration' (entweder über Konsole oder pfodApp->ADC calibration)
 ERR_EEPROM_DATA         EEPROM Datenfehler 
                         * Speichere Benutzer-Einstellungen (entweder über Konsole oder pfodApp->Settings-Save)

Nach Behebung des Fehlers kann dieser gelöscht werden:

Konsole:
press...
d for menu
e=delete all errors

I2C Fehler

Der I2C Bus muss einwandfrei funktionieren. Eine Konsolenausgabe welche bei der Zeile 'initL3G4200D' anhält deutet auf einen fehlerhaften I2C Bus hin. Falls die Fehlermeldung "I2C bus error. Could not clear. SCL clock line held low" auftritt, kann der I2C Bus nicht angesteuert werden. Ursachen könnte sein: RTC-Modul nicht vorhanden oder I2C-Bus fehlerhaft.

Verschiedene Komponenten (Arduino Nano, RTC, IMU, usw.) kommunizieren über den I2C Bus (SDA/SCL Leitung). diese Leitungen sollten sehr kurz sein (evt. verdrillt) und sie sollten weit weg von DC/DC Wandlern und Motortreibern sein. Wenn es ein Kommunikationsproblem gibt, wird der Fehlerzähler erhöht und der Roboter piepst beim Starten. Der Fehlerzähler kann über die pfodApp eingesehen werden.

Serieller Monitor auf Android-App ausgeben

Für den mobilen Einsatz kann man den seriellen Monitor per USB auch auf einem Android-Smartphone oder Android-Tablett ausgeben.

  • Android-App "Simple Serial Monitor" von Bernard Bekker aus dem Playstore herunterladen
  • Smartphone oder Tablett mit der OTG-Funktion (Bereitstellung eines USB-Host)
  • passendes OTG-Kabel
  • USB-Kabel

Die USB-Schnittstelle des Arduino Mega mit dem USB-Stecker des OTG-Kabels verbinden und dann die Android-App "Simple Serial Monitor" aufrufen. Die Übertragungsgeschwindigkeit einstellen und den Button "Start" drücken.

Damit steht ein vollwertiger serieller Monitor analog zur Arduino-IDE zur Verfügung. Es werden alle Systemmeldungen ausgegeben. Über die Kommandozeile können die üblichen Befehle aufgerufen werden.

Deaktiviere alle Pins, die nicht angeschlossen sind

Stelle sicher, dass alle Pins und Eigenschaften die nicht angeschlossen sind (nicht verwendet werden), in der Roboter-Konfiguration deaktiviert sind.

Beispiel: Wenn du die Odometrie-Pins nicht beschaltet hast, muss Odometrie in der Roboter-Konfiguration deaktiviert werden. (mower.cpp):

odometryUse       = 0;       // use odometry?

Probebetrieb ohne Mähmotor-Treiber

Sofern man den Ardumower im Probebetrieb ohne Mähmotor-Treiber testen möchte, so ist der PIN "pinMotorMowFault" auf High zu setzen. Damit verschwindet die Fehlermeldung "Error: Motor mow fault" und der Mover kann getestet werden.

Drehen die Motoren richtig?

Führe einen Motortestlauf aus. Gehe in die serielle Konsole (Arduino IDE: STRG+SHIFT+M, 19200 Baud) drücke 'd' und ENTER um ins Menü zu gelangen. Dann drücke '1' und ENTER. Es startet der Motortest.

Unerwartete Sensorauslösung

Wenn dein Roboter etwas Unerwartetes tut, kann es an einem Sensor liegen, der fehlerhaft auslöst. Überprüfe das über die serielle Konsole:

Starte die serielle Konsole (Arduino IDE: CTRL+SHIFT+M, 19200 Baud), und schalte den Roboter ein. Jedes Mal, wenn ein Sensor auslöst, wird der Zähler dieses Sensors erhöht. Siehe Beschreibung der Sensoren weiter unten. Wenn sich also der Roboter nicht so verhält, wie er soll, dann schau dir die Sensor-Zähler an und stelle fest, welcher Zähler hochzählt, um das Problem zu lokalisieren.

Einige Sensoren lösen nicht aus?

...

Keine Verbindung über Bluetooth

  • Stelle sicher, dass die Baudrate des BT-Modules richtig eingestellt ist (verwende die Ardumower Konsole) - Aktiviere den Programmier-Modus des BT-Modules und stelle die Baudrate ein Bluetooth & App.
  • Stelle sicher, das das BT-Modul mit dem Handy "gepaart" ist
  • Überprüfe, dass der Arduino Mega nicht über USB mit Strom versorgt wird.

Roboter dreht sich im Kreis wenn er auf die Schleife trifft (Home Modus)

Zunächst sicherstellen, dass das Perimeter Tracking funktioniert: den Roboter manuell auf die Schleife setzen und via ArduRemote "Commands->Track" wählen und sicherstellen dass der Robote die Schleife abfährt. Falls dies nicht klappt könnte ein Tuning der Tracking PID-Parameter helfen.

Die Position der Spule sollte wie angegeben sein:

Wenn er über die Schleife fährt (Spule liegt dann also "außerhalb" der Schleife) muss er ja durch Drehen wieder mit der Spule nach "innerhalb" der Schleife kommen. Wenn das durch Drehen nicht klappt würde er nicht mehr aufhöhren mit dem Drehen.

Je weiter er drüber gefahren ist umso schlechter kann er die Spule durch Drehen wieder nach "innerhalb" bekommen. Die Fahrgeschwindigkeit zu reduzieren und die Positionierung der Spule nach weiter außen sollte helfen.

Folgender Test ist hilfreich: In der ArduRemote-App unter "Plot->Perimeter" lässt Du Dir den Schleifen-Plot anzeigen. Hier werden die einzelnen Werte erklärt: http://wiki.ardumower.de/index.php?title=Perimeter-Schleife#Problemanalyse_und_Fehlerbehebung_am_Empf.C3.A4nger

Dann setzt Du den Roboter mit der Hand manuell an die Position wo Du meinst dass er die Schleife erkannt hat ("mag" sollte dort von negativ zu positiv wechslen bzw. "in" zu "out"). Jetzt drehst Du den Roboter mit der Hand (also ohne Motor) und schaust ob "mag" wieder von positiv zu negativ wechselt (bzw. "out" zu "in"). Wenn das nicht klappt stimmt etwas mit der Position der Spule nicht bzw. der Roboter fährt zu weit über die Schleife (dann die Geschwindigkeit verringern).

Weitere Fehlerquellen

  1. Änderungen der Konfigurationseinstellungen in der Mower.cpp Datei werden nicht übernommen
  2. Der Ladestrom im ArduMower zeigt nichts oder falsche Werte an
  3. Der Perimetersender ohne automatische Regelung
  4. Elektrische Fehlersuche am BT Modul
  5. Programmieranleitung für das Bluetooth Modul auf der Platine V1.2

Motor controller (PID)

Die Geschwindigkeit der Motoren wird mit einem Software-PID-Regler geregelt. Du kannst Dir die Regelung mit der pfodApp anschauen (Plot->Motor control):

Laden des Roboters

Im Roboter wird die Akkuspannung überwacht (siehe Schema unten). Dadurch kann festgestellt werden, wann der Roboter zur Ladestation fahren muss. Der Roboter, die Ladespannung und der der Ladestrom werden gesteuert. Dadurch kann entschieden werden, ob der Roboter die Ladestation erreicht hat und wann der akku voll geladen ist.

Über die App pfodApp (Android) kann der Ladevorgang überwacht werden.

Schleifen-Empfänger

Einstellungen

At first, activate the perimeter in the Ardumower software (pfodApp->Options->Perimeter Use: YES). It is recommended to keep the default perimeter settings.

The perimeter settings are:

  • Timed-out if below smag (timedOutIfBelowSmag) - default setting: 300 | If smag below this value, sender is considered as off (perimeter timeout appears)
  • Timeout (s) if not inside (timeOutSecIfNotInside) - default setting: 8
  • Trigger timeout (perimeterTriggerTimeout) - default setting: 0 | Perimeter outside trigger timeout when escaping from inside (ms)
  • Perimeter out roll time max (perimeterOutRollTimeMax) - default setting: 2000 | Max (random generator) roll time after perimeter out (ms)
  • Perimeter out roll time min (perimeterOutRollTimeMin) - default setting: 750 | Min (random generator) roll time after perimeter out (ms)
  • Perimeter out reverse time (perimeterOutRevTime) - default setting: 2200 | Time to drive reverse after perimeter out (ms)
  • Perimeter tracking roll time (perimeterTrackRollTime) - default setting: 1500 | Hit obstacle while tracking: roll time
  • Perimeter tracking reverse time (perimeterTrackRevTime) - default setting: 2200 | Hit obstacle while tracking: reverse time
  • Transition timeout (trackingPerimeterTransitionTimeOut) - default setting: 2000 | Max. time required for a in/out transition during tracking, robot will start rotating after this timeout
  • Track error timeout (trackingErrorTimeOut) - default setting: 10000 | Max. time required for a in/out transition during tracking, robot will go into error after this time
  • Track_P (perimeterPID.Kp) - default setting:51 | Perimeter PID "P" setting
  • Track_I (perimeterPID.Ki) - default setting:12.5 | Perimeter PID "I" setting
  • Track_D (perimeterPID.Kd) - default setting:0.8 | Perimeter PID "D" setting
  • Use differential signal (useDifferentialPerimeterSignal) - default setting: YES | Use differential signal (see signal section)
  • Swap coil polarity (swapCoilPolarity) - default setting:NO
  • Block inner wheel (trackingBlockInnerWheelWhilePerimeterStruggling) - default setting: YES | robot is wheel-spinning while tracking => roll to get ground again

ADC-Kalibrierung am Empfänger

Warning.png Die ADC-Kalibrierung (bei ausgeschaltetem Sender!) sorgt für eine korrekte Erkennung der Nulllinie (Stille), sodass das empfangene Signal später symmetrisch zur Nulllinie angezeigt wird.

  1. Der Perimetersender und die Motoren des ArduMower müssen während der Kalibrierung ausgeschaltet sein!
  2. Wenn eine Störung durch einen anderen Sender nicht zu vermeiden ist, muß während der Kalibrierung die Spule entfernt und der Eingang es LM386 mit GND verbunden werden.
  3. Führe die ADC-Kalibrierung einmal aus ("pfodApp->ADC Calibration")

Nach der korrekt durchgeführten Kalibrierung sollte das Signal per pfodApp Plot ('sig') bei ausgeschaltetem Perimetersender ungefähr als Null angezeigt werden. Nach Einschalten des Perimetersenders sollte das Signal etwa diesselbe positive wie negative Maximalamplitude ('Symmetie zur Nulllinie') aufweisen.

Problemanalyse und Fehlerbehebung am Empfänger

Empfangenes Signal, Filterergebnis und Signalqualität können per Android Handy über die pfodApp->Plot->Perimeter angezeigt werden:

Beschreibung der im Plot angezeigten Signalverläufe:

sig:  Spulensignal (Sequenz der Rohimpulse nach ADC) als kurzer Snapshot (32 samples), Update alle 20 Sekunden 
      (also 20 Sekundenwarten bis zum nächsten Snapshot)
mag:  Filterergebnis: innen (negativ) oder außen (positiv), magnitude: Abstand zur Perimeterschleife / magnetische Signalstärke (RSSI)
      - wird benutzt zum Perimeter verfolgen
smag: Filterergebnis, low-pass-gefiltert, ohne Vorzeichen (geglätteter mag-Verlauf) - verwendet zur Erkennung des 'Sender-aus' Zustandes
      Der Grenzwert kann über die pfodApp gesetzt werden (Settings->Perimeter->Timed-out if below smag)
in:   binäres Ergebnis des low-pass Filters: innerhalb (1) oder außerhalb (0) der Perimeterschleife - wird benutzt zur Erkennung des Perimetergrenzverlaufs
      Ist der ArduMower eine bestimmte Zeit außerhalb der Schleife, geht er in den Fehlerstatus. Diese Zeit kann per pfodApp
      (Settings->Perimeter->Timeout (s) if not inside) eingestellt werden
cnt:  Anzahl der Wechsel von innen nach außen (counter, Zähler)
on:   Perimetersender ist aktiv, Roboter innerhalb und smag ausreichend (1) oder inaktiv/außerhalb/smag zu klein (0)
qty:  Signalqualität (Aussage über die Verläßlichkeit der Erkennung 'innerhalb / außerhalb' aus dem Filterergebnis)
      Verhältnis aus Vergleich mit Mustersignal zu Vergleich mit inversem Mustersignal              
      1.0 bedeutet schlechte Qualität, Du solltest Werte von 1.5 oder höher)

Im Plot soll der 'mag'-Verlauf frei von Spitzen sein: innerhalb der Schleife sollte das Signal eine negative Kurve, außerhalb eine positive Kurve beschreiben. Weist die Kurve Spitzen auf, versuche folgende Maßnahmen zur Fehlerbeseitigung bzw. Optimierung:

  • Verbinde die Empfangsspule mit 'pinPerimeterLeft' auf dem PCB (am falschen Pin könnte das Signal 'etwas schwach' reinkommen)
  • Verringere smag-Mindestwert via 'pfodApp->Options->Perimeter->Timed-out if below smag'
  • Die Spulenpolung kann per pfodApp eingestellt werden (wird 'außen' angezeigt, wenn der Ardumower sich innrhalb der Schleife befindet?). Denselben Effekt hat das Umklemmen der Schleifenenden am Senderausgang.
  • Sollte das Signal schwach erscheinen, überprüfen, ob am Spulenverstärker das Poti "voll aufgedreht" ist! Hilfreich ist die gleichzeitige Anzeige des Signal per pfodApp (Plot --> Perimeter).
  • Die Kabelverbindung zwischen Spule und LM386-Vorverstärker muss möglichst kurz sein - am Besten die Spule direkt am Verstärker anschließen!
  • Halte den Abstand zwische Spule und Motoren sowie DC/DC-Wandlern möglichst groß (30cm oder mehr!)
  • Nutze die magnetische Abschirmwirkung (z.B. Deines Akkus) zwischen Spule und Störquellen.

Weitere Fehlerquellen: [1]

Videos

  1. Perimeter2 Demo
  2. Test 120m Perimeterschleife
  3. Theorie zu Perimeterschleife und Matched Filter (in deutsch)
  4. Sender-PCB
  5. Perimeter Stoptest
  6. Perimeter Verfolgungstest
  7. Test zum Finden und Verfolgen mit L50
  8. Test zum Finden und Verfolgen mit Rotenbach
  9. Magnetfeld Demovideo


IMU

Ein Modul namens IMU (Intertia Measurement Unit) ist das Herzstück eines Trägheitsnavigationssystems, mit dem wir folgendes erreichen können:

  • feststellen, ob der Ardumower umgekippt ist (Neigungswinkel)
  • regeln einer exakten Geradeausfahrt z.B: für das Mähen in parallelen Bahnen

Slope1.png

Beschleunigungssensor

Dieser Sensor mißt die translatorischen und rotatorischen Beschleunigungswerte des Ardumower bezüglich der 3 Raumachsen (x/y/z). Die Auswertung dieser Signale ermöglicht dem Ardumower die Berechnung der räumlichen Bewegung und der Veränderung der räumlichen Position. Zur Bestimmung der Raumwinkeländerungen beinhaltet die IMU ein Gyromodul.

Ardumower pitch roll yaw.png

Gyro

Ein Gyro mißt die Rotationsgeschwindigkeit (Winkelgrad/Sekunde) um alle 3 Roboterachsen (Roll, Pitch, Yaw). Das ermöglicht die Kurskorrektur wenn der Roboter durch z.B. nässebedingten Schlupf der Räder außer Kurs gerät. When integrating (adding) gyro values over time, the actual course (yaw) can be calculated. However, because each sensor reading has a small error, the course will 'drift' over time. This needs to be corrected via an absolute heading sensor (compass).

Vergleich Messfehler verschiedener Gyro-ICs:

                noise dps/sqrt(Hz)
L3G4200D        0.03
BMG160/BNO055   0.014
MPU9150         0.005

Compass

Fährt der Roboter auf nassem Gras, wird man feststellen, dass er nicht genau geradeaus fährt, sondern in Richtung des Rades tendiert, an dem Schlupf auftritt. Unter Auswertung eines Kompasssignals kann dieses Problem gelöst werden und der Robbi wird wieder geradeausfahren.

Ein Kompass hat jedoch 2 Probleme:

  1. If tilting the robot, the compass measurements (x,y,z) relate to the tilted robot. So, you need to correct them using knowing the tilt angles. This requires the use of the accerlation sensor (x,y).
  2. The compass measurements are influenced by motors. So you may need to switch of the motor to get an accurate measurement.

Sensor fusion

To eliminate the issues of all sensor, they are merged to compute the course (degree) and pitch/roll angles.

We use a complementary filter to fusion all sensor values.

Ardumower sensor fusion.png

IMU module

GY-80

  • Acceleration sensor: ADXL345B
  • Compass sensor: HMC5883L
  • Gyro: L3G4200D
  • Pressure sensor: BMP085 (not used here)

Assembly

This photo shows how the IMU module is placed in the driving position (the red arrow shows the driving position). Ensure a minimum distance of 30cm from all motors. This minimum distance seems to be needed to ensure the compass is not disturbed by dynamically disturbing sources (like motors).

Imu assembly.png

Calibration abstract

This one-time calibration ensures that:

  • All 3 axes measurements of the acceleration sensor are weighted equally. This calibration can even be performed externally to the robot.
  • Cables, metal, etc. which are located in the robot near the IMU module have no effect on the compass data.

Why is it needed? The origin of a 3D compass point is 0,0,0 (x,y,z) and points to the north pole. If the 3D compass is rotated around all of its axes i.e. all values of x, y and z are measured then these points will ​​lie on a sphere.

Compass sphere.png

If you add a magnetic material (e.g. metal) near the compass, the measured values ​​from the origin (0,0,0) of the sensor suddenly point in one direction only - Why? There are two types of disturbances of the magnetic field which change / move the values​​:

  • Hard ircon (e.g. magnets): the sphere moves
  • Soft ircon (e.g. metal): the sphere deforms (becomes an Ellipsoid)

Example measurements

The goal of the calibration is that the measurements are centered again on a sphere around the origin of the sensor.

IMU Kalibrierung

Acceleration sensor

This calibration can be performed outside of the robot. Place each of the 6 module sides exactly upright, do not move and choose 'next side calibration':

  • Via serial console "IMU acc calibration next side" OR
  • Via pfodApp "Settings->IMU->acc calibration next side"

Do not move the module during the measurement of each side! During measurement you will hear a short beep tone.

Repeat this step for all 6 sides. After all 6 sides are calibrated, you will hear a short melody.

Gy80 acc calibration.png

Compass sensor

This calibration can only be performed inside of the robot (IMU in its final position). Start the compass calibration:

  • Via serial console "IMU com calibration start/stop" OR
  • Via pfodApp "Settings->IMU->com calibration start/stop"

Hold each of the 6 module sides to North direction and tilt the module until minimum and maximum of the axis does not change anymore (until no tone is outputted anymore):

Gy80 com calibration.png

Calibration quality test

For a quality test, you can plot the calibration results (Yaw, Pitch, Roll) via pfodApp. Place the robot on a flat ground and let it rotate (pfodApp: click on "Commands->Auto rotate" until robot rotates). Alternatively, you can let the robot drive a circle (pfodApp: click "Manual->Right" until it drives the desired radius). Finally, choose 'Plot->IMU' to see the calibration result.

For the yaw plot, the curve should be a straight line when the robot is rotating with a constant speed.

Ardumower imu plotting.jpg

Videos

  1. Tanz des Roboters
  2. Spur halten
  3. Parallele Bahnen fahren

Drop sensor

Einstellung im Sketsch:

Die Absturzsensoren sind ab der Softwarefunktion 242 integriert.

(Eine Integration in die Handy App bzw. das persönliche Speicher der Einstellungen ist zur Zeit noch nicht Intrigiert.)

Der Anschluss des linken und rechten Absturzsensor sind an den Pin 45 und 23 vorgesehen.

Um die Funktion zu aktivieren sind folgende Einstellungen in der Mower.ccp vorzunehmen.

//  ------ drop -----------------------------------
 dropUse          = 1;     // has drops?  -Dropsensor - Absturzsensor vorhanden 0-nein  1-Ja
 dropcontact      = 1;     //contact Kontaktausführung 0-Öffner 1-Schließer  

Verdrahtung:

Die IR Sensoren sollten möglichst weit vorne vor den Rädern angebracht werden. Um evl Reichweiten Schwankungen zu vermeiden sollten sie vor fremd Licht geschützt werden. Die IR Sensoren sollten so eingestellt werden das diese im normalen Betrieb leuchten, und wenn man den Mover hochhebt ausgehen. Am besten gleich auf der Grasoberfläche testen oder dort zumindest gegebenenfalls nachjustieren. In der Seriellen Ausgabe kann man den richtigen Anschluss kontrollieren. Sollte der Mover im Normalbetrieb den Kontakt zur Oberfläche haben sollte der Dropsensor nicht ausgelöst sein bzw der Counter des Dropsensors sollte nicht hochgezählt werden. Fall das so nicht sein sollte, ist die Einstellung in der Mower.ccp Datei zu kontrollieren bzw. zu ändern.

Dropcontact = 1;      ändern in 0

(Kann je nach verwendeten Sensoren anders sein) Danach den Mower anheben so das dieser den Kontakt zur Oberfläche verliert. Darauf hin sollte in der seriellen Konsole sichtbar sein das der Dropsensor ausgelöst hat bzw. der Counter hoch zählt. Darauf hin kann das ganze im automatischen Betrieb getestet werden.

Gegebenenfalls muss noch die Acceleration angepasst werden. Diese ist auch in der Mower.ccp Datei zu finden. Das ist die Beschleunigungszeit bzw. die Abbremszeit der Antriebsmotoren. Dieser Wert muss angepasst (erhöht) werden damit der Mower schnell genug an der Gefahrenstelle anhalten kann.


Timer

Am Roboter können verschiedene Timer programmiert werden (über Android pfodApp). Für jeden Timer kann ein Zeitintervall ('Zeitfenster') für die gewünschten Tage definiert werden. Solange die aktuelle Zeit sich innerhalb irgend eines Zeitfensters befindet, solange kann der Roboter frei mähen, laden, mähen, laden usw.

Beispiel:

Timer 1: 08:00 - 13:00 Montag, Dienstag, Mittwoch

Timer 2: 14:00 - 16:00 Jeden Tag

Timer 3: aus

Timer 4: aus


Wie melde ich einen Programmfehler/eine neue Eigenschaft/neuen Programmcode

Klicke auf 'this link' und erzeuge ein neues Thema - bitte teile uns folgendes mit:

   Deine Plattform (Arduino Mega 2560, Arduino Due)
   Deine Arduino IDE-Version (der letzte Programmcode erfordert 1.6.3)
   Dein genaues Betriebssystem (Windows 8, Linux usw.)
   Deine Ardumower-Programmversion  (eine Liste der Veröffentlichungen siehst du hier https://github.com/Ardumower/ardumower/releases)
   Jede andere Info, die brauchbar sein kann...

This page describes some internals of the Ardumower software architecture.

Finite state machine

Kurz zum Ablauf der Software: In der Hauptschleife (loop) werden periodisch:

  1. Die Sensoren eingelesen (readSensors)
  2. Der Zustandsautomat durchlaufen und abhängig vom aktuellen Zustand die Sensorwerte überprüft (CheckXXXXX) und von den Sensorwerten in neue Zustände gewechselt (setNextState) - beim Wechsel werden ggf. neue Soll-Werte für die Motoren gesetzt (Beispiel: motorLeftSpeedRpmSet).
  3. Die Motoren mit den Soll-Werten angesteuert (motorControl)

Die möglichen Zustände und Ergebnisse für die Übergänge des Zustands-Automaten sind hier unten alle grafisch darsgstellt.

Wenn der Mower also im Zustand FORWARD ist, fährt er nach vorn. Man schaut also in der loop() nach was alles in diesem Zustand FORWARD gemacht wird (case FORWARD). Dort hätte man die Möglichkeit weitere Aktionen einzufügen.


Main component of the software is a so called 'finite state machine', that means there exists a set of states ("OFF", "FORWARD", "ROLL", etc.) that the robot can be in. Depending on events (sensor is triggering etc.), the robot will enter a new state.

State diagram (Note: The drawing has been created using draw.io)

Ardumower Statemachine.png

Implemented updates:

  • If obstacle during reverse => roll
  • If obstacle during roll => forward

Weitere Links

  1. Diagnostic