Kalman Filtresi Nasıl Kullanılır

Katılım
15 Aralık 2023
Mesajlar
1.385
Makaleler
4
Çözümler
10
Beğeniler
1.713
Selamlar hocalarım, okulda geliştirdiğimiz roket için olan uçuş bilgisayarını kodluyorum. BMP180 (basınç, sıcaklık ve aslen irtifa için) ve MPU-6500 kullanıyoruz (aslında MPU-9250 kullanacaktık ama yanlış ürünü gönderdiler elimizde o yüzden MPU-6500 var, mail attım MPU-9250 gönderirlerse plan hala onu kullanmak.). MPU ise gyro ve ivme verileri için işte. Bizim BMP ve MPU'daki gürültüyü filtreleyip stabil bir sonuç almamız için ve MPU'dan gelen saf veriyi yer yüzü ile yapılan açıya çevirmek için Kalman Filtresi adı verilen bir filtre kullanmamız lazım. Epey bi araştırdım ama sorun şu ki ben hiçbir şey anlamadım. Devre şu an protoip aşamasında olduğu için breadboard üzerine kurulu ve mikrodenetleyici kart Arduino Nano ESP32. Kodları isterseniz atabilirim. BMP için güzel düzenli bir kodum var da, MPU kodu biraz karışık olsun. İsterseniz atarım onları da.
 
Selamlar hocalarım, okulda geliştirdiğimiz roket için olan uçuş bilgisayarını kodluyorum. BMP180 (basınç, sıcaklık ve aslen irtifa için) ve MPU-6500 kullanıyoruz (aslında MPU-9250 kullanacaktık ama yanlış ürünü gönderdiler elimizde o yüzden MPU-6500 var, mail attım MPU-9250 gönderirlerse plan hala onu kullanmak.). MPU ise gyro ve ivme verileri için işte. Bizim BMP ve MPU'daki gürültüyü filtreleyip stabil bir sonuç almamız için ve MPU'dan gelen saf veriyi yer yüzü ile yapılan açıya çevirmek için Kalman Filtresi adı verilen bir filtre kullanmamız lazım. Epey bi araştırdım ama sorun şu ki ben hiçbir şey anlamadım. Devre şu an protoip aşamasında olduğu için breadboard üzerine kurulu ve mikrodenetleyici kart Arduino Nano ESP32. Kodları isterseniz atabilirim. BMP için güzel düzenli bir kodum var da, MPU kodu biraz karışık olsun. İsterseniz atarım onları da.
Selam, sorunun Kalman Filtresi ile ilgili kısmını yanıtlamaya çalışayım. Kalman Filtresi, zaman içerisinde değişen sistem durumlarını tahmin etmek için kullanılan bir algoritmadır ve genellikle gürültülü ölçümlerden daha doğru sonuçlar almak için kullanılır. MPU-6500'den gelen verileri filtrelemek için basit bir Kalman Filtresi uygulaması aşağıdaki gibi olabilir:

C++:
// Kalman filtre sınıfı
class Kalman {
public:
    Kalman() {
        covariance = 1; // Başlangıç kovaryans değeri
        estimate = 0;    // Tahmin edilecek başlangıç değeri
        kalmanGain = 0;  // Kalman kazancı
    }

    float update(float measurement) {
        // Kalman kazancını hesapla
        kalmanGain = covariance / (covariance + measurementNoise);
        // Tahmin güncellemesi
        estimate = estimate + kalmanGain * (measurement - estimate);
        // Kovaryans güncellemesi
        covariance = (1 - kalmanGain) * covariance;
        return estimate;
    }

private:
    float estimate;       // Tahmin
    float covariance;     // Kovaryans
    float kalmanGain;     // Kalman Kazancı
    const float measurementNoise = 1; // Ölçüm gürültüsü
};

Kalman kalmanX; // X ekseni için kalman filtresi
Kalman kalmanY; // Y ekseni için kalman filtresi

void setup() {
    // MPU-6500 başlatma kodları
}

void loop() {
    float accelX, accelY, accelZ; // MPU'dan okunan ivme verileri
    // İvme verilerini oku
    // accelX = ...;
    // accelY = ...;

    // Kalman filtresi ile stabil veriyi al
    float filteredX = kalmanX.update(accelX);
    float filteredY = kalmanY.update(accelY);

    // Stabil verileri kullan
}

Bu kod, MPU-6500'den gelen X ve Y ivme verilerini filtrelemek için basit bir Kalman filtresi uygulamasıdır. Eğer daha fazla yardıma ihtiyacın olursa ya da kodunda spesifik bir yerde takılırsan, kodunu paylaşabilirsin!
 
Selam, sorunun Kalman Filtresi ile ilgili kısmını yanıtlamaya çalışayım. Kalman Filtresi, zaman içerisinde değişen sistem durumlarını tahmin etmek için kullanılan bir algoritmadır ve genellikle gürültülü ölçümlerden daha doğru sonuçlar almak için kullanılır. MPU-6500'den gelen verileri filtrelemek için basit bir Kalman Filtresi uygulaması aşağıdaki gibi olabilir:

C++:
// Kalman filtre sınıfı
class Kalman {
public:
    Kalman() {
        covariance = 1; // Başlangıç kovaryans değeri
        estimate = 0;    // Tahmin edilecek başlangıç değeri
        kalmanGain = 0;  // Kalman kazancı
    }

    float update(float measurement) {
        // Kalman kazancını hesapla
        kalmanGain = covariance / (covariance + measurementNoise);
        // Tahmin güncellemesi
        estimate = estimate + kalmanGain * (measurement - estimate);
        // Kovaryans güncellemesi
        covariance = (1 - kalmanGain) * covariance;
        return estimate;
    }

private:
    float estimate;       // Tahmin
    float covariance;     // Kovaryans
    float kalmanGain;     // Kalman Kazancı
    const float measurementNoise = 1; // Ölçüm gürültüsü
};

Kalman kalmanX; // X ekseni için kalman filtresi
Kalman kalmanY; // Y ekseni için kalman filtresi

void setup() {
    // MPU-6500 başlatma kodları
}

void loop() {
    float accelX, accelY, accelZ; // MPU'dan okunan ivme verileri
    // İvme verilerini oku
    // accelX = ...;
    // accelY = ...;

    // Kalman filtresi ile stabil veriyi al
    float filteredX = kalmanX.update(accelX);
    float filteredY = kalmanY.update(accelY);

    // Stabil verileri kullan
}

Bu kod, MPU-6500'den gelen X ve Y ivme verilerini filtrelemek için basit bir Kalman filtresi uygulamasıdır. Eğer daha fazla yardıma ihtiyacın olursa ya da kodunda spesifik bir yerde takılırsan, kodunu paylaşabilirsin!
Kral sorunu çoktan çözdüm
 
Geri
Yukarı Alt