Tipp: Benutze das WIKI für aktuelle Informationen!

Kompaßmodul (GY-80)


Beschleunigungssensor
(zur Erkennung der Orientierung/Lage des Roboters)
Ein Beschleunigungssensor mißt die Erdanziehungskraft (m*s^2) in allen 3 Roboter-Achsen (x/y/z). Damit kann ausrechnen welche Orientierung zum Erdmittelpunkt (Roll=Längsachse, Pitch=Querachse) der Roboter gerade hat.

ardumower pitch roll yaw

Bewegungen um die Hochachse (Yaw) kann man hiermit nicht erfassen - hierzu benötigt man einen Gyro. Ein Beschleunigungssensor ist auch empfindlich gegen Stöße - daher sollte man die Meßwerte mitteln.

Gyro (zur Erkennung von Drehbewegungen des Roboters)
Ein Gyro mißt die Drehgeschwindigkeit (Grad/Sekunde) in allen 3 Roboter-Achsen (Roll=Längsachse, Pitch=Querachse, Yaw=Hochachse). Ausgewertet wird aber nur die Hochachse (Yaw). Damit kann man den Roboter wieder auf “Kurs” bringen falls er mal durch nassen Rasen/Steigung etc. eine zufällige Drehbewegung macht. Ein MEMS-Gyro hat auf Dauer einen "Drift" (d.h. der so ermittelte Kurs "0 Grad" weicht mit der Zeit immer weiter vom realen ab).

Kompaß (zur Erkennung des Kurses)
Lässt man einen Mähroboter auf eine Fläche mit Gefälle laufen, bemerkt man sehr schnell dass der Roboter dort niemals richtig geradeaus fährt, sondern immer in Richtung “Gefälle nach unten” driftet und sich die meiste Zeit auch dort aufhält. Abhilfe schafft ein Kompaß. Dann fährt der Roboter wieder geradeaus.

Ein Kompaß lässt sich sehr leicht von Motoren, Metall etc. ablenken - daher ist es notwendig, diesen nach dem Einbau zu kalibrieren.

Ein Kompaß hat noch ein Problem: kippt man ihn (bzw. den Roboter), beziehen sich die gemessenen Kompaßwerte (x,y,z) auf den gekippten Roboter. Man muss diese Werte also wieder durch die gemessene Neigung (Roll, Pitch) des Roboters kompensieren. Typischerweise werden auch Kompaßwerte gemittelt, um stabile Werte zu erhalten.

Fusion aller Sensoren
Optimalerweise werden alle 3 Sensoren verwendet, um die Nachteile der einzelnen Sensoren zu kompensieren (IMU - Inertial Measurement Unit) - Ein "IMU" ist Hauptbestandteil eines Inertialen Navigationssystems):

1. Berechnung der kurzfristigen Neigung über Gyro
2. Berechnung des kurzfristigen Kurses über Gyro
3. Berechnung der langfristigen Neigung über Beschleunigungssensor
4. Berechnung des langfristigen Kurses über Kompaß (und Neigungs-Korrektur)

ardumower sensor fusion


Die Fusion alle Sensor-Werte kann z.B. über Komplementär-Filter (s. Bild) oder über Kalman-Filter erfolgen.
 

Nine Axis IMU Module (GY-80)

 GY-80        GY80-Schematic

  • Beschleunigungssensor: ADXL345B
  • Kompaßsensor: HMC5883L
  • Gyro: L3G4200D
  • Drucksensor: BMP085  (wird hier nicht verwendet)


Verdrahtung

Das IMU-Modul (GY-80) wird an einem Arduino Nano angeschlossen, welche Kompaß, Gyro und Beschleunigungssensor ausliest und zu einem Kurs auswertet. Für die genaue Verdrahtung, siehe Schaltbild.


Einbau
Die Platine wird wie gezeigt in Fahrtrichtung eingebaut (der schwarze Pfeil am Rohr gibt die Fahrtrichtung an). Das hier verwendete Rohr diente nur für den Prototyp - das Modul kann nun direkt im Roboter befestigt werden.

