İMAGE PROCESSİNG ile ÇALIŞMA ALANIMDA Kİ CİSMİN KOORDİNATINI NASIL BULABİLİRİM

gökhanim

Üye
Katılım
22 May 2010
Mesajlar
33
Puanları
1
merhabalar.
öncelikle benim şöyle bir sorunum var sınırlandırılmış bir çalışma alanında ki cismin algılanıp koordinat bilgilerinin çıkarılmasını istiyorum. bu bilgiler vasıtasıyla da step motorlarımı kontrol edeceğim. Şuan bu işin yazılım kısmındayım image processing (görüntü işlemeyi) hangi programla yapmam mantıklı olur. Şuan Matlab ve vusial basic var kafamda.
yardımcı olursanız sevinirim
 
visual basic te yapabilirsin.görüntüyü pixel pixel tarayarak ve kalibre ederek cismin ebadını tesbit edebilirsin.yanlız resim isleme yaparken arka planın farklı renkte olması gerekiyor.tarama isleminde cok fazla sayıda veri cıkacaktır,eger bu verilerle cnc makinayı calıstırmaya kalkarsan makinan cok agır calısır.elde ettigin pixel verilerini isleme tabi tutarak olabildigince azaltman gerekir.malum basit bir cizgi icin bile pixel taratmada yüzlerce nokta elde edersin,aslında sana iki koordinat bilgisi yetecektir.
 
aslında cnc değil kontrol edeceğim sistem şöyle düşünebiliriz örnek vermek gerekirse kamera tarafından çalışma alanım okunuyor ve yani sürekli olarak ardından cisim gördüğümde bir sistemle tutucu cisme yaklaşarak tutması gerekiyor çalışma bu şekilde olacak. visual basic (VB) bunu nasıl yapacağımı tam anlamıyla bilmiyorum ben c dilini biliyorum sizin elinizde buna ilişkin döküman varmıdır.
 
bu seklde bir proje yapacaksanız goruntu yerine cismi algılayacak optik sensorler kullanmanız daha pratik olacaktır
 
Benim ilk düşüncem de bu şekilde idi. ama x ekseni çalışma alanı 2 metre y çalışma alanı 70 cm bu alanda optik sensör kullanılabilir mi ? ultrasonik mi yoksa ?
 
Cisim algılama için image kullanılırken en kolay yol cisim ile çalışma alanı farklı renklerde seçmek..

Webcam, fotoğraf makinası artık ne kullanacaksanız, yüksekliğini- zoom gibi özelliklerini set ederek örneğin 1metre 1000 piksel olacak gibi bir yöntem uygulayabilirsiniz. veya image tüm çalışma alanını kapsayacak şekilde olur ve çalışma alanının kenarlarını bir çizgi ile belirleyebilirsiniz.

Bundan sonrası bitmap üzerinde kenar çizgilerinin ve cismin rengini aramakla ilgili.. Aradığınız rengi bulunca taban rengi ile cisim-kenar renklerinin komşu olduğu pikselleri takip etmek, hem cisim hemde kenar çizgilerinin boyutlarını ve koordinatlarını piksel cinsinden verecek..
Kenar çizgilerinin gerçek boyutlarını bildiğinize göre bu bilgiden piksel cinsinden olan koordinat bilgilerini gerçek boyutlara çevirebilirsiniz. Cismi yakalamak tutmak vs.. sonrası malum..

Cisim koordinatları çok kırıklı çizgiler halinde çıkabilir. Douglas-Pecker gibi bir algoritma da bu konuda yardımcı olur.

Renk yakalamak konusunda dikkat edilecek nokta ışıklandırma vs. nedenlerle heryerde tam olarak aynı ton yakalanamayacağından bir alt-üst değer aralığında çalışmak gerekliliği.. Örneğin kırmızı için RGB de 255 değil 240-255 arası değerler kullanmak gibi. Hem renk yakalamak hemde çalışma süresi açısından bitmap'i 8bit renkli hale çevirirseniz işiniz biraz daha kolay olur. Birde geniş açılı lenslerde kenar bozulmalarına dikkat etmek gerekiyor.

Kullanacağınız dilin pek bir önemi yok. Anlattığıma benzer bir algoritma herhangi bir dilde yazılabilir.

Image üzerinde bu tip renk geçişlerinden bilgi üretecek kütüphaneler de var. ancak onlar hakkında benim net bir bilgim yok..
Bir bilen söylerse hep beraber bilgileniriz.
 
Cisim algılama için image kullanılırken en kolay yol cisim ile çalışma alanı farklı renklerde seçmek..

Webcam, fotoğraf makinası artık ne kullanacaksanız, yüksekliğini- zoom gibi özelliklerini set ederek örneğin 1metre 1000 piksel olacak gibi bir yöntem uygulayabilirsiniz. veya image tüm çalışma alanını kapsayacak şekilde olur ve çalışma alanının kenarlarını bir çizgi ile belirleyebilirsiniz.

