MPU-9250 gibt keine passenden Yaw-Werte - GELÖST

Hallo,

seit einiger Zeit versuche ich einen Head-Tracker für Computerspiele mittels eines Arduinos zu bauen.
Mit der 6-Achsen MPU-6050 funktioniert das soweit auch sehr gut, nur nervt der Drift leider sehr, weshalb ich mir nun die 9-achsige MPU-9250 gekauft habe, die das ja mittels Magnetometer kompensieren können sollte. Im Netz findet man auch zahlreiche Beiträge, in denen sie driftfrei arbeitet.

Doch bekomme ich bei keiner Library passende YAW-Werte und ich habe eigentlich alle ausprobiert, die ich finden konnte.
Bei dieser Library beispielsweise ändern sich die YAW-Werte passend mit der Drehung (also wenn ich es um 90° drehe, geht die Zahl passend mit der Drehung zu 90°), doch wenn man dann aufhört zu drehen, weil man den Winkel erreicht hat, geht der Wert wieder runter auf 0°, trotzt, dass der Sensor auf 90° gedreht stehen geblieben ist. Es wirkt so, als sollte ein Drift kompensiert werden, wo die Referenz allerdings immer 0° sind. (Bzw. in echt ist es ein anderer Wert). Pitch und Roll funktionieren 1a.
Auch ändert sich der YAW-Wert, wenn man den Sensor in Pitch- oder Roll-Richtung dreht, was auch merkwürdig ist. All dies tritt bei mehreren Bibliotheken auf und kann im hier hochgeladenen Video auch nochmal gesehen werden. Ich habe mir auch einen zweiten Sensor zuschicken lassen, bei dem dasselbe Problem auftritt.

Code:

#include "MPU9250.h"

MPU9250 mpu;

void setup() {
    Serial.begin(115200);
    Wire.begin();
    delay(2000);

    if (!mpu.setup(0x68)) {  // change to your own address
        while (1) {
            Serial.println("MPU connection failed. Please check your connection with `connection_check` example.");
            delay(5000);
        }
    }
}

void loop() {
    if (mpu.update()) {
        static uint32_t prev_ms = millis();
        if (millis() > prev_ms + 25) {
            print_roll_pitch_yaw();
            prev_ms = millis();
        }
    }
}

void print_roll_pitch_yaw() {
    Serial.print("Yaw, Pitch, Roll: ");
    Serial.print(mpu.getYaw(), 2);
    Serial.print(", ");
    Serial.print(mpu.getPitch(), 2);
    Serial.print(", ");
    Serial.println(mpu.getRoll(), 2);
}

Einzig den von vielen empfohlene Sketch von kriswiner konnte ich nicht testen, weil ich es trotz vielem Hin und Her und Geändere im Code nicht hinbekommen habe, mir Werte anzeigen zu lassen.

Eine Bibliothek funktionierte einwandfrei, doch nachdem ich mir den Code genauer angesehen habe und es ausprobiert hatte, habe ich festgestellt, dass diese keinen Drift begleicht und den Sensor nur so nutzt, wie eine MPU-6050. - bringt mir also rein gar nichts...

Ich hoffe, dass ich mein Problem klar beschreiben konnte und ihr mir helfen könnt.

Viele Grüße
Finn

P.S.: Vorher wurden mir 2 MPU-9255 oder 9260 als MPU-9250 verkauft, die gar nicht mit den Bibliotheken funktionierten. Wenn jemand weiß, wie man diese zum Laufen bekommt, wäre das natürlich auch sehr gut, wobei das ja eigentlich ein anderes Thema ist.

Sein Code funktioniert überhaupt nicht. Die Fehler habe ich korregiert, aber der Beschleunigungssensor als auch der Magnetometer müssen immer kalibriert werden. Weiteres hier: GitHub - jremington/MPU-9250-AHRS: Arduino Mahony AHRS, includes magnetometer and accelerometer calibration code

1 Like

Wow, vielen Dank! Nachdem ich etwas Startprobleme beim Kalibrieren (bzw. dem Magneto-Programm) hatte, funktioniert der Sketch einwandfrei und genauso wie ich es mir vorgestellt hatte.
Nach ein paar Modifikationen am Sketch funktioniert auch der Headtracker ohne Probleme und ohne Drift. - Sehr gute Arbeit!

Viele Grüße