gy80 direction

Einbau-Hinweise zum GY80

Einbaulage des Moduls:
horizontal, Bauteilseite nach oben
Ausrichtung des Moduls:
immer in Fahr-Richtung einbauen.
Hinweise auf dem Modul beachten
Entfernung des Moduls von mag.Störfelder:
so weit wie möglich, aber > 20cm
Weitere wichtige Einbau-Infos:
Betriebspannung-Kabel aller Motore verdrillen.
Mech. Dämpfung des Moduls vorsehen.

DEMO-Videos

video   Kompaßtest ('robot dance')

video  Kompaß korrigiert Spur

video  Roboter fährt Bahnen



Schritt 1: Beschleunigungssensor-Kalibrierung

Diese einmalig Kalibrierung soll sicherstellen, dass alle 3 Achsen gleichgewichtet messen. Diese Kalibrierung kann auch außerhalb des Roboters durchgeführt werden.

1. Den PC mit dem Arduino Nano verbinden. Am PC die serielle Konsole (19200 Baud) in der Arduino-Umgebung öffnen. Nach der automatischen Gyro-Kalibrierung erscheint das Menü (dieses kann jederzeit mit der Taste "m" + ENTER dargestellt werden).

2. Mit der Taste "1" + ENTER die Kalibrierung starten.

2.1. Nach der Kalibrierung soll jede der 6 Seiten des Moduls einmal nach "unten" und einmal nach "oben" (um 180° gedreht) gucken. Das Modul hat 6 Seiten, also muss es 6 mal gedreht werden, so dass jede Seite einmal (in Waage) auf dem Tisch liegt (dabei ggf. das Modul mit der Hand festhalten ohne es zu bewegen). Nach jedem Kalibrierungsschritt ENTER drücken. Ziel der Kalibrierung ist es, die Erdbeschleunigung für jede Achse zu ermitteln (genauer: den Minimum/Maximum-Wert). Dabei darf das Modul aber nicht künstlich beschleunigt werden. Die Reihenfolge der Seiten spielt keine Rolle.

ardumower pitch roll yaw imu
Zum Schluß werden die Kalibrierungswerte für Beschleuinigungssensor und Kompaß ausgegeben.


Schritt 2: Kompaß-Kalibrierung (Kugelkalibrierung)
Diese einmalige Kalibrierung soll sicherstellen, dass Kabel, Metall etc. welches sich im Roboter in der Nähe des IMU-Moduls befindet, keine Auswirkung auf die Kompaßdaten hat.

Ein Meßwert (x,y,z) eines 3D-Kompaß zeigt (gesehen von seinem Urpsprung 0,0,0) immer in eine Richtung: zum Nordpol. Wenn man nun den 3D-Kompaß um alle seine Achsen dreht, liegen alle Meßwerte auf einer Kugel:

compass sphere

Bringt man nun eine starke Störung (z.B. Metall/Magnet) in die Nähe des Kompaß, zeigen die Meßwerte vom Ursprung (0,0,0) des Sensors gesehen plötzlich nur noch in eine Richtung - Warum?
Es gibt zwei Arten von Störungen des Magnetfeldes welche die Kugel-Meßwerte verändern/verschieben:

Hartmetall (z.B. Magnete): die Kugel verschiebt sich
Weichmetall (z.B. Metalle): die Kugel verformt sich (zu einem Ellipsoid)

Beispielmessungen

compass ellipsoid    compass ellipsoid cal1    compass ellipsoid cal2

(links: die unkalibrierte Meßwerte liegen nicht auf einer Kugel sondern auf einem Ellipsoid und haben sich vom Ursprung des Sensors verschoben
mitte: dieselben Meßwerte um die Verschiebung korrigiert
rechts: die kalibrierten Werte liegen nun unverformt wieder auf einer Kugel, zentriert um den Urpsprung des Sensors) 

