Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

usrednianie kierunku odczytanego z kompasu

30 Wrz 2009 08:35 1149 8
  • Poziom 9  
    Witam.
    Mam elektroniczny kompas, ktory na wyjsciu daje kierunek z czestotliwoscia 5 herzow. Problem w tym, ze gdy ide z kompasem, wowczas wyniki sa bardzo 'rozstrzelone' np:
    ide w kierunku 180 a kompas podaje 190, 200, 150, 170, 196. Wiadomo - czlowiek nie porusza sie 'sztywno'. Czy zna ktos jakis algorytm, aby sensownie to przetworzyc. Oczywiscie srednia nie wchodzi w rachube, bo przeciez w pewnym momencie moge skrecic i isc w innym kierunku.

    Pozdrawiam,
    Jacek
  • Poziom 14  
    Niestety, więcej niż usrednianie nie zrobisz. Twój kompas podaje kierunek tylko z pewną dokładnością i zapewne nawet jak leży nieruchomo to wyniki są rozstrzelone (błąd ten możesz zapewne znaleźć w dokumentacji).

    Ważne teraz są tu dwa zagadnienia - dokładność - aby otrzymany kierunek był jak najbliższy rzeczywistemu; oraz odpowiedź skowoa - aby otrzymywany kierunek jak najszybciej podążał za faktycznym.

    Niestety te dwie cechy są sobie przeciwstawne i możesz zwiększać jakośc jednego jedynie kosztem drugiego. Przy zwyczajnym uśrednianiu (metoda nazywa się "ruchoma średnia" / "moving average") wygląda to w ten sposób, że zwiekszanie ilości uśrednianych próbek stabilizuje wynik ale wydłuza czas odpowiedzi.

    Poza ruchomą średnią istnieje jeszcze sałe spektrum filtrów cyfrowych, które wybiera sie w zależności od zastosowania. Do wspierania projektowania takich filtrów polecam program Filter Free ze strony http://www.filter-solutions.com/.

    Jest to bardzo ciekawa dziedzina, jednak wymaga zgłębienia tematu. Napisz conieco więcej na temat tego jakie wyniki uzyskujesz i spróbujemy coś z tego wykombinować.

    Pozrawiam,
    Michał
  • Poziom 9  
    Na dzien dzisiejszy robie to w nastepujacy sposob:
    Mam dwa parametry - widelki (w stopniach) oraz historia (w sekundach). Widelki okreslaja wahania kompasu, ktore przyjmujemy jako ruch na wprost (im bardziej czlowiek sie kiwa, tym te widelki sa wieksze). Historia okresla ile poprzednich wynikow ma byc brane do liczenia sredniej. Model nawet sie sprawdza, ale myslalem, ze jest jakies bardziej naukowy podejscie. Oczywiscie obarczony jest pewne 'ale' im dokladniejszy wynik kierunku, tym pozniej zostaje zauwazony skret. To samo dotyczyc widelek - im ktos bardziej sie 'buja' tym jego skret zostanie pozniej odnotowany (calkowicie sie nie sprawdza, gdy idziemy po delikatnym luku).
    W sieci czesto pojawia sie pojecie filtru Kalmana. nie wiem czy da sie to tutaj wykorzystac.
  • Poziom 12  
    Ja proponuje najprostszy filtr:
    x = t*0.7+(t-1)*0.2+(t-2)*0.1

    Współczynniki i ich ilość możesz dobrać tzw metodą ekspercką
    Ja najczęściej stosuje takie kombinacje:

    0.8,0.15,0.05 - wysoka czułość na zmiany małe uśrednienie
    0.7,0.2,0.1 - wersja pośrednia
    0.6,0.25,0.15 - mała czułość na zmiany spore uśrednienie
  • Poziom 9  
    A co to jest 't'?
  • Poziom 12  
    t - ostani pomiar
    t-1 - przedostatni
    t-2 - przed-przedostatni
    idt..
  • Poziom 14  
    filtr kalmana jest tutaj za dużą armatą. Jak nie zależy Ci bardzo na rozdzielczości, możesz stworzyć coś na kształt róży wiatrów - podać tylko kierunki kardynalne i nie kardynalne (N E W S; NE NW SE SW) i przeskakiwać pomiędzy nimi tylko jak kolejnych n pomiarów nastąpi w innym polu niż aktualne.

    Podstawowe pytanie - jaką rozdzielczość chcesz osiągnąć?

    Rozwiązanie, które zaproponował szyszekpg to są cyfrowe filtry o skończonej odpowiedzi skokowej (FIR) drugiego rzędu. Przy pomocy programu który wcześniej zaproponowałem możesz obejrzeć wpływ zmiany parametrów na odpowiedź filtru.

    Pozdrawiam,

    Michał
  • Poziom 9  
    Sciagnalem ten programik, ale za bardzo nie wiem jak sie nim obslugiwac. Mam w pliku tekstowym wartosci z kompasu. Odczytuje go w programie i co dalej? Jak zobaczyc usrednione wyniki?
  • Pomocny post
    Poziom 14  
    Musisz utworzyć plik z każdą kolejną wartością w nowej linii i zapisać z rozszerzeniem ".dat". W programie w głównym pasku jest zakładka "Data". Jak na nią klikniesz pojawią się narzędzia do ładowania danych z pliku. Wybierasz częstość próbkowania ( w Twoim przypadku zapewne 1Hz); klikasz "Read data" i otwierasz plik z danymi. Klikasz ponownie na "Data"; w prawym dolnym rogu wybierasz "Digital" jako że tworzysz filtr cyfrowy. W okienku po prawej ustawiasz częstość próbkowania filtra ( taką samą jak częstość próbkowania sygnału ) i jego typ (jak pisałem wcześniej IIR lub IFR).

    Po kliknięciu na "Time response" zostanie wygenerowany wykres sygnału podanego na filtr i jego odpowiedź.

    Pozdrawiam

    Michał