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

Atmega328p i GY-80 - Filter MARG - wyznaczenie położenia w przestrzeni, GY-80

prociomen007 11 Lis 2014 15:20 807 0
REKLAMA
  • #1 14121561
    prociomen007
    Poziom 18  
    Witam, posiadam płytkę GY-80 (https://elty.pl/pl/p/GY-80-L3G4200D-ADXL345-HMC5883L-BMP085/1047)z rozmieszczonymi czterema czujnikami:
    - akcelerometr ADXL345
    - żyroskop L3G4200D
    - magnetometr MC5883L
    - czujnik ciśnienia BMP085
    Wszystko połączone jest magistralą i2c. Próbuję, na atmedze 328p, wdrożyć obsługę tych czujników z wykorzystaniem filtru MARG, dostępnego tutaj:
    http://www.samba.org/tridge/UAV/madgwick_internal_report.pdf
    do wyznaczenia położenia płytki w przestrzeni. Autor filtru proponuje jego dwie wersje: z obsługą magnetometru i bez. Pierwsza wersja działa mi bez najmniejszych problemów. Problem jest z drugą ( tą, która posiada implementacje magnetometru ). Po uruchomieniu funkcji, dane o położeniu wyznaczają się prawidłowo, jednak cały czas, do położenia dodawana jest jakaś dziwna stała. Nawet po uruchomieniu programu ( nie dotykając płytki ) startowe dane 0,0,0 zaczynają same sobie rosnąć. Każda rośnie w innym tempie, zwiększając się zawsze o jeden. Pomiar położenia cały czas działa, ale przesuwa się coraz bardziej w stronę dodatnią. Po paru sekundach, zamiast 0,0,0 ( nie dotykając płytki rzecz jasna ) mam 5,100,50. Dodam, że surowe dane z czujników sprawdzałem 50 razy i są na pewno dobre ( szczególnie te z magnetometru ). Problematyczna funkcja wygląda tak:

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


    Czujniki inicjuję tak:

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


    Natomiast sam odczyt wygląda tak:

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