ArduMower: Inertialnavigation: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(25 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
'''Zusatzaufgabe''' von: [[Benutzer:Hanno_Kerber| Hanno Kerber]] | |||
Betreuer: [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]],[[Benutzer:Mirekgoebel| Prof. Dr.-Ing. Mirek Göbel]] | Betreuer: [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]],[[Benutzer:Mirekgoebel| Prof. Dr.-Ing. Mirek Göbel]] | ||
Zeile 10: | Zeile 11: | ||
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. | 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 [http://193.175.248.52/wiki/index.php/AM_09:_Inertialnavigation Inertialnavigation] wird inbesondere die Inbetriebnahme des Sensors in Matlab Simulink als Modul der Ardumower Hauptsoftware erläutert. | Die Einbindung der Inertialnavigation bietet eine Grundlage zum autonomen Verfahren des Roboters. Aufbauend auf den Ergebnissen in [http://193.175.248.52/wiki/index.php/AM_09:_Inertialnavigation Inertialnavigation] wird inbesondere die Inbetriebnahme des Sensors in Matlab Simulink als Modul der Ardumower Hauptsoftware erläutert. | ||
= Aufgabe = | = Aufgabe = | ||
Integration der IMU GY-85 in Matlab Simulink | Integration der IMU GY-85 in Matlab Simulink | ||
== Erwartungen an die Projektlösung == | == Erwartungen an die Projektlösung == | ||
* Lagebestimmung des Ardumower | * Lagebestimmung des Ardumower | ||
* Schnittstelle zur Hauptsoftware, insbesondere für die Module [http://193.175.248.52/wiki/index.php/ArduMower:_Regler Fahrtregler] und [http://193.175.248.52/wiki/index.php/ArduMower:_Kartierung 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 ===== | |||
[[Datei:Acc Ansteuerungs über Simulink.PNG|400px|thumb|rechts|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 = | |||
[[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 == | |||
== Schnittstellen == | == 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: | |||
{| class="wikitable" | |||
|- | |||
! 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 = | = 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
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
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