Łączenie danych żyroskopu i akcelerometru

Buduję robota równoważącego używając systemu Nxt Lego Mindstorm. Używam dwóch czujników firmy HiTechnic, pierwszy to akcelerometr, a drugi Żyroskop. Udało mi się odfiltrować szum z obu czujników i kątów wyprowadzenia dla obu w zakresie od -90 do 90 stopni, przy czym 0 stopni jest idealnie zrównoważone.

Moim kolejnym wyzwaniem jest połączenie obu wartości czujnika, aby skorygować dryf żyroskopu w czasie. Poniżej przykładowy wykres I stworzony na podstawie rzeczywistych danych, aby zademonstrować dryf z żyroskopu:

Tutaj wpisz opis obrazka

Najczęściej stosowanym podejściem do łączenia tych czujników jest użycie filtra Kalmana. Jednak nie jestem ekspertem w rachunku i naprawdę nie rozumiem symboli matematycznych, ale rozumiem matematykę w kodzie źródłowym.

Używam RobotC (który jest jak każda inna pochodna C) i byłbym naprawdę wdzięczny, gdyby ktoś mógł podać mi przykłady jak wykonać to w C.

Dziękuję za pomoc!

WYNIKI ROZWIĄZANIA:

Dobra, kersny rozwiązał mój problem wprowadzając mnie do filtrów uzupełniających. To jest wykres ilustrujący moje wyniki:

wynik #1

Tutaj wpisz opis obrazka

wynik #2

Tutaj wpisz opis obrazka

Jak widać, filtr koryguje dryf żyroskopowy i łączy oba sygnały w jeden gładki sygnał.

Edit: ponieważ naprawiałem tak czy inaczej, pomyślałem, że fajnie będzie pokazać platformę, której użyłem do wygenerowania tych danych:

Tutaj wpisz opis obrazka

Author: Dylan Vester, 2009-10-19

2 answers

Filtry Kalmana są świetne i w ogóle, ale uważam, że filtr komplementarny jest znacznie łatwiejszy do wdrożenia z podobnymi wynikami. Najlepsze artykuły, które znalazłem do kodowania filtra uzupełniającego to ta wiki (wraz z Ten artykuł o konwersji czujników na jednostki inżynieryjne) i plik PDF w pliku zip na ta strona (w dokumentacji technicznej wierzę, że nazwa pliku w zip to filter.pdf);

PS. Jeśli utkniesz na filtrze Kalmana, tutaj to jakiś kod C-składni dla Arduino, który go implementuje.

 43
Author: kersny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-17 14:16:24

Gamasutra.com uruchomił artykuł o używaniu filtrów Kalmana do filtrowania WiiMote .

Na końcu artykułu znajdują się linki do kodu źródłowego C++.

 5
Author: Vatine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 14:34:37