Ok, jeżeli mówimy tylko o obecnym HW, to zgoda. Kalman nieliniowy bez żyroskopu mógłby działać słabo.arekp pisze:Wasze rozważania dotyczą głównie rozwiązań, które wymagałyby zmiany hardware'u, natomiast teraz, kiedy mam już trochę płytek i trochę Arecorderów polutowanych, mogę jedynie zmienić software.
Problem tego typu z filtrem Kalmana wynika z faktu, że do jego prawidłowego działania potrzebne są współczynniki wielkości szumu danych wejściowych. Ponieważ w naszym scenariuszu poziom szumu waha się od stosunkowo niewielkiego przy normalnym opadaniu, do bardzo dużego podczas wyzwalania pilota, nie jest możliwe osiągnięcie zadowalających rezultatów przy użyciu stałych współczynników szumu. Powinny się one zmieniać dynamicznie i do tego dokładnie wiemy, kiedy. Po prostu nie wykorzystujesz w tej chwili wszystkich dostępnych danych. Mianowicie skoro znasz moment zainicjowania ładunku pirotechnicznego, to należałoby w tym momencie ustawić współczynniki tak, aby odzwierciedlały spodziewany zwiększony poziom szumu. Lub jeszcze lepiej - poziom szumu można wyliczać w czasie rzeczywistym bezpośrednio z ujednoliconego poziomu szumu akcelerometru 3D, ponieważ to właśnie wibracje wpływają na błędy w odczytach wysokości. I to można by zrobić bez zmiany HW.arekp pisze:Skok ciśnienia jest chwilowy, ale zaburza Wskazania po filtrze Kalmana - wolny filtr Kalmana uwzględni ten skok ciśnienia jako zmianę wysokości i później będzie zawyżać lub zaniżać wyliczaną prędkość a szybszy filtr Kalmana i tak będzie uwzględniał te skoki, choć w mniejszym stopniu, ale jego wskazania będą falować
Alternatywnie, aby szybko sprawdzić powyższe bez konieczności żmudnego kodowania, proponuję wersję 'biedną': w momencie wyzwolenia spadochronu karmisz wejście Kalmana ostatnią wartością z wyjścia (a jeszcze lepiej przeliczoną np. trendem liniowym) i tak aż do momentu spodziewanego minięcia 'piku'.
Można też zastosować wstępny stopień filtru, polegający na całkowitym zignorowaniu pomiaru (wtedy tylko kopiujemy wyjście Kalmana na wejście, czyli tzw. no-observation), którego wartość świadczyłaby o osiągnięciu przez rakietę nierealnych przyspieszeń chwilowych (wyliczonych z ostatniej wyfiltrowanej prędkości oraz obecnego pomiaru). Do Kalmana wchodziłyby tylko realne próbki - w ten sposób współczynniki szumu mogłyby pozostać stałe. Nierealne przyspieszenie można zdefiniować jako wszystko powyżej maksymalnego ciągu silnika + 1g + margines (lecimy pionowo w dół na silniku, ale to chyba trochę zbyt ostrożnościowe:)).
Czy jesteś pewien, że to będzie lepsze niż filtr Kalmana? Zauważ że to, plus Twój licznik co 10ms stanowią filtr jako całość, o opóźnieniu ponad 1 sekunda. Dobrze ustawiony filtr Kalmana (z uwagą jak powyżej) nie powinien być gorszy w wytłumieniu tego piku, jednocześnie nie powinien być wolniejszy niż owa 1 sekunda. Inymi słowy trzeba się dobrze zastanowić, czy przypadkiem zmieniając metodę filtrowania + licznik nie jest tak, że mamy jedynie złudzenie, że jest lepiej. Obie metody mają do dyspozycji dokładnie te same dane wejściowe. Jest mała szansa, że filtr + licznik opracowany domowym sposobem będzie lepszy.arekp pisze:Dlatego też do awaryjnego wyzwalania spadochronu głównego będę wyliczał wysokość z niefiltrowanego ciśnienia, wyliczoną wysokość będę uśredniał prostym filtrem i z różnicy wysokości pomiędzy kolejnymi pomiarami będę wyliczał prędkość opadania rakiety.
Problem ze zmianą algorytmu jest taki, że obecny ma tę niewątpliwą zaletę, że działa w 'normalnych' przypadkach. Każda zmiana spowoduje, że zanim dopracuję się tę zmianę, niektóre 'normalne' przypadki przestaną działać. To jest spodziewane i tak jest zawsze. Dlatego jedyną możliwością dopracowania bez ryzyka utraty rakiety oraz w okolicznościach ograniczonej dostępności danych, jest przetestowanie zmian na danych symulowanych. Trzeba by napisać symulator, który generowałby dane z wirtualnych czujników dla zadanych etapów lotu, poziomu szumów oraz z zadanymi zdarzeniami i ich intensywnością.arekp pisze:Testowałem algorytm na danych z Bigosa i ostatniego lotu K1X i algorytm działa. Niestety nie mam za wiele danych z lotów, gdzie pilot nie zostałby wyzwolony prawidłowo a rakieta spadała zbyt szybko - jeśli ktoś ma takie dane, to proszę prześlijcie mi je.
Można by nawet dać studentowi na dyplom, bo przydałoby się niezależnie od przyszłej konstrukcji urządzenia.