Forum: Mikrocontroller und Digitale Elektronik Reelle Beschleunigung mit MPU6050 (6DOF) Probleme/Hilfe/Anregungen


von Matthias S. (jadermatze)


Lesenswert?

Hallo zusammen,

ich möchte mit einem MPU6050 einfache Gesten erkennen z.B. einfache 
(lineare) vorwärts Bewegung um (ca. 15 cm). Sowie links, rechts und 
rückwärts.

Zum auslesen der Accelerometer & Gyro Daten verwende ich momentan die 
i2cdevlib libary: https://github.com/jrowberg/i2cdevlib

Die rohen Daten passen soweit (verwende den FIFO buffer), jetzt wollte 
ich als erstes die Schwerkraft aus den Daten raus bekommen um die reelle 
Beschleunigung in x y und z Richtung zu erhalten. Hier fangen leider die 
Schwierigkeiten an.

Hab es natürlich erst mal mit den mitteln versucht die in der i2cdevlib 
libary schon vorhanden sind.

Also DMP ausgelesen um die Lage des mpu zu erhalten (als Quaternion) und 
dann über .dmpGetGravity() die Schwerkraft ermittelt um anschließend mit 
.dmpGetLinearAccel() die reelle Beschleunigung zu erhalten.

Leider ist es so das wenn ich den Sensor im Raum drehe die 
Beschleunigungswerte weiterhin von der Schwerkraft beeinflusst werden, 
die funktion dmpGetLinearAccel() scheint also leider nicht das zu machen 
was sie soll.

Hat hier vielleicht jemand die selben Probleme gehabt und kann mir Tipps 
geben.

Bevor ich die Beschleunigung in Geschwindigkeit und dann in Strecke 
umrechnen kann sollten die werte ja passen.

Gruß Matthias

von Matthias S. (jadermatze)


Lesenswert?

Hat keiner eine Idee?

von Tom (Gast)


Lesenswert?

Ich habe zwar noch nicht die DMP-Einheit benutzt, aber für den 9250 habe 
ich mir das hier mal auf einen SoC portiert: 
https://github.com/kriswiner/MPU9250

Funktioniert auch ganz gut - nur mein Magnetometer scheint manchmal ein 
wenig zu spinnen...

Tom

von Dustin L. (d_l)


Lesenswert?

Ohne perfekte Orientierung kannst du auch nicht die statisch bestimmte 
Schwerkraft aus deiner Beschleunigung rausrechnen. Und perfekte 
Orientierung bekommst du nicht hin, mit entsprechender Kalibrierung von 
Gyro, Accelerometer und Magnetometer.

Ich würde vielleicht versuchen die Gravitation mittels Low-Pass-Filter 
zu bestimmen und dann von der gemessenen Beschleunigung abzuziehen, kann 
dir aber nicht genau sagen wie gut diese Approximation in der Realität 
ist, das ist abhängig von Frequenz, Typ des Accelerometers etc.

Besser wäre es, die Orientierung mittels EKF oder UKF (oder 
Madgwick-Filter) ordentlich zu bestimmen, obwohl ich nicht weiß wie das 
deine Bibliothek macht.

P.S: die Beschleunigung doppelt zu integrieren ist abenteuerlich und 
wird nicht zu befriedigenden Ergebnissen führen

von Matthias S. (jadermatze)


Lesenswert?

Schon mal vielen Dank für die Antworten.

Ist leider ziemlich ernüchternd :-(

Vielleicht hat ja jemand eine andere Idee für mich wie ich mein Projekt 
am besten umsetzen könnte.

Folgendes soll der Sensor können:

 - Erkennen ober er in x, y oder z Achchse bewegt wurde
 - Sobald die Bewegung stoppt, Prüfen ob die Bewegung mindestens 15 cm 
aber maximal 30 cm war (muss nicht sehr genau sein +- 5 cm) und dann 
wieder neu beginnen zu messen
 - Und er sollte verkraften das der Sensor bei Bewegung in x, y oder z 
Richtung eventuell nicht ganz gerade gehalten wird
 - und schnellere Bewegungen sollten ihm auch nichts ausmachen

Gruß Matthias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.