Raketenmodellbau.org Portal > Forum > Wasserraketen > Nutzlasten und Bergungssysteme > Filterung von Altimeter-Flugdaten
Du kannst keine neue Antwort schreiben
Seiten (3): [1] 2 3 »

Autor Thema 
AchimO

Poseidon

AchimO

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 1518

Status: Offline

Beitrag 7635783 , Filterung von Altimeter-Flugdaten [Alter Beitrag05. September 2015 um 21:22]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Hallo,

Durch einen glücklichen Zufall sind mir interessante Flugdaten untergekommen:

Eine Wasserrakete, in der mein Höhenmesser (AltiWR, siehe 'Altimeter mit TinyLily Mini und BMP180 Sensor') eingebaut war, stürzte ab und landete in einem Gebüsch, so dass der Höhenmesser und die aufgezeichneten Flugdaten gerettet werden konnten.

Eine Auswertung der Flugdaten ergab, dass AltiWR eine Höhe von 63 m ermittelt hatte, die Rakete aber tatsächlich 93 m hoch geflogen war. Da das Servo für den Fallschirm zu früh ausgelöst wurde, kam es in der Folge dann zum Absturz.



Schaut man sich die Kurve der vom Höhenmesser aufgezeichneten Flugdaten an, so sieht man, dass in der Aufstiegsphase zwei irreguläre Peaks auftreten, und zwar bei einer Höhe von 63 m und 74 m. Da haben wir also offenbar die Ursache!

Nun scheinen Irregularitäten des Luftdrucks in der Aufstiegsphase häufiger vorzukommen, sei es durch Böen oder was auch immer. Akzeptiert man das, so stellt sich die Frage, wie deren Auswirkungen vermieden werden können.

Ich habe bisher aus den Rohdaten bei jedem Takt einen Mittelwert über die letzten 5 aufeinanderfolgenden Werte gebildet und diesen statt der Rohdaten zur Gipfelerkennung verwendet. Offensichtlich ist dieses Verfahren aber nicht gut genug. Ich brauche daher ein besseres Verfahren zur Glättung der Höhenwerte, die sich aus den gemessenen Luftdruckwerten ergeben.

Bei der Suche bin ich dann im Netz u. a. auf Binomial- und Exponentialfilter gestoßen:

- Das binomiale digitale Filter
- Exponentielle Glättung

Ich habe mich daher an den PC gesetzt und ein Progrämmchen geschrieben, was auf die Rohdaten
die gleitende Mittelwertbildung (mein bisheriges Verfahren)
einfache und doppelte Binomialfilterung
einfache und doppelte Exponentialfilterung
anwendet.

Für das Binomialfilter wurden die Koeffizienten 1, 4, 6, 4, 1 verwendet.
Bei der Exponentialfilterung habe ich den in der Literatur üblichen Faktor alpha=0.3 genommen.
Doppelte Filterung heißt, dass auf die Ergebnisse der ersten Filterung noch einmal das gleiche Filterverfahren angewendet wird.

Die Formeln dafür sind:

mean = (height + height + height + height + height)/5;
binom1 = (height + 4 * height + 6 * height + 4 * height + height)/16;
binom2 = (binom1 + 4 * binom1 + 6 * binom1 + 4 * binom1 + binom1)/16;
alpha = 0.3;
exp1 = alpha * height + (1 - alpha)*exp1;
exp2 = alpha * exp1 + (1 - alpha)*exp2;

Im Ergebnis:
1. gleitende Mittelwertbildung und das einfache binomiale Filter wäre nicht ausreichend zur Glättung dieser Flugkurve
2. exponentielle Filterung zeigt das beste Ergebnis
3. exponentielle Filterung benötigt von allen Verfahren den geringsten Rechenaufwand



Hier noch der kritische Zeitraum etwas vergrößert:



Ich habe mich daher entschieden, AltiWR auf doppelte exponentielle Filterung umzustellen. Es ist aber klar, dass eine Filterung immer zu einer Verzögerung führt, was man den Kurven sehr gut entnehmen kann. Das ist bei der Ermittlung des Gipfels nicht so schlimm, da die Rakete in dieser Phase ohnehin wenig Höhenänderung aufweist. Da die Filterung Tiefpass-Charakter hat, wird auch der Gipfel als etwas geringer ermittelt, ist also im Ergebnis eine konservative Abschätzung.



Doppelte exponentielle Filterung wird im übrigen auch bei bestimmten Altimetern der Webseite rocket.payload.free.fr (von Boris du Reau) eingesetzt.

Gruß Achim

laminare necesse est!

Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten!
Oliver Arend

Administrator


Administrator

Oliver Arend

