Kombinieren Sie Gyroskop- und Beschleunigungsmesserdaten

Lesezeit: 4 Minuten

Benutzeravatar von Dylan Vester
Dylan Vester

Ich baue einen balancierenden Roboter mit dem NXT-System von Lego Mindstorm. Ich verwende zwei Sensoren von HiTechnic, der erste ist ein Beschleunigungsmesser und der zweite ein Gyroskop. Ich habe das Rauschen von beiden Sensoren erfolgreich herausgefiltert und Winkel für beide in einem Bereich zwischen -90 und 90 Grad abgeleitet, 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. Unten ist ein Beispieldiagramm, das ich aus tatsächlichen Daten erstellt habe, um die Abweichung vom Gyroskop zu demonstrieren:

Geben Sie hier die Bildbeschreibung ein

Der am häufigsten verwendete Ansatz, den ich gesehen habe, um die Kombination dieser Sensoren felsenfest zu machen, ist die Verwendung eines Kalman-Filters. Ich bin jedoch kein Experte für Analysis und ich verstehe wirklich keine mathematischen Symbole, ich verstehe jedoch Mathematik im Quellcode.

Ich verwende RobotC (das wie jedes andere C-Derivat ist) und würde mich sehr freuen, wenn mir jemand Beispiele dafür geben könnte, wie ich dies in C bewerkstelligen kann.

Danke für Ihre Hilfe!

LÖSUNGSERGEBNISSE:

In Ordnung, Kersny hat mein Problem gelöst, indem sie mir komplementäre Filter vorgestellt hat. Dies ist eine Grafik, die meine Ergebnisse veranschaulicht:

Ergebnis Nr. 1

Geben Sie hier die Bildbeschreibung ein

Ergebnis Nr. 2

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, korrigiert der Filter die gyroskopische Drift und kombiniert beide Signale zu einem einzigen glatten Signal.

Bearbeiten: Da ich sowieso die kaputten Bilder reparierte, dachte ich, es würde Spaß machen, das Rig zu zeigen, mit dem ich diese Daten generiert habe:

Geben Sie hier die Bildbeschreibung ein

  • deine Daten weichen deutlich voneinander ab. Der Kalman-Filter oder eine andere Methode hilft Ihnen nicht, wenn Ihre Ausgangsdaten nicht übereinstimmen.

    – Hund

    19. Oktober 2009 um 20:53 Uhr

  • Ich bin mir nicht sicher, ob Sie vollständig verstehen, was das Diagramm anzeigt, es ist ein bekanntes Problem, dass Kreiseldaten driften. Sie sind der Grund, warum die Daten divergieren, was der Filter / die Integration, nach der ich suche, anhand der Beschleunigungsmesserdaten korrigieren wird. Der Grund für die radikale Drift liegt auch darin, dass ich die Sensoren ziemlich heftig geschüttelt habe, um mein Problem zu veranschaulichen. 🙂

    – Dylan Vester

    20. Oktober 2009 um 14:42 Uhr

  • Ich habe keine Ahnung, was Sie grafisch darstellen, weil Sie die Achsen nicht beschriftet haben, aber unabhängig davon, ob Ihre Daten bei denselben x-Werten deutlich von denselben y-Werten abweichen, handelt es sich um ziemlich schlechte Daten.

    – Hund

    20. Oktober 2009 um 16:49 Uhr

  • Wenn Sie einen beliebigen Filter darauf anwenden, der versucht, Fehler im Sinne der kleinsten Quadrate zu minimieren (was beispielsweise der Kalman-Filter tut), werden Sie einen Fehler mitteln, der mit zunehmenden x-Werten zunimmt. Offensichtlich sagt Ihnen ein Teil Ihrer Daten etwas und ein anderer Teil Ihrer Daten sagt Ihnen etwas anderes.

    – Hund

    20. Oktober 2009 um 16:51 Uhr

  • Eine großartige Alternative zum Kalman-Filter ist der Komplementärfilter, der viel einfacher zu implementieren ist: http://www.pieter-jan.com/node/11

    – Pieter-Jan

    16. Mai 2013 um 9:00 Uhr

kersnys Benutzeravatar
Kersny

Kalman-Filter sind großartig und alles, aber ich finde den Komplementärfilter viel einfacher zu implementieren mit ähnlichen Ergebnissen. Die besten Artikel, die ich zum Codieren eines Komplementärfilters gefunden habe, sind dieses Wiki (zusammen mit Dieser Artikel zum Umrechnen von Sensoren in technische Einheiten) und ein PDF in der ZIP-Datei auf diese Seite (Unter Technischer Dokumentation glaube ich, dass der Dateiname in der ZIP-Datei filter.pdf ist);

PS. Wenn Sie auf einem Kalman-Filter stecken, hier ist ein C-Syntax-Code für den Arduino, der ihn implementiert.

  • FANTASTISCH, ich glaube, das ist vielleicht genau das, wonach ich gesucht habe. Die Filter.pdf-Datei war wirklich die große Hilfe und erklärte und löste genau mein Problem. Ich habe es noch nicht überprüft (ich bin auf der Arbeit). Aber heute Abend werde ich versuchen, das in Gang zu bringen und meine Frage als beantwortet markieren!

    – Dylan Vester

    19. Oktober 2009 um 20:09 Uhr

  • Froh, dass ich helfen konnte! Wenn Sie ein Beispiel davon in Aktion sehen möchten, besuchen Sie meinen Blog unter ohscope.com. Ich habe einen Segway-ähnlichen Balancierroller gebaut und werde bald weitere Daten veröffentlichen.

    – kersny

    19. Oktober 2009 um 20:44 Uhr

  • Der Wiki-Link scheint tot zu sein

    – JonDrnek

    18. Juni 2011 um 15:14 Uhr

  • Yay archive.org: web.archive.org/web/20091121085323/http://www.mikroquad.com/bin/…

    – Eduard Falk

    16. Juni 2012 um 0:15 Uhr

Gamasutra.com lief ein Artikel über die Verwendung von Kalman-Filtern für die WiiMote-Filterung.

Am Ende des Artikels finden Sie einige Links zum C++-Quellcode.

1416780cookie-checkKombinieren Sie Gyroskop- und Beschleunigungsmesserdaten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy