Kombinieren Sie Gyroskop- und Beschleunigungsmesserdaten
-
22-09-2019 - |
Frage
Ich baue einen Ausgleichsroboter mit dem NXT -System des Lego Mindstorms. Ich verwende zwei Sensoren von Hitechnic, das erste ist ein Beschleunigungsmesser und das zweite ein Gyroskop. Ich habe das Geräusch von beiden Sensoren und Winkel für beide in einem Bereich zwischen -90 und 90 Grad erfolgreich herausgefiltert, wobei 0 Grad perfekt ausbalanciert ist.
Meine nächste Herausforderung besteht darin, beide Sensorwerte zu kombinieren, um die Drift des Gyroskops im Laufe der Zeit zu korrigieren. Im Folgenden finden Sie ein Beispieldiagramm, das ich aus tatsächlichen Daten erstellt habe, um die Drift aus dem Gyroskop zu demonstrieren:
Der am häufigsten verwendete Ansatz, den ich gesehen habe, um die Kombination dieser Sensoren festzulegen, ist die Verwendung eines Kalman -Filters. Ich bin jedoch kein Experte für Kalkül und verstehe mathematische Symbole wirklich nicht, ich verstehe Mathematik im Quellcode.
Ich benutze Robotc (was wie jedes andere C -Derivat ist) und würde es wirklich schätzen, wenn mir jemand Beispiele dafür geben kann, wie man dies in C erledigt.
Danke für Ihre Hilfe!
Lösungsergebnisse:
Okay, Kersny löste mein Problem, indem er mich in ergänzende Filter einführte. Dies ist eine Grafik, die meine Ergebnisse veranschaulicht:
Ergebnis #1
Ergebnis #2
Wie Sie sehen können, korrigiert der Filter für die gyroskopische Drift und kombiniert beide Signale zu einem einzigen glatten Signal.
Bearbeiten: Da ich die zerbrochenen Bilder sowieso reparierte, dachte ich, es würde Spaß machen, das Rig zu zeigen, mit dem ich diese Daten generiert habe:
Lösung
Kalman -Filter sind großartig und alle, aber ich finde den komplementären Filter mit ähnlichen Ergebnissen viel einfacher zu implementieren. Die besten Artikel, die ich für die Codierung eines ergänzenden Filters gefunden habe, sind Dieses Wiki (zusammen mit Dieser Artikel zum Konvertieren von Sensoren in technische Einheiten) und ein PDF in der ZIP -Datei auf diese Seite (Im technischen Dokumentation glaube ich, dass der Dateiname im ZIP filter.pdf ist);
Ps. Wenn Sie auf einem Kalman -Filter festsitzen, hier ist ein C-Syntax-Code für den Arduino, der ihn implementiert.
Andere Tipps
Gamasutra.com rannte Ein Artikel über die Verwendung von Kalman -Filtern zur Wiimote -Filterung.
Am Ende des Artikels gibt es einige Links zu C ++ - Quellcode.