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ń?
(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.
A 60 lat temu były kompilatory do Arduino i miały tę samą aktualizacje co teraz???
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
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ą.
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.
Podaj linki do tych przykładów.
A w przykładach z hiperłącza wywala błędy przykładowo w inicjalizacji MPU6050 lub w funkcji min, gdzie jest tylko jeden argument