Witam.
Zaprojektowałem i wykonałem układ składający się z akcelerometru, żyroskopu i czujnika pola magnetycznego (kompas, jako dodatek). Chciałbym za pomocą tych czujników określić pozycję układu, obrót wokół osi Z, X i Y. O ile X i Y to nie problem bo można to zrobić za pomocą samego akcelerometru (taka dokładność mi w 100% wystarcza) to wokół osi Z jest problemem. Na razie zrobiłem to za pomocą całkowania pomiaru z żyroskopu, a do kompensacji dryfu wykorzystałem kompas, zeruje on dryf tylko w pozycji początkowej (tzn pochylenie "x" i przechylenie "y" = 0 i obrót wokół osi Z względem początkowej pozycji = 0).
Wszystko w zasadzie działa jednak nie jestem do końca zadowolony z rezultatu. Po kilku ruchach układem w osi Z pozycja się gubi a jak zadziałą kompensacja dryfu to widać jej działania na układzie (szybki skok do pozycji 0). Wolałbym żeby odbywało się to w miarę płynnie.
Nie zależy mi na bardzo dużej dokładności. Czy jest jakiś prosty algorytm? Niestety w układzie mam zajęte wszystkie timery i pomiar odczytów odbywa się w pętli głównej do której wrzuciłem delay, tak więc nie jest pewne, że odstęp pomiędzy pomiarami zawsze jest taki sam.
Jeżeli chodzi o filtrację danych z żyro to powinienem filtrować pomiar (prędkość kątową) czy wynik po całkowaniu (czyli kąt)? W obsłudze żyroskopu zaimplementowałem algorytm niwelujący wpływ temperatury na pomiar.
W 34 sekundzie widać jak zostaje skompensowany dryf żyroskopu.
Zaprojektowałem i wykonałem układ składający się z akcelerometru, żyroskopu i czujnika pola magnetycznego (kompas, jako dodatek). Chciałbym za pomocą tych czujników określić pozycję układu, obrót wokół osi Z, X i Y. O ile X i Y to nie problem bo można to zrobić za pomocą samego akcelerometru (taka dokładność mi w 100% wystarcza) to wokół osi Z jest problemem. Na razie zrobiłem to za pomocą całkowania pomiaru z żyroskopu, a do kompensacji dryfu wykorzystałem kompas, zeruje on dryf tylko w pozycji początkowej (tzn pochylenie "x" i przechylenie "y" = 0 i obrót wokół osi Z względem początkowej pozycji = 0).
Wszystko w zasadzie działa jednak nie jestem do końca zadowolony z rezultatu. Po kilku ruchach układem w osi Z pozycja się gubi a jak zadziałą kompensacja dryfu to widać jej działania na układzie (szybki skok do pozycji 0). Wolałbym żeby odbywało się to w miarę płynnie.
Nie zależy mi na bardzo dużej dokładności. Czy jest jakiś prosty algorytm? Niestety w układzie mam zajęte wszystkie timery i pomiar odczytów odbywa się w pętli głównej do której wrzuciłem delay, tak więc nie jest pewne, że odstęp pomiędzy pomiarami zawsze jest taki sam.
Jeżeli chodzi o filtrację danych z żyro to powinienem filtrować pomiar (prędkość kątową) czy wynik po całkowaniu (czyli kąt)? W obsłudze żyroskopu zaimplementowałem algorytm niwelujący wpływ temperatury na pomiar.
W 34 sekundzie widać jak zostaje skompensowany dryf żyroskopu.