MPU6050 (G-Y521) gibt vertauschte Werte aus

Hallo an Alle,

aktuell stecke ich bei meiner Flugdrohne bei der Funktion des MPU6050 Gyroskops fest.
Die Anbindungs des Sensors funktioniert soweit ich das sehe problemlos und gibt auch Daten die zurück die der Lage des Teils entsprechen.
Aber nach meinen Verständnis sind die Daten von dem Accelerometer und Gyroskop vertauscht.
Zum Beispiel in dem Programmcode:
https://playground.arduino.cc/Main/MPU-6050/

Wenn ich den Sensor um 90° kippe (Richtung egal) und dann in der Position halte, werden mir diese Daten gegeben:

AcX = 892 | AcY = 352 | AcZ = 13900 | Tmp = 24.86 | GyX = 784 | GyY = 106 | GyZ = -224
AcX = 732 | AcY = 424 | AcZ = 14004 | Tmp = 24.72 | GyX = 771 | GyY = 109 | GyZ = -202
AcX = 768 | AcY = 440 | AcZ = 13804 | Tmp = 24.67 | GyX = 818 | GyY = 113 | GyZ = -219
AcX = 672 | AcY = 564 | AcZ = 13856 | Tmp = 24.77 | GyX = 864 | GyY = 103 | GyZ = -208
AcX = 944 | AcY = 564 | AcZ = 14076 | Tmp = 24.86 | GyX = 1275 | GyY = 98 | GyZ = 899
AcX = 712 | AcY = 412 | AcZ = 13932 | Tmp = 24.72 | GyX = 1561 | GyY = 16 | GyZ = -10
AcX = 2704 | AcY = 5428 | AcZ = 13540 | Tmp = 24.86 | GyX = 8246 | GyY = -6191 | GyZ = -4119
AcX = 1216 | AcY = -972 | AcZ = 14504 | Tmp = 24.81 | GyX = -21597 | GyY = 6468 | GyZ = 224
AcX = -540 | AcY = -14824 | AcZ = 5148 | Tmp = 24.81 | GyX = -10577 | GyY = -3632 | GyZ = -1003
AcX = 5908 | AcY = -18880 | AcZ = 592 | Tmp = 24.77 | GyX = -1435 | GyY = 1120 | GyZ = -970
AcX = 876 | AcY = -16052 | AcZ = -276 | Tmp = 24.72 | GyX = 1465 | GyY = 74 | GyZ = -226

AcY springt hoch auf den Minimal Wert und verbleibt darin/ GyY gibt einen hohen Beschleunigungswert aus und geht wieder in seinen normal Wert von ca. 100.

Ich hab das jetzt mit zwei Arduino Boards und mehreren GY 521 getestet!
Auch verschiedenen Bibliotheken und Tutorial Programm codes habe ich verwendet.

Die Ausgaben passen aber nie zu der weiteren Verarbeitung der Werte.

Sind die Ac und Gy hier vertauscht oder ist das so richtig?
Wie kann ich die Werte tauschen? (ich will das gesamte Flugdrohnen Programm nicht um schreiben)

Es ist doch völlig korrekt wenn im Stillstand die Beschleunigungen Ac gleich bleiben und die Winkelgeschwindigkeiten Gy wieder auf ihren (unkalibrierten) Normalwert zurückgehen bzw. kalibriert auf 0.

Deshalb würde ich sagen, daß AcX und GyX vertauscht sind.

ungaricus:
Wie kann ich die Werte tauschen? (ich will das gesamte Flugdrohnen Programm nicht um schreiben)

Nimm eine 13er-Nuss und einen Fäustel. Pass auf, dass der Hammer nicht kaputt geht :slight_smile:

Nutzt Du eine Bibliothek, in der man die Variablen vertauschen kann oder nutzt Du Variablen, in denen die Werte stecken? Wenn Du passende Variablen benutzt (wie es eigentlich immer sein sollte), steht dem Vertauschen der Variablen(namen) im Code doch nichts im Weg. Oder doch?

