AHRS-Algorithmus unter kontinuierlichen linearen Beschleunigungen

Ich habe mehrere Algorithmen ausprobiert, um Nicken, Rollen und Gieren unter kontinuierlichen linearen Beschleunigungen und Vibrationen (kleiner als 0,4 g, Frequenz unter 10 Hz) zu erhalten. Keiner von ihnen liefert gute Ergebnisse, da die Messwerte entweder driften oder zu stark von linearen Beschleunigungen beeinflusst werden. Was ich erreichen möchte, ist, wenn die externe Beschleunigung kleiner als + -0,4 g ist, sollte der Fehler beim Nicken und Rollen kleiner als + -1 Grad sein.

Ich habe diese Algorithmen ausprobiert:

  1. Madgwicks Algorithmus . Wenn die Beta-Verstärkung sehr hoch eingestellt ist, ist die Konvergenz schnell, aber Winkel sind anfälliger für lineare Beschleunigungen. Ich habe es heruntergestimmt und den Fehler bei linearen Beschleunigungen auf +-0,5 Grad reduziert. Wenn die Vibration jedoch kontinuierlich ist, driften die Messwerte und es dauert ewig, bis sie sich den wahren Werten annähern. Dies ist sinnvoll, da dem Kreisel bei linearen Beschleunigungen mehr vertraut wird und berechnete Winkel driften, wenn die Kreiselintegration driftet.

  2. Mahonys Algorithmus . Im Gegensatz zu Madgwick driftet es überhaupt nicht, egal welche Werte ich für Ki und Kp verwende. Es wird jedoch immer von linearen Beschleunigungen beeinflusst. (Fehler größer als +-6deg)

  3. Traditioneller Kalman-Filter . Es wurde viel Zeit darauf verwendet, diese riesigen R- und Q-Vektoren abzustimmen. Bisher hat es die gleiche Leistung wie das von Mahony.

Ich verwende Razor IMU . Ich weiß, dass es mit billigen Sensoren unmöglich ist, das gleiche Ergebnis wie mit diesem zu erzielen .

Es gibt noch ein paar weitere Optionen wie UKF, aber es ist schwierig zu verstehen oder zu implementieren.

Jeder Vorschlag ist willkommen.

Wie integrieren Sie sich für Kalman?
Unter Verwendung der Euler-Integration, aber die Drehungen sind streng eine Achse, um DCMs zu vermeiden. @C.TowneSpringer
Soll das gut funktionieren? Letztes Mal, als ich das gemacht habe (ALCM), war Euler ungeeignet. Euler ist ein Verfahren erster Ordnung mit lokalem Fehler proportional zum Quadrat der Schrittweite und grobem Fehler proportional zur Schrittweite. Wir haben Runge-Kutta 4. Ordnung mit einem Kalman-Filter verwendet. Ich denke, Newton-Feynman oder Euler, um eine erste Vermutung zu bekommen, Runge-Kutta zu starten. Haben Sie die Verarbeitung, um das mit einer guten Aktualisierungsrate zu bewältigen?
Vielen Dank für den Vorschlag. Der lokale Fehler des Euler-Integrationsverfahrens wurde übersehen. Wir planen, die Filterung im Nachhinein durchzuführen, sodass wir keine größeren Einschränkungen hinsichtlich der Komplexität der Berechnung haben. @C.TowneSpringer

Antworten (1)

Stellen Sie zunächst sicher, dass Sie hier zwei wichtige Punkte verstehen:

  1. Die Bestimmung der Lage aus IMU - Daten allein ist in Gegenwart einer linearen Beschleunigung von Natur aus mehrdeutig . Ohne zusätzliches Wissen über die Art der Beschleunigungen gibt es immer eine Obergrenze für die erreichbare Genauigkeit.

  2. Die Genauigkeit wird durch die Drift in den Messungen des integrierten Gyroskops begrenzt . Bei perfekten Kreiseldaten und Integration würden die Beschleunigungsmesserdaten überhaupt nicht benötigt. Je näher man der Perfektion kommt, desto mehr kann man die Beschleunigungen ignorieren.

Die Auswahl des Orientierungsalgorithmus spielt dabei weitgehend keine Rolle. Alle arbeiten nach dem gleichen Prinzip: Verwenden der Richtung der Gravitationsbeschleunigung, um die integrierten Kreiseldaten zu driften, mit einer variablen Gewichtung zwischen den beiden. Wenn Sie versucht haben, die Parameter zu optimieren und nicht die gewünschten Ergebnisse erzielt haben, werden Sie mit einem anderen Algorithmus wahrscheinlich nicht besser abschneiden.

Es gibt also im Wesentlichen zwei Dinge, die Sie tun können.

  1. Verbessern Sie die Genauigkeit Ihrer Kreiselintegration.
  2. Modellieren Sie die Art der linearen Beschleunigungen irgendwie.

Die zweite Option ist schwer zu diskutieren, da sie von den Details der Bewegung abhängt, die Sie studieren. Es gibt einige einfache Tricks wie das Verwerfen oder Entgewichten von Beschleunigungen außerhalb eines bestimmten Bereichs. Im Wesentlichen laufen diese darauf hinaus, die linearen Beschleunigungen nur als kurze Ereignisse zu modellieren. Wenn Ihr System ständig in Bewegung ist, helfen sie nicht weiter.

Es gibt jedoch mehrere Dinge, die Sie tun können, um Ihre Kreiselintegration zu verbessern:

  1. Holen Sie sich die bestmögliche Schätzung der Kreiselvorspannung . Nehmen Sie unmittelbar vor der Verwendung einige Sekunden lang statische Gyro-Messwerte vor und mitteln Sie diese, um Ihre Offset-Werte zu erhalten. Verlassen Sie sich nicht auf eine einmalige vorherige Kalibrierung.
  2. Versuchen Sie, die Drift aufgrund der Temperatur zu minimieren. Lassen Sie die IMU vor der Kalibrierung/Verwendung auf stabile Betriebstemperatur aufwärmen. Versuchen Sie, es während des Betriebs auf einer konstanten Temperatur zu halten.
  3. Verbessern Sie Ihr Kalibrierungsmodell. Erwägen Sie die Einbeziehung von Querachseneffekten und Nichtlinearitäten sowie nur Skalierung und Versatz.
  4. Verwenden Sie eine bessere Integrationsmethode. Es gibt bereits einige Ideen in den Kommentaren zu Ihrer Frage.
  5. Sehen Sie, ob Sie die Kreiseldrift verfolgen können. Wenn der Orientierungsalgorithmus die Drift in eine bestimmte Richtung konsequent korrigieren muss, kann dies erkannt und verwendet werden, um die Bias-Werte sanft anzupassen.

Sie haben Recht, dass die von Ihnen verwendeten Sensoren nicht von der höchsten verfügbaren Qualität sind. Es ist jedoch möglich, sehr gute Ergebnisse mit Consumer-Sensoren zu erzielen, wenn sie ausreichend gut charakterisiert und kalibriert sind.

Irgendwelche empfohlenen Verbrauchersensoren?