6. ünite / 10
PID II: kaskad yönelim denetimi, gürültü ve süzgeçler
Bu ünitenin sonunda
- Kaskad yapıyı (açı → açısal hız → tork) kurmak ve neden kullanıldığını açıklamak
- İç ve dış döngü bant genişliği ayrımını simülasyonda göstermek
- Jiroskop gürültüsünün D terimiyle motorlara nasıl taşındığını ölçmek
- Alçak geçiren, çentik ve devir tabanlı süzgeçlerin yerini söylemek
Ders notları
Bir multirotorun yönelimi iki iç içe döngüyle denetlenir. Dış döngü açı hatasını bir açısal hız hedefine çevirir; iç döngü jiroskobu kullanarak bu hızı tutar ve bir tork (motor farkı) üretir.
Neden kaskad? Jiroskop doğrudan ve hızlı ölçer; iç döngü motor gecikmesini, bozucu torku ve eylemsizlik belirsizliğini dış döngüye ulaşmadan bastırır. Kural: iç döngü dıştakinden belirgin biçimde hızlı olmalı (tipik 4–10 kat). PX4'te açı döngüsü MC_ROLL_P, hız döngüsü MC_ROLLRATE_P/I/D; hız döngüsü 1 kHz ve üstünde çalışır.
Gürültü ve D terimi
D terimi sinyalin türevini alır; türev yüksek frekansı büyütür. Jiroskoptaki küçük gürültü D üzerinden motor komutuna büyük titreşim olarak gider: motorlar ısınır, kestirim bozulur. Çare süzmektir, ama her süzgeç gecikme ekler ve gecikme kararlılık payını yer.
- Alçak geçiren (jiroskop ve D terimi için, tipik 30–100 Hz).
- Çentik süzgeci: gövde rezonansı ya da pervane frekansı gibi dar bir bandı keser. Çift yönlü DShot'tan gelen motor devriyle frekansı uçuşta izleyen devir tabanlı çentik (RPM filter) bugün en etkili yöntemdir.
- PX4'te FFT tabanlı dinamik çentik de vardır; önce kayıttan (ULog) spektruma bak, sonra süzgeç seç.
Simülasyon
Yönelim (roll) kontrolü: kaskad açı + hız PID, gürültüyle
Dış döngü açı hatasını hız hedefine çevirir (P), iç döngü jiroskopla açısal hızı tutar (PID). Jiroskop gürültüsünü ve türev kazancını artır: D terimi gürültüyü büyütür, motorlara titreşim olarak gider. D süzgecinin kesim frekansıyla bunu dengele.
3B sahne yükleniyor…
Simülasyon görevi
Yönelim simülasyonunda: (1) varsayılan ayarda aşım ve oturma süresini not et. (2) Açı P'yi 15'e çıkar: aşım ne oldu? Hız P'yi 0,3'e çıkararak düzelt. (3) Hız D'yi 0,01, jiroskop gürültüsünü 3 °/s yap: tork gürültüsü kaç kat arttı? D süzgecini 10 Hz'e indir ve 200 Hz'e çıkar, farkı açıkla. (4) 0,05 N·m bozucu tork ver; Hız I = 0 ile kalan açı hatasını ölç, sonra I'yı 0,6'ya çıkar.
Kod
// PX4 düzeninde: mc_att_control (açı) → mc_rate_control (hız) → control_allocator (karıştırıcı)
struct Biquad { // 2. derece alçak geçiren (D terimi ve jiroskop için)
float b0, b1, b2, a1, a2, x1 = 0, x2 = 0, y1 = 0, y2 = 0;
Biquad(float fc, float fs) {
const float k = std::tan(float(M_PI) * fc / fs), q = 0.7071f, n = 1.f / (1.f + k / q + k * k);
b0 = k * k * n; b1 = 2 * b0; b2 = b0; a1 = 2 * (k * k - 1) * n; a2 = (1 - k / q + k * k) * n;
}
float apply(float x) { float y = b0 * x + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2; x2 = x1; x1 = x; y2 = y1; y1 = y; return y; }
};
constexpr float RATE_HZ = 1000.f, DT = 1.f / RATE_HZ;
Biquad gyroLpf(80.f, RATE_HZ); // jiroskop süzgeci
Pid ratePid(0.15f, 0.2f, 0.003f, -0.6f, 0.6f, 30.f); // N·m çıkış; D süzgeci 30 Hz
const float ANGLE_P = 6.f, RATE_MAX = 220.f * float(M_PI) / 180.f;
// 1 kHz kesmesinde (ya da RTOS görevinde) çağrılır
float rollStep(float rollSp, float rollEst, float gyroX) {
float rateSp = std::clamp(ANGLE_P * (rollSp - rollEst), -RATE_MAX, RATE_MAX); // dış döngü
float rate = gyroLpf.apply(gyroX);
return ratePid.update(rateSp, rate, DT); // iç döngü → tork
}Sık yapılan hatalar
- Dış döngüyü iç döngüden hızlı ayarlamak: iç döngü hedefe yetişemez, sistem salınır.
- Gürültüyü D kazancını sıfırlayarak "çözmek": sönüm gider, aşım büyür. Önce süz.
- Süzgeç kesimini gereğinden düşük seçmek: gecikme artar, kararlılık payı azalır.
- Spektruma bakmadan çentik koymak: yanlış frekanstaki çentik yalnız gecikme ekler.
Yazılım mühendisliği bağlantısı
Kontrol yazılımı gerçek zamanlıdır: doğru sonuç geç gelirse yanlıştır.
- Döngü süresini ölç ve kaydet (PX4:
perfsayaçları); en kötü durum yürütme süresi (WCET) bütçesini aşmamalı. - Hız döngüsünü bir RTOS görevine ya da zamanlayıcı kesmesine koy; dinamik bellek ayırma, kilit ve bloklayan G/Ç kullanma.
Kendini sına
Kaskad denetimde iç döngü (açısal hız) dış döngüye göre nasıl olmalıdır?
Jiroskop gürültüsü en çok hangi terim üzerinden motorlara taşınır?
PX4'te MC_ROLL_P parametresi neyi neye çevirir?
Devir tabanlı çentik süzgeci (RPM filter) motor frekansını nereden öğrenir?
Bu üniteden sonra bitirme projesinde
- Denetim ve kestirim: PID ve tamamlayıcı süzgeç kodun birim testli; basamak yanıtı ölçütleri için eşik testleri; ayar raporu (simülasyon ekran görüntüleriyle).
Bu ünitenin parçaları
3B modelli gerçek Hyvex parçaları: