Burada sorduğum sorunun devamında: Otonom modda basit kalkış ile Quadcopter kararsızlığı ... APM 2.6 modülü tarafından kontrol edilen bir quadrotor için temel bir PID uygulaması hakkında birkaç soru sormak istiyorum. (3DRobotics'ten bir kare kullanıyorum)
Tüm kontrol sistemini sadece iki PID bloğuna sıyırdım, biri rulo kontrolü için diğeri adım kontrolü için (yaw ve diğer her şey ... Onları daha sonra düşüneceğim).
Bu kurulumu serbestçe dönen bir kirişten oluşan bir teçhizat üzerinde test ediyorum, burada quadrotorun iki kolunu bağladım. Diğer ikisi serbestçe hareket edebilir. Yani, aslında bir seferde bir serbestlik derecesini (yuvarlanma veya eğim) test ediyorum.
Aşağıdaki resmi kontrol edin: burada A, B, kurulumun monte edildiği serbestçe dönen kirişi işaretler.
P ve D parametrelerinin dikkatli bir şekilde ayarlanmasıyla, yaklaşık 30 saniyelik sürekli bir uçuş elde etmeyi başardım.
Ancak 'sürekli' olarak, basitçe dronun bir tarafa devrilmediğini gösteren bir testtir. Kaya sabit uçuş hala görünürde hiçbir yerde değil ve 30 saniyeden fazla uçuş da oldukça zor görünüyor. En başından sallanıyor. 20-25 saniyeye ulaştığında bir tarafa doğru eğilmeye başlar. 30 saniye içinde, kabul edilemez bir farkla bir tarafa eğildi. Çok geçmeden baş aşağı durduğunu görüyorum
PID kodu gelince, ben gyro + ivmeölçer verilerinin 'ücretsiz filtre' orantılı hata hesaplıyorum. İntegral terimi sıfıra ayarlanır. P terimi yaklaşık 0.39'a ve D terimi 0.0012'ye gelir. (Arduino PID kütüphanesini bilerek kullanmıyorum, sadece kendi PID'lerden birini burada uygulamak istiyorum.)
Nasıl çalıştığını görmek istiyorsanız bu videoyu kontrol edin.
http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Evet, kurulum oldukça eski! Katılıyorum. :)]
Lütfen bu aşamada istikrarı artırmak için neler yapabileceğimi bana bildirin.
@Ian: Kurulumumla yaptığım birçok testten, seri monitörden okuma kullanarak bazı testler için grafikler çizdim. Roll'un 'Motor1 & Motor2 - PWM girişi' (örn. Rulosu kontrol eden iki motor) örneği:
Giriş / çıkış için:
Giriş: İvmeölçer + cayro kombinasyonu ile elde edilen yuvarlanma ve eğim değerleri (derece olarak)
Çıktı: Servo kütüphanesinin motor.write () işlevi kullanılarak teslim edilen motorlar için PWM değerleri
çözüm
Sorunu çözdüm. Bunu nasıl yapacağınız aşağıda açıklanmıştır:
Sorunun temel noktası Arduino programını uygulama şeklimden kaynaklandı. Bağımsız değişkente yalnızca tamsayı adımları kabul eden servo açılarını güncellemek için write () işlevini kullanıyordum (veya bir şekilde yalnızca tamsayı girişine yanıt veriyor, 100 ve 100.2 aynı sonucu veriyor). WriteMicroseconds () olarak değiştirdim ve bu da helikopteri önemli ölçüde daha istikrarlı hale getirdi.
Bir motora RPM eklerken diğerini sabit bir değerde tutuyordum. Karşı motoru düşürürken bir motorda devir / dakika değerini artırmak için bunu değiştirdim. Bu, toplam yatay itmeyi değiştirmeden tutar, bu da bu konuda dikey yükseklik elde etmeye çalıştığımda bana yardımcı olabilir.
RPM'yi maksimum sınıra kadar yükseltiyordum, bu yüzden quadcopter tam gazda kontrolünü kaybetmeye devam etti. Devirmeyi algıladığında RPM'nin artması için yer yoktu.
Motorlardan birinin diğerinden daha zayıf olduğunu gözlemledim, nedenini bilmiyorum. Motorların PWM girişine bir ofset kodladım.
Tüm destek için teşekkürler.
Kaynak kodu:
İlgileniyorsanız, işte çıplak kemikler PID uygulamamın kaynak kodu: PID Kaynak Kodu
Lütfen donanımınızda test etmekten çekinmeyin. Projeye herhangi bir katkı memnuniyetle karşılanacaktır.