Zeig' am besten Deinen Sketch. Oder sieht der aus wie bei Hempels unterm Sofa?

Gruß

Gregor

Hi

Andere Ansatz:
Schreibe Dir eine Funktion, Die Dir diese Werte vertauscht.
Oder - wenn Du speziell Ac bzw Gy auslesen willst, nimm eine eigene Funktion, Die statt Ac dann eben Gy zurück gibt - und anders herum.

Deinen neuen Funktionsaufruf kannst Du mit Suchen&Ersetzen recht einfach im Sketch austauschen lassen - Deine Funktion sollte also auch die gleichen Parameter haben wollen, wie die Methode, Die Du zuvor aufgerufen hast (denn Die (bzw. die Andere) rufst Du in Deiner Funktion ja auch auf).

MfG

Mir geht es nicht darum einen einfachen Workaround zu "basteln", sondern das Prinzip vom Gyroskop zu und mein Fehler zu verstehen.

Die Frage bleibt für mich immer noch bestehen, ob Ac und Gy vertauscht sind oder nicht?
Ac ist eine Beschleunigung und es gilt m/s² (richtig?)
Gy ist eine Winkelgeschwindigkeit und es gilt °/s (richtig?)

Wie erhalte ich denn jetzt dadurch den relativen Winkel durch die Werte?

ungaricus:
Mir geht es nicht darum einen einfachen Workaround zu "basteln", sondern das Prinzip vom Gyroskop zu und mein Fehler zu verstehen.

Deine Frage lautete

Wie kann ich die Werte tauschen? (ich will das gesamte Flugdrohnen Programm nicht um schreiben)

Also worum geht es Dir nun? Kannst Du Die Frage, ob die Werte vertauscht sind, nicht einfach durch eigene Beobachtungen beantworten?! Und wieso kannst Du die Werte nicht tauschen, indem Du einfach Variablennamen tauschst?

Bitte formuliere klar. Zudem wäre hilfreich, wenn Du das Datenblatt zum Sensor verlinken würdest.

Gruß

Gregor

ungaricus:
Die Frage bleibt für mich immer noch bestehen, ob Ac und Gy vertauscht sind oder nicht?

Teilweise, siehe #1.

gregorss:
Deine Frage lautete
Also worum geht es Dir nun? Kannst Du Die Frage, ob die Werte vertauscht sind, nicht einfach durch eigene Beobachtungen beantworten?! Und wieso kannst Du die Werte nicht tauschen, indem Du einfach Variablennamen tauschst?

Bitte formuliere klar. Zudem wäre hilfreich, wenn Du das Datenblatt zum Sensor verlinken würdest.

Gruß

Gregor

Ich sehe das Missverständnis bei dem Thema!
Meine Ursprüngliche Frage lautete:
"Wie kann ich die Werte tauschen?"

Was ich aber meinte, wäre:
"Wo durch wird der Tausch der Werte ausgelöst und was muss ich ändern damit die Werte wieder mit denen eines richtig funktionierenden Sensor übereinstimmen?"

Die Frage, ob die Werte überhaupt vertauscht sind und welche das sind, kann ich leider nicht durch einfache Beobachtung beantworten, da mit nicht klar ist, was genau der Sensor ausgeben soll, wenn ich zum beispiel eine einfache Drehbewegung mache. Meine Beobachtungen widersprechen weiterhin dem was ich laut Datenblatt da erwarte!

Link zum Datenblatt:

Höchstwahrscheinlich liegt der Dreher in dem Code, den wir nicht kennen.

Hallo,

höchstwahrscheinlich liegt der Fehler in seiner falschen Vorstellung wie die Sensoren arbeiten.
Er sagte ja er hat das Bsp. der Lib verwendet.

ungaricus hat jetzt mehrere Möglichkeiten seine These zu untermauern oder zu widerlegen.

