logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

atmega128 - Spowolnione wyznaczenie kątów roll i pitch przy użyciu akcelerom.

prociomen007 15 Sty 2015 20:19 801 5
REKLAMA
  • #1 14334074
    prociomen007
    Poziom 18  
    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:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    no i rollAccel wyrzucam sobie na konsole. Sama inicjacja akcelerometru wygląda tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    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.
  • REKLAMA
  • #2 14334657
    Piotr Piechota
    Poziom 22  
    Akcelerometr w układach AHRS służy do "zerowania błędu" żyroskopu. Nie nadaję się do szybkiego określania położenia. Sam tangens też nie załatwia problemu. Spróbuj odwrócić "pojazd" pionowo - kołami do góry następnie odwróć o 90 stopni w osi pionowej i postaw na kołach - zdziwisz się co pokazuje żyroskop. Lepszych procedur nie trzeba pisać samemu. Można użyć gotowców. Ja używałem tego: MahonyAHRS.c - funkcja oczekuje też danych z magnetometru ale mogą to być zera i korekcji od magnetometru nie będzie.

    Powodzenia
  • REKLAMA
  • #3 14335870
    prociomen007
    Poziom 18  
    Ta biblioteka wygląda rzeczywiście ciekawie tylko w jaki sposób należy wykalibrować to:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    sampleFreq to wiadomo częstotliwość próbkowania ale te kp i Ki jak należy ustawić?
  • REKLAMA
  • #4 14335893
    Piotr Piechota
    Poziom 22  
    Zostaw jak jest. Ja nie musiałem zmieniać.
  • REKLAMA
  • #5 14335994
    prociomen007
    Poziom 18  
    Nie mam pojęcia czemu ale nie liczy mi to prawidłowo

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dane z żyroskopu podaje w postaci stopni na sekunde. Z akcelerometru w m/s^2
REKLAMA