IMU-Rollwinkel – Richtig beim Anhalten, falsch beim Bewegen

Ich habe einen MPU6050 (3-Achsen-Kreisel, 3-Achsen-Beschleunigung, eingebauter Bewegungsfilter namens DMP) an einer Autoachse verwendet, um den Achswinkel während der Fahrt zu messen. An einer langen Steilkurve (2 Grad) zeigt der Sensor 0 Grad an, während er sich bewegt (~40 km/h), aber wenn er angehalten wird, zeigt er korrekt an (2 Grad). Der physikalische Achswinkel ist jedoch in beiden Szenarien gleich.

Ich glaube, die Seitenkraft beim Durchfahren der Kurve beeinflusst die Interpretation der Sensoren, in welche Richtung die Schwerkraft geht, und passt die Rollwinkel entsprechend an. Siehe Bild;

Geben Sie hier die Bildbeschreibung ein

Kann jemand etwas dazu sagen, wie dies gelöst werden könnte?

Zum Beispiel;

  1. Verwenden Sie einen Sensor mit einem Magnetometer?
  2. Verwenden Sie einen Sensor mit einem anderen Filter?
  3. Ist das überhaupt lösbar oder nur ein inhärenter Faktor von MEMS-Sensoren?

Zeit ist momentan ein kritischer Faktor in meinem Projekt.

Vielen Dank im Voraus für Ihren Beitrag

Bearbeiten 1: Ich bin auf diesen Thread gestoßen , in dem das OP anscheinend das gleiche Problem mit MPU6050 hatte und mit etwas Glück zum BNO055 ging, aber Kalibrierungsprobleme hatte. Dann wurde im letzten Beitrag gesagt, dass das Problem mit MPU9250 und RTIMULib (Open-Source-Filter) gelöst wurde. Ich frage mich, ob das Hinzufügen eines Magnetometers geholfen hat, da es einen festen 3D-Referenzpunkt gibt, der nicht von Beschleunigungskräften beeinflusst wird. Oder vielleicht hat er die Algorithmen in RTIMULib optimiert, um die gewünschte Ausgabe zu erhalten. Ich muss mich noch mit den Motion-Fusion/Filter-Algorithmen befassen. Bisher habe ich das nur die MPU6050 intern im DMP machen lassen. Irgendwelche Gedanken zu diesen möglichen Lösungen?

a²+b²=c² , dh F[sensed]² = F[gravity]² + F[lateral]². Wenn F[sensed] und F[gravity] bekannt sind, können Sie die Größe von F[lateral] berechnen (aber nicht seine Richtung).
Danke JimmyB. Derzeit werden die Algorithmen automatisch im DMP des Sensors ausgeführt, sodass ich diese nicht ändern kann. Aber wenn ich eigene Algorithmen/Filter implementieren muss, werde ich dies berücksichtigen.

Antworten (3)

Es ist sicherlich lösbar.

Ich vermute, dass der Filter den Gyroskop-Messwerten und Absolutwerten der Beschleunigungsmesser aufgrund der Rausch- und Offset-Probleme, die MEMS-Sensoren inhärent sind, nicht sehr vertraut, und wenn er einen stabilen Zustand mit einer etwas stärkeren Schwerkraft als erwartet und einer konstanten Rate erreicht Er nimmt wiederum an, dass es sich um Offsets handelt, und hebt sie auf. Ein anderer Filter in Kombination mit einem Kalibrierungsprozess beim Start könnte dabei helfen, aber Sie benötigen möglicherweise bessere Sensoren.

Allerdings ist es normalerweise nicht schnell oder einfach, so etwas richtig und zuverlässig zum Laufen zu bringen. Wenn die Zeit kritisch ist, kann ich mir keine schnelle Lösung dafür vorstellen, die nicht darin besteht, Geld auf das Problem zu werfen und eine weitaus hochwertigere IMU- und Positionierungs-Engine-Software zu kaufen.