Bundan sonrası bitmap üzerinde kenar çizgilerinin ve cismin rengini aramakla ilgili.. Aradığınız rengi bulunca taban rengi ile cisim-kenar renklerinin komşu olduğu pikselleri takip etmek, hem cisim hemde kenar çizgilerinin boyutlarını ve koordinatlarını piksel cinsinden verecek..
Kenar çizgilerinin gerçek boyutlarını bildiğinize göre bu bilgiden piksel cinsinden olan koordinat bilgilerini gerçek boyutlara çevirebilirsiniz. Cismi yakalamak tutmak vs.. sonrası malum..

Cisim koordinatları çok kırıklı çizgiler halinde çıkabilir. Douglas-Pecker gibi bir algoritma da bu konuda yardımcı olur.

Renk yakalamak konusunda dikkat edilecek nokta ışıklandırma vs. nedenlerle heryerde tam olarak aynı ton yakalanamayacağından bir alt-üst değer aralığında çalışmak gerekliliği.. Örneğin kırmızı için RGB de 255 değil 240-255 arası değerler kullanmak gibi. Hem renk yakalamak hemde çalışma süresi açısından bitmap'i 8bit renkli hale çevirirseniz işiniz biraz daha kolay olur. Birde geniş açılı lenslerde kenar bozulmalarına dikkat etmek gerekiyor.

Kullanacağınız dilin pek bir önemi yok. Anlattığıma benzer bir algoritma herhangi bir dilde yazılabilir.

Image üzerinde bu tip renk geçişlerinden bilgi üretecek kütüphaneler de var. ancak onlar hakkında benim net bir bilgim yok..
Bir bilen söylerse hep beraber bilgileniriz.


çok harika bir açıklama yapmışsınız ama şöyle bir şey sorayım size peki aldığım koordinat bilgileri ile step motor süreceğim birde bunu nasıl yaparım sizce
 
Cismi tutacak cihazın ne tür bir cihaz olduğuna göre hesap şekli biraz değişmekle birlikte temelde aynı olur.
Daha basit olduğu için önce 3.5 eksen bir CNC ile çalıştığınızı düşünelim.
Cismin kenar koordinatlarını çıkardıktan sonra cismin tutmanız gereken noktalarını hesaplamak gerekir. Örneğin cisim dikdörgen şekilli ise uzun kenarların ortasından tutmak isteriz. iki tutma noktasını birleştiren çizginin ortası da cismin merkez koordinatıdır.
Genel standartlara uygun birşey olması için basit G-code komutları kullanılabilir.
G0Z500 // z yi kaldır
G0X500Y300 //koordinata git
G0Z200 // z y indir.
gibi . Bu komutlara göre step motorları hareket ettirmek için bir kaç yol var. Bilginize tecrübenize göre biri tercih ediliebilir.
Ben bir mcu kullanarak yapmayı tercih ederdim. g-code lar mcu ya seriport- usb vs ile aktarılır. mcu da buna uygun step darbelerini üretirdi.
Diğer bir yol hazır 3-5 eksen bir step sürücü kullanmak. Bu durumda sürücüyü kontrol için gereken yön ve darbe sinyallerinin yine bir mcu veya PC ile üretilmesi gerekir.
PC de üretildiği durumda iletişim için paralel port kullanmak mantıklı. Aynı mach3 gibi çalışacak, yani çok basit bir mach3 benzeri program yazılacak.
Paralel port kontrolü için inpout.dll veya inout.dll adında bir arabirim vardı. Bu kullanılabilir.

Ayrıca mach3 de bir arabirim sunuyor. Pek detaylı bilmiyorum ama komutları direkt mach3 arabirimi üzerinden mach3'e aktarıp stepleri gerçek zamanlı kontrol etme olanağı da olabilir. mach3'ün sitesinde bununla ilgili bir döküman gördüm sanki..

Neyse, özetlersek donanım olarak ya kendi indeksleyici ve sürücünüzü kendiniz yapacaksınız. Veya sürücüyü hazır alıp indeksleyiciyi yapacaksınız.
Indeksleyici için de bir mcu veya PC kullanmanız gerekir. Önerim eğer mcu'lar hakkında biraz bilgi ve tecrübeniz varsa bir işlemciye bu işi yaptırmanız. Yoksa PC üzerinde yapacaksınız.

Eğer CNC değilde robot kol gibi bir uygulama yapacaksanız da işlemler hemen hemen aynı. Sadece gitmek istediğiniz koordinatların hesaplanmasında işin içine bir de ters kinematik girecek.
 
size biraz daha detaylı bilgi atmam adına iletişim için mailinizi özel mesaj atarsanız sevinirim. Bir kaç adet sorum olacak
 

Forum istatistikleri

Konular
129,897
Mesajlar
931,120
Kullanıcılar
452,784
Son üye
caglayancag

Yeni konular

Geri
Üst