Registriert seit: Aug 2000

Wohnort: Great Falls, VA, USA

Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR

Beiträge: 8351

Status: Offline

Beitrag 7635792 [Alter Beitrag06. September 2015 um 23:54]

[Melden] Profil von Oliver Arend anzeigen    Oliver Arend eine private Nachricht schicken   Oliver Arend besitzt keine Homepage    Mehr Beiträge von Oliver Arend finden

Was Du suchst ist ein Kalman-Filter

http://home.wlu.edu/~levys/kalman_tutorial/

Da kannst Du die Geschwindigkeit mit in Deine Berechnungen miteinbeziehen und nicht bei "Abnahme Höhe" sondern bei "Geschwindigkeit Null" den Gipfelpunkt erkennen und ggf. den Fallschirm auslösen.

Oliver
Lschreyer

Grand Master of Rocketry

Lschreyer

Registriert seit: Nov 2006

Wohnort: Zeven

Verein: AGM, L3

Beiträge: 2035

Status: Offline

Beitrag 7635795 [Alter Beitrag07. September 2015 um 08:51]

[Melden] Profil von Lschreyer anzeigen    Lschreyer eine private Nachricht schicken   Lschreyer besitzt keine Homepage    Mehr Beiträge von Lschreyer finden

Genau, mit Kalmanfilter kann man solche Dinge glattbügeln.

Always keep the pointy side up!
AchimO

Poseidon

AchimO

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 1518

Status: Offline

Beitrag 7635796 [Alter Beitrag07. September 2015 um 11:34]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Oliver, danke für den Hinweis!

Ich habe mir schon gedacht, dass in diesem Zusammenhang das Stichwort Kalmán-Filter fallen würde und hatte mich damit auch etwas beschäftigt. Dazu hatte ich mir

Greg Czerniak's Website

und

Kalman Filter For Dummies

angesehen. Greg Czerniak sagt:

Kalman filters can help when four conditions are true:
1.You can get measurements of a situation at a constant rate.
2.The measurements have error that follows a bell curve.
3.You know the mathematics behind the situation.
4.You want an estimate of what's really happening.

Bedingungen 1,2 und 4 sind sicher erfüllt. aber mit 3 habe ich meine Schwierigkeiten:

Wenn eine Wasserrakete - sagen wir - 700 g wiegt und mit 1,5 l Wasser gefüllt wird, das sie dann in der Anfangsphase des Fluges verliert, habe ich mit dem mathematischen Modell der Rakete ein Problem, denn die Gewichtsänderung ist ja nicht zu vernachlässigen. Mit einfachen Formeln wie

s = 0.5*b*t^2

ist das ja dann nicht mehr zu modellieren, oder sehe ich das falsch?

Ich vermute mal, dass Kalmán-Filter vor allem auch bei Aussetzern und ähnlichen Problemen, wie z. B. Machdurchgängen, gute Dienste leisten.

AltiWR ist aber definitiv für Wasserraketen gedacht (ich brauche eine Möglichkeit zur Auslösung von Servos). Für Raucher gibt es ja eine große Auswahl an Altimetern, die ich nicht noch zu vermehren gedenke.

Gruß Achim

laminare necesse est!

Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten!
Oliver Arend

Administrator


Administrator

Oliver Arend

Registriert seit: Aug 2000

Wohnort: Great Falls, VA, USA

Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR

Beiträge: 8351

Status: Offline

Beitrag 7635797 [Alter Beitrag07. September 2015 um 11:56]

[Melden] Profil von Oliver Arend anzeigen    Oliver Arend eine private Nachricht schicken   Oliver Arend besitzt keine Homepage    Mehr Beiträge von Oliver Arend finden

Viel einfacher: Du hast im Kalman-Filter einen physikalischen Zustand Deines Systems mit zwei oder drei Größen, diese wären Höhe h, Geschwindigkeit v und ggf. noch Beschleunigung a (zu Beginn alles 0).

Von einem Zustand 0 zum nächsten 1 mit Zeitdifferenz t verhält sich das System ja grob folgendermaßen (gibt da noch bessere numerische Integrationsverfahren, aber wenn Dein Zeitschritt klein genug ist ist das egal):

h1 = h0 + t v0 + t^2/2 a0
v1 = v0 + t a0
a1 = a0

Dann kommen die Korrekturen durch Messung etc. dazu.

Louis wird hoffentlich auch noch was dazu sagen, der hat so was schließlich im Altimax umgesetzt. Ich bin nur Theoretiker ;-)

Oliver
thomasm

Epoxy-Meister

Registriert seit: Jun 2013

Wohnort: Mechernich

Verein: AGM TRA

