LabVIEWForum.de - Filtern eines Analogen Geschwindigkeitssignals mithilfe eines Kalman-Filters

LabVIEWForum.de

Normale Version: Filtern eines Analogen Geschwindigkeitssignals mithilfe eines Kalman-Filters
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich arbeite an einem Projekt, bei dem ich das Geschwindigkeitssignal eines Servomotors von Bosch verwende um die Bewegungsrichtung des Motors zu erkennen.
Hierbei nutze ich nur das Vorzeichen dieses analogen Signals.
Leider ist dieses sehr rauschbehaftet, und somit wechselt das Vorzeichen bei Niedrigen Geschwindigkeiten oft.

Abhilfe hat bisher geschafft, das abgeleitete Positionssignal zu verwenden, jedoch gibt es hier immernoch starke Schwankungen in manchen Bereichen.

Ich habe ein wenig vom Kalman Filter gelesen und davon, dass dieser Modellbasiert die Signale filtert. Das scheint mir hier sehr vielversprechend.
Ab LabVIEW 2018 gibt es diesen wohl auch in einer fertigen SubVI.
Hat jemand ein Beispiel zur Anwendung des Filters um einen Motor zu steuern bzw ein Geschwindigkeits- / Positionssignal zu filtern?

Ich bin auch offen gegenüber anderen Möglichen Vorschlägen zur Umsetzung.
Falls es jemanden interessiert, werde ich meine Fortschritte hier teilen.

Vielen Dank im vorraus.
Mit freundlichen Grüßen
helloitsme Big Grin
Hallo TomJericho,

bitte immer selbst auf CrossPosts hinweisen!
Hallo TomJericho,

wenn du einen Servomotor hast, hast du doch auch sicher einen Servoregler. Was spricht dagegen dir das Signal von dem Servoregler ausgeben zu lassen?

Gruß Max
Die Labview Beispiele, besonders das erste fand ich sehr hilfreich, um die grundlegenden Konzepte des Kalman-Filters zu verstehen.
(1D-Kalmanfilter-Endoder und -Accelerometer.vi)

In diesem Beispiel und in allen Beispielen, die ich online finde, wird der Filter verwendet , um eine Position zu schätzen.
In meinem Fall habe ich eine sehr zuverlässige Positionsmessung, die fast kein Rauschen hat.

Wie kann ich die Anwendung zum Schätzen der Geschwindigkeit basierend auf der Positionsmessung anpassen? Oder ist dies überhaupt möglich?

Entschuldigung für den CrossPost, ich dachte, wenn mehr Leute den Post sehen würden, wären die Chancen für eine Lösung höher.
Hier ist der Link zum englischen Forum: https://forums.ni.com/t5/LabVIEW/Filteri...8#M1167885

@MScz Ich meinte das Signal von dem Servoregler.

Grüsse
Hallo Tom,

Zitat:In meinem Fall habe ich eine sehr zuverlässige Positionsmessung, die fast kein Rauschen hat.
Wie kann ich die Anwendung zum Schätzen der Geschwindigkeit basierend auf der Positionsmessung anpassen? Oder ist dies überhaupt möglich?
Wozu benötigst du dann eine Schätzung?
Du kannst doch bei deinem Signal mit "fast kein Rauschen" einfach die Differenz zur vorigen Position bestimmen und durch die vergangene Zeit dividieren, um die Geschwindigkeit zu berechnen. Ist mit einem oder zwei Schieberegistern erledigt…

Zitat:Entschuldigung für den CrossPost, ich dachte, wenn mehr Leute den Post sehen würden, wären die Chancen für eine Lösung höher.
Es ist ok, in beiden Foren zu posten. (Es gibt ja auch noch LAVA.)
Aber bitte darauf hinweisen: es ist ärgerlich, wenn man sich die Mühe macht, eine Antwort zu schreiben und dann hinterher feststellt, dass die womöglich gleiche Antwort im anderen Forum schon gegeben wurde…
Kurze zwischen Frage nochmal:

Warum ziehst du dir deine benötigten Werte nicht direkt aus dem Regler bzw. was spricht dagegen?
Welchen Regler setzt du ein? Steuerst du den Regler an? Gff. sogar über LabVIEW?

Weil so Werte wie ungefilterte Position/Geschwindigkeit bieten dir die meisten Servoregler, welche ich kenne, direkt an. Diese Funktionen sind auch schon vom Hersteller getestet und du progammierst dir nichts zuammen, was ggf. falsche Werte ausspruckt.

Gruß Max
Danke für den Tipp mit den Schieberegistern. Habe es jetzt so umgesetzt und es funktioniert schon ganz gut.
Meine VI läuft nur auf meinem Computer und nicht auf irgendeiner RealTime Ebene. Aktuell ist die Frequenz mit der Messwerte aufgenommen werden noch recht gering. (89ms per loop --> 12,5Hz)
Ich glaube, ich brauche eine viel höhere Frequenz (ca. 100Hz). Ist das überhaupt möglich ohne viel Geld für RealTime Equipment auszugeben?

Aktuell ist mein Servoregler über ein Lankabel am PC angeschlossen. Ist die Steuerung eines solchen Ethernet Gerätes auch mit einem CRio möglich?

@Max
Ich verwende einen Servoregler von Bosch Indradrive Cs und greife über die Bosch VIs aus dem Addon-Package eal4LabVIEW darauf zu.

Gruß
Tom Jericho
Hallo itsme,

Zitat:Meine VI läuft nur auf meinem Computer und nicht auf irgendeiner RealTime Ebene. Aktuell ist die Frequenz mit der Messwerte aufgenommen werden noch recht gering. (89ms per loop --> 12,5Hz) Ich glaube, ich brauche eine viel höhere Frequenz (ca. 100Hz). Ist das überhaupt möglich ohne viel Geld für RealTime Equipment auszugeben?
Aktuell ist mein Servoregler über ein Lankabel am PC angeschlossen. Ist die Steuerung eines solchen Ethernet Gerätes auch mit einem CRio möglich?
Wenn man jetzt noch wüsste, wie dein VI aussieht, dann könnte man die 89ms auch bewerten…

Wenn dein Gerät einfach so langsam antwortet, dann hilft der Wechsel auf ein cRIO auch nicht. Wenn dein VI allerdings einfach zu "langsam" programmiert wurde, dann könnte auch eine "schnellere" Programmierung helfen…
Ich habe das ganze jetzt aufgeteilt in 2 loops, sodass der Read/ Write Loop nur noch 20-30ms braucht.
Das ist schon ganz gut.
Schneller geht es wohl nicht Smile

Ich kann gerne morgen mal einen Screenshot davon hochladen Smile
Referenz-URLs