MPU-9150 (Gyro+Acc+Compass)

nero76

Moderator
Hallo,

dies könnte ein interessanter Nachfolger für das derzeitige IMU-Modul sein - das MPU-9150 besteht aus einem MPU-6050 und einem AK8975:
http://www.invensense.com/mems/gyro/mpu9150.html
Vorteile:
- alles in einem Chip, dadurch keine Offset-Winkel-Fehler zwischen den einzelnen Modulen (Kompaß, Gyro, Acc)
- integrierter IMU-Fusion Algorithmus, dadurch mehr Rechenzeit am Mega/Due
- integrierte Algorithmen zur (automatischen) Kalibrierung von Beschleunigungssensor, Gyro und Kompaß ... (kein lästiges Kalibrieren mehr?)

Library-Code: https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
Blog zum 6050: http://42bots.com/tutorials/arduino-uno-and-the-invensense-mpu-6050-6dof-imu/
Ich habe mir mal ein Modul zum Testen bestellt - bin gespannt wie es läuft :) Es wäre sehr wünschenswert wenn man die Algorithmen für das IMU-Modul (Fusion-Filter, Kalibrierung etc.) auf diese Weise "outsourcen" könnte.
 
Mein Modul kommt aus China (dauert also eine Weile).

Das MPU-9150 hat:
-3 Achsen Beschleunigungssensor
-3 Achsen Gyro
-3 Achsen Kompaß

Der Vorteil liegt in der Integration. Die Verarbeitung der Daten kann das Modul selber vornehmen, um so einen neigungskompensierten, driftfreien Kurs zu berechnen. Das ist der Hauptvorteil. Desweiteren entält es offensichtlich eine automatische Kalibrierung. Das macht die Anwendung einfacher.
 
Das wären aber 9DOF, oder? Oder werden durch die Sensorfusion aus 9 dann 6? ... Muss ich nochmal drüber nachdenken. Angepriesen wird es halt als 6 DOF ...
 
NACHTRAG: Das Beispiel ist wohl nur für MPU-6050 (also MPU-9150 ohne Kompaß).

Hier noch ein Fundstück für MPU-9150...
http://geedesign.com/blog/wp-content/uploads/2013/03/MPU9150ButtonConnectionToUnity.ino_.txt
 
Die Sensor-Fusion des integrierten DMP läuft mit dem Beispiel-Code oben. Allerdings immer nur 6 Achsen (Gyro+Beschl), daher driftet der Yaw-Wert über die Zeit.

Beispiel-Code für Sensor-Fusion des integrierten DMP mit 9 Achsen (Gyro+Beschl+Kompass) habe ich noch nicht gefunden...
 
@Stefan: der von Dir genannte Code nutzt den DMP (also integrierten Digital Motion Processor für die Sensor-Fusion) des MPU 9150 überhaupt nicht :) - mit anderen Worten, kein Vorteil zum jetztigen GY-80 Modul...

Ich habe inzwischen viele Quellen mit Code gefunden welche den integriertem DMP nutzen - allerdings immer nur 6 Achsen. Die Sensor-Fusion für den Kompaß wird jedoch immer extern gemacht (das will man ja eigentlich vermeiden wenn man schon einen externen Prozessor hat...)

Wünschenswert wäre also "DMP-Firmware" welche Sensor-Fusion mit 9 Achsen statt mit 6 durchführt (also incl. dem integriertem Kompaß).
 
@Stefan: Auch der MPU-9250 macht das (noch) nicht (im genannten Link führen sie übrings _alle_ Berechnungen mit der "Host" CPU durch - keine Berechnungen mit dem DMP)

Zum DMP (also dem integriertem Fusion-Prozessor) liest man, dass die DMP-Firmware das (noch) nicht macht:
"Only produces 6-axis sensor fusion and not yet incorporated with the internal 3-axis compass"

Also müssen wir wohl warten bis es eine DMP-Firmware (für 9150 oder 9250) gibt welche den Kompaß drin hat. Das ist keine Kunst, aber der Hersteller hat den DMP nicht dokumentiert und so kann er das nur selber machen...
 
Hi,

Ich hab mir mal das Datenblatt durchgelesen
http://www.invensense.com/mems/gyro/documents/PS-MPU-9250A-01.pdf

Wie man auf Seite 21 sehen kann ist der Kompass überhaupt nicht mit dem DMP verbunden. Dieser müsste also die Werte erst
Über den I2c Bus einlesen, damit er sie verarbeiten könnte.
Ich vermute mal das, wenn es beabsichtigt währe, hätten die gleiche eine Verbindung zu dem DMP angelegt.

Dürfte also sehr schwierig, wenn nicht sogar unmöglich sein.

Auf der anderen Seite schreiben Sie aber unter Punkt 4.9 das der DMP auch die Werte vom Kompass ausliest und auch externe Sensoren lesen kann ?


Als nach Alternativen Ausschau halten.

Stefan
 
Ich hab mir eben noch die Hardware Register angesehen

http://www.invensense.com/mems/gyro/documents/RM-MPU-9150A-00v4_2.pdf

Wenn ich das richtig verstanden hab, du weist ich hab ja keine Ahnung, sind das zwei Prozessoren in einem Gehäuse.
Der Kompass wird über den Slave I2C Bus (aux_i2c) angesprochen. Und im Powermode 9 werden dann auch alle 9 Achsen
Angesprochen .

Ich muss ihr auch mal so ein Ding besorgen, wenn ich aus dem Urlaub zurück bin. Markus hat die wohl schon da.

Stefan
 
@Stefan: Also alle 9 Achsen einfach nur auslesen sollte ja kein Problem sein - Das Ziel ist ja dass der "DMP" mit allen 9 Achsen läuft. Sonst hätten wir ja rechentechnisch nicht wirklich etwas gewonnen wenn wir wieder die Sensor-Fusion aller 9 Achsen am Arduino selber durchführen müssten (um driftfreie Yaw/Pitch/Roll-Werte zu ermitteln).
 
Oben