Quadcopter PID ayarı


13

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. resim açıklamasını buraya girin

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:

Rulo ve Motor PWM giriş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:

  1. 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.

  2. 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.

  3. 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.

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


1
Girdi nedir ve döngünün çıktısı nedir?
Guy Sirton

@GuySirton: Sorumu güncelledim
metsburg

Motor komutlarınızdaki düz bölümler nelerdir? Görünüşe göre bir şey doyurucu. Değişiklikleri sürekli bir işlev gibi yuvarlarsınız, ancak komutlarınız çok ani görünür. Ayrıca, rulo girişiniz aynı aralığa benzer bir şekilde kalırken neden her iki motor PWM komutu sürükleniyor? Bu arada yaklaşık zaman ölçeği nedir?
Guy Sirton

1
30 saniye sonra kontrolü kaybetmenizin nedeni muhtemelen her iki komutunuzun da kaymasıyla ilgilidir. Bence komutlar arasındaki farkı kontrol etmeye çalışıyorsunuz ama bunların sürüklenmesine izin veremiyorsunuz.
Guy Sirton

@GuySirton: Yukarı doğru sürüklenmiyorlar, sıfırdan yukarıya doğru artırıyorum, böylece 3/4 saniye içinde belirli bir sabit duruma ulaşıyor. Ancak, "30 saniye sonra kontrolü kaybetmenizin nedeni muhtemelen her iki komutunuzun da kaymasıyla ilişkili" dediğinde haklı olduğunuzu düşünüyorum. Bu kademeli artışı kullanmazsam, PWM girişimi belirli bir seviyeye (yukarıda gösterilen maksimum girişten daha düşük) sabitlersem, 30 saniye sonra kontrolü kaybetme sorunu ortadan kalkar.
metsburg

Yanıtlar:


6
  1. Orantılı kazancınız çok yüksek gibi görünüyor.
  2. Sistemin dönmesi için diğerini kilitlerken bir motorda devir / dakika değerini sürekli artırıyorsunuz. Bu iyi bir kontrol stratejisi değildir çünkü nihayetinde bunlar hem doygunluk kazanır hem de kontrolü kaybedersiniz. Ayrıca zaman arttıkça sisteme komuta etme yeteneğiniz de azalır. Yani sistemin daha iyi bir modeline ihtiyacınız var.
  3. # 1 ve # 2 ile uğraşırsanız, daha kararlı bir sisteminiz olacak, ancak kontrol bant genişliğinden memnun olmayabilirsiniz. Bununla başa çıkmak için, sisteminizi, şeylerin sensör tarafındaki ve şeylerin kontrol tarafındaki gecikmelerden kurtulmayı içeren daha sert hale getirmeniz gerekir.

3

Bu soruyu okuyarak başlayacağım: PID döngülerini ayarlamak için iyi stratejiler nelerdir?

Tahmin etmek zorunda kalsaydım, ücretsiz filtrenizin oluşturulmasında bir sorununuz olduğunu söyleyebilirim. Quadcopter motorları kapalıyken, çerçeveyi ileri geri eğmeli ve rapor edilen yuvarlanma / eğim değerlerinin gerçekten doğru olup olmadığını görmelisiniz.

Bana göre, ivmeölçerden gelen giriş ile filtrenizin çıkışı arasında bir gecikme var gibi görünüyor - salınım, giriş verilerine geç reaksiyonlarla açıklanabilir. Sonunda dönüş, zamanla biriken olası bir entegrasyon hatası gibi görünüyor - başka bir deyişle, quadcopter yanınızda iken, aslında dengeli bir şekilde durduğunu düşünüyor.

(Güncelleme) Grafiğinizle ilgili olarak, motor hızlarınızın artmaya devam etmesi (dengeli kalmak yerine), bir yerde bir hatanız olduğu anlamına gelir. Belki de İntegral teriminiz sınırsız büyüyor ve bunun için makul bir maksimum belirtmelisiniz.


İleri geri eğilirken sorumu rulo değerleri ile güncelledim. Maksimum PWM girişimi düşürerek nihai dönüşü çözdüm. Düzeltme değerleri çok yüksek devirde çalışmıyor gibi görünüyor. Yüksek RPM'de çalışırken teçhizatı elimle kolayca döndürebilirim. Düşük RPM'de önemli bir direnç hissediyorum ve quadcopter orijinal konumuna geri salınıyor gibi görünüyor (ki bu iyi, sanırım). Yani, 'ters çevirme' problemi muhtemelen RPM'yi düşürerek çözülür (dronun kalkıp çıkmayacağını bilmiyorum, umarız olur). Salınım sorunu devam etmektedir.
metsburg

35±90

Grafik tam olarak videoda gösterilen test için değil. Yukarıda belirtildiği gibi, grafik bu kurulumla yaptığım birçok testten birinden ve bu özel durumun nasıl göründüğünü tam olarak hatırlamıyorum. Grafik size sadece giriş ve çıkış tepkisinin nasıl davrandığı hakkında bir fikir vermektir ve ayrıca giriş ve çıkış arasında çok fazla gecikme olmadığını (döngünün 150+ Hz'de çalıştığı göz önüne alındığında) kurmak istedim. Videoyu grafikle eşleştirmek çok anlamlı olmayabilir. Videodaki test için kesin veri setim yok.
metsburg

Grafiğin biraz yanıltıcı olduğunu fark ettim, bunun için üzgünüm. Grafiği daha doğru bir grafikle güncellemeye çalışacağım. Aslında, seri porttan veri çizdiğimden, bu grafiği oluşturduğumda, Arduino kartı dizüstü bilgisayarla bağlandı. Belli bir salınımdan sonra, müdahale etmek ve salınımı manuel olarak yavaşlatmak zorunda kaldım. Bu yüzden -5 dereceye düştüğünü görüyorsunuz, gerçekte ise 90 derecedir. Daha sonra daha doğru bir grafiği güncellemeye çalışacağım.
metsburg

Grafikte gördüğüm bir diğer şey, kombine itişinizin her zaman artmasıdır. Bu yanlış görünüyor.
Ian

1

Burada bazı şeyler olabilir ...

1) Bildirilen açılarınız doğru mu? gürültülü? Dörtlü'nizi manuel olarak eğerek ve çıkan değerleri izleyerek bunu kolayca kontrol edebilirsiniz.

2) kendi PID uygulamanızda bir hata var. Kodunuzu kontrol etmek için orada güvenilir uygulamayı kullanabilirsiniz.

3) Sahne, motorlar yanlış şekilde monte edilmiş.

4) ...


1) Bildirilen açıları eğtim ve kontrol ettim, neredeyse doğru, ama kesinlikle gürültülü. 2) çok muhtemel ... aslında, bunu tamamen özetlediğini düşünüyorum: P 3) pek olası değil, iki saat yönünde, iki saat yönünün tersine ... Sahne birden çok kez kontrol ettim + sanırım bu tür bir hata kontrolün çok ötesinde vahşi hatalarla sonuçlandı. 4) ....
metsburg

4) ... yanlış bir PID ayarı, bir PID'niz olmadığından daha kötü şeyler yapabilir!
dm76

Evet, şimdi görüyorum. Yarın üzerinde çalışacağım. İlk planım güvenilir PID kitaplığını kullanmak, ikincisi ise PID çıkışını PWM sinyallerinden roll.pitch düzeltmesine değiştirmek.
metsburg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.