Wie hoch ist die Wahrscheinlichkeit das noch niemand den Fehler in der Lib entdeckt hat?
Man könnte jetzt andere Libs nehmen und die Ergebnisse vergleichen.
Man kann sich auch mit der Arbeitsweise der Sensoren vertraut machen.

Wenn jeder Sensor (Ac und Gy) 3 Kanäle hat, und nur einer davon vertauscht ist, dann liegt das ganz sicher nicht an der Bibliothek, sondern an irgendwelchen Abschreibfehlern. Typisches PEBKAC.

DrDiettrich:
...Typisches PEBKAC.

Was ist das?

Gruß

Gregor

Der Programmcode ist ja einfach von hier kopiert:
https://playground.arduino.cc/Main/MPU-6050/

und alle anderen Programmcodes von anderen Seite ergeben ebenfalls die gleiche Ergebnisse. (dabei habe ich nie etwas abgeschrieben, sondern immer genau den gesamten text markiert und kopiert)

Als Umgebung verwende ich Arduino IDE 1.8.10 und aktuell keine zusätzliche Bibliothek, die ich über "Bibliothek verwalten" einbinde.

Hallo,

Gyroskop:
Die Lösung hast du eigentlich schon erkannt, nur deine Interpretation ist falsch und damit auch deine These.

Du änderst den Winkel in bestimmter Zeit, der Wert ändert sich, dann legst du ihn wieder hin, der Wert ändert sich nicht mehr pro Zeit.

AcY springt hoch auf den Minimal Wert und verbleibt darin/ GyY gibt einen hohen Beschleunigungswert aus und geht wieder in seinen normal Wert von ca. 100.

Gy ist eine Winkelgeschwindigkeit und es gilt °/s (richtig?)

Ich vermute auch einen falschen Datentyp für die Werte, wenn man die seltsamen Sprünge des Vorzeichens betrachtet.

ungaricus:
AcY springt hoch auf den Minimal Wert und verbleibt darin/ GyY gibt einen hohen Beschleunigungswert aus und geht wieder in seinen normal Wert von ca. 100.

Herzlichen Glückwunsch, das Modul funktioniert, der Code auch.
Bedenke, dass du auch die Erdbeschleunigung misst.

Ich glaube du hast Recht, Doc_Arduino! Und ich meine jetzt verstanden zu haben, wo mein Fehler liegt!!!

Die Werte Ac messen die lineare Beschleunigung in 3 Achsen, wenn keine Bewegung des Sensor stattfindet, geben diese nur die Erdbeschleunigung aus. (natürlich abhängig davon wie der Sensor steht)
AcX = 892 | AcY = 352 | AcZ = 13900 (hier steht die Z-Achse des Sensor nach unten)
wenn ich den Sensor um 90° kippe, wirkt die Erdbeschleunignung dann
AcX = 876 | AcY = -16052 | AcZ = -276 (Am Ende meines Beispiels entgegen der Y-Achse)
Wenn man die Werte durch 16384 (Datenblatt) teilt, erhält man das Ergebnis in der Einheit g also 9,81m/s²

bisher habe ich falsch gedacht, dass die Werte nur die Beschleunigung einer Bewegung messen

Die Werte Gy messen die Winkelgeschwindigkeit in 3 Achsen, wenn keine Bewegung des Sensor stattfindet, sind die Werte nahezu null. (natürlich abhängig davon wie der Sensor steht)
GyX = 771 | GyY = 109 | GyZ = -202 (hier findet keine Bewegung statt)
GyX = -21597 | GyY = 6468 | GyZ = 224 (hier fand das Kippen zur negativen Y-Achse statt)
Wenn man die Werte durch 131 (Datenblatt) teilt, erhält man das Ergebnis in der Einheit °/s

Das heißt die Tabelle aus meinen Post ist vollkommen richtig und keins der Werte ist vertauscht!

"Jetzt hat er es". Glückwunsch. :slight_smile:

So irrsinnig hohe Gy Werte deuten immer noch auf Fehler hin. Aber wenn Du meinst, daß das so paßt...