Skocz do zawartości

Akcelerometr -problemy w określaniu kąta


DeWu

Pomocna odpowiedź

Witam. W jaki sposób można (o ile w ogóle można) pozbyć się lub zminimalizować wpływ przyspieszenia robota na wyliczenia kąta przechylenia za pomocą akcelerometru i żyroskopu? Główny problem leży po stronie akcelerometru bo to on reaguje na "dodatkowe" przyśpieszenia. No własnie, tylko czy można jakoś to poprawić, bo sama wartość kąta wynikająca z przyśpieszenia/prędkości pojazdu potrafi zmienić się aż o 12 stopni, a to zdecydowanie za dużo.

Link do komentarza
Share on other sites

W ogólnym przypadku przyśpieszenie jest nieodróżnialne of grawitacji -- bo jest w zasadzie tym samym, w każdym razie według obowiązujących aktualnie teorii. Jednak w przypadku szczególnym, gdy grawitacja jest w miarę stała a przyśpieszenia zmieniają się dość szybko, da się te ostatnie odfiltrować filtrem dolnoprzepustowym.

Link do komentarza
Share on other sites

Z jakiego algorytmu korzystasz? Kalman? Madgwick? Komplementarny? Inny? Bez magnetometru jesteś w stanie wyznaczyć bez problemu przechylenie i pochylenie swojego robota.

Jeżeli poprawnie dobierzesz nastawy swojego algorytmu to dzięki żyroskopowi przyspieszanie robota nie będzie stanowiło problemu dla odczytów.

Link do komentarza
Share on other sites

Przepraszam za zwłokę.

Pomysł z filtrowaniem przyspieszeń jest jakby to powiedzieć... dobry, ale dokładnie to robi filtr komplementarny, a pomimo jego stosowania problem dalej występuje.

Stosuje zarówno filtr komplementarny jak i Kalmana. Pomiary wydają się poprawne (bez stosowania magnetometru). To może głupio zabrzmieć - ale pobrałem aplikacje symulujące działanie poziomicy na androida. Tam również ten problem występuje natomiast w mniejszym stopniu tzn. odchyłki kąta wynikające z samych przyśpieszeń nie są tak duże. Może to kwestia czujników ?

Filtru Madgwicka nigdy nie stosowałem, ale przy czasie wypróbuje.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jest też taka opcja, że masz źle ustawioną czułość swojego żyroskopu i/lub akcelerometru. Np. masz ustawioną na +- 16G (akcelerometr) albo +-2000°/s (gyr), gdzie swoje obliczenia masz dla zakresu np. +-8G i +-500°/s.

Możesz też mieć niepoprawnie zdefiniowaną częstotliwość próbkowania. Lub wydaje Ci się że pobierasz dane z czujnika 200Hz, gdzie w rzeczywistości masz znacznie mniej.

Luźne propozycje i strzelam, bo tak jak deshipu napisał przydałoby się więcej info -chociażby jaki czujnik.

Link do komentarza
Share on other sites

Wiem, wiem - odpisuje w żółwim tempie, ale wracam do tematu bo nie daje mi spokoju.

Układ to MPU6050. Przeprowadzam eksperyment polegający na tym, że umieszczam czujnik na płaskiej powierzchni i przemieszczam go tylko poziomo, czyli rzeczywisty kąt się nie zmienia i wynosi 0. Natomiast to co uzyskuje w wyniku przeliczeń wygląda np. tak:

Taki przebieg zapewne wynika z jakiegoś błędu w kodzie (niestety tego udostępnić nie mogę, to jedno, no a z drugiej strony nie o to też chodzi żeby ktoś poprawiał za mnie kod).

Możesz też mieć niepoprawnie zdefiniowaną częstotliwość próbkowania. Lub wydaje Ci się że pobierasz dane z czujnika 200Hz, gdzie w rzeczywistości masz znacznie mniej

Przeanalizowałem to i faktycznie może tu skrywa się mój błąd. Z tym, że im bardziej sie wgłębiam tym więcej pytań.

Po pierwsze pobór danych z czujnika odbywa się w pętli głównej (pseudokod)

int main(void)

{

//jakis kod

pobierz dane();

przelicz_katy();

//jakis kod

}

W przypadku ustawienia transmisji i2c na 400K=kHz dane są pobierane co około 500 us a dla 100 kHz co około 2 ms. Natomiast:

The Sample Rate is generated by dividing the gyroscope output rate by SMPLRT_DIV:

Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)

where Gyroscope Output Rate = 8kHz when the DLPF is disabled (DLPF_CFG = 0 or 7), and 1kHz

when the DLPF is enabled (see Register 26).

Note: The accelerometer output rate is 1kHz. This means that for a Sample Rate greater than 1kHz,
the same accelerometer sample may be output to the FIFO, DMP, and sensor registers more than

once.

Czy to oznacza, że maksymalną częstotliwość próbek dla obu danych pobieranych bezpośrednio bedzie wynosiła 1 kHz, czyli każda partia danych co 1ms - i też taki powinienem przyjąć czas próbkowania?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.