Okullar için Robotik ve Mühendislik · anaokulundan liseye

6. ünite / 10

PID II: kaskad yönelim denetimi, gürültü ve süzgeçler

SimülasyonYazılım

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.

ωhedef = Kaçı (θhedef − θ)  →  τ = PID(ωhedef − ωjiro)  →  karıştırıcı

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

C++: kaskad yönelim kontrolü (açı P → hız PID)
// 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: perf sayaç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

  1. Kaskad denetimde iç döngü (açısal hız) dış döngüye göre nasıl olmalıdır?

  2. Jiroskop gürültüsü en çok hangi terim üzerinden motorlara taşınır?

  3. PX4'te MC_ROLL_P parametresi neyi neye çevirir?

  4. 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ı:

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç