Autor | Thema |
---|---|
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1518 Status: Offline |
Beitrag 7635783
, Filterung von Altimeter-Flugdaten
[05. September 2015 um 21:22]
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
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
[06. September 2015 um 23:54]
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 Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7635795
[07. September 2015 um 08:51]
Genau, mit Kalmanfilter kann man solche Dinge glattbügeln.
Always keep the pointy side up! |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1518 Status: Offline |
Beitrag 7635796
[07. September 2015 um 11:34]
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
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
[07. September 2015 um 11:56]
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
[07. September 2015 um 13:56]
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 Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1518 Status: Offline |
Beitrag 7635799
[07. September 2015 um 14:36]
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
[07. September 2015 um 21:02]
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 Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1518 Status: Offline |
Beitrag 7635801
[07. September 2015 um 21:55]
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
[07. September 2015 um 22:00]
Von David Schultz gibt es auch diverse Programme in C:
http://home.earthlink.net/~david.schultz/rnd/2004/v130.zip Ist von hier: http://home.earthlink.net/~david.schultz/rnd/2004/index.html |