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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 14 lip 2025, o 21:23


    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 ] [ Zaznacz wszystko ]
    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: 259
    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 1 gość


    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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO