Winkelberechnung mit 3-Achsen-Beschleunigungssensor
Hallo,
ich möchte mit Hilfe eines 3-Achsen-Beschleunigungssensor (MPU6050) die Winkeländerung mit Hilfe des Gravitationsvektors berechnen.
Wenn der Sensor auf dem Tisch liegt zeigt er (0,0,g) an, die z-Achse steht vertikal nach oben.
Drehe ich den Sensor in die X-Achse um 90 Grad werden Werte von (0,g,0) angezeigt, da nun die Y-Achse in Richtung des Gravitationsvektors zeigt.
Ich habe mir jetzt überlegt, dass ich durch die Euler Drehwinkelmatrix die Winkeländerung zeigen kann.
Für die x-Achse wäre das:
1 0 0
0 cos a sin a
0 - sin a cos a
Diese Matrix mit dem Ausgangsvektor (0,0,g) multipliziert, zeigt mir die Anteile von g in den drei Achsen.
Bei 0Grad als der Ausgangslage wäre das (0, sin 0 * g, cos 0 *g) = (0,0,g)
Bei 90 Grad also Ende der Drehung (0, sind 90 *g, cos 90 * g) = (0,g,0)
Die Vektoren werden also richtig angezeigt.
Mir ist jedoch nicht ganz klar, wie das ganze funktioniert wenn der Sensor eine Schräglage hat, so dass theoretisch alle 3-Achsen einen g-Anteil zeigen müssten. In meinem Beispiel hat die X-Achse ja keinen g-Anteil, weil um diese gedreht wird.
Bei meinem Beispiel weiß ich demtensprechend nur dass eine 90 Grad Drehung des gesamten Systems um die X-Achse stattgefunden hat.
Wird der Sensor jedoch auch in der X-Achse gekippt, würde eine komplette Schräglage im Raum entsteht.
Welche Möglichkeit gibt es diese Schräglage im Raum als absolute Winkeländerung in allen drei Koordinatenachsen mit dem Werten des Beschleunigungssensors zu berechnen?
Wird dafür zusätzlich ein Magnetometer benötigt um einen zusätzlichen "Referenzpunkt" zu erzeugen und damit die absolute Winkeländerung zu berechnen?
Vielen Dank schonmal für eure Hilfe!
Winkelberechnung von X, Y und Z mit dem MPU6050 (GY-521)
Hi HaWe,
genau diese Anforderung habe ich auch. Ich benötige die exakten Winkel. ...oder ich verstehe das noch nicht :-)
Ich habe einen Raspberry PI mit einem MPU6050 (GY-521) Sensor. Wenn ich die Programme starte, die ich gefunden und modifiziert habe, kann ich die Neigungen in X und Y sehen. Was ist mit Z?
Was hab ich vor:
ich möchte, wenn ich das Modul auf den Tisch lege und um die eigene Achse drehe, dass am Display diese Drehung in Grad angezeigt wird. Künftig habe ich vor, über eine Motorsteuerung den Roboter so lange zu drehen, bis der vorgegebene Winkel erreicht ist.
Beispiel:
ich habe einen Bot mit 2 Motoren. Ich gehe davon aus, dass der Bot weiss, wo er steht. Ich gehe mal von Null Grad aus. Ich gebe jetzt die Gradzahl ein, z.B. 245 grad, dann soll der Motor so lange drehen, bis dies erreicht wurde.
Ausblicke:
ich möchte eine Unterscheidung einbauen, ob es geschickter ist nach links oder rechts zu drehen, damit dieser Winkel am schnellsten erreicht werden kann.
Zu meiner Person: Ich kann weder C noch Python richtig gut. Ich kann Skripte lesen und daran basteln. Ich bastle gerade an einem Bot und versuche diesen per Python anzusprechen. Ich habe ein Buch, doch in diesem Buch werden sehr teure Bauteile verwendet. Es muss doch möglich sein, das Teil ohne das Sense Hat und ohne den teuren Ultraschall Sensoren SRF08 zum Laufen zu bekommen.
Ich habe mir überlegt, das über die günstigen HCSR04 und einem MPU6050 aufzubauen. Ich merkte gleich, dass ich an meine Grenzen gestoßen bin.
Als Grundlage liegt mir ein Script vor. ich bin auf die folgende Seite gestoßen:https://github.com/brennoflavio
Ich komme also nicht so richtig weiter.
Wer kann mir in dieser Sache weiter helfen?
Vielen Dank.
Grüße
V