ArduMower: Inertialnavigation: Unterschied zwischen den Versionen
Zeile 84: | Zeile 84: | ||
= Implementierung = | = Implementierung = | ||
[[Datei:Acc Ansteuerungs über Simulink.PNG] | [[Datei:Acc Ansteuerungs über Simulink.PNG|600px|thumb|rechts|Abbildung 1: Ansteuerung des Beschleunigungssensors über Simulink]] | ||
Version vom 23. November 2017, 09:08 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
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