- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 1 von 1

Thema: MPU9250 IMU Auswertung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    15.09.2012
    Beiträge
    73

    MPU9250 IMU Auswertung

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich habe es endlich geschafft von den MPU9250 kontinuierlich Daten abzurufen. Dies funktioniert auch gut. Verwendeter µC ist ein ATXmega256a3BU.
    Nur mit der Auswertung klappt es nicht ganz so wie gedacht. Aufgrund beschränkter Rechenleistung will ich mich auf einen Komplementär Filter beschränken. Bzw. mit der Notation komme ich nicht so richtig klar.
    Prinzipiell werden alle Messwerte im Sensor in einem FIFO abgelegt, und dort auch "unterbrechungsfrei" abgerufen. "Unterbrechungsfrei" heißt das keine Messwerte verloren gehen.
    Es werden auch keine Messbereiche überschritten, ich frage im Programm auf Überlauf der Messwerte ab.

    Die Gyrometer Werte werden Aufsummiert. Die Werte des Accelometer über die "atan2" Funktion verarbeitet.

    Wird im Stillstand der Sensor um die Achsen gedreht, stimmen die errechneten Winkelwerte. Aber sobald mein Roboter in Bewegung ist, können die errechneten Winkel deutlich abweichen (+-10°).

    Die Frage ist nun, ob ein Komplementär Filter ausreichend ist?
    Ist der, Rechenleistung sparende, Ablauf nur die Gyrometer Werte zu integrieren und nur den letzten ACCEL Wert zu verwenden der Fehler? Müssten/können die ACCEL Werte auch integriert werden? Ich möchte gern wenige "atan2" Funktionen nutzen, da diese erheblich Rechenleistung benötigen.

    Anbei die entscheidenden Code-Zeilen.

    Code:
    //Euler WINKEL
    // +- M_PI (Pi/2) um Winkelanzeige auf 0° zu setzen			
            ACC_roll	 = (((atan2(ACCEL_Wert[2],ACCEL_Wert[1])) - M_PI_2) * 180/M_PI);	//Drehung um X-Achse							
    	ACC_pitch  = ((atan2(ACCEL_Wert[0],ACCEL_Wert[2])) * 180/M_PI);				//Drehung um Y-Achse						
    	//ACC_yaw = ( ((atan2(ACCEL_Wert[0],ACCEL_Wert[1])) + M_PI) * 180/M_PI);	//Drehung um Z-Achse
    
    	//Komplementär Filter 
    		X_Achse[0] = ((X_Achse[0] - GYRO_Wert[0]) * 0.98) + (ACC_roll * 0.02);
    		Y_Achse[0] = ((Y_Achse[0] - GYRO_Wert[1]) * 0.98) + (ACC_pitch * 0.02);
    		//Z_Achse   = ((Z_Achse + GYRO_Wert[2]) * 0.98) + (ACC_yaw * 0.02);
    Edit:
    Die Werte des Accelometer zeitgleich mit dem Gyrometer zu verrechnen, bringt leider einen gegenteiligen Effekt. Zuvor wurde nur alle Gyro Werte aufsummiert, und der letzte ACCEL Wert mittels "atan2" genutz.
    Aber die Messwerte des Accelometer über einen gleitenden Mittelwert zu stabilisieren, verbessert die Winkelausgabe. Dies muss ich aber noch weiter bearbeiten. Zur Zeit mittle ich 10 Werte, bei 25 Werten war mir die Anzeige bereits zu träge.
    Geändert von Tomy83 (07.02.2022 um 20:08 Uhr)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 26.04.2018, 15:29
  2. Auswertung von PIR
    Von PeruNova im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 04.03.2014, 21:46
  3. Auswertung
    Von oderlachs im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 10.07.2012, 10:51
  4. PIR auswertung
    Von avus17 im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 29.08.2011, 14:06
  5. Auswertung Fernsteuerimpuls
    Von drucker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 24.04.2006, 17:30

Berechtigungen

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

Solar Speicher und Akkus Tests