Bilgisayarlı görmeyi kullanarak PID algoritması uygulaması


10

Otomatik bir labirent labirent çözücü inşa ediyorum ve labirentimi kontrol etmek için bir web kamerası kullanıyorum.

Diğer forumlardaki önerilere dayanarak, şu anda labirentin top hareketini en az bir yönde kontrol etmeye çalışıyorum. Bu nedenle, iki koordinat 466,288 ve 466,152 arasındaki top hareketimi kontrol etmeye çalışıyorum. Step motor kontrol kartına giriş zaman, her eksen için döndürülecek adım yok, yani x ve y.

Kullandığım step motor kontrol kartı, yumurta bot step motor kontrol kartıdır: http://www.sparkfun.com/products/10025

İki nokta arasında hareket etmek için, iki nokta arasında 288 ve 152 (örneğin 260 240 230 ... 150) arasında bir dizi yol noktası oluşturmalı ve top hareketimi düzeltmeli miyim?

Görüntü işleme algoritmam, topun sadece dönüp bir deliğe düşeceği topu izlemek için yeterince hızlı değil.

Bazıları, aşağıdaki videoda gösterildiği gibi standart bir şablon kullanmamı ve yoldaki sapma için top hareketlerimi düzeltmemi önerdi:

http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded

Aynı zamanda top hareketinin yol noktalarını kullanarak aynı sorunu çözdükleri bir görüntü işleme aracına rastladım. Aynı soruna çok fazla çözüm gördüğümde, sorunu çözme konusunda tamamen kafam karıştı. Bir PID denetleyicisi uygulamam gerektiğini biliyorum. Fakat problemleri aşama aşama çözme konusunda nasıl bir yol izlemeliyim? Sıkıştım ve sadece sorunu çözmede bir başlangıç ​​bulmakta hayal kırıklığına uğradım.

Kurulumum şöyle görünüyor:

kurulum resmi

... ve yazılımımın ekran görüntüsü:

ekran görüntüsü

Revizyon 2: Şimdi yeni bir problemle karşı karşıyayım: Daha önce step motorları Arduino seri port Java uygulaması üzerinden kontrol ettim. Uygulamayı kullanarak stepleri sürdürebiliyorum.

Seri bağlantı noktası üzerinden her iletişim kurmaya çalıştığımda kartı sıfırlamam gerekir. Ayrıca, herhangi bir komut gönderilmediğinde step motor küçük aralıklarla enerji verir. Step motor bu moda girdiğinde, kartı sıfırlamadan kartımı kontrol edemiyorum. Herhangi bir yardım takdir edilecektir.

Revizyon 3:

PID algoritmasını uygulamaya koyduğumda biraz ilerleme kaydettim. Lütfen aşağıdaki videoyu bulun: http://www.youtube.com/watch?v=MEfp7RqPmqY

Şimdi PID algoritmasının uygulanma hızıyla ilgili bir sorunum var. Aslında görüntü işlemem 200 ms'de bir döngüyü bitiriyor, bir topu tanımlıyor ve komutları step motor kontrol kartına gönderiyor. Seri portuma yön değiştirmek için komutlar gönderilse de, adımcım aynı yönde dönmeye devam ediyor. Tuhaf davranışı yukarıdaki videoda bulabilirsiniz.

Benim düşüncem, hesaplanan PID değeri 100'den büyükse, sadece 100 göndermem gereken bir tavanla PID değerlerini kısıtlamam gerektiğidir. Bu konuda düşüncelerinizi duymak için sabırsızlanıyorum.

PID denetleyicisini uygulamamın yolu, şablon eşleme algoritmasını kullanarak şablonun başlangıç ​​noktasını ve başka bir şablon eşleştirme algoritması kullanarak topu tanımlamaktır. Şimdi, topu başlangıç ​​noktası şablonunun centroidine taşıdım. PID algoritması ile düz çizgiyi takip etmesini nasıl sağlayabilirim?

Revizyon 4:

Damla yörünge izole

Yörüngeyi izole ettim ancak başlangıç ​​noktasından doğru piksel koordinatlarını yazdırmak için doğru işlevi bulamıyorum. Düşüncesi olan var mı?


1
Re PS: O zaman sadece görüntüye bir bağlantı gönderin ve eminim birisi gelip görüntünün kendisi ile yerini alacak ...
Majenko

@Matt - Sabit! Ancak, kullanıcının sadece resimlere olan bağlantıları değil, resimlere gitmek için metin sağlamasını tercih ederim. @Sai'nin onları nerede istediğinden emin değilim, onları en alta koydum.
Kevin Vermeer

Vay canına ... Bu adımların tahtayı herhangi bir hızda hareket ettirecek kadar torku var mı? Umarım orada bir yerlerde dişli azalması vardır.
Connor Wolf

@Fake - Stepper'ların bununla bir sorunu olmamalıdır. Tahta çok ağır değil ve ağırlığı dengeli. Elleri 40 cm uzunluğunda bir duvar saatim var ve diğerleriyle aynı küçük mekanizma tarafından kontrol ediliyor, bu da bir step. (5 cm x 5 cm mekanizması saatin 80 cm çapına göre gülünç küçük görünüyor)
stevenvh

@Fake: Steve haklı. Step ile sorunum yok. Her şey PID algoritması ile ilgili
Sai

Yanıtlar:


2

Birincisi, stepler konumlandırmada harika olduğundan (pozisyon geri beslemesine gerek yoktur), kendi söylediğiniz gibi hareketlerini kesinlikle sınırlandırmalısınız. Motor şaftının şu anda nasıl tasarlandığından emin değilim, ancak motora sabitlendiyse, dönmeye devam etmesine izin vermek ekipmana zarar verebilir.

