Kalmanfilter zur Berechnung der Winkelstellung eines Quadcopters (2/4)

Die von MEMS-Sensoren gemessenen Signale sind stark verrauscht und mit Fehler behaftet. Als Beispiel haben wir Daten eines Sensors aufgezeichnet. Siehe Abbildung 1. Dort sieht man die Winkelstellung und die Winkelgeschwindigkeit einer Achse. Zuerst wurde das Objekt, an dem der Sensor befestigt ist, um 90° gedreht (1.) und dann direkt wieder in die horizontale Ausgangsposition gebracht. In der Mitte folgte eine translatorische Bewegung (2.) und am Ende die selbe Drehung in negative Richtung (3.).

Abbildung 1: Rohdaten des MEMS-Sensors. (1.) Drehung um 90°. (2.) translatorische Bewegung ohne Drehung. (3.) Drehung um -90°.

Die Winkelstellung wurde über ein Komplementärfilter gebildet. Er dient nur dazu, um aus den Beschleunigungsdaten und dem Gyroskop eine Winkelstellung zu berechnen. Der Beschleunigungsensor detektiert die Erdanziehungskraft, die bei horizontaler Stellung nur in die negative z-Richtung wirkt. Erfolgt nun eine Drehung, kann sie in ihre einzelnen Komponenten aufgespalten werden um daraus Rückschlüsse über die Winkelstellung zu ziehen. Zum anderen können die Gyroskopdaten integriert werden, um daraus auf einen Winkel zu schließen. Daher hat man zwei Quellen um auf den wahren Winkel zu schließen. Über ein Gewichtungsfaktor werden beide Quellen zusammen gefügt, um eineren genaueren Wert für den Winkel zu berechnen.

Dabei treten folgende Probleme auf: der Winkel, berechnet durch die Erdanziehungskraft, wird verfälscht, wenn der Sensor noch eine translatorische Beschleunigung in irgendeiner Achse erfährt. Funktioniert also nur gut, wenn sich der Sensor in Ruhe befindet. In Abbildung 1 (2.) sieht man, wie eine Winkeländerungen detektiert wird, obwohl sich der Sensor nur translatorisch Bewegt hat. Die Gyroskopdaten wieder rum sind stark verrauscht und haben einen unbekannten Offset (den man auch nicht durch eine Subtraktion einfach Weg bekommt, da er sich unter Umständen mit der Zeit ändert), der durch die Integration zu einer Rampenfunktion führt.

Aber auch bei der Regelungstechnik, die mit den Sensordaten arbeiten muss, führt das zu Problemen. Nehmen wir an, der Regler ist als PID-Regler ausgeführt. Gerade der D-Anteil des Reglers reagiert sensibel auf Rauschgrößen und größere Sprünge im Sollwert. Siehe beispielsweise (1.) Aus Abbildung 1: Dort sind immer wieder Spikes zu sehen, die in negative Richtung zeigen. Nimmt man das als Sollwert oder Istwert für einen D-Anteil, werden daraus durch das Differenzieren noch größere Messwerte, die mit der Realität nichts mehr zu tun haben. Es ist nur schwer abzuschätzen, wie Regler auf solche Messsignale reagieren. Im schlimmsten Fall sorgen sie dafür, dass das gesamte System Instabil wird. Es kommt in der Praxis nicht selten vor, dass ein Regler mit einem simulierten Modell noch funktioniert, in der Realität mit fehlerhaften, verrauschten Messdaten aber nicht mehr. Solche Effekte müssen unbedingt in der Simulation berücksichtigt werden.

Eine Möglichkeit ist es, solche Daten mit einen Tiefpassfilter zu glätten. Dieser hat aber den Nachteil, dass der auch eine Phasenverschiebung im System mitbringt. Bei der Phasenverschiebung ist es wichtig zu wissen, wozu die Daten danach gebraucht werden. Wenn man Beispielsweise akustische Signale Tiefpassfiltert, ist es egal ob sich dabei die Phase ändert. Man hört schließlich die Frequenzen und nicht die Phase. In der Regelungstechnik geht das leider nicht, da dort eine Phasenverschiebung zu einer Instabilität führen kann, aber nicht muss.

Daher ist ein Filter gesucht, der erstens die Spikes bei den Drehungen (1.) und (3.) in Abbildung 1 entfernt, die Messwerte des Winkels bei translatorischer Bewegung (2.) filtert (sollte bei translatorischer Bewegung Null sein) und drittens dabei keine Phasenverschiebung verursacht. Der Kalmanfilter arbeitet mit den Messwerten, dem physikalischen Modell des Systems, sowie den statistischen Eigenschaften der Messwerte und des Modells (Varianzen). Erste Ergebnisse des Filters ist in Abbildung 2 zu sehen.

Abbildung 2: Vergleich der Rohdaten und Berechnung durch den Kalmanfilter.

Die Spikes bei den Drehungen wurden größtenteils rausgefiltert. Die Winkeländerungen durch die translatorische Bewegung konnte nicht vollständig entfernt werden. Die Werte der Winkelgeschwindigkeit wurden bei den Drehungen teilweise verdoppelt. Wenn man sich die Steigung bei der ersten Drehung berechnet, kommt man auf ca. $90°/s$, was darauf deutet, dass die gefilterten Winkelgeschwindigkeiten näher an der Realität liegen als die Gyroskopdaten (schwarze Kurve liegt bei ca. $90°/s$, blaue Kurve gerade mal bei ca. $45°/s$.

Im nächsten Blogeintrag wird auf die Grundgleichungen des Kalmanfilters eingegangen. Wie also das Model und die Messwerte miteinander abgewogen werden um die optimalen Messwerte zu ermitteln.

Schreibe einen Kommentar