Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 11 lut 2025, o 15:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 22 lut 2018, o 23:09 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 43
Pomógł: 1

Witam. Właśnie przeszedłem do testów swojego urządzenia, którego jednym z zadań jest śledzenie ruchu pojazdu. Użyłem do tego magnetometru QMC5883L i akcelerometru ADXL345 ( akcelerometr w celu uwzględniania kąta przechylenia pojazdu podczas obliczeń).

Pojazd jest na tyle powolny że jego przyspieszenie pominąłem, a dodatkowo wystarczy mi rozdzielczość rzędu 10-20 stopni. Problem polega na tym że z racji konstrukcji pojazd dosyć często wpada w drgania, co za tym idzie akcelerometr doznaje przyspieszeń poziomych i błędnie wyznacza przechylenie a co za tym idzie obliczanie kierunku jest zakłamane. Myślę że sprawę może ułatwić to że drgania mają względnie dużą częstotliwość w porównaniu do czasu przechylania się pojazdu. Niestety nie mam jeszcze zarejestrowanych tych przyspieszeń więc nie mogę dokładnie oszacować co było by najlepszym rozwiązaniem, ale czytałem trochę teorii o filtrze Kalmana i myślę że odpowiednio skalibrowany mógłby tutaj się sprawdzić. Problem jest taki że nigdzie nie znalazłem łopatologicznego opisu jak go zastosować.

Byłbym wdzięczny za każde naprowadzenie na rozwiązanie problemu
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2018, o 07:51 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

resonator napisał(a):
Problem jest taki że nigdzie nie znalazłem łopatologicznego opisu jak go zastosować.

i nie znajdziesz
Filtr Kalmana jest filtrem stochastycznym i bez solidnej wiedzy ze statystyki, nie dasz rady go dostroić.
Druga sprawa, to jest to filtr bardzo wymagający jeśli chodzi o zasoby procesora i jakość pomiarów.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2018, o 09:23 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 43
Pomógł: 1

Alef2 napisał(a):
resonator napisał(a):
Problem jest taki że nigdzie nie znalazłem łopatologicznego opisu jak go zastosować.

i nie znajdziesz
Filtr Kalmana jest filtrem stochastycznym i bez solidnej wiedzy ze statystyki, nie dasz rady go dostroić.
Druga sprawa, to jest to filtr bardzo wymagający jeśli chodzi o zasoby procesora i jakość pomiarów.


W takim razie co należy zrobić? Jest jakiś inny sposób?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2018, o 17:01 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Jeśli chcesz tylko tłumić drgania akcelerometru i nie stosujesz żyroskopu, to nie musisz stosować filtracji Kalmana - głównie z powodu dryftu żyroskopu ( bardzo powolnego "wędrowania zera" ) stosuje się filtrację stochastyczną.
Do prostej filtracji (filtr dolnoprzepustowy) wystarczą Ci filtry IIR (NOI) lub FIR (SOI), projektuje się je w oparciu o zwykły filtr analogowy np. Bessela lub Czybyszewa, obejdzie się bez obliczeń prawdopodobieństwa itp. Na miejsce tego dojdzie obliczenie transmitancji filtra analogowego plus dyskretyzacja równania. Jak będziesz zainteresowany to poszukam kodu z filtrem SOI lub NOI (nie pamiętam jaki tam w końcu był) - kiedyś na jakiegoś PIC pisałem. Zaznaczam, że kod jest napisany beznadziejnie - czytaj będziesz musiał sobie go poprawić.

Natomiast jeśli bardzo potrzebujesz filtracji podobnej do Kalmana to możesz się rozejrzeć za filtrami alfa-beta - jest nieco prostsza.
W ostateczności pozostaje nauka :) w załączniku masz całkiem dobrze opisany filtr Kalmana.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2018, o 00:15 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 43
Pomógł: 1

