Bir futbol robotu için spin kontrolörünü yazmak için doğru yaklaşım nedir?


14

3 tekerlekli bir futbol robotu programladığınızı düşünün. Döndürmek için ne tür bir kontrolör kullanırsınız? P? PID?

Bu kontrolörün amacı, robotu tanımlanmış bir açıda (0 derece) tutmalı ve elle veya başka bir robotla döndürüldüğünde geri dönmelidir.

Robotum için servo motorlar için step motorlar kullanıyorum, bu yüzden bunu yazılımımda kullanmam gerekiyor!

Zaten bir örnek P tipi kontrolör yazdım ve hareket oldukça iyi. Ama mümkünse daha iyi yapmak istiyorum. Kod aşağıdaki gibidir:

void spinSpeed(int devidedValue, int addedValue, int correction) {

    if(degree<correction && degree>-correction) {
        motorSpeed = 0;
    } else {
        if(degree > 0) {
            motorSpeed = ((degree)/(devidedValue) + (addedValue));
        } else {
            motorSpeed = ((degree)/(devidedValue) - (addedValue));  
        }
    }
}

correctionrobotun hareket etmediği bir aralıktır. degreepusuladan döndürülen -127 ile 128 arasında bir sayıdır. motorSpeedPWM'ye uygulanan 0 ile 255 arasında bir sayıdır.


Muhtemelen bu rutin compas her yeni değer ürettiğinde çalıştırılır degree?
Mark Booth

@MarkBooth Kodumu bir süre var (1) bu yüzden her döngüde pusuladan değeri fonksiyona verir ve sonucu motorlara uygular.
Miro Markaravanes

Yazılımda servo davranışını çoğaltmaya çalıştığınız için, bir servonun ne tür bir denetleyici kullandığını araştırırım.
Chris Laplante

Servo kullanmıyorum. Adım motorları kullanıyorum, bu yüzden motorda böyle bir davranış yok.
Miro Markaravanes

2
Merhaba Miro, yığın alışverişinde sorunuzu yorumlardaki sorulara yanıt olarak düzenlemek daha iyidir, bu şekilde yorumların sorunun kendisinden uzaklaşmaması için düzenlenebilir (silinebilir).
Mark Booth

Yanıtlar:


7

Bir PID kontrol döngüsü hakkında hatırlanması gereken önemli şey , her terimin bir hareket sırasında farklı zamanlarda kontrole hükmetmeyi amaçlamasıdır.

Orantılı terim, hedef konumunuzdan uzaklaştıkça daha büyük bir tork (veya sizin durumunuzda hız) sağlamak ve daha büyük bir tork sağlamak için tasarlanmıştır.

Türev terimi, tipik trapezoidal hareketinizin 'seyir' aşamasında egemen olmayı amaçlamaktadır. Çok yüksek orantılı bir terimi yeniden yönetmeye ve hedefinizden uzak olduğunuzda kaçak hızlandırmayı sınırlamaya yardımcı olur, ancak hedefe yaklaştığınızda hedefinizde yakınlaştığınız hızı artırmanıza ve orantılı terim çok daha az katkıda bulunur. .

Bir tork denetleyicisi yerine bir hız denetleyicisi kullanıyorsanız, türev terimi aslında hız denetleyicinizin içinde gizlenmiş olabilir ve PID döngünüze doğrudan erişilemeyebilir. Bu kontrolü daha basit hale getirebilir (tipik olarak, istenen hıza veya maksimum hıza (hangisi daha düşükse) kadar çabuk hızlanır, ancak daha az öngörülebilir hale de getirebilir. Genellikle aşırı agresif bir D (veya P) terimi, bir sınır döngüsüne girmeye neden olabilir ( bu durumda uğultu veya çığlık atan motorların sesi nedeniyle genellikle yanlış rezonans veya salınım olarak adlandırılır , ancak sınır döngüsü çok daha doğru bir tanımdır ).

İntegral terimi, kalıcı kararlı durum hatasını düzeltmek için vardır , yani nereye gitmeniz istendiğiyle gerçekte nerede olduğunuz arasında kalıcı, uzun vadeli bir fark vardır. Mevcut correction(gerçekten sadece tolerans) değeriniz, integral bir terimin tersi gibi çalışır , istenen pozisyonda bir ölü bant içinde olduğunuzda motoru tamamen keser .

Bu faktörler nedeniyle, farklı bir hızlanma, seyir ve yavaşlama aşamalarına sahip bir hız profilinde de planlama yapmazsanız, tam bir PID döngüsü uygulamaktan çok az kazanırsınız.

Ayrıca, ölü bandın ve I teriminin eksikliğinin, son konumun her zaman biraz rastgele olacağı ve büyük olasılıkla istenen konuma hangi yöne yaklaştığınıza bağlı olarak değişeceği anlamına geleceğini unutmayın. Bu nedenle, çift yönlü tekrarlanabilirliğiniz standart tekrarlanabilirliğinizden çok daha kötü olabilir.

Doğruluk, tekrarlanabilirlik ve çözünürlük arasındaki fark hakkında daha fazla bilgi için bu mükemmel açıklamaya bakın . Sizin durumunuzda, çözünürlüğünüz pusula sensörünüzdür, ancak hem doğruluk hem de tekrarlanabilirlik büyük olasılıkla correctiondeğerinizle sınırlıdır , çünkü correctiondeğer pusula çözünürlüğünüzden daha büyükse, konumsal doğruluğunuzun bir kısmını yakınken motorunuzu kapatın.


8

PID kontrolörü en iyisi olacaktır, pusula kullanarak robotunuzun rulmanını almak ve bunu elde etmek istediğiniz rulmanla karşılaştırmak ve pürüzsüz bir dönüş hareketi elde etmek için bazı PID ayarlama tekniklerini kullanmak nispeten düz bir ileri iştir. istediğiniz başlık. Bu yaklaşım, belirli bir miktarda doğru bir şekilde dönmeye de uygulanabilir.

Zaten, bu alanda bazı robot yapmış bu Sizinkilere bir değil çok farklı görev yaptığını, bizim robot kullanılan budur ...


1
Cevabınız için teşekkürler. Cevabı kabul etmek istedim ama daha fazla cevap görmek istiyorum, bu yüzden daha fazla cevap olduğunda kabul edeceğim;)
Miro Markaravanes
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.