Ziel der Kalbrierung ist es, dass die Meßwerte wieder auf einer Kugel zentriert um den Ursprung des Sensors liegen.


Kalibrierungsschritte:


Zunächst sicherstellen, dass sich das IMU-Modul an der endgültig eingebauten Position befindet und der gesamte Roboter von elektronischen Geräten sowie metallischen Gegenständen 30cm oder mehr entfernt ist (also nicht von metallischen Gegenständen in seiner Umgebung abgelenkt werden kann).

1. ArduMag-Kalibrierungstool für Android herunterladen.
2. Android-Gerät mit dem Bluetooth-Modul "paaren" (falls noch nicht durchgeführt). Hierfür am Android-Gerät das Symbol "Einstellungen" (im Android-Startbildschirm) anwählen. Dann unter "Drahtlos und Netzwerke->Bluetooth-Einstellungen" auswählen "Geräte suchen". Abschließend auswählen "Mit diesem Geräte koppeln" und die Pin eingeben (meist "1234"). Das Bluetooth-Modul sollte nun als "gekoppelt" erscheinen.
3. In der ArduMag-App die Menü-Taste des Android-Gerätes drücken und "Bluetooth" aus dem Menü auswählen und mit dem passenenden Bluetooth-Modul (also dem Roboter) verbinden. Der Roboter bestätigt die Verbindung mit einem Ton. Nun sollte die Anzahl der Meßwerte ansteigen.

Für die Kalibrierung den Roboter langsam um alle Achsen und Seiten (also 6 mal) für mindestens 360 Grad drehen:

ardumower compass calibrate

Die Reihenfolge der Achsendrehungen sowie die Drehrichtung spielt keine Rolle. Beispielsweise kann man pro Seite erst 180 Grad nach rechts und dann nochmal 180 Grad nach links drehen (ergibt insgesamt 360 Grad Drehung). Die Meßwerte liegen in der Regel (durch oben genannte Ursachen) nicht auf einer Kugel.
Beispiele:

ardumag1   ardumag2   ardumag3


4. Zum Abschluß der Kalibrierung in der ArduMag-App 'Calibrate' betätigen. Der Roboter bestätigt die neue Kalibrierung mit zwei Tönen. Die Kalibrierung ist damit abgeschlossen. Nun sollten die Meßwerte auf einer Kugel liegen.
Beispiele:

ardumag4    ardumag5



Schritt 3: Kompaß-Kalibrierung (Deviation)


Diese Kalibrierung soll sicherstellen, dass die vom Kompaß ermittelten Kurse Winkeltreu sind (d.h. dass beispielsweise der Südkurs exakt dem Nordkurs + 180 Grad entspricht).

1. Den Roboter auf einer ebenen, möglichst glatten Fläche um sich selbst im Uhrzeigersinn drehen lassen (pfodApp: "Commands->Auto rotate" solange antippen, bis der Roboter sich dreht). Falls die Fläche groß genug ist, kann man den Roboter alternativ auch einen Kreis (im Uhrzeigersinn) fahren lassen (pfodApp: "Manual->Right" solange antippen, bis der gewünschte Radius erreicht ist).

2. Die Deviation-Kalibrierung starten (pfodApp: "Settings->IMU->Start Com Cal Dev"). Nach jeweils 10 Grad blinkt die Nano-LED kurz auf. Wenn 360 Grad erreicht sind, hört die Nano-LED auf zu blinken und die Kalibrierung ist abgeschlossen.

 

Testen des Kompaß/der Neigung (über serielle Konsole)
Es werden fortlaufend ausgegeben:

yaw: Kurs/Yaw (s. Grafik oben)
pitch: Neigung um die Pitch-Achse (s. Grafik oben)
roll: Neigung um die Roll-Achse (s. Grafik oben)
frequency: Anzahl Messungen pro Sekunde (100)
latency: Anzahl Verzögerungen (0)
access: Anzahl externe Zugriffe (vom Arduino Mega)