abel11 napisał(a):
Jeśli chcesz tylko tłumić drgania akcelerometru i nie stosujesz żyroskopu, to nie musisz stosować filtracji Kalmana - głównie z powodu dryftu żyroskopu ( bardzo powolnego "wędrowania zera" ) stosuje się filtrację stochastyczną.
Do prostej filtracji (filtr dolnoprzepustowy) wystarczą Ci filtry IIR (NOI) lub FIR (SOI), projektuje się je w oparciu o zwykły filtr analogowy np. Bessela lub Czybyszewa, obejdzie się bez obliczeń prawdopodobieństwa itp. Na miejsce tego dojdzie obliczenie transmitancji filtra analogowego plus dyskretyzacja równania. Jak będziesz zainteresowany to poszukam kodu z filtrem SOI lub NOI (nie pamiętam jaki tam w końcu był) - kiedyś na jakiegoś PIC pisałem. Zaznaczam, że kod jest napisany beznadziejnie - czytaj będziesz musiał sobie go poprawić.

Natomiast jeśli bardzo potrzebujesz filtracji podobnej do Kalmana to możesz się rozejrzeć za filtrami alfa-beta - jest nieco prostsza.
W ostateczności pozostaje nauka :) w załączniku masz całkiem dobrze opisany filtr Kalmana.



Dziękuję za wyczerpującą odpowiedź, wedle rady zwróciłem się w stronę filtrów dolnoprzepustowych, poczytałem trochę teorii i napisałem taki prosty kawałek kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie wiem czy to już jest filtr SOI lub NOI jednak efekty są póki co o niebo lepsze niż bez tego uśredniania :D Pomiar jest próbkowany 10 razy na sekundę, więc wprowadza to 2 sekundowe opóźnienie, co na razie pozwala odcinać te wszystkie krótkie wibracje. Nie testowałem tego jeszcze na platformie, ale myślę że po usztywnieniu konstrukcji da przynajmniej taki efekt, że pomiar kierunku nie będzie skakał o 180stopni :lol: Jeśli to będzie jeszcze za mało spróbuje pod x_old podstawić średnią z kilku ostatnich pomiarów.
Jeśli uda mi się jutro przetestować na pewno dam znać.
A co do Twojego filtra, jeśli oczywiście to nie problem, chętnie podpatrzył bym chociaż jego szkielet, żeby wiedzieć jak to ugryźć :)

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2018, o 10:30 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Wygrzebałem kawałek kodu z filtrem NOI (na podstawie filtra Czebyszewa I stopnia).
Jeśli chciał byś podobny kod wykorzystywać w układzie który filtracje sygnału wykonuje nie ciągle (od chwili t0 do końca), tylko okresowo powiedzmy co 10 sekund chcesz filtrować sygnał trwający 1 sekundę to usuń specyfikator static z tablic wejścia i wyjścia. Dzięki czemu dostaniesz zawsze taki sam błąd zamiast jakiś przypadkowych skoków.
Ważna uwaga - pomimo ogólnej niechęci (mojej również) do stosowania zmiennych typu float w mikrokontrolerach, dla tego typu filtracji jest to nieuniknione z uwagi na błędy zaokrągleń i możliwe problemy z stabilnością. W filtrze SOI nie było by tego problemu, ale współczynników mam tam chyba około 30 i tablica mimo wszystko też jest zmiennoprzecinkowa.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Dołączam też charakterystyki które udało mi się wygrzebać - powinny być od tego ale nie dam sobie ręki obciąć.
Pasmo przenoszenia
Obrazek

Odpowiedź skokowa
Obrazek

Efekt filtracji - niestety osie są skalowane w próbkach a nie pamiętam czasu próbkowania i skali czujnika.
Obrazek



Ostatnio edytowano 24 lut 2018, o 11:25 przez abel11, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2018, o 10:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 258
Lokalizacja: Norwegia
Pomógł: 16

Nie żebym się czepiał, ale pozwolę sobie na małe sprostowanie żeby się nic źle nie utrwaliło. Nie istnieje filtr ani wielomian CZYbyszewa, raczej chodzi wam o filtr CZEbyszewa. Czebyszewa :)
Naprawdę nie czepiam się ani nie wymądrzam, ale jakoś rani mój rozum takie przekręcenia nazwiska geniusza :) chyba że czegoś nie wiem a to jest bardzo prawdopodobne bo stary już jestem i pamięć już nie ta...

_________________
SP2LUB - LA1BUA



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2018, o 11:24 
Offline
Użytkownik

Dołączył(a): 05 wrz 2017
Posty: 169
Pomógł: 31

Dziękuje za zwrócenie uwagi już poprawiam błąd.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO