Saturday 4 November 2017

Ruchoma średnia kalman


Średnie ruchome wygładzają szumy strumieni danych cenowych kosztem opóźnienia (opóźnienia) W dawnych czasach można było osiągnąć prędkość, kosztem zmniejszonego wygładzenia W dawnych czasach można było tylko wygładzić kosztem opóźnienia. wiele godzin marnujesz, starając się szybko i szybko uzyskać średnie ORAZ gładkie Pamiętaj, jak denerwujące jest obserwowanie rosnącej prędkości powoduje zwiększony hałas Pamiętaj, jak chcesz na niskie opóźnienie ORAZ niski poziom hałasu Masz dość pracy nad tym, jak zjeść ciasto I je zjeść Nie rozpaczaj, teraz rzeczy się zmieniły, możesz mieć swoje ciasto i możesz go jeść Precyzyjna średnia bez lagów w porównaniu do innych zaawansowanych modeli filtrowania Podstawowe średnie branżowe (filtry) ważona średnia krocząca jest szybsza niż wykładnicza, ale nie zapewnia dobrego wygładzania, kontrast wykładniczy ma doskonałe wygładzenie, ale ogromne ilości opóźnienia (Lag). Nowoczesne filtry technologiczne quothigh, choć ulepszone w starych podstawowych modelach, mają nieodłączne słabości. Niektóre z nich są obserwowane w filtrze JMA Jurika, a najgorsze z tych słabości jest przekroczone. Badania Jurika otwarcie przyznają, że mają ponadprzeciętne wyprzedzenie, które ma tendencję do wskazywania na jakąś formę algorytmu predykcyjnego pracującego nad jego kodem. Pamiętaj, że filtry mają za zadanie obserwować, co dzieje się teraz i w przeszłości. Przewidywanie, co stanie się dalej, jest niedozwoloną funkcją w zestawie narzędzi Precision Trading Systems, dane są tylko wygładzane i usuwane. Można powiedzieć, że trendy są dokładnie śledzone, zamiast mówić, w którą stronę pójść dalej, tak jak w przypadku tych nielegalnych algorytmów filtrowania typu. Precyzyjna średnia bezwzględna NIE stara się przewidzieć następnej wartości ceny. Średnia Hull jest uważana przez wielu za tak szybką i gładką jak JMA przez badania Jurik, ma dobrą prędkość i niskie opóźnienie. Problem z formułą zastosowaną w średniej Hull polega na tym, że jest ona bardzo uproszczona i prowadzi do zniekształceń cen, które mają słabą dokładność spowodowaną zbyt dużym obciążeniem (x 2) na najnowszych danych (podłoga (długość 2)), a następnie odjęcie starego dane, które prowadzą do poważnych problemów z przechwytywaniem, które w niektórych przypadkach są dużo odchyleniami standardowymi od rzeczywistych wartości. Średnia precyzja bezargumentowa ma przekroczenie ZERO. Poniższy schemat pokazuje ogromną różnicę prędkości na 30-dniowej PLA i 30-letniej średniej Hull. PLA była cztery bary przed średnią Hull na obu głównych punktach zwrotnych wskazanych na 5-minutowej mapie FT-SE100 Future (która jest 14 różnica w Lag). Jeśli handlowałeś średnimi na swoich punktach zwrotnych, aby uzyskać krótką cenę zamknięcia w tym przykładzie, PLA sygnalizował na 3977,5, a Hull był nieco później na 3937, tylko około 40.5 punktów lub w wartościach pieniężnych 405 na kontrakt. Długi sygnał na PLA wyniósł 3936 w porównaniu z 3 956,5 Hulls, co równa się oszczędności na 205 kontraktów z sygnałem PLA. Czy to ptak. Czy to samolot. Nie ma w nim Precyzyjnych Średnich Filtrów Bezaginowych, takich jak średnia VIDAYA autorstwa Tuscara Chande, które używają zmienności do zmiany długości mają inny rodzaj formuły, która zmienia ich długość, ale proces ten nie jest wykonywany z żadną logiką. Chociaż czasami mogą działać bardzo dobrze, może to również prowadzić do filtra, który może cierpieć zarówno z opóźnieniem, jak i przekroczeniem limitu czasu. Średnia z szeregu czasowego, która jest rzeczywiście bardzo szybką średnią, może zostać przemianowana na średnią quotovershooting, ponieważ ta niedokładność czyni ją nieprzydatną do jakiejkolwiek poważnej oceny danych do wykorzystania w handlu. Filtr Kalmana często pozostaje w tyle lub przeskakuje z cenników z powodu zbyt gorliwych algorytmów. Inne filtry wpływają na dynamikę cen, aby przewidzieć, co wydarzy się w następnym przedziale cenowym, i jest to również wadliwa strategia, ponieważ przeregulują one w przypadku odwrócenia wysokich odczytów pędu, pozostawiając filtr wysoko i sucho i milę od rzeczywistej aktywności cenowej . Precyzyjna średnia bezwzględna używa czystej i prostej logiki do decydowania o jej następnej wartości wyjściowej. Wielu znakomitych matematyków próbowało i nie stworzyło średnich wolnych od lagów, i generalnie powodem jest to, że ich inteligencja matematyczna nie jest poparta wysokim poziomem logiki zdroworozsądkowej. Precyzyjna średnia bezwzględna (PLA) jest zbudowana z czysto logicznych algorytmów przyczyn, które badają wiele różnych wartości, które są przechowywane w tablicach i wybierają, jaką wartość wysłać do wyjścia. Większa prędkość, wygładzanie i dokładność PLA sprawiają, że jest to doskonałe narzędzie do handlu akcjami, kontraktami terminowymi, walutami, obligacjami itp. Podobnie jak w przypadku wszystkich produktów opracowanych przez systemy Precision Trading, temat jest taki sam. napisane dla handlowców, BY THE TRADER. PLA Długość 14 i 50 na E-Mini przyszłość NasdaqHow Kalman Filtry Praca, część 1 To znaczy, po prostu pomnóż prawdopodobieństwo, że byłeś w kraju z prawdopodobieństwem znalezienia się w restauracji w tym kraju, biorąc pod uwagę, że byłeś już w kraju, w celu uzyskania nowego prawdopodobieństwa. (Ostatnia kolumna nie jest tak naprawdę prawdopodobieństwem, dopóki nie zostanie przeskalowana tak, że suma wynosi 1, ale tylko względne wartości mają znaczenie, więc jest to prawdopodobieństwo tak daleko, jak komukolwiek zależy.) Po kilku chwilach kelnerka przynosi ci sushi, więc zmniejszasz szanse na Tadżykistan i Paragwaj i odpowiednio zwiększają szanse na Japonię, Tajwan i takie miejsca, w których restauracje sushi są stosunkowo powszechne. Prob. of Sushi given Restaurant, Country Podnosisz pałeczki i próbujesz sushi, odkrywając, że jest wyśmienity. Japonia jest teraz zdecydowanie najbardziej prawdopodobnym miejscem, i choć nadal możliwe, że jesteś w Stanach Zjednoczonych, nie jest to prawie tak prawdopodobne (niestety dla USA). Prob. Dobrego Sushi Te niedobory prawd są trudne do odczytania z zerowymi zerami. Liczy się tylko względne prawdopodobieństwo, więc być może przeskalujesz ostatnią kolumnę o sumę całej kolumny. Teraz znowu jest to prawdopodobne i wygląda to mniej więcej tak: teraz, gdy jesteś prawie pewien, że jest to Japonia, twoja nowa lista miejsc w Japonii sprawdza, czy możesz ją zawęzić. Piszesz na Fukuoce, Osace, Nagoi, Hamamatsu, Tokio, Sendai, Sapporo, itd. Wszystkie są równie prawdopodobne (i może zachowają Tajwan, tak na wszelki wypadek). Teraz kelnerka przynosi unagi. Możesz uzyskać unagi w dowolnym miejscu, ale jest to dużo bardziej powszechne w Hamamatsu, więc zwiększasz szanse na Hamamatsu i nieznacznie zmniejszasz szanse wszędzie indziej. Kontynuując w ten sposób, możesz ostatecznie być w stanie przekonać się, że jesz w pysznej restauracji na Hamamatsu Station, a raczej losowego losowania. Nie ma nic szczególnie dziwnego w procesie, przez który przeszliście (poza tym, że mieliście tak dobre dane o restauracji) i wszyscy zgodzili się, że było to całkiem rozsądne. Zasadniczo był to również filtr cząstek stałych. metoda określania nieznanych rzeczy, takich jak lokalizacja, z pomiarów innych rzeczy, takich jak kuchnia, z wykorzystaniem różnych prawdopodobieństw dotyczących tego, co zaobserwowałeś w różnych hipotezach. W rzeczywistości jest to coś w rodzaju zautomatyzowanego zastosowania metody naukowej. isnt it Kiedy jest wykonywany jako część algorytmu, ten typ rzeczy nazywa się oszacowaniem stanu rekursywnego. Niestety tylko niewielka część inżynierów mechaników, inżynierów elektryków i informatyków otrzymuje formalne wykształcenie na ten temat, a jeszcze mniej rozwija intuicyjne zrozumienie procesu lub posiada wiedzę na temat praktycznego wdrożenia. Chociaż istnieje wiele dobrych książek na ten temat i szczegóły dotyczące zastosowania go do określonych problemów, ten artykuł przyjmie inne podejście. Koncentrujemy się na rozwijaniu: intuicji oceny stanu rekurencyjnego, szerokiej wiedzy na temat najsilniejszych i najbardziej ogólnych typów oraz dobrego pomysłu na szczegóły implementacji. Gdy już ma się dobrą podstawę dla tych rzeczy, znacznie łatwiej jest wyszukać specyficzne algorytmy w literaturze filtra, dostosować je, dostosować je do kodu, poprawić problemy i wyjaśnić wydajność innym. Interesujące jest to, że najbardziej intuicyjne formy rekursywnej estymacji dopiero ostatnio zyskują na popularności, więc zamierzali spojrzeć na ich historię całkowicie wstecz: zaczynając od najnowszych typów, takich jak filtry cząstek i pracując z powrotem w starożytną przeszłość (lata 60. XX wieku). przełom, który umożliwił algorytmom nawigacyjnym Apollo utrzymanie statku kosmicznego na kursie na Księżyc: filtr Kalmana. Docelowi odbiorcy to inżynierowie, naukowcy, twórcy i programiści, którzy muszą zaprojektować system, aby zrozumieć proces, a także inżynierowie systemów i szefowie zespołów, którzy potrzebują lepszego zrozumienia tego, co budują ich zespoły. Aby podejść do tematu, dobrze zacząć od stworzenia szkicu pomysłów na filtr. Następnie wypełnij szkic coraz większą ilością szczegółów. Pierwsza część może zająć kilka godzin, a druga część zajmie około połowy tego, w zależności od tego, jak głęboko ktoś chce czytać. Następnie są pewne dodatki do dodatkowych uwag dotyczących implementacji i ćwiczeń z tymi tematami. Każdy może podążać za podstawowymi ideami, ale mała teoria prawdopodobieństwa i podstawowa algebra liniowa pomogą nam podążać za matematyką i materiałem referencyjnym, gdy będziemy bardziej szczegółowi. Dobrze wskazać kilka dobrych zasobów po drodze. Dzięki temu zacznijmy. Cztery filtry dobrze tu prezentujące, wraz z kodem generującym wszystkie obrazy, można pobrać tutaj dla MATLAB. Filtry cząsteczkowe Filtry cząsteczkowe mogą być dość łatwe i istnieje około tylu form, ile jest problemów do rozwiązania. Przyjrzyj się prostemu rodzajowi filtra cząstek, zwanemu filtrem ładowania początkowego, aby uzyskać zrozumienie podstaw. Jedna iteracja filtra cząstek Cząsteczki filtrów działają w następujący sposób: Po pierwsze, pytamy, jakie rzeczy mogą się dziać, i jak duża jest każda rzecz. Następnie, dla każdego, co może się zdarzyć, czego oczekiwałbym, aby obserwować. Wtedy, jak to możliwe. każda rzecz, biorąc pod uwagę to, co teraz faktycznie zaobserwowałem. Powtarzamy. Załóżmy na przykład, że w przybliżeniu znamy pierwotną pozycję odbijanej piłki, ale nie wiemy zbyt wiele na temat prędkości. Pozwala stworzyć grupę piłek, które będą losowo rozproszone w miejscu, w którym myślimy, że prawdziwa kula jest z losowymi prędkościami. I powiedzmy, że o ile nam wiadomo, wszystkie są równie prawdopodobnymi kandydatami do prawdziwej pozycji i prędkości piłki (jej stanu). Ta lista hipotetycznych piłek jest podobna do listy krajów. Każdy hipotetyczny stan kulek nazywa się cząstką. a prawdopodobieństwo, że cząstka najlepiej reprezentuje stan rzeczywisty, jest masą cząstek. Tak więc, dla każdej cząstki mamy hipotetyczną pozycję i prędkość piłek, jak również miarę prawdopodobieństwa, od 0 do 1, że piłka opisuje prawdę, gdzie 1 jest kompletną pewnością, a 0 nie reprezentuje żadnej możliwości. Na przykład. Masa cząsteczkowa wyspy South Georgia wynosi dokładnie 0, biorąc pod uwagę, że nie ma restauracji sushi na wyspie Georgia Południowa (pomimo wszystkich ryb, które są tam konsumowane). Teraz, chwilę później, otrzymujemy pomiar pozycji piłki. W jaki sposób piłka dotarła na tę pozycję? Czy podniosła się i powoli się cofnęła? Czy spadła, odbijała się od podłogi i wróciła? Nie wiemy jeszcze. Obie ścieżki są równie prawdopodobne. Wiemy również, że pomiar nie jest doskonały, ma trochę hałasu. Przyjmijmy więc każdą hipotezę, rozpropaguj ją do czasu pomiaru i zobaczmy, jak dobrze przewiduje rzeczywisty pomiar. Pozwala wywołać (kapelusz) stan (dwa terminy pozycji i warunki prędkości) (i) tej cząstki w ostatnim czasie próby. i pozwala wywołać (kapelusz) stan w bieżącym czasie próbkowania. Używamy kapeluszy do oznaczania oszacowań i (k) do próby. Wiemy, jak działają piłki podskakujące, dzięki czemu możemy propagować od poprzedniego czasu do bieżącego czasu za pomocą funkcji propagacji. (fa). Aby zapoznać się z technikami symulacji używanymi w tego typu funkcjach propagacji, zobacz ldquoHow Simulations Workrdquo. To aktualizuje pozycję i prędkość dla każdej z cząstek (n), zaczynając od poprzedniej pozycji i prędkości oraz obliczając parabolę, którą piłka wytwarza z powodu grawitacji, gdy przecina się z podłogą, a trajektoria z podłogi z powrotem do góry itd. aż osiągnie aktualny czas. Funkcja propagacji jest zatem małą symulacją. Biorąc pod uwagę zaktualizowaną pozycję, przewidujemy, co poślubi zmierzyć dla każdej cząstki, używając znanej funkcji obserwacyjnej, (h). gdzie kapelusz oznacza przewidywany pomiar. aby pomóc nam odróżnić go od rzeczywistego pomiaru, (zk). Dla naszego problemu funkcja obserwacji po prostu zwraca pozycję piłki. Niektóre cząstki dość dobrze przewidują pomiar, a inne źle. Możemy wziąć różnicę między każdą nową pozycją piłki a pomiarem ((zk - kapelusz)) i powiedzieć, jakie są szanse na zobaczenie błędu pomiaru tak dużego, biorąc pod uwagę to, co wiemy o tym, jak głośne mogą być pomiary berdquo. Naprawdę złe prognozy mają niskie kursy, podczas gdy dobre prognozy będą miały wysokie szanse. Mamy więc prawdopodobieństwo błędu pomiaru dla każdej hipotetycznej kuli. Możemy pomnożyć wagę każdej cząstki przez to prawdopodobieństwo. W rezultacie cząsteczki, które najlepiej przewidują pomiar, osiągają najwyższą wagę. Pokażmy, że poprzez zacienianie trajektorii według ich nowych wag: (Zwróć uwagę, że po zrobieniu tego mnożenia suma wag nie będzie 1. Możemy renormalizować poprzez podzielenie wszystkich wag przez sumę wszystkich wag.) Zaktualizowane wagi dla hipotetycznych trajektorii Stosując te wagi, możemy obliczyć średnią ważoną wszystkich hipotetycznych kul. To może zapewnić najlepsze oszacowanie stanu (istnieje również wiele innych sposobów wykorzystania prawdopodobieństwa do obliczenia najlepszego oszacowania, przy czym średnia ważona jest najbardziej uproszczona). W tym momencie mamy zaktualizowaną ocenę stanu i związaną z nią niepewność. tutaj reprezentowana jako skończona kolekcja cząstek. Moglibyśmy teraz poczekać na kolejny pomiar i ponownie przeprowadzić ten proces. Śledź każdą kulę do czasu pomiaru, obliczyć prawdopodobieństwo błędu między pomiarem a propagowaną kulą, i zaktualizuj to prawdopodobieństwo piłek. A więc przepuść jeszcze jeden cykl. Kolejna iteracja, dodawanie resamplingu i regularyzacja Nowy pomiar i propagowane cząstki Niektóre cząsteczki dobrze przewidują nowy pomiar, a niektóre już nie przewidują. Zaktualizuj prawdopodobieństwo każdego z nich. Zauważ, że niektóre z naszych hipotetycznych kul są teraz bezużyteczne. W żaden sposób nie reprezentują prawdy. Poza tym wszystkie zaczynają się rozprzestrzeniać dość daleko. Ostatecznie wszystko będzie zbyt daleko od prawdy, a nasz filtr się rozpadnie. Kluczem, który sprawia, że ​​filtr cząstek stałych działa, jest to, że zestaw cząsteczek jest od nowa przeliczany co jakiś czas (lub nawet po każdej aktualizacji), tak jak wtedy, gdy zmienialiśmy listę potencjalnie światowych lokalizacji na dokładniejszą listę lokalizacji w Japonii. Istnieje wiele sposobów, aby to zrobić, ale jest prosty: stwórz nowy zestaw cząstek, losowo wybierając cząstki z bieżącego zestawu zgodnie z masą cząstek. Zasadniczo cząstki o wadze 0,04 będą rysowane dwukrotnie częściej niż cząstki o wadze 0,02. Po utworzeniu nowego zestawu cząsteczek, ustaw wszystkie wagi z powrotem na 1N. Rozproszenie niepewności jest teraz reprezentowane w obecności różnych cząstek, a nie ciężaru cząsteczek. Dla jasności: w tym punkcie będzie wiele powielonych cząstek. Oblicz kowariancję próbki nowego zestawu cząstek lub inną miarę ich rozproszenia. Kowariancja próbki jest szczególnie łatwa: Pk frac sumin (hat - bar) (hat - bar) T gdzie (bar) jest średnią wszystkich cząstek, a (T) oznacza ldquotransposerdquo. Utwórz wiązkę losowych losowań Gaussa z matrycy macierzy kowariancji (patrz dodatek). Pomnóż te losowania przez niewielki parametr strojenia, dając zestaw perturbacji. Dodaj perturbację do każdej cząstki. Tworzy to zestaw nowych cząstek rozproszonych wokół obszarów o wysokim prawdopodobieństwie w przestrzeni stanów. Pierwsze dwa kroki nazywane są resamplingiem. a dwie ostatnie nazywają regularyzacją cząstek. Zróbmy to dla bieżącego zestawu cząsteczek: Zarys filtra Bootstrap Możemy teraz kontynuować z następnym pomiarem, a następnie następnym i następnym, trzymając się procesu, który ustawiliśmy: Aby zobaczyć (względnie) prosty filtr ładowania początkowego użyte w tym przykładzie, kliknij tutaj lub pobierz przykładowe pliki tutaj. Propaguj cząstki. Określ, jak prawdopodobne jest, że każda cząstka otrzyma nowy pomiar. Zaktualizuj wagi (i renormalizuj tak, aby suma wszystkich wag była 1). Oblicz oszacowanie stanu, np. ze średnią ważoną. W przypadku ponownego próbkowania cząstek, losowo wybierz cząstki zgodnie z ich masą, a następnie przenieś ciężarki na 1N. Jeśli tym razem uregulujesz ilość cząsteczek, zakłóć nowy zestaw cząsteczek za pomocą małych losowych losowań. Wracając do przykładu z kulką, oto wynik zbieżny z biegiem czasu, z niepewnością wyraźnie skupioną wokół prawdziwego stanu (niebieskiego): Animacja cząstek, pomiarów i prawdy w czasie. Po dziesięciu sekundach: Probabilistyczna robotyka autorstwa Thrun, Burgard i Fox zawiera materiał podstawowy dla filtrów cząstek i filtrów sigma-point i omawia ich zastosowanie w lokalizowaniu robotów (problem multimodalny, w którym filtry cząstek okazały się przydatne, nawet w aplikacjach wbudowanych ). Założenia, zalety i wady Co jest potrzebne, aby wszystko to zadziałało Kilka prostych rzeczy: Możesz w przybliżeniu opisać, jak zmieniają się stany w czasie. Możesz w przybliżeniu określić prawdopodobieństwo wystąpienia hipotetycznego błędu pomiaru. Zalety filtrowania cząstek są dość jasne: można oszacować grubo stan z bardzo małą ilością pracy teoretycznej i wieloma różnymi typami problemów. Niepewność (zbiór cząsteczek) można nawet rozłożyć na wiele obszarów przestrzeni stanów, reprezentując multimodalny rozkład prawdopodobieństwa. Ponadto proces filtrowania cząstek można łatwo dostosować do różnych problemów (np. Kiedy i jak ponownie próbkować, jak ocenić błąd pomiaru, jak pozycjonować cząstki w pierwszej kolejności). Dzięki temu filtrowanie cząstek jest elastyczne i ogólnie użyteczne. Cząsteczki do dystrybucji multimodalnej, wyraźnie skupiające się wokół trzech obszarów o dużym prawdopodobieństwie w przestrzeni stanów Wady są również całkiem jasne: Filtry cząstek zwykle wymagają dużej liczby cząstek, co może wymagać znacznego czasu pracy. Nie jest niczym niezwykłym, że nawet najprostszy filtr cząstek stałych wykorzystuje 1000 cząstek, co wymaga 1000 symulacji na pomiar. Niezbędna liczba cząstek staje się ogromna wraz ze wzrostem wymiaru państwa. (Nasz problem przyniósłby znaczne korzyści z 1000 cząstek, ale trudniej byłoby zrozumieć wykresy z tak dużą liczbą cząsteczek.) Reprezentowanie niepewności jako zestawu cząstek i ciężarów mdash dyskretny rozkład prawdopodobieństwa mdash oznacza, że ​​najlepsze oszacowanie stanu jest zwykle dość grube, a więc filtry cząstek działają słabo w przypadku problemów wymagających dużej dokładności. Gdy wymagana jest lepsza wydajność, filtry cząstek muszą często być znacząco dopasowane do każdego indywidualnego problemu oszacowania stanu, a to może zająć dużo czasu, między innymi dlatego, że testowanie wymaga jednego uruchomienia filtra, co samo może zająć dużo czasu. Z tego samego powodu trudno znaleźć przydatny filtr cząstek stałych ogólnego zastosowania, chociaż filtr ładowania początkowego jest odpowiedni dla prostych problemów. Bonus. Filtry cząstek są bardzo podobne do algorytmów genetycznych, ponieważ można je szybko połączyć i często działają wystarczająco dobrze, biorąc pod uwagę długi czas działania. W rzeczywistości filtr cząstek jest zasadniczo algorytmem genetycznym, w którym każda cząstka jest osobnikiem w populacji, sprawność jest stopniem, w którym cząstka przewiduje obserwację, a podstawową formą prokreacji jest mutacja. Filtry cząsteczkowe zyskują na popularności dopiero stosunkowo niedawno dzięki temu, że moc obliczeniowa i przetwarzanie rozproszone są teraz tak tanie i łatwe w użyciu. Ponadto istnieje wiele nowych technik filtrów cząstek stałych, które mogą skracać czas pracy i zwiększać dokładność. Jednak w przypadku aplikacji wymagających szybkości zazwyczaj potrzebujemy innej architektury filtrowania. Niepewność filtra Sigma-Point jako macierzy kowariancji W filtrach sigma-point (zwanych także filtrami bezzapachowymi), nie reprezentujemy niepewności z dużą ilością rozproszonych cząstek, ale zamiast tego przyjmujemy, że niepewność ma rozkład Gaussa (normalny) i jest wyśrodkowany na podstawie bieżącego najlepszego oszacowania: użycie macierzy kowariancji, pokazanej jako granica 3sigma, w porównaniu z cząstkami Możemy zatem reprezentować niepewność za pomocą macierzy kowariancji, jak obliczono dla cząstek powyżej. Wizualizacja kowariancji jako elipsy wokół estymacji stanu, gdzie elipsa jest narysowana na granicy 3sigma (rzeczywisty stan znajduje się zatem wewnątrz tej elipsy około 99,7 czasu). 1000 cząstek jest narysowanych tylko dla porównania. Wektory własne macierzy kowariancji są głównymi osiami elipsoidy, a pierwiastki kwadratowe wartości własnych są długościami półosie elipsoidy 1smigowej wzdłuż odpowiednich osi głównych. Z tego możemy zbudować odpowiednie elipsy w celu wizualizacji. Rozmnażanie Kiedy pojawia się nowy pomiar, należy propagować tę niepewność do czasu pomiaru. Jak to zrobić, że filtry punktów Sigma robią to przez umieszczenie kilku punktów sigma wokół bieżącego oszacowania. Punkty Sigma są takie same jak cząsteczki, ale jesteśmy szczególnie skoncentrowani na tym, gdzie je umieszczamy i nie musimy śledzić poszczególnych wag. Punkty sigma będą siedzieć na głównych osiach niepewności elipsoidy wokół aktualnego oszacowania (zwykle o wiele mniejszej elipsy niż ta, którą narysowaliśmy). Zauważ, że patrzyliśmy tylko na dwa wymiary problemu, istnieją również punkty sigma w dwóch wymiarach prędkości, a także w wymiarach szumu, które dobrze sięgają poniżej. Szacunek z ostatniej próbki, (kapelusz) i każdego punktu sigma, (kapelusz), są następnie propagowane do przodu do czasu nowego pomiaru. Nowy pomiar i propagowane punkty sigma (znak plus oznacza, że ​​oszacowanie zostało skorygowane za pomocą pomiarów dostępnych w czasie pokrywającym to bardziej poniżej). Podobnie jak w przypadku filtrów cząstek, punkty sigma mają tendencję do rozprzestrzeniania się (niepewność zwykle rośnie) podczas propagacji . Podobnie jak w przypadku filtrów cząsteczkowych, możemy obliczyć nowy szacunek stanu jako średnią ważoną punktów sigma. Podobnie jak poprzednio, funkcja propagacji jest następująca: ale jest tu coś nowego: dodaliśmy (q), które reprezentuje nieznane szumy procesu mdash, które wpływają na propagację, jak na przykład przypadkowe przyspieszenie spowodowane zmianami wiatru. Jaką wartość byśmy na to wykorzystali Tak jak mamy punkty sigma rozłożone w przestrzeni stanów, tak samo punkty sigma rozchodzą się w przestrzeni szumu procesowego. Tak więc, jeśli istnieją 3 oddzielne rzeczy, które losowo wpływają na propagację, wówczas (q) jest trójwymiarowym wektorem. W filtrach sigma-punktowych zakłada się, że szum procesu jest Gaussa, a więc niepewność określona jest jako macierz kowariancji (Q). Nawet jeśli nie jest to Gaussian, jest to zazwyczaj dobre przybliżenie dla każdego rozkładu unimodalnego. Punkty sigma w przestrzeni szumu procesowego są więc jak punkty sigma w przestrzeni stanu, a razem wzięte to po prostu duży zbiór punktów sigma. Po obliczeniu punktów sigma i ich propagacji obliczamy średni przewidywany stan jako średnią ważoną: gdzie (hat -) jest punktem sigmaidddddd sigma. Wszystkie punkty sigma używają tej samej wagi (W), z wyjątkiem punktu środkowego, który zwykle używa większego (W0), ponieważ ufamy temu bardziej. Teraz mamy najlepszą prognozę stanu na próbce (k), i oznaczamy ją znakiem minus oznaczającym ldquobefore correctionrdquo z nowym pomiarem lub a priori. Możemy następnie obliczyć kowariancję próbki wokół tego nowego oszacowania, dając kowariancję przewidywanego stanu (ponownie, punkt środkowy ma większą wagę, (Wc), niż inne, ale idea jest taka sama). Teraz mamy pojęcie o tym, jaki jest stan, kiedy pomiar się pojawia, a także niepewność związana z naszą prognozą. Korekta szacunków Teraz oczywiście musimy użyć informacji pomiarowych, aby w jakiś sposób skorygować oszacowanie stanu i kowariancję. Tak jak mamy przewidywany stan dla każdego punktu sigma, (hat -), i ogólny przewidywany stan (hat - k), dokonujemy ogólnego przewidywanego pomiaru, (hat k), wykonując prognozę dla każdego punktu sigma: ( gdzie (r) jest szumem pomiarowym z kowariancją (R), który jest analogiczny do szumu procesowego), a następnie oblicza średnią ważoną: Dobrze wykorzystaj ten przewidywany pomiar, aby skorygować przewidywany stan w następujący sposób: yk zk - hat hat hat hat - k K yk, gdzie znak plus oznacza kolejne korekty pomiarurdquo lub a posteriori. Ze względów historycznych (yk) nazywany jest wektorem innowacji. błąd przewidywania pomiaru lub pozostały. Jest to wektor wskazujący od naszego przewidywanego pomiaru do rzeczywistego pomiaru, a (K) określa, w jaki sposób wektor w przestrzeni pomiarowej odwzorowuje korektę w przestrzeni stanów. Dla tych, którzy nie znają Aesopsa, chłopca, który płakał, ldquoWolfrdquo: Chłopiec oglądał owce wysoko na szczycie urwiska, z widokiem na wioskę. Znudził się i krzyknął do wioski, wilkołak Wolfrdquo. Wieśniacy podbiegli żmudną ścieżką z widłami w ręku tylko po to, by odkryć śmiejącego się chłopca i wilka w zasięgu wzroku. Tydzień później chłopiec spróbował tej samej sztuczki, a niektórzy wieśniacy wciąż przybywali. Tydzień później chłopiec zobaczył bardzo zbliżającą się stado wilków. - płakał ldquoWolf Wolfrdquo, ale mieszkańcy wioski go ignorowali. ldquoWolfrdquo ponownie, ale na próżno. Kiedy tej nocy chłopiec nie przywiózł owcy do domu, wieśniacy ruszyli na poszukiwania. Zasmucono ich, gdy okazało się, że ich stado zostało zjedzone, a chłopiec zaginął. Morał tej historii polega na tym, że ludzie aktualizują swoje wewnętrzne prawdopodobieństwa jedynie niewielkimi kwotami, gdy pojawiają się nowe informacje z głośnego źródła. Pomyślmy o pewnych pożądanych właściwościach dla (K). Gdyby nasza wiedza na temat stanu była już naprawdę dobra, a pomiary były tak hałaśliwe, że nie były aż tak użyteczne, to (K) powinno być małe mdash, prawdopodobnie nie chcemy zbyt dużej korekty prognozy. Na przykład, jeśli ktoś płacze, ldquoWolfrdquo, ale ten facet zawsze płacze wilkiem, a nobodys widział tu wilka od wieków, to go ignorujesz, a przynajmniej go głównie ignorujesz. Z drugiej strony, gdyby nasza wiedza na temat stanu była dość zła, a pomiary były znane jako całkiem dobre (wilki są często tutaj widywane, a facet, który płakał wilk, ma zazwyczaj rację co do tego typu rzeczy), następnie śr. chcesz ufać pomiarom o wiele więcej. W takim przypadku, chcemy mieć (K) duże (nie mogliśmy przewidzieć, że jest wilk, ale wydaje się, że jest to teraz jeden). Wracając do matematyki, przedstawiamy związek pomiędzy niepewnością w stanie (jest tam wilk) a błędem pomiaru (ktoś woła błędnie wilka) z macierzą kowariancji (P). Reprezentujemy niepewność błędu pomiaru (ktoś błędnie woła wilka) z inną macierzą kowariancji (P). Jeśli byli naprawdę pewni, że jest wilk lub nie jest on (P), będzie on niewielki. Jeśli nie ma żartów w pobliżu, (P) będzie również mały, ale nie mniejszy niż nasza podstawowa niepewność, czy jest wilkiem w pobliżu czy nie. Jeśli są dowcipy o, to (P) będzie duże mdash wiele błędów. Obliczyliśmy je jako ważone kowariancje próbki, podobne do tego, co zrobiliśmy dla filtra cząstek. Wracając do odbijającej się kulki, naszym pomiarem jest pozycja piłki, więc możemy narysować zarówno (P), jak i (P) dla błędu pozycji na tym samym wykresie: kowariancja stan-innowacja i kowariancja innowacyjna. Używając tych macierzy kowariancji, spróbujmy prosty stosunek: niepewność w naszej prognozie ((hat - k) i (hat k)) niepewność w naszym przewidywanym błędzie pomiarowym ((yk zk - hat k)), w sensie macierzowym: Okazuje się, że ten ldquoratiordquo jest naprawdę dobry wybór. W przypadku systemów liniowych generuje on oszacowanie z ogólnie najmniejszym kwadratem błędu. Nazywa się to zyskiem Kalmana. Zwróć uwagę, że w naszym przypadku elipsoidy dla (P) i (P) są dość blisko siebie. Oznacza to, że mamy dużo niepewności co do miejsca, w którym uderzy piłka, i mamy trochę więcej niepewności co do tego, co dobrze mierzyć. Ponieważ zysk Kalmana jest podobny do współczynnika, a nasze warunki ldquonumeratorrdquo i ldquodenominatorrdquo są dość blisko siebie, nasz zysk będzie zbliżony do macierzy tożsamości dla części pozycji stanu. Odpowiedni czynnik zaktualizuje część prędkości w stanie. Rzeczywiste wzmocnienie Kalmana dla tego przykładu to: gdzie dwa terminy pozycji są górną częścią stanu, a dwa terminy prędkości są na dole. Oznacza to, że aktualizacja będzie największą różnicą (0,8) od przewidywanej pozycji do mierzonej pozycji, a odpowiednio, prędkość zwiększy się w tym samym kierunku (1.2). Mamy teraz ostateczny stan oszacowania bieżącego pomiaru: Korekta kowariancji nie została jeszcze wykonana. Korekta wpływa również na niepewność w naszym nowym oszacowaniu i nie zaktualizowaliśmy punktów sigma, więc nie przedstawiliśmy, w jaki sposób korekta zmniejsza naszą niepewność. Możemy to wyjaśnić, korygując również punkty sigma, w ten sam sposób, w jaki poprawiliśmy stan. Następnie możemy obliczyć nową macierz kowariancji jako próbną kowariancję skorygowanych punktów sigma (Pk). Nie ma jednak potrzeby dosłownej korekty każdego punktu sigma, ponieważ definicja wzmocnienia Kalmana daje szybszą odpowiedź: Pk Pk - K Rk KT, gdzie (Rk) jest kowariancją błędu pomiaru, taką jaką możemy mieć od arkusz specyfikacji dla naszych czujników położenia. Nie sprawdzamy tutaj tego dowodu, ale możemy całkiem dobrze zinterpretować wynik: zysk Kalmana określa, ile szumu pomiarowego możemy odjąć od propagowanej macierzy kowariancji. Przypomnijmy, że gdyby szum pomiarowy był duży, wówczas (K) byłby mały (szum pomiarowy jest w ldquodenominatorrdquo), a zatem bardzo niewiele szumu pomiarowego byłoby odjęte. Jeżeli szum pomiarowy byłby mały, wówczas (K) byłby większy, a śrubi odejmowałby większą część (mniejszego) szumu pomiarowego. Rezultatem jest to, że właściwa ilość (R) jest usuwana z czasem. Oznacza to, że duże zyski Kalmana odejmują więcej, pozostawiając małą macierz kowariancji, która odzwierciedla bardziej pewność w oszacowaniu. Oto wyniki. Zwróć uwagę, że granica 3sigma jest mniejsza niż dla naszego początkowego oszacowania. To kończy jeden cykl filtra sigma-point Kiedy pojawia się nowy pomiar, możemy zrobić to ponownie. Przechodząc do przodu 10 sekund, oto wyniki: Wyniki z symulacji 10s Spójrz, jak niepewność w elemencie góra-dół staje się naprawdę mała na szczycie odbicia, ponieważ wiemy, że piłka zwolni tam, podczas gdy niepewność w lewy-prawy element jest całkiem niezmienny do końca, ponieważ prędkość w prawo nie zmienia się. Aby zobaczyć filtr sigma-point używany w tym przykładzie, kliknij tutaj lub pobierz przykładowe pliki tutaj. Pod koniec oszacowanie jest dobrze dopasowane do prawdy, pomimo naprawdę okropnych pomiarów. W rzeczywistości pomiary dla tego przykładu były faktycznie gorsze niż te stosowane w filtrze cząstek, a jednak dokładność jest wyraźnie lepsza. dzięki temu, że cząstki tworzą grubą reprezentację rozkładu, podczas gdy filtry punktu sigma są ładne i gładkie. Zarys filtru Sigma-Point Filtrowanie Kalman i sieci neuronowe dostarcza doskonałych informacji o bezzapachowym filtrze Kalmana (filtr punktowy) i jest często cytowany w literaturze. Chociaż odpowiednia sekcja jest krótka, zawiera wiele praktycznych form, z przystępną dyskusją i bardzo dobrym pseudokodami. Ustaw początkowe punkty sigma z ostatniej oceny stanu i macierzy kowariancji. Potrzebujemy dodatniego i ujemnego punktu sigma dla każdego wymiaru stanu, dla każdego wymiaru szumu procesu i dla każdego wymiaru szumu pomiarowego plus 1 więcej dla środkowego punktu sigma. Propaguj każdy z punktów sigma do czasu nowego pomiaru. Utwórz przewidywany pomiar dla każdego punktu sigma, w tym szumu czujnika. Użyj ważoną sumę punktów sigma jako średni przewidywany stan i średni przewidywany pomiar. Oblicz kowariancję próbki między propagowanymi punktami sigma wokół stanu średniej i przewidywanych pomiarów dotyczących średniego przewidywanego pomiaru (P). Oblicz kowariancję próbki błędów pomiarowych na podstawie średniego pomiaru (P). Oblicz zysk Kalmana, (K). Popraw macierz oszacowania stanu i kowariancji. Założenia, zalety i wady Gdy różne źródła niepewności (poprzednia niepewność, szum procesu i szum pomiarowy) są jednomodalne i nieskorelowane, filtry sigma-punktowe są potężną opcją. Niektóre zalety: w swoich założeniach są one na ogół dokładniejsze niż filtry cząstek, ponieważ nie opierają się na losowych cząstkach. Są daleko, znacznie szybciej niż filtry cząstek. Kiedy filtr cząstek może potrzebować 1000 punktów, filtr punktu sigma może potrzebować tylko 9 lub więcej. Ich założenia dotyczą wielu różnych realistycznych problemów, a ustawienie filtru punktowego wymaga jedynie zdefiniowania funkcji propagacji, funkcji pomiarowej, kowariancji szumu procesowego i kowariancji szumu pomiarowego, z których wszystkie są niezbędne również dla filtrów cząstek stałych. Istnieją standardowe formularze dla filtrów sigma-point, więc stosunkowo łatwo jest znaleźć dobre odniesienie w książce lub dzienniku. Możemy jednak wymienić kilka wad. Nieparzyste problemy mogą powodować, że filtr punktu sigma będzie równomiernie rozłożony. Na przykład w naszym problemie z piłką, jeśli krok czasu byłby większy, punkty sigma stałyby się bardzo jednoznaczne na jednym lub dwóch odbiciach i mogą skutkować macierzami macierzy kowariancji, które nie mają sensu. Trudno tego uniknąć, podczas gdy filtry cząstek nie miałyby tego problemu. Chociaż są one znacznie szybsze niż filtry cząstek, są również znacznie wolniejsze niż rozszerzone filtry Kalmana, do których w mgnieniu oka dojdzie. Interlude: Oczekiwanie i kowariancja Będą bardzo nieformalne z teorią prawdopodobieństwa w całym tym artykule, aby skupić się na pomysłach wysokiego szczebla. Poniżej przedstawiamy kilka pomysłów, które są przydatne zarówno w praktyce, jak i w zrozumieniu filtrów. Before we move on to the next filter, lets take a moment to review some probability theory that will help out. First is the expectation operator. If (a) is some random number, its expected value, (E(a)), is its mean, which we might call (bar) for brevity. So, if (a) represents rolls of a 6-sided die, then the expected value is 3.5, despite that we cant actually roll a 3.5. The second important idea is covariance. We looked at sample covariance above, where we used a bunch of points to calculate a covariance, but now well talk about the idea of covariance. The covariance of (a), lets say (P ), is: When (a) is a scalar, theres no ldquoco-rdquo in there its just called variance : If we call (a - bar) the error or residual. then the above tells us that the variance is simply the mean squared error of (a) about its mean. Further, the standard deviation is the square root of the variance: and so the standard deviation is also the square root of the mean squared error, sometimes called root-mean-square (RMS) error. If (b) represents rolls from a totally different die, and were rolling (a) and (b) together, then whats the covariance between (a) and (b), (P E( (a - bar) (b - bar )T )) Sometimes (a - 3.5) would be positive and sometimes negative, and likewise for (b - 3.5). Their product would be sometimes positive and sometimes negative, and averaging a bunch of these would come to 0, because the rolls are uncorrelated. That is, if (a) and (b) are uncorrelated, their covariance is 0. Nothing much is different when we upgrade from a random number to a random vector. Lets consider a two-element vector (c begin a b end T), where (a) and (b) are the same dice rolls as above. When the elements of (c) are correlated, some of those off-diagonal terms will be non-zero. For instance, lets reassign (b) so that (b 2 a 1). bar equiv E(b) E( 2 a 1 ) We can move the factor of 2 and the added 1 outside of the expectation: bar 2 E(a) 1 2 bar 1 Now for the variance part: b - bar 2 a 1 - 2 bar - 1 2 (a - bar) The variance of (b) is now: and the covariance between (a) and (b) is: Of course, (P P ), and so we would have: If we revisit the sample covariance calculation for a moment: Note that, when the mean is assumed known, we generally use (n) in the denominator when calculating the sample covariance, but when we average the samples to approximate the mean in order to subtract it to obtain the residuals, then we use (n-1) in the denominator, due to the fact that the average is probably a little biased. where (bar ) is the mean of (c), its clear that were simply averaging the residuals of the data points to approximate the true covariance. When (c) has a Gaussian (normal) distribution, we express this using the mean and covariance as: (c sim N(bar , P )). Note that, by definition, the diagonals must be greater than or equal to zero. Its not possible for the expected value of a squared random number to be negative (at least, for real random numbers, which is all we care about). If we were ever to see a negative value on a diagonal in a covariance matrix, we would know that something bad had happened in constructing that matrix. This becomes a real issue in filters, which well talk about in the implementation section. We now have plenty of probability theory to continue to the next filter. The Extended Kalman Filter At some point in the 60s, the United States sent some humans to the moon and returned them safely to the earth. The author didnt have the pleasure of being alive to witness it, but according to the literature on the subject, this was super hard . One of the difficult parts was knowing how to correct the trajectory on the way to the moon, and the program sought a self-contained way to determine the spacecrafts position relative to its nominal trajectory so that the crew could carry out course corrections. This meant combining prior beliefs about position and velocity with imperfect measurements to update the estimated position and velocity (as well as the uncertainty related to position and velocity) in real time, with the help of a digital computer. At the outset, however, no known techniques were fast or compact enough for a computer that could fit in the spacecraft. In order to create an accurate, fast, stable, and computer-friendly algorithm, the engineers and mathematicians in and around the Apollo program created the extended Kalman filter, which survives to this day as the go-to state estimator for a huge variety of problems. Extended Kalman filters (EKFs) can be extremely fast, but that speed comes with a price: two more assumptions on top of those made by the sigma-point filter, plus a little pencil-and-paper work. The first is that the propagation and measurement functions are always differentiable (they have a smooth slope at all times). Note that this isnt true for our bouncing ball example mdash whats the slope of the trajectory during the bounce It points down and then suddenly up again. So, an EKF wont work on the bouncing ball problem (We could use it between the bounces though.) The second assumption is that the uncertainty stays centered on the state estimate during propagation. Remember in the sigma-point filter, we propagated each point separately, and then calculated a sample covariance at the end. That sample covariance was not necessarily still centered on the middle sigma point EKFs, however, assume that it would be. This means that EKFs dont capture the nonlinearities of the propagation and measurement functions quite as well as sigma-point filters. Its part of the cost we pay for speed. The uncertainty is assumed to stay centered on the estimate during propagation. These assumptions are often acceptable even when not rigidly true, and this is one of the central themes in Kalman filtering: the assumptions are never rigidly true, but are often close enough to be useful. Instead of trying to stay with the bouncing ball example, lets pick a more interesting example for the discussion of extended Kalman filters. It may be that, some day soon, when we order a small, light thing online, a little aircraft will spin up at a nearby distribution warehouse minutes later and fly it to our house, dropping it on a tiny parachute aimed approximately at our doorstep. Now when we wake up to find were out of coffee filters, we can have them before we finish the morning jog. (The inclusion of the parachute is just to make sure nobody takes this example too seriously, and, really, why wouldnt we take the occassion to go to the neighborhood espresso shop) So, our task will be to create a filter to watch the package go from the aircrafts location to the target drop location. For measurements, well again use position so that the plots will be easy to read. Sample trajectory of dropped package. Before we begin, lets review some of the relevant symbols weve seen so far: Propagation and Prediction Corrected estimate and covariance for this sample Lets also take a quick look at the equations for one iteration of the extended Kalman filter, just to see what were getting into (theres no need to understand them just yet): This is often presented as either a recipe or as part of a rigid proof, and neither is very helpful for building intuition. Lets take it apart and see what we can do with it. Like all of the filters were discussing, it starts with propagation. Propagation Extended Kalman filters, like sigma-point filters, represent uncertainty with a covariance matrix, but EKFs dont rely on sigma points in order to propagate that uncertainty. In fact, the propagation function is only used once: to propagate the last estimate to the time of the current measurement. (The little plus sign in (hat ) means that it was the corrected estimate at (k-1), continuing the theme that (-) is used for predicted values and () for corrected values. So, the previous corrected state estimate is used to predict the current state.) Also, we assume that the truth, (x ), updates using the same function, plus some random process noise, (q sim N(0, Q)) (ldquoa random draw from a normal distribution with zero mean and covariance (Q)rdquo), that represents random fluctations in the air that push the falling package around: Without sigma points, how do we propagate the covariance, (P ), to sample (k) Since (f) is differentiable, we can calculate its Jacobian mdash its ldquosloperdquo, in a matrix sense mdash and use that to propagate the covariance matrix directly. Lets see how. Just like the slope of a one-dimensional function of (x) is the derivative of the function evaluated at some value of (x), the Jacobian matrix of the propagation function is the partial derivative of each element of the propagation function with respect to (wrt) each element of the state, evaluated at some value for the state. If (F) is the Jacobian matrix, and we wish to evaluate it at (x0), then for each element (i, j) of (F): We usually write this more compactly for the whole matrix as simply: Recalling that (Q) is the process noise covariance matrix, the covariance can be propagated linearly from (k-1) to (k) as: where weve dropped the arguments to (F) for simplicity. Its not immediately clear why this ldquopropagatesrdquo the covariance, but its actually pretty intuitive, once we recall what the Jacobian means and the definition of covariance. Lets start with the Jacobian. If we know (f(x0)), then we can approximate (f(x0 Delta x)) for small (Delta x) using a Taylor series expansion: f(x0 Delta x) approx f(x0) left. frac f rightrvert Delta x ldots where the ellipsis stands for higher order terms, which can be ignored for small (Delta x). Of course, (left. frac f rightrvert ) is the Jacobian of (f), evaluated at (x0). Lets suppose that the true state is some small, hypothetical perturbation from our estimated state at (k-1): And, if we ignore process noise for just a moment, then the true state at (k) is: Lets move (f(hat )) to the left side: begin xk - f(hat ) approx F Delta x xk - hat - k approx F Delta x Delta xk approx F Delta x end Thats pretty plain. The Jacobian maps a perturbation at (k-1) to a perturbation at (k), to a first-order approximation. In fact, thats the meaning of the Jacobian. And since (Delta xk) is now approximated linearly, this process is called linearization . Heres where the definition of covariance comes in: theyre all about perturbations from a mean. Our perturbation above was just hypothetical, so if we think of it as a (zero-mean, Gaussian) random error in our state estimate, then the covariance of that error is just: P Eleft( Delta x Delta x T right) P-k Eleft( Delta xk Delta xkT right) Lets substitute the fact that we now know that (Delta xk F Delta x ): P-k Eleft( F Delta x Delta x T FT right) We can move (F) outside of the expectation: P-k F Eleft( Delta x Delta x T right) FT and now we recognize (P ) sitting in the middle there: That is, the Jacobian just maps the (Delta x ) part on the left and the (Delta x T) part on the right to the future values. Easy. For the last little touch, recall that we ignored the process noise. When the true state updates, the random process noise for that sample is added on: This is easy to account for, because we assumed that the process noise was uncorrelated with the state. The covariance of the sum of two uncorrelated random vectors is just the sum of the individual covariance matrices. So, we add (Q) on to the end, and now we have the form we were looking for: where the first part is the propagation due just to the dynamics around the mean (which may expand or contract), and the second part is due to the process noise (which always expands the covariance). Putting it a different way: if a particle were located (Delta x) away from the estimate, then it would propagate, to a first order approximation, as the estimate does, plus that little extra bit, (F Delta x), and plus the process noise. The particles on all sides of the estimate would generally move outward, representing the growing uncertainty as time passes. We do all of this by simply calculating (F) and then using the equation above. Very compact. Here are the results of our propagation of the state and covariance matrix: Propagation, Redux This article isnt about proofs its about intuition. If the propagation of the covariance matrix seems intuitive enough, then you might skip down to the next section and continue. However, if youd like to run through the covariance propagation again, and build some intuition for the expectation stuff from above, then keep reading. Instead of ignoring the process noise and tacking it on right at the end, lets consider it from the beginning. The propagation of the true state is actually this: Substituting in the perturbation we defined above: begin xk approx f(hat ) F Delta x q approx hat - k F Delta x q end Moving the predicted state to the left: begin xk - hat - k approx F Delta x q Delta xk approx F Delta x q end Using this to construct the covariance matrix, like before, we get: begin P-k E left( Delta xk Delta xkT right) approx E left( (F Delta x q ) (F Delta x q )T right) approx E left( F Delta x Delta x T FT F Delta x q T q Delta x T FT q q T right) end The expectation of the sum of different things is the sum of the expectation of each of those things: begin P-k approx E( F Delta x Delta x T FT ) E( F Delta x q T ) E( q Delta x T FT ) E( q q T ) end Recall that one of the assumptions of an extended Kalman filter is that the process noise at sample (k-1) is uncorrelated with the state at (k-1) (the state error doesnt affect the noise that gets generated). Thats helpful, because the expected value of the product of two uncorrelated variables (their covariance) is 0 (remember the dice rolls above). So, the middle two terms in the above equation drop out. That leaves only: P-k approx E(F Delta x Delta x T FT) E(q q T) (F) moves outside of the expectation operator: P-k approx F E( Delta x Delta x T ) FT E(q q T) And we already have both of these quantities The first is the covariance before the propagation, (P ), and the second is the covariance of the process noise, (Q). Were back at the above form for the prediction of the covariance: P-k approx F P FT Q While weve used the expectation operator here to make the meaning of this equation really clear, in practice, one most often uses the expectation operator when constructing the process noise covariance matrix, so its a good thing to be comfortable with. Correcting the Estimate Now its time to think about using the new measurement for correction. In fact, we can do this with pieces weve seen so far. First, the Kalman gain and correction will be exactly the same as for the sigma-point filter. K P P hat k hat - k K left( zk - hat k right) We just need to calculate the state-innovation covariance, (P ), and the innovation covariance, (P ). Lets start with the latter. We saw in the beginning of this section, (eqref ), that the innovation covariance is given by: P H P-k HT R Notice how it has the same form as (F P FT Q) Thats because wed derive it in exactly the same way, using the Jacobian of the observation function, (H), and the measurement noise covariance matrix, (R). The following is exactly the same as the derivation in the propgation section, with some of the letters swapped: begin zk h(xk) rk zk h(hat - k Delta xk) rk zk approx h(hat - k) H Delta xk rk zk approx hat k H Delta xk rk zk - hat k approx H Delta xk rk Delta zk approx H Delta xk rk end Notice that (Delta zk) is the innovation vector, (y), but using the (Delta) is a little clearer here. Its covariance tells us how much variability we expect in the difference between what we measure and what we predict as the measurement, so it represents both the error associated with our prediction and the error of the measurement itself. We form the innovation covariance in exactly the same way we formed the propagated covariance (again just swapping some letters and noting that the measurement noise and estimate errors are uncorrelated): begin P E left( Delta zk Delta zkT right) E left( H Delta xk Delta xkT HT right) E left( rk rkT right) H E left( Delta xk Delta xkT right) HT R H P-k HT R end So, just like (F) propagated a perturbation of the state from one time to another, (H) maps a perturbation of the state to a perturbation in the measurement. Then (R) joins in as extra measurement noise. Forming the state-innovation covariance is even easier we just plug things in and continue with the same themes: begin P E left( Delta xk Delta zkT right) E left( Delta xk left( Delta xkT HT rTright) right) E left( Delta xk Delta xkT right) HT E left( Delta xk rT right) E left( Delta xk Delta xkT right) HT 0 P-k HT end So, (P ) just represents a perturbation in the estimate ldquoon the leftrdquo with a perturbation in the predicted measurements ldquoon the rightrdquo. Since the measurement noise and predicted measurement are uncorrelated (its the term thats cancelled in the fourth line, above), the measurement noise covariance, (R), doesnt show up in (P ) at all. Recall how we constructed (P ) for the sigma point filter: we calculated the sample covariance of the sigma points, using the difference in each sigma point from the mean in state space on the left, and the difference in the predicted measurement from the mean on the right. Thats exactly what were doing here, but in matrix fashion, to a first-order approximation. All of this first-order approximation stuff should make it clear why an extended Kalman filter is a linear filter, even when its applied to a nonlinear problem. State-innovation covariance and innovation covariance. With the state-innovation covariance matrix and innovation covariance matrix in place, we can calculate the Kalman gain and update the state estimate, as before. Correcting the Covariance Theres only one thing left: how do we update the covariance matrix to account for this correction We stated at the very beginning that the correction is: Pk P-k - K H P-k But why Thats not even symmetric What is going on here Lets think back to sigma-point filters again. There, we said we could update each sigma point individually each would therefore converge towards the measurement to some degree, and that convergence towards a single point represented the shrinking of the covariance matrix. Well, a sigma point is like a little (Delta x) from the mean, so lets make the updated covariance matrix with some corrected little perturbations. Weve already used (Delta xk) as the perturbation of the truth from the predicted state, (hat - k), so lets use (Delta xk) as the perturbation of the truth from the corrected estimate, (hat k): xk hat k Delta xk And well restate what the corrected estimate is: hat k hat - k K (zk - hat k) hat - k K Delta zk Lets plug them in. begin Delta xk xk - hat k Delta xk xk - left( hat - k K Delta zk right) Delta xk xk - hat - k - K Delta zk Delta xk Delta xk - K Delta zk end No surprise here: the corrected perturbation is slightly smaller than the original perturbation by the amount of the correction. So whats the covariance of this thing As is now the usual procedure, well just start from the definition of the covariance, plus things in, move the expectation operators around a bit, and cancel anything we can. begin Pk E left( Delta xk T right) E left( left( Delta xk - K Delta zk right) left( Delta xk - K Delta zk right)T right) end Skipping the multiplication and moving the expectation operator around, which weve done many times now: begin Pk E left( Delta xk Delta xkT right) - E left( Delta xk Delta zkT right) KT - K E left( Delta zk Delta xkT right) K E left( Delta zk Delta zkT right) KT end Recalling that (P E left( Delta x Delta zkT right) ) and (P E left( Delta zk Delta zkTright) ), we can substitute: Pk P-k - P KT - K P T K P KT Thats a little better. Its symmetric, like wed expect (no pun intended) for a covariance operation. Also, we havent made any assumptions on (K). This is actually general for any (K). But we care about the Kalman gain, so lets substitute in the Kalman gain in just one location near the end: Pk P-k - K P T - P KT left( P P right) P KT Since (P P ) is an identity matrix, we can drop it: Pk P-k - K P T - P KT P KT The two right terms cancel out: And now we just substitute (P P HT): begin Pk P-k - K left( P-k HT right)T P-k - K H P-k end And there it is Theres no magic here its just the same old process: express things in terms of perturbations, set up the covariance definition, move things around, and cancel stuff. And now that we know the (K) is constructed so that this actually is symmetric and makes sense, we can see the simple meaning of this equation: the Kalman gain tells us how much of our current covariance we can subtract off thanks to the most recent measurement. Large Kalman gains correspond to low measurement noise (measurement noise is part of (P ), which is the ldquodenominatorrdquo), and so when measurement noise is low, we can subtract off a lot of our current uncertainty. When measurement noise is high, the gain will be small, so we wont subtract off very much. Correction, Redux That was a lot of material, but each step was actually pretty small: just some matrix multiplication, a few assumptions, and the expectation operator. Thats really all it takes to work with these (it takes a little more to do proofs about why the Kalman gain is particularly good). Lets wrap up this discussion of the extended Kalman filters correction process with another animation, using some example values. Well put the state stuff in the left plot and the measurement stuff in the right plot. We start with the state estimate (0, 0) and the covariance, shown with a bunch of particles. We map the state estimate to the predicted measurement. We map the covariance in the state (all those particles) to observation space too. (This is like (H P-k HT).) We then add on the measurement noise, (R). This gives us (P H P-k HT R). We see this as an increase in the distribution of the particles in observation space. The actual measurement comes in. (We show how well each particle predicted the measurement.) (We color the corresponding particles in state space too.) The Kalman gain is calculated, and we plot the corrected state. Not surprisingly, it sits pretty well within the most likely particles. The covariance is corrected, seen here as a correction in each particle. They clearly move closer together around the corrected estimate. (We use those corrected particles to predict the observation again, just for fun. Look how they move right over towards the measurement, but not quite all the way to it.) Corrected state and covarianceThat completes the extended Kalman filter Every step of the process is actually fairly intuitive, once we have a good grasp of: first-order approximations of nonlinear functions, the definition of covariance, and the meaning of ldquouncorrelatedrdquo random variables. Finally, heres the corrected estimate and covariance for our falling coffee filters: By repeating the overall process every time we get a new measurement, we can often converge on good estimates very quickly, with just one call to (f) and (h) per measurement and a little matrix math. Here are the results for our coffee filter delivery: Extended Kalman filters are easy to code in a language like MATLAB or Julia. The EKF used in this example is available here. or download the sample files here . Outline of an Extended Kalman Filter Calculate the Jacobian of the propagation function and the process noise covariance matrix. Propagate the state. Propagate the estimate covariance. Predict the measurement. Calculate the Jacobian of the observation function and the measurement noise covariance matrix. Calculate the Kalman gain. Correct the estimate and its covariance matrix. Steps 4 through 7 correspond to the animation above. Assumptions, Advantages, and Disadvantages The extended Kalman filter makes more assumptions about the problem than the sigma-point filter, and so is slightly less general. Those assumptions are: The functions are smooth. The covariance remains centered on the propagated state. The linear approximations are sufficiently accurate for the changes to the covariance matrix over time. The process noise, measurement noise, and estimate errors are Gaussian and uncorrelated. Estimation with Applications to Tracking and Navigation by Bar-Shalom, Li, and Kirubarajan is probably the single best book on extended Kalman filtering, whether one is interested in tracking or not, and it includes advanced implementation options for speed and stability. However, its a theory-heavy book and can go very slowly until one understands some of the subtlety of probability theory. Where their assumptions approximately apply, extended Kalman filters are a great option. Indeed, they are the workhorse of state estimation in many industries and in many forms. The advantages are: They apply well to many smooth problems. Theyre fast. Theyre very well studied and have many great options for detailed implementations. The primary disadvantages of EKFs are: Creating analytical Jacobians is not always feasible. In these cases, a sigma-point filter should probably be used instead. The Jacobians are constructed from estimates . If the estimates are too far from the truth, the Jacobians will be wrong, and the corrections therefore might not ever converge on the truth (they may even be worse than the observations themselves). This is called divergence. Well see some strategies for dealing divergence in part 2. Before we go into these options and implementation details, we have one more filter architecture to cover: the Kalman filter. The Kalman Filter We finally arrive at Kalmans original algorithm for state estimation of linear systems. For linear systems, the propagation and observation functions are expected to look something like this: xk F x Fu u q zk H xk Hu uk rk where (F), (Fu), (H), and (Hu) are the system matrices and (u) is some input vector. which can contain anything that linearly affects the propagation (control inputs, gravity, biases). Its assumed to be known. Of course, (F) and (H) mean the same thing as before. Were talking specifically about the discrete Kalman filter. Theres such a thing as a continuous Kalman filter, useful when measurements are continuous (e. g. not samples of the voltage, but the voltage itself). Stunningly, it doesnt require a digital computer and can be constructed with resistors and capacitors in a big DC circuit. Each dimension of the state estimate would be the voltage in a separate path As this is laborious, the continuous Kalman filter is now a thing of the past, albeit an impressive thing that serves to remind us that we stand on the shoulders of giants. Of course, nobodys problem is actually a linear system (theyre like perfect vaccuums or point masses mdash pleasant idealizations). Further, the linear Kalman filter is just a special case of the extended Kalman filter, so why would we bother learning about it Because linear filters are very often useful on nonlinear problems . In fact, well recast our falling coffee filters filter above as a linear filter with virtually no loss in performance. The key to linear filtering is to use error states mdash states that represent small deviations from some nominal state. For instance, our package has a parachute and quickly reaches its terminal velocity, where the forces due to drag and gravity cancel. Lets call this our nominal velocity, and we can arbitrarily pick the target landing site (0, 0) as the nominal position. So, our nominal state is (xn begin 0 0 0 - vt end T), where (vt) is the terminal velocity (by the end, the velocity will nominally be downward). Our error state is just the truth minus this nominal state: Delta x x - xn Lets linearize the dynamics of this deviation near the nominal state. begin Delta xk xk - xn f(x ) - xn f(xn Delta x ) - xn approx f(xn) F Delta x - xn end Note that both (xn) and (f(xn)) are constants, so lets set (Delta xn f(xn) - xn). The resulting model is clearly linear, following the form above, where (Delta xn) is the input vector ((u ) in the above), and the input map ((Fu) above) is the identity matrix. Delta xk F Delta x Delta xn Of course, the observation function needs to be linear too, but this is trivial for our simple problem: zk begin 1 0 0 0 0 1 0 0 end Delta xk (If it had been a more difficult function, we would have gone through the same type of linearization that we did for the propagation portion.) Otherwise, the only remaining parts are the process and measurement noise covariance matrices, and theyre exactly the same whether we deal with full states or deviations. Were ready to filter just like we did before. Here are the results for the package delivery: Estimated trajectory with linear Kalman filter. Theres no noticeable difference from the extended filter. Lets look at the state estimates individually, and at the difference between the extended and linear Kalman filter estimates. Comparison of results of EKF and KF for the full simulation. Differences between the results of the EKF and KF for the full simulation. Theres a small difference, not surprisingly at the beginning, when the package isnt yet at terminal velocity, but its negligible compared to the overall accuracy of the filters. This is pretty common. There are many nonlinear problems that can be estimated quite well using a fully linear filter. This enables the filter to run extra quickly, as theres no need to re-calculate the Jacobians over time or run detailed propagation and observation functions. The key to building a linear filter is to find a good nominal point or nominal trajectory along which the Jacobians are constant. This cant be done for all problems, but its a great technique when it can be done, and its often needlessly overlooked. Steady-State Covariance Theres an interesting thing to note for Kalman filter: since (F), (H), (Q), and (R) are constant, the state does not affect the covariance . Lets take a look at the code that would update the covariance in a linear Kalman filter: Nothing here requires the state The progression from the initial covariance to a steady-state value can be entirely predicted ahead of time, before actually running the filter. And once the covariance matrix reaches a steady state, theres no point in continuing to update it. After that point, the Kalman gain is constant. As an extreme case, if it would be reasonable to initialize a filter with the steady-state covariance, then one could instead calculate the Kalman gain associated with the steady-state covariance ahead of time and implement a filter that never needs the covariance at all, such as: This steady-state form is actually called a Wiener filter. after Dr. Norbert Wiener at MIT, whose work predated Kalmans by about a decade. Without the need to calculate the Kalman gain in the loop, or to store any of the covariance matrices, this is a very lightweight filter that nonetheless has the advantages of a Kalman filter. Again, it only applies when the initial uncertainty is the steady-state value and the system matrices are constant, but in such a case, it cant be beat. Outline of a Linear (Discrete) Kalman Filter Basic linear Kalman filters are trivial to program. Click here for the filter used in this example or download the sample files here . Propagate the state. Propagate the covariance. Predict the measurement. Calculate the Kalman gain. Correct the state and covariance. Weve looked at four filter architectures and discussed how they all do similar things with different assumptions, which enable different operations, which enable differences in accuracy and speed. Particle filters are very general and are a common choice when the probability density is multimodal. They work well enough when runtime isnt a concern. Sigma-point filters use a small set of ldquoparticlesrdquo placed on an ellipsoid around the state estimate. They therefore assume that the probability density is unimodal. They also assume that the process and measurement noise are uncorrelated with each other and with the state. Theyre substantially faster than particle filters, and they handle nonlinearities better than extended Kalman filters. Extended Kalman filters assume that the propagation and observation functions are smooth and that the covariance propagates linearly and stays centered on the propagated estimate, in addition to all of the assumptions made by sigma-point filters. Theyre fast and have some options (in the next part) for being very fast. They also have a long history of working well even on problems that violate their assumptions to startling degrees, so EKFs are a great option to try for a wealth of state estimation problems. Linear Kalman filters are the same as extended Kalman filters, but (usually) propagate error states with approximately linear dynamics. Theyre a little faster, and the simplified code works well for embedded systems. There are many different types of state estimators, and many variations on each, but these four represent the basics of how estimates and uncertainty are propagated and updated sequentially as new measurements become available. But were not done. When the extended Kalman filter was created for the Apollo program, it was coded up as part of a simulation of the spacecraft, and after one small bug fix, it worked well. The engineers on Apollo could have stopped here most people declare success as soon as they see decent results in simulation. The Apollo folks, however, went forward and found that there were several more things that were necessary before the filter was practical and reliable. In fact, they discovered, the ldquodefaultrdquo Kalman filter algorithm above is poorly suited to implementation in computers Fortunately, a few tweaks enable it to: run very, very quickly, maintain stability despite the potential for build-up of roundoff errors, and estimate more accurately. In the next part. well see how these are relatively easy modifications once one has an understanding of how the filters actually work. References kf is our tool for exploring and designing detailed state estimation algorithms with a focus on stability and speed. It also has two quite long, worked examples of applying filters to specific problems, here and here . The sample code includes a particle filter, sigma-point filter, extended Kalman filter, and linear Kalman filter, as well as some utilities and the files used to generate the plots for this article. Its available here . Probabilistic Robotics by Thrun, Burgard, and Fox contains entry-level material for particle filters and sigma-point filters and discusses their use in robot location-finding (a multimodal problem where particle filters have proven useful, even in embedded applications). Kalman Filtering and Neural Networks . edited by Haykin, provides great information about the unscented Kalman filter (sigma-point filter) and is frequently cited in the literature. It includes numerous practical forms, with accessible discussion and very good pseudocode. Estimation with Applications to Tracking and Navigation by Bar-Shalom, Li, and Kirubarajan is probably the single best book on extended Kalman filtering, whether one is interested in tracking or not, and it includes advanced implementation options for speed and stability. However, its a theory-heavy book and can go very slowly until one understands some of the subtlety of probability theory. Greg Welch and Gary Bishop maintain this page for information on Kalman filtering and many related things. Its a good resource. The various IEEE journals and the AIAA Journal of Guidance, Control, and Dynamics provide numerous excellent papers on practical filters with pseudocode, simulations, and discussions of results from real-world testing. Of course, these are generally industry-specific. No book even comes close to the depth available from the journals. Fragments of the story of the development of the Kalman filter for the Apollo program are scattered all over. However, NASA maintains a brief and enjoyable write-up by Leonard A. McGee and Stanley F. Schmidt called ldquoDiscovery of the Kalman Filter as a Practical Tool for Aerospace and Industryrdquo, located here. Another much more modern write-up is ldquoApplications of Kalman Filtering in Aerospace 1960 to the Presentrdquo by Grewal (who runs a class on Kalman filtering for GPS and IMUs) and Andrews. April 26th, 2018 copy2018 An Uncommon LabPosted on: January 22, 2017 by starlino This article introduces an implementation of a simplified filtering algorithm that was inspired by Kalman filter. Kod Arduino jest testowany przy użyciu jednostki IMU 5DOF z GadgetGangster 8211 AccGyro. Teoria tego algorytmu została po raz pierwszy wprowadzona w moim artykule o Imu Guide. AccGyro jest zamontowany na zwykłej osłonie prototypowej na płycie Arduino Duemilanove. Części potrzebne do ukończenia projektu: 8211 Arduino Duemilanove (lub podobna platforma Arduino) 8211 AccGyro Płytka IMU 8211 Protoshield (opcjonalnie) 8211 Breadboard 8211 Drut łączący 22AWG Schemat podłączania jest następujący: AccGyro lt8212gt Arduino 5V lt8212gt 5V GND lt8212gt GND AX lt8212gt AN0 AY lt8212gt AN1 AZ lt8212gt AN2 GX4 lt8212gt AN3 GY4 lt8212gt AN4 Po ukończeniu części sprzętowej, załaduj następujący szkic do Arduino. Uruchom projekt i upewnij się, że otrzymujesz dane wyjściowe z terminala szeregowego (możesz uruchomić terminal ze swojego IDE Arduino). Do analizy danych opracowałem małe narzędzie o nazwie SerialChart. Jest to open-source, więc możesz go dostosować do własnych potrzeb. Oto wynik z oprogramowania SerialChart: Test został przeprowadzony w następujący sposób: 8211 Najpierw powoli przechylałem planszę (oznaczoną quot-gładkim pochyleniem na zrzucie ekranu) 8211 następnie kontynuowałem przechylanie tablicy, ale zacząłem także stosować wibracje 8211 przez stuknięcie Płyta szybko z moim palcem (oznaczony cytatem TITlting z szumem drgań) Jak widać na wykresie przefiltrowany sygnał (czerwona linia) jest rzeczywiście bardziej odporny na hałas niż same odczyty przyspieszenia (niebieska linia). Odfiltrowany sygnał uzyskano przez połączenie danych Akcelerometr i Żyroskop. Dane żyroskopowe są ważne, ponieważ gdybyś po prostu wyliczył dane akcelerometru, otrzymasz opóźniony sygnał. Biorąc pod uwagę prostotę kodu i algorytmu, jestem zadowolony z wyników. Jedną z funkcji, którą chciałbym dodać, jest kompensacja efektu dryfu, który można napotkać przy użyciu niektórych żyroskopów. Płyta AccGyro okazała się jednak bardzo stabilna pod tym względem, ponieważ ma wbudowane filtry górnoprzepustowe. Jeśli chcesz eksperymentować sam, zaleciłem najpierw odtworzyć tę konfigurację testową. następnie powoli przesuwaj się w kierunku potrzeb aplikacji. Na przykład możesz wziąć kod C i przenieść go do PIC39s C18C30 lub AVR-GCC (nie powinien on być zbyt trudny). Poniżej znajduje się kilka przydatnych zasobów i ich opisy. Pliki wykonywalne SerialChart można pobrać stąd: Po uruchomieniu aplikacji SerialChart musisz załadować plik konfiguracyjny imuarduino. scc dla tego projektu (zawartego w archiwum imuarduino. zip). W tym pliku konfiguracyjnym zaktualizuj ustawienia 39port39 do portu COM Arduino39s. Na moim komputerze Arduino wykryto na COM3, na twoim komputerze może być inaczej. Aby uzyskać więcej informacji na temat składni pliku konfiguracyjnego, zobacz: Możesz także pobrać i skompilować SerialChart z Google Code: Do sprawdzenia kodu potrzebny będzie klient SVN (używam RapidSVN dla Windows). SerialChart został opracowany za pomocą Qt SDK firmy Nokia: qt. nokiadownloads Wiele osób pyta mnie, co z pozostałą 2 osią, tutaj jest kod, który wyprowadza 3 osie, w tym skrypt konfiguracji SerialChart. Usunąłem także kod źródłowy, który Alex wskazał w komentarzach, co zmniejszyło odstęp między próbkami. W poniższym przykładzie obracam planszę wokół osi X (niebieskiej), która jest równoległa do podłoża. Robię to ręcznie, więc X nie jest dokładnie 0, ale blisko. Zmieniające się osie to Y (czerwony) i Z (zielony). Zwróć uwagę na związek X2Y2Z2 1. Linie przerywane cyjan, magenta i limonkowe są niefiltrowanymi sygnałami pochodzącymi z samego akcelerometru (RwAcc). 162 KOMENTARZE Dodaj komentarz RSS 63. Emilio 30 października 2017 hola, ante todo gracias por su pagina y dedicacin. mi consulta es la siguiente. en mi proyecto necesito colocar na razones de espacio la placa de un 5DOF IMU na posicin pionowym, bez poziomych dostępnych kamer i orientacji na temat oprogramowania, na przykład na pozyskiwanie. utilizo su programa que implementa el filtro Kalman. Gracias por su atencin, y un sincero y cordial saludo 64. Luca 18 listopada 2017 Hi, I8217m działa na czujniki IMU 6DOF i stwierdził, że ta aplikacja (SerialChart) bardzo przydatne. Ten wpis służy tylko do zgłoszenia problemu dotyczącego SerialChart. Mając wiele transceiverów USBserial (to znaczy chip FTDI) łączących różne karty rozwoju, wirtualne przypisanie numeru COM może szybko wzrosnąć. W moim przypadku przy użyciu COM5 mogę podłączyć port szeregowy, ale usign COM19 I can8217t: SerialChart zwraca błąd skrzynki komunikatów 8220 Nie można otworzyć portu COM198221. Może to być błąd w parserze konfiguracji portu COM, który tylko sprawdza nazwy portów COM od COM1 do COM9 Otrzymuję te same wiadomości ze wszystkimi portami COM z dwoma cyframi. 8230 część 3 mojego przewodnika IMU i praktyczny eksperyment Arduino z kodem został przedstawiony w artykule IMU 5DOF i otrzymał przydomek Uproszczony filtr Kalmana, stanowiący prostą alternatywę dla 8230 66. Xris 24 grudnia 2017 Hi Starlino Próbuję zaimplementować seryjny wykres w aplikacji, aby obserwować dane z akcelerometru za pomocą PIC24FJ64GB002, ale moim problemem jest to, że używam ANSI C dla pic24f, który nie posiada funkcji Serial. print (). Czy istnieje jakaś biblioteka lub metoda, aby to zrobić Zamiast tego użyłem tego kodu, ale na seryjnym wykresie otrzymuję losowe symbole. hdlcsendfloat (Intervalmsec) uartsendchar (8220,8221) hdlcsendfloat (Xaxis) uartsendchar (8220,8221) hdlcsendfloat (Yaxis) uartsendchar (8220,8221) 8230. Teorię tego algorytmu po raz pierwszy wprowadzono w moim Imu Guide article. rdquo PyroFactor: Read Permalink Email This 8230 68. gunbrown January 15, 2017 Próbuję zmierzyć stopień przechyłu i pochylenia ruchomego obiektu (rodzaj cylindra). Jestem trochę zawiedziony, jest to, że twój algorytm może zmierzyć stopień pochylenia obiektu ruchomego 69. Barry Beasley 23 stycznia 2017 r. Czy możliwe byłoby zaakceptowanie danych z dwóch oddzielnych portów szeregowych i wykreślenie otrzymanych danych na jednym wykresie? funkcja dodawania skali (y) dla osi X wzmacniacza Y 70. starlino 23 stycznia 2017 Barry: Wielokrotne źródła danych byłyby interesującą funkcją. może dodać do rozszerzonej listy życzeń. Dla skali można użyć parametru Pitch, zobacz: code. googlepserialchartwikiAdvancedFeatures Przede wszystkim dziękuję bardzo za wspaniałe wprowadzenie do IC. Tęskniłem za takim IC. Pracuję nad odwróconym wahadłem. Chciałbym wiedzieć, czy mogę użyć wyjścia z Gyro bezpośrednio, by porównać moje przechylenie w odwróconym wahadełku. 8230 UDB4 iin MicroChip8217w C30 derleyiciyle hazrlanm ak kaynak kodowanie da mevcut olmakla birlikte ben yazlm CCS C derleyicisiyle sfrdan yazmaya karar verdim. Sensrlerin analogowe klolmy ilerimi epey kolaylatsa da IMU mantn zmek 1-2 gnm ald Starlino8217nun Arduino iin yazd kalman 8211 IMU kodlarn CCS8217e evirdim. Yaznn orjinaline ulamak iin tklayn. 8230 73. hacna 12 kwietnia 2017 r. Hi..I8217m student pracujący na podwodnym zdalnie sterowanym pojeździe, gdzie I8217m używa 5 DOF IMU, aby uzyskać pozycję pojazdu. Aby interfejs z IMU Im przy użyciu mikrokontrolera Arduino Uno. Mój tutaj, w jaki sposób mogę uzyskać pozycję pojazdu od przyspieszenia, ponieważ Arduino tylko gvs z przyspieszeniem. W jaki sposób możemy arduino wt MATLAB połączyć z wyjściem arduino, aby uzyskać przyspieszenie. 74. Robert 14 kwietnia 2017 Niedawno kupiłem IMU (ten wymieniony w sklepie z płytą nawigacyjną yaw lutowaną na górze), bez pełnego zrozumienia działania IMU. Naprawdę potrzebowałem go do pomiaru odchylenia dla autonomicznego pojazdu podwodnego I8217m. Zdaję sobie teraz sprawę, że aby uzyskać dokładny odczyt, potrzebny jest również magnetometr i użyj go razem z filtrem Kalmana, aby pozbyć się dryfu. Jednak nie sądzę, że potrzebuję dokładnego odczytu na więcej niż 5-10 sekund (byłby on używany tylko do względnego pozycjonowania podczas obracania). Próbowałem po prostu uzyskać dostęp do żyroskopu odchylającego i używać go wyłącznie, ale otrzymuję bardzo złe wyniki. Rozumiem, że żyroskopy nie są najdokładniejszym czujnikiem, ale mój wydaje się być dobry tylko do wykrywania ruchu i nie daje dokładnego obrazu na temat wielkości lub kierunku prędkości kątowej. Na przykład mogę uruchomić mój program, obrócić planszę o 90 stopni, a następnie obrócić ją z powrotem i zmniejszyć kąt po obu obrotach. Ponadto mój gyro nigdy nie wydaje się wracać do pierwotnego zera. Po obróceniu go i zatrzymaniu wydaje się, że zerowe napięcie uległo zmianie, a zatem żyroskop zaczyna dryfować naprawdę źle. I8217ve próbował dokładnie dostroić napięcie zerowe tak blisko, jak to możliwe, ale to nie ma znaczenia, czy zawsze się zmienia. I8217ve również grał z parametrami dla instrukcji if, ale to tylko marginalnie pomaga .. Więc moje pytanie brzmi, czy gyros naprawdę jest niedokładne Czy powinienem dostać coś co najmniej w pewnym stopniu przydatne Proszę sprawdź mój kod i zobacz czy widzisz jakiś problemy. Dziękuję pływacy yawOdczytaj odczyt z żyroskopowego pływaka yawZero 1.255 zerowy prąd pływaka bieżącegoAngle 0 pustej konfiguracji () Serial. begin (9600) void loop () Pobierz odczyt z odchylenia żyroskopu yawRate analogRead (A3) przekonwertuj do stopni sekund yawRate 1023 yawRate 5 yawRate - yawZero Serial. println (yawRate) yawRate .002 Instrukcja, aby zminimalizować dryf, jeśli (yawRategt5yawRatelt-5) działa przy 100 Hz yawRacja 100 dodaje kąty currentAngle yawRate Upewnij się, że kąt pozostaje między 0-360 stopniami, jeśli (currentAngle 359 ) currentAngle - 360 Serial. println (currentAngle) delay (10) 75. starlino 14 kwietnia 2017 Ok. kilka wskaźników: 8211 musisz określić yawZero eksperymentalnie, don8217tkorzystaj tylko z wartości arkusza danych, możesz napisać jakiś kod, aby zmierzyć go przy uruchomieniu (to jest, gdy urządzenie się nie porusza), lub zakodować go na stałe, ale pamiętaj o regularnej aktualizacji. 8211 Nie sądzę, że twoje pętle działają z częstotliwością 100 Hz, ponieważ println zajmuje trochę czasu oprócz opóźnienia (10) użyj funkcji milis () arduiono do pomiaru czasu dla każdej pętli 76. Robert 14 kwietnia 2017 Dzięki za odpowiedź. Znam eksperymentalnie napięcie zerowe (za pomocą woltomierza i przy użyciu println). Zmieniłem kod na milis, ale I8217m wciąż robi to samo co wcześniej. Żyroskop nie powraca dokładnie do tego samego napięcia zerowego po jego przemieszczeniu. Nie sądzę, że jest to coś, co można dynamicznie dopasowywać, więc może to być problem ze sprzętem, a nie oprogramowaniem 77. starlino 15 kwietnia 2017 Robert: Czy możesz ponownie opublikować swój kod. Kiedy mówisz, że 8220gyro nie zwraca dokładnie tego samego napięcia zerowego 8221, masz na myśli bezpośredni odczyt z portu GZ4 lub skumulowaną sumę kątów. Zmień położenie czujnika i spróbuj użyć innego kanału, na przykład GX4 lub GY4. Masz również niezmontowane. niefiltrowane kanały GX, GY, które możesz wypróbować. Żaden żyroskop nie jest idealny. Dlatego często są one używane z akcelerometrami (do pomiaru pochylenia nachylenia) i magnetometrami do (obliczeń odchylenia kursu). Gdyby były idealne. ludzie nie przejmowaliby się łączeniem ich. W każdym razie, jeśli okaże się, że ten czujnik nie działa dla Ciebie. skontaktuj się ze mną poprzez e-mail, aby umówić się na zwrot. 78. zam 10 czerwca 2017 czy mogę korzystać z serialchart z motionnode To Pedro: Tylko GPS może dostarczyć ci pozycję twojego urządzenia. Nie można obliczyć go wystarczająco dobrze przy użyciu tylko przyspieszeniomierza i żyroskopu. 89. Max 3 września 2017 Hi starlino, podoba mi się twoje oprogramowanie 8220serial chart8221 bardzo. Użyłem go do analizy danych szeregowych z arduino. To działało bardzo dobrze ze wszystkimi arduino przed uno r3. Ale w tym tygodniu kupiłem arduino uno r3. Teraz nie mogę przeanalizować danych. To nie działa z uno r3. Być może z powodu nowego 8220ATmega16U28221 i nowego sterownika. Zawsze jest komunikat 8220Może otworzyć port COM11. 8216Upewnij się, że port jest availalbe82308221 Czy istnieje rozwiązanie Mam komputer i okna 7. Wielkie dzięki. Max z Niemiec nauczyciel przedmiotów ścisłych 90. starlino 3 września 2017 max: było poprzednie arduino na niższym porcie, takim jak (COM3, COM5), spróbuj przejść do menedżera urządzeń i zmienić przypisany port COM z COM11 na coś mniejszego niż COM3 COM4. niektórzy ludzie zgłaszali problemy z portami wyższymi niż 10. 91. Max 10 września 2017 Hi starlino, dzięki za napiwek. Teraz znów działa bardzo dobrze. To bardzo przydatne narzędzie. I bardzo szybko. Wielkie dzięki. Max z Niemiec. 92. Juan David 29 października 2017 Witam lubię program, ale chcę wiedzieć, jak mogę go zaimplementować, jeśli imu daje dane wyjściowe w i2c, z 3 osi żyroskopu i akceleratora, mam dane w innych algorytm arduino. Co muszę zmienić w swoim kodzie 8230 baarl ilk uu testini gerekletirdim. Projenin bu kadar gecikmesinin en byk nedeni Starlinonun IMU algoritmas zerinde srar etmem oldu. Yer testlerinde uak iyi tepki vermesine 8230 94. WhiteBard 21 grudnia 2017 Witam. Sry dla mojego złego angielskiego. I8217m jest podwykonawcą wydziału informatyki na Uniwersytecie Stanowym Sachalin. Czy możesz mi pomóc z moim problemem Mam już dane z różnych czujników: akcelerometry, żyroskopy, itp. Dane zapisane w następującym formacie: Czas, Żyroskop X, Żyroskop Y, Żyroskop Z, Akcelerometr X, Akcelerometr Y, Akcelerometr Z, Kompas X , Kompas Y, Kompas Z. Dane są głośne. Muszę ograniczyć hałas i wykres, aby ocenić wyniki uzyskane za pomocą filtra Kalmana. Pomóż mi, proszę, zmodyfikuj swój program do przetwarzania danych w czasie rzeczywistym, aby rozwiązać mój problem. Dziękuję Ci. 95. Iwan 22 stycznia 2017 r. Chcę przesłać dane z tabeli szeregowej do modułu arduino. czy możesz dać mi kod źródłowy z szeregowego wykresu Jeśli to możliwe, chciałbym go zmodyfikować, aby móc wysyłać dane 8232 Arduino kodu dla Algorytmu Przewodnika IMU. Zastosowanie przyspieszeniomierza 5DOF IMU i żyroskopu Starlino8230. 8230 97. Benhur 23 lutego 2017 Starlino, creio que todos os leitores deste site tem uma dvida contigo Obrigado por dividir seus conhecimentos conosco Foi conectar a fiao e rodar o programa que saiu funcionando 98. Tim April 29, 2017 Hi Starlino, very cool projektuje I039m robiąc coś bardzo podobnego do tego, ale mam pytanie dotyczące aplikacji SerialChart. I039m próbuje wizualizować moje 3 osi żyroskopowe, ale widzę tylko 2 z nich w serialchart8230. Jest to kod I039m używany do drukowania: Serial. print (a) Serial. print (quot, quot) Serial. print (b) Serial. print (quot, quot) Serial. println (c) Próbowałem również z innymi danymi, ale same wyniki8230 Czy robię coś źle Z góry dziękuję 99. starlino 29 kwietnia 2017 Tim, jaki jest plik konfiguracji szeregowego wykresu, i czy możesz wyślij próbkę z urządzenia 100. Tim 30 kwietnia 2017 To jest to, co dostaję w tej chwili I039m, 4 numery na wyjściu, ale tylko 3 linie widoczne8230 timdemeyer. befilesserialchartoutput. png 101. starlino 30 kwietnia 2017 Tim twoje pierwsze pole to nazywane interwałem, a kolor it8217s jest przezroczysty, powinieneś usunąć tę sekcję 102. Tim 30 kwietnia 2017 r. O tak yes afcourse Wszystkie linie są teraz wyświetlane. Wielkie dzięki 103. Ben-Hur 5 maja 2017 r. Poradnik gratulacyjny na temat IMU i aplikacji SerialChart, jego wyjaśnienia są proste i naprawdę działają I039m wykonując tę ​​samą pracę, ale z innymi modelami czujników i moje pytanie dotyczy filtra komplementarnego: 1) W filtrze uzupełniającym (w kodzie arduino) wykonywany jest ważony quotRwEst w (RwAcc w config. wGyro RwGyro w) (1 config. wGyro), który działał idealnie, ale widziałem inne artykuły, które mówię o filtrach komplementarnych i piłach tam inne równanie typu: quotangle (0.98) (kąt Rwgyro dt) (0.02) (Rwacc) quot lub quotangle a (kąt Rwgyro dt) (1-a) RwAccquot gdzie tau (t tau) można zobaczyć, że dwa formularze otrzymują wartość większą od jednego czujnika do drugiej. Tylko nie mogłem zobaczyć, w którym miejscu jest zmienna kwota w twoim rozwiązaniu, i odniosłem się do tej stałej czasu, niż mówią inne artykuły. Dziękuję za poświęcony czas. 104. clark 12 maja 2017 Serial chart nie działa na moim komputerze, czy jest zgodny z Windows Starter. Próbowałem użyć wersji ZIPPED, ale kiedy kliknąłem przycisk run, wyświetlił mi się komunikat o błędzie "Nie można otworzyć" port COM26quot, ale jestem 100 pewny, że mój Arduino jest połączony w com26 i już skonfigurowałem szeregowy wykres. Próbowałem również zamknąć wszystkie aplikacje uruchomione na moim komputerze z wyjątkiem Serial Chart. Ale wciąż mam ten sam błąd. Czy ktoś może mi pomóc? 105. starlino 13 maja 2017 Clark: biblioteka szeregowa QT ma czasami problemy z portami wyższymi niż 10 (tylko na niektórych komputerach), możesz zmienić ją na COM4 lub coś podobnego. rozwiązanie jest opisane tutaj: 106. Pablopaolus 22 maja 2017 r. Dziękuję za podzielenie się swoją pracą i przepraszam, że przeszkadzam. I039m zwariuje, próbując narysować zorientowaną kostkę w Labview, zaczynając od wartości RwEst. Przeczytałem wszystkie komentarze, szukając odpowiedzi bez żadnego sukcesu. I039ve próbował obliczać wysokość i kąty przechyłu za pomocą następujących wyrażeń: tafla atan2 (RwEst1, RwEst2) tafla atan2 (RwEst0, sqrt (RwEst1RwEst1RwEst2RwEst2)) Ale to nie działa. Czy mógłbyś mi pokazać jakikolwiek sposób, aby wykonać to zadanie? Będę wdzięczny za każdą pomoc, jaką możesz zapewnić. 107. starlino 22 maja 2017 Pablopaolus: zajrzyj do samouczka DCM na tej stronie. Jeśli obliczysz macierz DCM zamiast pitchroll, możesz znaleźć pozycję dowolnego obróconego wektora jako r8217 DCM r. 108. Pablopaolus 22 maja 2017 Starlino: Dziękuję za szybką odpowiedź. Już przeczytałem Twój samouczek Menedżera kampanii DoubleClick. Ponieważ jednak było to trudniejsze do zrozumienia, zaimplementowałem Twój uproszczony algorytm filtru Kalmana8230, ale wydaje się, że muszę przejść do DCM. Przy okazji mam wątpliwości co do Twojej implementacji DCM. Czy kod w code. googleppicquadcontrollersourcebrowsetrunkimu. hr7 wystarczy do obliczenia macierzy DCM Mam na myśli: Przy funkcji imuupdate () widzę aktualizację macierzy dcmGyro, ale nie widzę gdziekolwiek obliczenia dcmEst, które są zdefiniowane jako oszacowana macierz dcm za pomocą fuzji przyspieszeniomierza i żyroskopu. Innymi słowy: czy dcmGyro to macierz, której mogę użyć do znalezienia r039dcmGyror Dziękujemy za rozpatrzenie mojej prośby. 109. starlino, 28 maja 2017 r. 111. Fatima 10 lipca 2017 r. Obecnie pracuję nad samobalansującym się robotem i chcę użyć filtra kalmana do mojego filtra IMU i filtrowania i chcę, aby wyjście jako kąt przechyłu było wprowadzane do Sterownik PID i chcę przekonwertować kąt wyjściowy PID na prędkość dla mojego sterownika silnika MD49. Wiem, co chcę robić, ale nie wiem dokładnie, jak to osiągnąć. Miałem więc nadzieję, że wiesz, od czego mam zacząć i jak mogę dokonać niezbędnej konwersji. Dziękuję za uwagę, ponieważ brzmi jak totalny nowicjusz, którym jestem. 112. johnnymucker 8 sierpnia 2017 seryjny wykres działa tylko z com prots 1 lt 9. ręcznie zmienić numer portu com w systemie Windows 7 (musisz google to) musiałem to zrobić w winXP, aby to działało. 113. Jan Bambey 12 sierpnia 2017 r. Czy istnieje licencja na obraz, nad którym pracowałem przy MPU6050. jest to 3-osiowy ACC. i 3- osiowy GYRO i czujnik temperatury. kiedy próbowałem po prostu pobrać informacje o pochyleniu z tego czujnika. Zauważyłem, że w tym samym czasie ma sens przyspieszenie, którego nie potrzebuję. Właściwie muszę przeczytać tylko przechylenie w kierunku X i Y. Moje pytanie brzmi: jak mogę anulować wykrywanie przyspieszenia. 136. john oakley 29 kwietnia 2018 r. Próbuję wygenerować ślad z mpu6050. Moje dane żyroskopowe x, y szybko rysują 2 ślady w pionie, ale są bardzo wolne, aby poruszać się od lewej do prawej strony po wykresie, a więc wszystkie są zgniecione i nieczytelne w porównaniu do innych wykresów, jakie widzą ludzie. to jak posiadanie oscyloskopu w powolnym przedziale czasowym około 1 sekundy, a wszystkie dane są wpychane w tę skalę czasową. Próbowałem jak poprzedni post powiedział o dodaniu opóźnienia po każdej linii. Zakładam, że oznacza to na przykład: xdata, ydata (delay), a nie xdata, (delay) ydata (delay) i tak dalej. jest to jedyny sposób na zwiększenie prędkości przesuwu 137. Sarra Chebbah 18 maja 2018 Kod matlab filtre kalman i animacja 3d MPU6050

No comments:

Post a Comment