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:

enter image description here

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

enter image description here

Ergebnis #2

enter image description here

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:

enter image description here

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top