Skocz do zawartości

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


Pomocna odpowiedź

Napisano
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
  • 1 miesiąc później...

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.

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.

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.

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

  • 2 miesiące później...
  • 2 lat(a) później...

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 [email protected]

  • 7 miesiące później...

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

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

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

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...