Danke Andreas. Ich werde deinen Rat berücksichtigen. Ich habe auch ein „Edit 1“ am Ende des ursprünglichen Posts hinzugefügt, das sich auf einen anderen Benutzer bezieht, der sein Problem anscheinend gelöst hat. Haben Sie Anmerkungen dazu, wie z. B. die Verwendung eines Magnetometers, um bei diesem Problem zu helfen?
Ein Magnetometer wird ein wenig helfen, da es Ihnen zeigt, dass Sie sich tatsächlich drehen, mehr Eingaben in den Filter werden immer helfen, vorausgesetzt, Sie stellen den Filter richtig ein und haben die benötigte CPU-Leistung. Sie müssen jedoch sicherstellen, dass Ihr Filter einen großen Fehler in den Messwerten zulässt, Kompasse, die in oder unter großen Stahlkisten platziert werden, sind nicht die genauesten Sensoren, die es gibt. Auch hier kann die Kalibrierung eine große Hilfe sein, bringt Sie aber nur so weit. Sie werden zB immer kleine Abweichungen sehen, wenn Sie an großen Metallobjekten vorbeifahren, da können Sie nicht viel machen.

Ich denke du kannst dein Problem lösen. Sie müssen jedoch Ihren eigenen Sensorfusionsalgorithmus anstelle von DMP (Digital Motion Processor) verwenden. Da Sie nicht jeden einzelnen Wert von DMP ändern können, ähnelt es eher einer Blackbox. Soweit ich mich erinnere, beträgt die Datenrate von DMP 200 Hz oder weniger.

Sie können problemlos ergänzende Filter auf Ihrem System verwenden. Es bietet Ihnen die Möglichkeit, die Rate des Beschleunigungsmesser- und Gyroskopeffekts auf Ihrem System und viel mehr Datenrate (abhängig von Ihrer MCU) zu ändern. In Anbetracht Ihrer begrenzten Zeit finden Sie wahrscheinlich ergänzende Filtercodes für Ihre MPU6050 auf Github.

Danke Batu. Aufgrund Ihrer und anderer Antworten beginne ich zu glauben, dass die Implementierung meines eigenen Filters der nächste Testschritt ist. Ich habe auch ein „Edit 1“ am Ende des ursprünglichen Posts hinzugefügt, das sich auf einen anderen Benutzer bezieht, der sein Problem anscheinend gelöst hat. Können Sie dies in Bezug auf ein Magnetometer kommentieren, das möglicherweise auch zur Lösung des Problems beiträgt?
Gerne, eigentlich ist der Hauptgrund für die Verwendung eines Magnetometers im System die Kompensation der Gierachse (normalerweise der Z-Achse), denn wenn Sie nur Beschleunigungsmesser als Absolutsensor verwenden, haben Sie aufgrund Ihrer Schwerkraft und Ihres Gierens keine Referenz in der Gierachse auf der gleichen Achse, so dass Sie es nicht kompensieren können. Aber natürlich können Sie Magnetometer für alle 3 Achsen verwenden und es wird die Wirkung von Beschleunigungsmessern auf Ihr System reduzieren. Meiner Meinung nach sollten Sie zuerst einen Komplementärfilter mit 6050 ausprobieren. Wenn Sie danach ein Magnetometer benötigen, können Sie es einfach in Ihren komplementären Filteralgorithmus implementieren.

Einige weitere Forschungen geben mir einen besseren Einblick, wie andere das Problem lösen. In erster Linie eine Methode zur Berechnung der Zentrifugalbeschleunigung verwenden und diese dann kompensieren.

Diese Lösungen stammen von William Premerlani aus der Fixed-Wing-UAV-Community.

Verwendung von GPS; http://diydrones.com/profiles/blogs/acceleration-compensation-flight-testing

Verwenden Sie nur Accel und Gyro; http://diydrones.com/forum/topics/centrifugal-compensation-with-only-gyros-and-accelerometers

Diese Lösung stammt aus einer Forschungsarbeit für Starrflügler-UAV; users.cecs.anu.edu.au/~Jonghyuk.Kim/pdf/…