Gazebo'da (açık kaynaklı bir robot simülatörü) uçak uçuşunu simüle etmek için çalışıyorum.
Şu anda, PID'leri kullanarak dronun atış / dönüş rotasyonunu kontrol etmeye çalışıyorum. Bir dronun yalnızca açısal dönüşle doğrusal olarak hareket ettiğini hatırlamak önemlidir (ileri / geri eğim dönüşü, sola / sağa dönüş).
Şu anda, PID adım kontrolünü test ediyorum. Amaç, dronun belirli bir açıda dönmesini ve bu pozisyonda kalmasını sağlamak - bir PID için mükemmel bir iş.
Ancak fizik uygulaması bunu zorlaştırıyor. Temel olarak, PID ayar noktasını alır - istenen adım rotasyon açısı (radyan cinsinden) ve geçerli adım rotasyon açısı (ki bu doğrudan simülasyon durumunu oluşturuyorum).
PID çıkışı daha sonra elde edilen torku hesaplamak için kullanılır. Tork denklemi t = I * a'dır (tork = Intertia * açısal ivme). Bu yüzden, esasen, mevcut ve istenen dönme açıları verilen dronun açısal ivmesini kontrol etmek için bir PID kullanıyorum.
Elbette ki sorun, bir PID çıktısının zamanla doğrusal olarak ölçeklenmesidir, bu nedenle drone ayar noktasına yaklaştığında sıfıra düşmesine rağmen, tüm zaman boyunca pozitif ivmelenmeler uygulamaktadır. Sonuç olarak, dronun çok fazla açısal momentumu olduğu ve bu nedenle doğal olarak aşar. Daha sonra, elbette, PID, dönüşü tersine çevirerek yanıt verir, ancak aynı problemle.
Sonunda olan şey, dronun yatay bir tavırla başlaması, ayar noktasına ve ardından yatay konuma ve sonra ayar noktasına geri dönmesidir. Herhangi bir I veya D kazancı eklersem kararsız hale gelir.
Sorun gerçekten çok basit. Uzayda bir aracı kontrol etmek gibi. İtme, pozisyon / rotasyon üzerinde hassas kontrol sağlamak için darbelerde uygulanır. Bununla birlikte, PID, sürekli bir çıktı sağlar. Bu, burada gösterildiği gibi davranan bir tür fiziksel sisteme ihtiyacım olduğu anlamına gelir:
http: //vignette4.wikia.nocookie.net...imation.gif/revision/latest cb = 20141124024926
veya PID çıkışının istenen dönme açısına ulaştığında sıfıra açısal hızı getirecek şekilde ölçeklenmesi için fiziği yeniden yazmam gerekir.
Bunu çözmek düşündüğümden daha zor. - muhtemelen güçlü bir fizik ya da kontrol elemanı değilim.
Bu sorunu zaten başka bir forumda yayınladım. Konuyu buradan okuyabilirsiniz:
Uçağın dönüşleri için PID kontrolü
Nerede kesinleşirim. Korkarım, sorunu yeterince açık bir şekilde ifade edemedim, çünkü kısmen yardım etmeye çalışan adam PID'lere (ya da C ++) aşina değildi.
Her neyse, Bu tür bir şeyle ilgilenen (veya bu konuda benden daha fazla şey bildiklerini düşünen ...) herhangi bir düşüncesi gerçekten memnuniyetle karşılanacaktır. :)
Düzenleme: Davranışı aşağıdaki animasyonlu giflerde görebilirsiniz: