Düz sürüş farklı bir robot elde etmek için PID kullanmaya yaklaşım


13

Geri bildirim için her birine bir enkoder bağlı iki motorlu tekerleği olan bir diferansiyel tahrik robotu düşünün. Her DC motor için -1'den 1'e kadar bir şamandıra alan ve PWM sinyallerini o motora orantılı bir güç sağlayacak şekilde ayarlayan bir fonksiyon olduğu varsayılır. Ne yazık ki, tüm motorlar eşit yaratılmadığından, her motora aynı PWM sinyalinin gönderilmesi robotu sola veya sağa döndürür. Ben bir PID döngüsüne giriş olarak her motora bağlı kodlayıcıları kullanarak robot düz sürücü düşünmeye çalışıyorum.

Bunu nasıl yapacağım: Sol ve sağ kodlayıcılar arasındaki farkı alırdım, bazı aralıklar arasındaki hatayı bağladım, onu [-1, 1] 'den normalleştirin ve sonra 0 ila 1 motor güçleriyle eşleştirirdim. Eğer I ve D sıfır olsaydı ve 1 hatası alırsak (böylece sol motor sağ motordan çok daha fazla döndü), o zaman sol motor 0 olarak ayarlanır ve sağ motor 1 olarak ayarlanır ( ayrıldı).

Bununla ilgili herhangi bir sorun var mı? Daha iyi bir yaklaşım nedir?

Yanıtlar:


5

Bununla ilgili herhangi bir sorun var mı?

Bununla ilgili ana sorun, önerilen çözümünüzün motorların performansı arasındaki bir uyumsuzluk için hemen doğru olmasına rağmen, Abbe hatası gibi pozisyonda daha karmaşık hatalar olsa da birikmiş hatayı düzeltmeyecektir (daha sonra bakınız).

Daha iyi bir yaklaşım nedir?

Hatalara toleransınızın ne olduğuna ve bunları düzeltmek için ne kadar çaba harcamak istediğinize bağlı olarak yapabileceğiniz birkaç şey vardır.

İlk adım, her bir tekerlek için birer tane olmak üzere her ikisine de aynı talep pozisyonunu veren bir çift PID döngüsü kurmak olacaktır. Benzer bir soruya cevabımda önerdiğim gibi , her iki tekerleği de olmasını istediğiniz yere bağlı çok sıkı bir hata içinde tutarsanız, fark edilir bir dönüşüme neden olacak bir hata biriktirmek biraz zaman alacaktır.

Ayrıca, nominal olarak bağımsız iki Motor seviyesi PID döngüsünü ayarlamak, tek bir karmaşık, birbirine bağlı kombine sistemi ayarlamaktan daha kolay olacaktır. Daha yüksek seviye kontrol çalışmalarında herhangi bir değişikliğe dayanabilmek için, her bir motorun diğer motora mümkün olduğunca aynı şekilde davranması gerekir ve bu gerçekten de ayrı servo döngüleri gerektirir.

Bununla birlikte, bir takım başka komplikasyonlar vardır ve bu, hangi doğruluğa ihtiyacınız olduğunu ve hangi çözümü seçtiğiniz için onları düzeltmek için ne kadar çaba harcamanız gerektiğine bağlıdır. O olabilir leyen yeterlidir, ya da robota Bağıl veya Mutlak pozisyon tespiti eklemek gerekebilir.

Bir sorun, sol ve sağ tekerleklerinizin her ikisi de 1000 kodlayıcı sayısını hareket ettirse bile , yine de iki farklı çalışmada farklı bir konumda olabilirsiniz.

Örneğin, maksimum 10 kodlayıcı sayısında aşağıdaki hataya sahip olduğunuzu ve motorlarınızın PID döngü yinelemesi başına 10 kodlayıcı sayımı hızında çalıştığını varsayalım. Sol motorunuz 5,10,10,10 ... 10,5 hareket edebilirken, sağ motorunuz 4,11,10,10 ... 10,5'lik bir profile ve hatta başlangıçtaki hızlanmadaki ufak bir farka sahip olabilir. hareketin robotun biraz yanlış yönde hareket etmesine neden olabilir. Sadece bu değil, bu yönde ne kadar ilerlerseniz, hata mutlak anlamda o kadar büyük olacaktır. Abbe hatasından bahsederken bahsettiğimiz şey budur ve karmaşık bir kinematik model veya bir çeşit dış referans olmadan, bunu asla düzeltemeyeceksiniz.

Daha fazla bilgi için benzer ancak oldukça yinelenmeyen bir soruya verdiğim cevaba bakın : Bir robotu düz bir çizgide sürmek için Arduino PID kütüphanesini nasıl kullanabilirim? ve aynı zamanda ilgili Line Follower optimizasyonuna cevabım


2

Bağımsız olarak çalıştırılan 2 tekerleği olan bir botum var.

İstenilen yönde ilerlemek için bir jiroskop kullanmayı seçtim, kaymayı çarptı ve hatta onu alıp geri çevirmek, bunun sadece başlığını düzelteceği için çok az sonucu var.

Cayro tarafından belirlenen akım başlığındaki (yön) hataya göre 2 motorun her biri için istenen akım hızına bir düzeltme ekleyen / çıkaran tek bir PID kullanıyorum.

Örneğin, hızı% 50'ye ve başlığı 20 dereceye ayarladım. bu normalde her iki motoru da% 50 güçte çalıştırır. ancak istikamet ilerledikçe PID, bir motora biraz güç ekleyerek diğerinden biraz güç çıkararak ayarlamalar yapacaktır, bu nedenle pid istikameti düzeltirken motorlar arasında% 45 /% 55'lik bir güç bölünmesi meydana gelebilir.

Gyros'un problemleri var, kalibre etmek için harcanan zamanla bile hala gryo'mun dakikada yaklaşık 1 derece sapma olduğunu görüyorum. Bunun nedeni, dünyanın saatte 15 derece dönmesi olabilir, bu da uzun vadede düşünülmelidir.

Daha önce belirtildiği gibi, tekerlekler üzerindeki kodlayıcılar aslında ne kadar yol katettiğinizi bilmek için harika bir fikirdir.


Bunun için kodunuzu görmek isterim. Aynı yola bir jiroskop / ivmeölçer / manyetometre ile başlıyorum ama hala bu sensörlerden gelen okumalardan anlam çıkarmaya çalışmanın en erken aşamasındayım.
Ron Smith

İşte benim kod bir bağlantı, korkarım anlamak kolay olmayabilir. github.com/rlsutton1/piBot/blob/master/src/main/java/au/com/…
Robert Sutton
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.