Beiträge: 464

Status: Offline

Beitrag 7635798 [Alter Beitrag07. September 2015 um 13:56]

[Melden] Profil von thomasm anzeigen    thomasm eine private Nachricht schicken   thomasm besitzt keine Homepage    Mehr Beiträge von thomasm finden

Das Schultz paper hat quasi alles was man braucht:
http://home.earthlink.net/~david.schultz/rnd/2004/KalmanApogeeII.pdf

Ich kann dir heute Abend aber auch den code für den Arduino geben den ich benutze.

Du kannst dir auch den Code hiervon ansehen, ist auch für den Arduino:
http://rocket.payload.free.fr/

Altusmetrum kannst du dir auch noch ansehen, wobei ich den Code nicht verstehe, aber ich bin mir sicher er ist sehr elegant.
http://altusmetrum.org/
AchimO

Poseidon

AchimO

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 1518

Status: Offline

Beitrag 7635799 [Alter Beitrag07. September 2015 um 14:36]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Vielen Dank für die Hinweise!

Ich habe inzwischen mal mit meinen Werten und dem Code von payload.free.fr für das Kalmán-Filter gerechnet und die Werte verglichen:



Um das Verhalten bei einem Aussetzer anzusehen, habe ich mal 3 Werte auf 0 gesetzt:



Im Vergleich sieht die doppelte exponentielle Filterung gar nicht mal schlecht aus.

Schaue mir jetzt mal den Schultz und AltusMetrum an. AltusMetrum macht auf mich einen sehr professionellen Eindruck. Habe einen MicroPeak von denen, der an Größe und Gewicht auf diesem Gebiet wohl alles in den Schatten stellt. Muss ihn aber noch ausprobieren.

Gruß Achim

laminare necesse est!

Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten!
thomasm

Epoxy-Meister

Registriert seit: Jun 2013

Wohnort: Mechernich

Verein: AGM TRA

Beiträge: 464

Status: Offline

Beitrag 7635800 [Alter Beitrag07. September 2015 um 21:02]

[Melden] Profil von thomasm anzeigen    thomasm eine private Nachricht schicken   thomasm besitzt keine Homepage    Mehr Beiträge von thomasm finden

Mein einfacher Kalman Filter mit festem Gain sieht so aus:


void kalman() {
//prediction from model and last values
p_pred = p + dt * v + dt * dt * 0.5 * a;
v_pred = v + dt * a;
a_pred = a;
//correction of prediction by measurment
p = p_pred + gain * (measurement - p_pred);
v = v_pred + gain * (measurement - p_pred);
a = a_pred + gain * (measurement - p_pred);
}


Um den Kalman Gain zu berechnen, hab ich ein python script geschrieben was dem Schultz paper folgt.

Anhang: kalman.zip


Louis: Was mich intressieren würde, ist was du noch für Filterungen machts um unsinnige Werte auszuschließen. Und ob der Altimax einen festen Kalman Gain nutzt oder ob du den im Flug änderst.
Ich hab sowas eingebaut wie: Wenn die Änderung bedeutet, dass die Rakete Mach 20 fliegt verwerf den Messwert.

Ich hab auch rumexperimentiert mit Bedingungen welche die Geschwindigkeit der Rakete berücksichtigen, sowas wie wenn die Positionsänderung mehr als das 10 fache ist was man erwartet, nimm den Erwartungswert, das funktioniert aber nicht.
AchimO

Poseidon

AchimO

Registriert seit: Jul 2014

Wohnort: Berlin

Verein: AGM

Beiträge: 1518

Status: Offline

Beitrag 7635801 [Alter Beitrag07. September 2015 um 21:55]

[Melden] Profil von AchimO anzeigen    AchimO eine private Nachricht schicken   AchimO besitzt keine Homepage    Mehr Beiträge von AchimO finden

Danke, Thomas,

muss mich aber erst einmal mit Python beschäftigen; mir sind zwar schon etliche Programmiersprachen untergekommen, aber Python noch nicht: scheint gut für Matrizenrechnung geeignet.

Gruß Achim

laminare necesse est!

Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten!
thomasm

Epoxy-Meister

Registriert seit: Jun 2013

Wohnort: Mechernich

Verein: AGM TRA

Beiträge: 464

Status: Offline

Beitrag 7635802 [Alter Beitrag07. September 2015 um 22:00]

[Melden] Profil von thomasm anzeigen    thomasm eine private Nachricht schicken   thomasm besitzt keine Homepage    Mehr Beiträge von thomasm finden

Seiten (3): [1] 2 3 »
[Zurück zum Anfang]
Du kannst keine neue Antwort schreiben