Witam, próbuję przy pomocy akcelerometru ADXL345 wyznaczyć położenie obiektu w przestrzeni. Chodzi mi o kąty roll i pitch. Kiedy próbuję całkować sygnał z żyroskopu i wyznaczać te kąty wszystko jest super i działa właściwie. Nie wiedzieć czemu z akcelerometrem mam kłopot. Niby się wszystko wyznacza i działa ale dane bardzo wolno się zmieniają. Sprawa jest trochę skomplikowana do wytłumaczenia ale wygląda to tak. :
Kiedy wolno przechylam pojazd ( wolno znaczy, bardzo ślamazarnie i wolno ) dane przeliczane nadążają za położeniem. Ale kiedy wykonuje szybkie ruchy wszystko szlak trafia. Obiekt startuje z pozycji 0,0 takie też mam odczyty przechylam szybko o 45 stopni w lewo i wracam do 0. Kiedy obiekt fizycznie jest już w punkcie 0 pomiary wskazują że znajduje się wychylony o 30 stopni i te dane tak pomału w ciągu sekundy wracają do 0. ( Zaznaczam że fizycznie obiekt jest już 0,0 a tam ciągle 30, 25 , 20 ,15, 10 ,5 i dopiero 0 )
Funkcja licząca położenie wygląda tak:
no i rollAccel wyrzucam sobie na konsole. Sama inicjacja akcelerometru wygląda tak:
Zaznaczam że problem jest w akcelerometrze bo przy liczeniu tego samego ale z wykorzystaniem żyro jest wszystko super. Atmega taktowana 16MHz transmisja z akcelerometrem po i2C z częstotliwością 400kHz. Dla mnie wygląda to tak jak by akcelerometr z opóźnieniem podawał swoje wskazania gdzieś dziwnie zbuforowane. Możliwe że akcelerometr jest źle zainicjowany.
Kiedy wolno przechylam pojazd ( wolno znaczy, bardzo ślamazarnie i wolno ) dane przeliczane nadążają za położeniem. Ale kiedy wykonuje szybkie ruchy wszystko szlak trafia. Obiekt startuje z pozycji 0,0 takie też mam odczyty przechylam szybko o 45 stopni w lewo i wracam do 0. Kiedy obiekt fizycznie jest już w punkcie 0 pomiary wskazują że znajduje się wychylony o 30 stopni i te dane tak pomału w ciągu sekundy wracają do 0. ( Zaznaczam że fizycznie obiekt jest już 0,0 a tam ciągle 30, 25 , 20 ,15, 10 ,5 i dopiero 0 )
Funkcja licząca położenie wygląda tak:
Kod: C / C++
no i rollAccel wyrzucam sobie na konsole. Sama inicjacja akcelerometru wygląda tak:
Kod: C / C++
Zaznaczam że problem jest w akcelerometrze bo przy liczeniu tego samego ale z wykorzystaniem żyro jest wszystko super. Atmega taktowana 16MHz transmisja z akcelerometrem po i2C z częstotliwością 400kHz. Dla mnie wygląda to tak jak by akcelerometr z opóźnieniem podawał swoje wskazania gdzieś dziwnie zbuforowane. Możliwe że akcelerometr jest źle zainicjowany.