Daha sonra, sensörünüzdeki 200 ms'lik taşıma gecikmesi muhtemelen çok yavaş olacaktır, aksi takdirde topu yavaşlatmak için işleri çok yavaşlatmanız gerekecektir. Ne benzer Roket Cerrah söyledi, sen yolunu hesaplamak için görüntü işleme algoritması basitleştirmek gerektiğini sadece bir kez ve daha sonra hızlı bir şekilde her karede topun sadece konumunu hesaplar. Bu adımı hızlı bir şekilde atlamak istiyorsanız, bunun yerine kırmızı bir top bulun ve daha iyi bir algoritma bulana kadar RGB resminizdeki yalnızca kırmızı bileşeni kontrol edin.

PID kontrolü için, biri doğu-batı motoru, diğeri kuzey-güney motoru için olmak üzere iki ayrı PID kontrol cihazına ihtiyacınız olduğu gerçeğiyle başlayın. İki tam motorunuz varsa, parametreleri eşit olmalıdır.

Bir PID kontrolörünün hareket etmesi için hatayı bilmesi gerekir : istenen konum ile topun gerçek konumu arasındaki fark. Bu ofsetin X ve Y bileşenleri, iki PID kontrolörünün girişleri olacaktır (her motor için bir tane). Hatayı almak için önce yolunuzda istediğiniz konuma sahip olmanız gerekir : bir yörünge .

Yörüngeyi elde etmek için görüntüyü işlemeniz ve yolu , başlangıç ​​ve bitiş noktasını almanız gerekir . Algoritmanızın yolu şu anda tahtanın geri kalanından ayırt edip edemeyeceğinden emin değilim, ancak eğer değilse, devam etmeden önce bunun kendi başına bir algoritma olduğunu unutmayın. Yine, bazı sonuçları hızlı bir şekilde görmek istiyorsanız, bağlantı noktalarını manuel olarak girerek bu bölümü atlayabilirsiniz. Her durumda, ayar noktası hızını tanımlayabilmeniz ve yazılımınızın istenen koordinat konumunu baştan sona doğru hareket ettirebilmeniz gerekir . Açıkçası, düşük bir hız ile başlayacaksınız.

Bu nedenle, kontrole başlamadan önce, ilk önce aşağıdaki kontrol listesini gözden geçirmelisiniz:

  • Daha hızlı yanıt almak için görüntü işleme algoritmanızı basitleştirin
  • Önceden tanımlanmış bir hız kullanarak yolunuz üzerinde bir yörünge oluşturan bir algoritma oluşturun
  • Her çerçevede:
    • Yörünge ve top pozisyonu arasındaki farkı hesaplayın
    • Delta-X bileşenini doğu-batı PID'sine, delta-Y bileşenini kuzey-güney PID'ye geçirin

Yörüngeyi her seferinde bir segment oluşturmak daha iyi olabilir ve bu top bir öncekini bitirdiğinde bir sonraki segmente devam edebilir. Aksi takdirde, topun istenen yörüngeyi aşmamasına dikkat etmeniz gerekir (ki bu başarılması zor olabilir)


1

Her iki eksen için kamera ve mometary okuma için sabit bir pozisyonunuz varsa, çerçevedeki boyalı yolu, delikleri ve duvarları tanımanıza gerek yoktur. Kurulum sırasında tek adımda yapılabilir. Çalışma zamanında sadece tek parlak metal topun tam yerini tespit etmeniz gerekebilir.

Topu tespit etmek için kamerada 1 sabit spot IR LED ve dar bant filtre kullanabilirsiniz. Algoritma en parlak pikseli hesaplamalı ve aşağıdaki adımları dikkate alarak X, Y'yi gerçek X, Y'ye çevirmelidir:

  • en parlak pikseli bul
  • kameradan mesafeyi kurtarmak için her iki eksen için de (servodan okuma) açı kullanın
  • eksen konumu okuması için zaman damgası kullan
  • gerekirse konum okuması için zaman içinde enterpolasyon uygulayın
  • Bilinen lens bozulmalarını kullanın
  • X, Y dünyasında topun gerçek merkezini bulmak için pikselin X, Y pikselini mükemmel küreden yansıma açısına çevirin
  • çerçevenin gerçek zamanını kurtarmak için delta zamanı
  • gerekirse X, Y levha düzlemindeki pozisyon zamanındaki enterpolasyon
  • X, Y (t) sonucunu PID algoritmasına gönder
  • yörünge üreteci / dizisinden ikinci besleme hedefi X, Y (t) gönder
  • PID'nin çıktıya karar vermesine izin verin
  • çıktı yürütme (son adımlar paralel olarak yapılabilir)

Hesaplama açısından yoğun olmamalı ve çoğunlukla mutlak değerlere bağlıdır.

Normalde, küçük CPU bunu kare hızı ile yapmalıdır.


Çözümünüzü anladığımdan emin değilim. Çözümünüzü ilginç buluyorum. Topumun doğru yolu takip etmesini nasıl sağlayabilirim? Takip edilecek bir dizi ara noktaya sahip olmamı sağlamalı mıyım?
Sai

Evet. Hareket kontrol yazılımı her zaman belirli bir adım için rutin bir X, Y (t) sonlu dizisi üreten bir "yörünge jeneratörüne" sahip olmalıdır. Bu dizi kontrol döngüsünün ilk girişine beslenir, ikinci kontrol döngüsünün girişi gerçek konumların dizisidir. Kontrol rutini pozisyon / hız / ivme hatalarını hesaplamalı ve tüm hataları PID'ye göre yükseltmeli / özetlemeli ve sonuçtaki düzeltme sinyallerini üretmelidir.
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.