4. ünite / 10
Uçuş kontrolcüsü, sensörler ve sensör füzyonu
Bu ünitenin sonunda
- F4, F7 ve H7 uçuş kontrolcülerini görev ihtiyacına göre seçmek
- Jiroskop sapmasının ve ivmeölçer gürültüsünün açı kestirimini nasıl bozduğunu göstermek
- Tamamlayıcı süzgeci yazmak ve τ'yu seçmek
- EKF'nin hangi sensörleri neden birleştirdiğini açıklamak
Ders notları
Uçuş kontrolcüsü bir STM32 mikrodenetleyici, bir IMU, bir barometre ve çoğu zaman SD kart taşır. Betaflight F4'te rahat çalışır; PX4 ve ArduPilot'un EKF'si ve çok sensörlü sistemler için H7 (480 MHz, çift duyarlıklı FPU) önerilir.
Hiçbir sensör tek başına yetmez
- Jiroskop: açısal hız, kısa vadede temiz. Ama küçük bir sapma (bias) entegre edilince büyür: 2 °/s sapma 20 saniyede 40° hata.
- İvmeölçer: yerçekimi yönünden eğim verir, uzun vadede doğru. Ama motor titreşimi ve manevra ivmesi onu bozar.
- Barometre: bağıl irtifa, pervane rüzgârına duyarlı. Pusula: mutlak yön, güç kablolarına duyarlı.
Tamamlayıcı süzgeç
Jiroskop yüksek, ivmeölçer alçak frekansta kullanılır; τ ikisinin el değiştirdiği zaman ölçeğidir. Sabit bir jiroskop sapması b kalıcı hata olarak b · τ bırakır: τ küçülürse sapma hatası azalır ama ivmeölçer gürültüsü içeri sızar. PX4 bunun yerine durumu (yönelim, hız, konum, sensör sapmaları) birlikte kestiren bir genişletilmiş Kalman süzgeci (EKF2) kullanır; mantık aynıdır: her sensöre gürültüsü oranında güven.
Not: askıdaki bir multirotorda ivmeölçer büyük ölçüde itki yönünü ölçer; bu yüzden gerçek kestiriciler ivme büyüklüğü 1 g'den saptığında ivmeölçere güveni azaltır.
Simülasyon
Tamamlayıcı süzgeç: jiroskop + ivmeölçer
Jiroskop kısa vadede temizdir ama sapması (bias) birikir; ivmeölçer uzun vadede doğrudur ama gürültülüdür. Tamamlayıcı süzgeç jiroskobu yüksek, ivmeölçeri alçak frekansta kullanır. τ'yu değiştir ve kalıcı hatanın sapma × τ olduğunu gör.
3B sahne yükleniyor…
Simülasyon görevi
Füzyon simülasyonunda "Yerde sabit" hareketini seç, gürültüleri 0 yap: jiroskop çizgisi 20 s'de kaç dereceye kaydı? Tamamlayıcı süzgecin kalıcı hatası sapma × τ'ya eşit mi? Sonra yatış manevralarına dön ve RMSE'yi en aza indiren τ'yu bul. İvmeölçer gürültüsünü 12°'ye çıkarınca en iyi τ nasıl değişti?
Kod
#include <cmath>
struct Attitude { float roll = 0, pitch = 0; }; // radyan
// gx, gy: jiroskop rad/s; ax, ay, az: ivmeölçer m/s²; dt: s; tau: süzgeç zaman sabiti, s
void complementary(Attitude& a, float gx, float gy, float ax, float ay, float az, float dt, float tau = 0.5f) {
const float alpha = tau / (tau + dt); // 250 Hz, τ = 0,5 s → α ≈ 0,992
const float accRoll = std::atan2(ay, az);
const float accPitch = std::atan2(-ax, std::sqrt(ay * ay + az * az));
// ivme büyüklüğü 1 g'den çok farklıysa ivmeölçere güvenme (manevra ya da titreşim)
const float g = std::sqrt(ax * ax + ay * ay + az * az);
const float k = std::fabs(g - 9.81f) < 1.5f ? 1.f - alpha : 0.f;
a.roll = (1.f - k) * (a.roll + gx * dt) + k * accRoll;
a.pitch = (1.f - k) * (a.pitch + gy * dt) + k * accPitch;
}
// Not: büyük açılarda ve sapma (yaw) için kuaterniyonlu Mahony/Madgwick ya da EKF kullanılır.Sık yapılan hatalar
- IMU'yu I²C ile bağlayıp 1 kHz hız döngüsü beklemek.
- Uçuş kontrolcüsünü titreşim sönümleyicisiz sabitlemek: ivmeölçer kırpılır (clipping), kestirim bozulur.
- Pusulayı güç kablolarının yanına koymak ve kalibrasyonu atlamak: drone daire çizerek uçar (toilet bowl).
- Barometreyi süngerle örtmemek: pervane rüzgârı irtifayı zıplatır.
Yazılım mühendisliği bağlantısı
Sensör füzyonu, kayıt ve yeniden oynatma ile test edilir: aynı kayıt, aynı kestirim.
- SITL'de ya da uçuşta sensör verisini kaydet (PX4 ULog), süzgeci çevrimdışı yeniden çalıştırıp çıktısını karşılaştır.
- Rastgele gürültüyü tohumla: bu dersin simülasyonları gibi testler deterministik olmalı, yoksa kırılgan (flaky) olur.
Kendini sına
Tamamlayıcı süzgeçte τ = 0,5 s ve jiroskop sapması 2 °/s ise kalıcı açı hatası yaklaşık nedir?
250 Hz'de (dt = 4 ms) τ = 0,5 s için α yaklaşık kaçtır?
IMU uçuş kartlarında neden SPI ile bağlanır?
Askıdaki bir quadrotorda ivmeölçer neden tek başına güvenilir eğim vermez?
Bu ünitenin parçaları
3B modelli gerçek Hyvex parçaları: