ArduMower: Inertialnavigation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(10 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 45: Zeile 45:


===== Beschleunigungssensor ADXL345 =====
===== Beschleunigungssensor ADXL345 =====
[[Datei:Acc Ansteuerungs über Simulink.PNG|400px|thumb|rechts|Abbildung 1: Ansteuerung des Beschleunigungssensors über Simulink]]


Slave Adresse: 0x53
Slave Adresse: 0x53
Zeile 62: Zeile 65:
   
   
Dazu wird in dem Power Control Register 0x2D durch das Senden von 0b1100 (0xC) das Bit 3 für die kontinuerliche Messung und Bit 4 für den Autosleep Modus gesetzt.
Dazu wird in dem Power Control Register 0x2D durch das Senden von 0b1100 (0xC) das Bit 3 für die kontinuerliche Messung und Bit 4 für den Autosleep Modus gesetzt.


===== Kompasssensor HMC5883L =====
===== Kompasssensor HMC5883L =====
Zeile 84: Zeile 86:
= Implementierung =
= Implementierung =


[[Datei:Acc Ansteuerungs über Simulink.PNG]]
[[Datei: S-Function Simulink.PNG|600px|thumb|rechts|Abbildung 2:  S-Function Simulink]]
 


Die Sensoren der IMU GY-85 konnten zunächst in Testprogrammen (siehe Abb. 1-3) über die I2C-Blöcke einzeln ausgelesen werden. Unglücklicherweise kann jedoch immer nur eine Slave Addresse zur selben Zeit  angesprochen werden und vielfältige Implementierungsversuche, ein zeitversetztes Auslesen der einzelnen IMU Sensoren mithilfe der von dem "Simulink Support Package for Arduino Hardware" zur Verfügung gestellten Blöcken zu bewerkstelligen, stellte sich nach Rücksprache mit einem Matlab-Support Mitarbeiter als aktuell noch nicht realisierbar heraus. Als Lösung verblieb nur die Benutzung eines S-Funtion-Blocks, mit welchem C-Code in Simulink eingebunden werden kann. Mithilfe der "wire.h"‑Library von Arduino können so die Register aller drei Inertialsensoren ausgelesen werden.
== Sensordatenfusion ==
== Sensordatenfusion ==


Zeile 95: Zeile 97:
Die Messdaten des Sensors werden auf dem Bus SEN_GY_OUT zusammengefasst und in folgender Reihenfolge belegt:  
Die Messdaten des Sensors werden auf dem Bus SEN_GY_OUT zusammengefasst und in folgender Reihenfolge belegt:  


# Kompasswert
{| class="wikitable"
# Beschleunigung x-Richtung
|-
# Beschleunigung y-Richtung
! Nr.                                          !! Signal                                !! Benennung
# Beschleunigung z-Richtung
|-
# Gierrate um x-Achse
| 1  || Kompasswert         || SEN_GY_psi_f64
# Gierrate um y-Achse
|-
# Gierrate um z-Achse
| 2  || Beschleunigung x-Richtung         || SEN_GY_ax_f64
|-
| 3  || Beschleunigung y-Richtung         || SEN_GY_ay_f64
|-
| 4  || Beschleunigung z-Richtung         || SEN_GY_az_f64
|-
| 5  ||  Gierrate um x-Achse   || SEN_GY_gx_f64
|-
| 6  ||  Gierrate um y-Achse   || SEN_GY_gy_f64
|-
| 7  ||  Gierrate um z-Achse   || SEN_GY_gz_f64
 
|}


= Benötige Hardware =
= Benötige Hardware =


* IMU GY-85
* IMU GY-85

Aktuelle Version vom 23. November 2017, 09:49 Uhr


Dieser Wiki-Beitrag ist Teil eines Projektes, welches im Rahmen vom Fachpraktikum Elektrotechnik im 6. Semester Mechatronik absolviert wurde. Ziel des Beitrags ist es, eine nachhaltige Dokumentation zu schaffen, welche die Ergebnisse festhält und das weitere Arbeiten am Projekt ermöglicht.


Zusatzaufgabe von: Hanno Kerber

Betreuer: Prof. Dr.-Ing. Schneider, Prof. Dr.-Ing. Mirek Göbel


Der Artikel beschäftigt sich mit der Inbetriebnahme der IMU(Inertial Measurement Unit) GY-85, die eine Kombination aus drei verschiedenen Sensoren auf einer Platine darstellt. Es sind dabei ein Magnetsensor (Kompass), ein Beschleunigungssensor und ein Gierratensensor vorhanden. Die Einbindung der Inertialnavigation bietet eine Grundlage zum autonomen Verfahren des Roboters. Aufbauend auf den Ergebnissen in Inertialnavigation wird inbesondere die Inbetriebnahme des Sensors in Matlab Simulink als Modul der Ardumower Hauptsoftware erläutert.


Aufgabe

Integration der IMU GY-85 in Matlab Simulink

Erwartungen an die Projektlösung

  • Lagebestimmung des Ardumower
  • Schnittstelle zur Hauptsoftware, insbesondere für die Module Fahrtregler und Kartierung

Herangehensweise

Die Kommunikation des Sensors mit dem Arduino erfolgt über den I2C Bus. Das Simulink Support Package für Arduino bietet einen I2C Block für eine vereinfachte Kommunikation zwischen Busteilnehmern. Dazu sind die Adressen der einzelnen Sensoren und die auszulesenen Register aus dem Datenblatt des Sensorboards zu ermitteln. Für den GY-85 lauten diese:


Gierrratensensor ITG3200

Slave Adresse: 0x68

Register:

  • ITG3200_XOUT_H 0x1D
  • ITG3200_XOUT_L 0x1E
  • ITG3200_YOUT_H 0x1F
  • ITG3200_YOUT_L 0x20
  • ITG3200_ZOUT_H 0x21
  • ITG3200_ZOUT_L 0x22


Beschleunigungssensor ADXL345
Abbildung 1: Ansteuerung des Beschleunigungssensors über Simulink


Slave Adresse: 0x53

Register:

  • ADXL345_XOUT_H 0x32
  • ADXL345_XOUT_L 0x33
  • ADXL345_YOUT_H 0x34
  • ADXL345_YOUT_L 0x35
  • ADXL345_ZOUT_H 0x36
  • ADXL345_ZOUT_L 0x37
  • ADXL345_RA_POWER_CTL 0x2D


Um die Register lesen zu können, muss der Sensor zunächst initialisiert werden, um aus dem Standby Modus in den Messmodus zu wechseln.

Dazu wird in dem Power Control Register 0x2D durch das Senden von 0b1100 (0xC) das Bit 3 für die kontinuerliche Messung und Bit 4 für den Autosleep Modus gesetzt.

Kompasssensor HMC5883L

Slave Adresse: 0x1E

Register:

  • HMC5883L_XOUT_H 0x03
  • HMC5883L_XOUT_L 0x04
  • HMC5883L_YOUT_H 0x05
  • HMC5883L_YOUT_L 0x06
  • HMC5883L_ZOUT_H 0x07
  • HMC5883L_ZOUT_L 0x08
  • HMC5883L_RA_MODE 0x02


Auch hier wird das Mode Register 0x02 durch Senden von 0x00 auf kontinuierliche Messung umgestellt.


Implementierung

Abbildung 2: S-Function Simulink

Die Sensoren der IMU GY-85 konnten zunächst in Testprogrammen (siehe Abb. 1-3) über die I2C-Blöcke einzeln ausgelesen werden. Unglücklicherweise kann jedoch immer nur eine Slave Addresse zur selben Zeit angesprochen werden und vielfältige Implementierungsversuche, ein zeitversetztes Auslesen der einzelnen IMU Sensoren mithilfe der von dem "Simulink Support Package for Arduino Hardware" zur Verfügung gestellten Blöcken zu bewerkstelligen, stellte sich nach Rücksprache mit einem Matlab-Support Mitarbeiter als aktuell noch nicht realisierbar heraus. Als Lösung verblieb nur die Benutzung eines S-Funtion-Blocks, mit welchem C-Code in Simulink eingebunden werden kann. Mithilfe der "wire.h"‑Library von Arduino können so die Register aller drei Inertialsensoren ausgelesen werden.

Sensordatenfusion

Schnittstellen

Im Folgenden wird die Schnittstelle der Inertialnavigation beschrieben.

Die Messdaten des Sensors werden auf dem Bus SEN_GY_OUT zusammengefasst und in folgender Reihenfolge belegt:

Nr. Signal Benennung
1 Kompasswert SEN_GY_psi_f64
2 Beschleunigung x-Richtung SEN_GY_ax_f64
3 Beschleunigung y-Richtung SEN_GY_ay_f64
4 Beschleunigung z-Richtung SEN_GY_az_f64
5 Gierrate um x-Achse SEN_GY_gx_f64
6 Gierrate um y-Achse SEN_GY_gy_f64
7 Gierrate um z-Achse SEN_GY_gz_f64

Benötige Hardware

  • IMU GY-85