Kompaß-Funktionstest
(über LED)
Den Kompaß jeweils nach Norden, Süden, Osten, Westen ausrichten - dabei sollte die LED angehen. Dazwischen sollte sie ausgehen. Norden, Süden bzw. Osten, Westen sollten genau gegenüberliegen.


Funktionstest via pfodApp (Android)
Man kann sich die Ergebnisse des IMU-Moduls (Yaw, Pitch, Roll) auch mit der pfodApp plotten lassen:

ardumower imu plotting       ardumower screenshot IMU




IMU-Kalibrierung (SVN-Version)


A) Beschleunigungssensor kalibrieren

Jede der 6 Seiten des Moduls einmal exakt hochkant hinstellen, nicht bewegen und den Punkt zur Kalibrierung der nächsten Seite auswählen:

i) In der seriellen Konsole "IMU acc calibration next side" oder
ii) In der pfodApp "Settings->IMU->acc calibration next side"

Während der Messung einer Seite das Modul nicht bewegen! Die Messung wird begleitet von einem kurzen Ton.

Diesen Schritt für alle 6 Seiten wiederholen. Wenn alle 6 Seiten kalibriert wurden, ertönt ein kurze Melodie.


gy80 acc calibration

B) Kompaß kalibrieren

Modul außer Reichweite von magnetischen oder eisenhaltigen Quellen bringen! Kompaß-Kalibrierung starten:

i) In der seriellen Konsole "IMU com calibration start/stop" oder
ii) In der pfodApp "Settings->IMU->com calibration start/stop"

Jede der 6 Seiten des Moduls einmal Richtung Norden halten und das Modul solange kippen bis sich das Minimum und Maximum der Achsen nicht mehr ändert (kein Ton mehr ausgegeben wird):

gy80 com calibration

iii) Kalibrierung beenden mit erneuter Auswahl von "IMU com calibration start/stop". Es ertönt eine kurze Melodie.

C) Kalibrierung testen

Zum Testen der Kalibrierung Modul (Bauteilseite nach oben) mit einer Seite gegen eine Tischkante halten und nicht bewegen. Den Yaw-Wert notieren (Beispiel: -95,45). Dann das Modul um 180 Grad drehen und wieder gegen die Tischkante halten. Jetzt sollte der Yaw-Wert um 180 Grad entfernt liegen (Beispiel: -95,45 + 180 = 84,55). Diesen Test mit den beiden anderen Seiten des Moduls ebenfalls durchführen. 

gy80 calibration check

... Modul mit einer Seite gegen Tischkante gehalten ...

calls=30    yaw=-95.56    pitch=0.02    roll=2.52    com=-95.91    com180=84.09    gyroZ=0.00
calls=30    yaw=-95.48    pitch=-0.11    roll=2.33    com=-95.81    com180=84.19    gyroZ=-0.01
calls=30    yaw=-95.42    pitch=0.03    roll=2.42    com=-95.65    com180=84.35    gyroZ=-0.00
calls=30    yaw=-95.45    pitch=-0.21    roll=2.38    com=-95.35    com180=84.65    gyroZ=-0.00

... Modul mit derselben Seite um 180 Grad gedreht gegen Tischkante gehalten...

calls=30    yaw=85.06    pitch=-2.50    roll=0.04    com=84.91    com180=-95.09    gyroZ=-0.03
calls=30    yaw=84.90    pitch=-2.59    roll=0.05    com=84.63    com180=-95.37    gyroZ=-0.02
calls=30    yaw=85.19    pitch=-2.55    roll=0.01    com=84.73    com180=-95.27    gyroZ=-0.01
calls=30    yaw=84.98    pitch=-2.73    roll=0.02    com=84.85    com180=-95.15    gyroZ=-0.01

Falls die Abweichung mehr als ein Grad beträgt, Kalibrierung von Beschleunigungssensor und Kompaß erneut durchführen!

 

Go to