Arduino Polska Forum
Filtr kalmana dla mpu6050 - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Czujniki (https://forum.arduinopolska.pl/dzial-czujniki)
+--- Wątek: Filtr kalmana dla mpu6050 (/watek-filtr-kalmana-dla-mpu6050)



Filtr kalmana dla mpu6050 - Scislov - 15-05-2020

Witam. Chcę zrobić stabilizację samolotu RC na arduino. Potrzebny jest mi do tego program z filtrem kalmana, jednak wszystkie, jakie znalazłem na internecie nie działają(prawdopodobnie są dla starszych wersji oprogramowania). Może mi ktoś podesłać link to jakiejś strony z kalmanem lub napisać w odpowiedzi bibliotekę i implementację tego filtru, aby wpisać tylko dane wyjściowe i uzyskać pitch i roll na wyjściu? Ewentualnie może znacie inne sposoby na połączenie żyroskopu i akcelerometra, aby nie było zakłóceń z przeciążeń?


RE: Filtr kalmana dla mpu6050 - Robson Kerman - 15-05-2020

(15-05-2020, 16:33)Scislov napisał(a): prawdopodobnie są dla starszych wersji oprogramowania

To nie ma nic wspólnego z wersją oprogramowania.
Ba, ten filtr działał 60 lat temu, gdy nie było jeszcze na świecie Arduino.

Jeśli to nie zadziała, oznacza że nie wiesz o czym piszesz.


RE: Filtr kalmana dla mpu6050 - Scislov - 16-05-2020

A 60 lat temu były kompilatory do Arduino i miały tę samą aktualizacje co teraz???


RE: Filtr kalmana dla mpu6050 - Scislov - 16-05-2020

Jeżeli podczas kompilacji wywala błąd w kilku liniach, to chyba znaczy, że kiedyś była inna syntaktyka w Arduino, która teraz nie działa


RE: Filtr kalmana dla mpu6050 - Robson Kerman - 16-05-2020

Napiszę jeszcze raz.
Filtr Kalmana jest tworem matematycznym i nie ma nic wspólnego z platformą na jakiej go zaimplementowano.
Jeśli liczę coś takiego:
Kod:
KalmanFilter::KalmanFilter(double angle, double bias, double measure)
{
    Q_angle = angle;
    Q_bias = bias;
    R_measure = measure;

    K_angle = 0;
    K_bias = 0;

    P[0][0] = 0;
    P[0][1] = 0;
    P[1][0] = 0;
    P[1][1] = 0;

    kt = (double)micros();
}

double KalmanFilter::update(double newValue, double newRate)
{
    dt = (double)(micros() - kt) / 1000000;

    K_rate = newRate - K_bias;
    K_angle += dt * K_rate;

    P[0][0] += dt * (P[1][1] + P[0][1]) + Q_angle * dt;
    P[0][1] -= dt * P[1][1];
    P[1][0] -= dt * P[1][1];
    P[1][1] += Q_bias * dt;

    S = P[0][0] + R_measure;

    K[0] = P[0][0] / S;
    K[1] = P[1][0] / S;

    y = newValue - K_angle;

    K_angle += K[0] * y;
    K_bias += K[1] * y;

    P[0][0] -= K[0] * P[0][0];
    P[0][1] -= K[0] * P[0][1];
    P[1][0] -= K[1] * P[0][0];
    P[1][1] -= K[1] * P[0][1];

    kt = (double)micros();

    return K_angle;
};

To co to ma wspólnego z wersją IDE?
U mnie się kompiluje.
Po drugie: Napisałem "Jeśli to nie zadziała..." Podejrzyj mój wcześniejszy post, a zauważysz że wyraz "to" jest koloru niebieskiego, ponieważ jest linkiem do repozytorium. Ten filtr używam i nie miałem nigdy problemu z kompilacją.


RE: Filtr kalmana dla mpu6050 - Scislov - 16-05-2020

Nie widziałem hiperłącza. A odnośnie błędów, to miałem na myśli przykłady z internetu, w które miały u mnie błędy i nie mogłem ich uruchomić. Dzisiaj sprawdzę ten kod.


RE: Filtr kalmana dla mpu6050 - Robson Kerman - 17-05-2020

Podaj linki do tych przykładów.


RE: Filtr kalmana dla mpu6050 - Scislov - 17-05-2020

Przykładowo te.
http://www.jarzebski.pl/arduino/rozwiazania-i-algorytmy/odczyty-pitch-roll-oraz-filtr-kalmana.html
https://github.com/jarzebski/Arduino-KalmanFilter/blob/master/KalmanFilter_MPU6050/KalmanFilter_MPU6050.ino

Próbowałem napisać na podstawie tego program, wrzucając do kalmana swoje dane, ale wychodziły dziwne rzeczy


RE: Filtr kalmana dla mpu6050 - Scislov - 17-05-2020

A w przykładach z hiperłącza wywala błędy przykładowo w inicjalizacji MPU6050 lub w funkcji min, gdzie jest tylko jeden argument


RE: Filtr kalmana dla mpu6050 - Robson Kerman - 17-05-2020

Bibliotekę dla MPU masz oczywiście tę? https://github.com/jarzebski/Arduino-MPU6050.git