-         
Ergebnis 1 bis 6 von 6

Thema: MPU 9250 Yaw Winkel ist falsch

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.07.2018
    Beiträge
    26

    MPU 9250 Yaw Winkel ist falsch

    Anzeige

    Guten Abend,

    ich versuche einem Roboter einen Kompass zu geben, damit dieser eine Orientierung hat.
    Mit dieser Orientierung kann ich dann beispielsweise sagen, dass sich um 180° drehen soll.
    Bis jetzt konnte ich einen yaw winkel im bereich von 0 - 359° errechnen.

    Das Problem ist, dass die Ausrichtung sich ändert, wenn ich das Modul auf
    eine alte Ausrichtung zurück drehe. Wenn ich das MPU Modul auf 180° drehe
    und dieses dann in die entgegengesetzte Richtung drehe (also weiter 180°) dann habe ich immer unterschiedliche
    Abweichungen von bis zu 30°. Die Richtungen die beispielsweise 90° anzeigen, ändern sich ständig.
    Nicht falsch verstehe:
    Wenn das Modul still steht dann ist der Wert relativ stabil. Ich habe lediglich einen Drift von 1° alle 20 Sekunden.
    Besteht mein Problem etwa in diesem Drift?

    Was muss ich tun, um diese Problem zu beheben?
    Ich habe den Code und die Infos von dieser Seite:

    http://blascarr.com/lessons/imu-visualization/

    Ansonsten ist hier auch noch mein vollständiger Code:
    Code:
    #include "MadgwickAHRS.h"
    #include "IMU_MPU9250.h"
     
    float roll;
    float pitch;
    float yaw;
    long Serialtime;
    long last_time;
    long microsPerReading;
     
    Madgwick filter;
    MPU9250 imu;
     
     
    void updateIMU(float *roll, float *pitch, float *yaw){
     
      if (imu.readByte(MPU9250_ADDRESS, INT_STATUS) && 0x01){    imu.readAccelData(imu.accelCount);
        imu.getAres();
     
        imu.ax = (float)imu.accelCount[0]*imu.aRes;
        imu.ay = (float)imu.accelCount[1]*imu.aRes;
        imu.az = (float)imu.accelCount[2]*imu.aRes;
        imu.readGyroData(imu.gyroCount);
        imu.getGres();
     
        imu.gx = (float)imu.gyroCount[0]*imu.gRes;
        imu.gy = (float)imu.gyroCount[1]*imu.gRes;
        imu.gz = (float)imu.gyroCount[2]*imu.gRes;
      }
     
      imu.updateTime();
      imu.delt_t = millis() - imu.count;
      if (imu.delt_t > microsPerReading){
        filter.updateIMU(imu.gx, imu.gy, imu.gz, imu.ax, imu.ay, imu.az);
        *roll = filter.getRoll();
        *pitch = filter.getPitch();
        *yaw = filter.getYaw();
        imu.count = millis();
      }
    }
    void setup() {
      Wire.begin();
      Serial.begin(9600);
      filter.begin(25);
       
      microsPerReading = 1000 / 25;
      Serialtime = 50;
      last_time = millis();
    
      imu.gyroBias[0] = 0.0f;
      imu.gyroBias[1] = 0.0f;
      imu.gyroBias[2] = 0.0f;
    
      imu.accelBias[0] = 0.0f;
      imu.accelBias[1] = 0.0f;
      imu.accelBias[2] = 0.0f;
       
      imu.calibrateMPU9250(imu.gyroBias, imu.accelBias);
      imu.initMPU9250();
    }
     
    void loop() {
      updateIMU(&roll, &pitch, &yaw);
      if (millis() - last_time > Serialtime) {
        Serial.print("Orientation ");
        Serial.print(yaw);
        Serial.print(" ");
        Serial.print(pitch);
        Serial.print(" ");
        Serial.println(roll);
        last_time = millis();
      }
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    hallo,
    ich hatte vor kurzem das selbe Problem, mit einer anderen dmp lib für den 6050
    https://github.com/jrowberg/i2cdevli...rduino/MPU6050
    Es hatte ich aber heraus gestellt, dass ich anfangs recht lange warten musste, bis der dmp Prozessor stabile Werte lieferte, danach funktionierte es recht gut.
    https://github.com/jrowberg/i2cdevli...ment-431594236
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.07.2018
    Beiträge
    26
    Zitat Zitat von HaWe Beitrag anzeigen
    hallo,
    ich hatte vor kurzem das selbe Problem, mit einer anderen dmp lib für den 6050
    https://github.com/jrowberg/i2cdevli...rduino/MPU6050
    Es hatte ich aber heraus gestellt, dass ich anfangs recht lange warten musste, bis der dmp Prozessor stabile Werte lieferte, danach funktionierte es recht gut.
    https://github.com/jrowberg/i2cdevli...ment-431594236
    Danke für die Antwort!

    Ich habe den sensor jetzt still liegen lassen für ca 10 min. Das Problem besteht allerdings weiterhin. Habe ich das richtig verstanden? Sry wenn nicht.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    Zitat Zitat von eniddelemaj Beitrag anzeigen
    Danke für die Antwort!

    Ich habe den sensor jetzt still liegen lassen für ca 10 min. Das Problem besteht allerdings weiterhin. Habe ich das richtig verstanden? Sry wenn nicht.
    bei mir haben max. 40 sec (exakt horizontal fixiert) ausgereicht.
    Es kann sein, dass du den 9150 vorher zusäzlich kalibrieren musst, wegen Magnetometer, aber da muss ich passen.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.07.2018
    Beiträge
    26
    Okay ich habe jetzt deine Library benutzt und eeeendlich funktioniert alles so wie ich es erwartet habe!
    Ich muss ehrlich sagen, dass es ein ziemlich langer Weg war um zu diesem Ergebnis zu kommen.

    Unglaublich wie schwer ich mir das gemacht habe, weil ich dachte, dass ein Magnetometer zwingend notwendig
    sei um einen Yaw Wert zu erhalten. Ich habe anstatt den MPU9250 jetzt den MPU6050 angeschlossen und es funktioniert mit dieser Bibliothek.
    Ich habe mir Tutorials angeschaut, etliche Seiten im Internet durchsucht wie man ein Magnetometer anständig kalibriert
    und nun habe ich so einfach die Lösung für mein Problem gefunden. Ich danke dir!

    - - - Aktualisiert - - -

    Also an alle, die einen Yaw Wert haben wollen, ohne dabei sich an dem Erdmagnetfeld zu orientieren:
    Benutzt den Accel und den Gyro. Das reicht völlig aus für einen Yaw Wert! Verwendet die oben genannten Bibliotheken
    und einen MPU 6050.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.506
    freut mich, dass es geholfen hat! (y)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Ähnliche Themen

  1. Kalibrierung von IMUs, speziell MPU-9250
    Von RobbyCCR im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 04.05.2015, 17:15
  2. Winkel schweißen
    Von Ragner Waldmann im Forum Mechanik
    Antworten: 1
    Letzter Beitrag: 29.01.2012, 11:16
  3. Antworten: 5
    Letzter Beitrag: 07.08.2008, 17:38
  4. Kugellager winkel
    Von sulu im Forum Mechanik
    Antworten: 10
    Letzter Beitrag: 29.10.2005, 19:47
  5. Lieferant für ALU Winkel?
    Von im Forum Mechanik
    Antworten: 2
    Letzter Beitrag: 29.05.2004, 22:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •