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:
Czujniki inicjuję tak:
Natomiast sam odczyt wygląda tak:
- 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++
Czujniki inicjuję tak:
Kod: C / C++
Natomiast sam odczyt wygląda tak:
Kod: C / C++