Skocz do zawartości
Ważne ogłoszenie » Kliknij i sprawdź informacje o nowym forum! Czytaj dalej... ×
Komentator

Filtr Kalmana od teorii do praktyki - #3 - Testy na STM32

Recommended Posts

html_mig_img
W poprzedniej części wyprowadziłem model stanowy dla systemu określającego położenie kątowe robota na podstawie danych z akcelerometru i żyroskopu. Zaprojektowałem filtr Kalmana dla tego modelu i sprawdziłem jego działanie z rzeczywistymi danymi pomiarowymi.Teraz zajmę się przeniesieniem algorytmu na środowisko docelowe, czyli na STM32.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Mam kilka uwag.

1. Czy bezpieczna jest ta linia? y[0] = atan(acc_x/acc_y)*180/M_PI Co jeśli acc_y będzie równe 0?

2. Nigdzie nie widzę użycia dwuelementowej tablicy CP? W tej linijce nie ma błędu? matrix_1x2_mul_2x1(C, C, CPCT); Z nazwy funkcji wynika, że mnożymy macierz 1x2 i macierz 2x1 a jako parametry są dwie takie same tablice C? Nie powinno być C*CP?

3. Czy nie lepiej byłoby skorzystać z tablic dwuwymiarowych, kod od razu był by dużo czytelniejszy.

Udostępnij ten post


Link to post
Share on other sites

1. Faktycznie lepiej zabezpieczyć się przed dzieleniem przez 0. Można dodać warunki, że dla acc_x ujemnego i acc_y = 0, y[0] = -90, dla acc_x dodatniego i acc_y = 0, y[0] = 90 i dla acc_x = 0, acc_y = 0, y = 0.

2. Powinno być CP * C - macierz CP jako pierwsza, chociaż w tym przypadku zamieniona kolejność da taki sam wynik.

3. Jak komuś wygodniej to oczywiście może użyć tablic dwuwymiarowych. Trzeba tylko pamiętać, żeby dodać transpozycje dla macierzy, w których jeden z wymiarów jest równy 1. W aktualnym kodzie korzystam z faktu, że macierz Nx1 i 1xN jest przechowywana w ten sam sposób.

Udostępnij ten post


Link to post
Share on other sites

Mam jeszcze jedno pytanie, dlaczego dane w kolumnie est_angle w pliku data3.txt są aż tak duże? Wrzuciłem ten filtr do Visual Studio i dla danych wejściowych acc_x, acc_y, gyro_z dane wyjściowe są 100 razy mniejsze niż te w kolumnie est_angle.

Udostępnij ten post


Link to post
Share on other sites

Odpowiedź znajdziesz w pliku logger.c - wynik przed wysłaniem przez usart jest mnożony przez 100, żeby uwzględnić 2 miejsca po przecinku.

Udostępnij ten post


Link to post
Share on other sites

Witam mam serdeczna prośbę czy mógłby ktoś krok po korku ze screenami kolejnych działań pokazać jak uruchomić ten project w eclipse.

Otworzenie, zaimportowanie i kompilacja.

Ni jak mi nie wychodzi ciągle jakieś błedy

"The selection cannot be launched, and there are n recent launches"

będe wdzieczny za każda pomoc

ewentualnie kontakt do przesłania instrukcji moniu30@wp.pl

Udostępnij ten post


Link to post
Share on other sites

Witam

Zastanawia mnie ten kawałek:

matrix_2x1_mul_1x2(KS, K, KSKT);

matrix_2x2_sub_2x2(P_pri, KSKT, P_post);

Macierz KSKT w inicjacji jest 2 elementowa, wydaje mi się że powinna posiadać 4 elementy.

Przykład świetnie działa, podziękowali

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

×