Çizgi izleyende sensörlerden gelen veriyi işlemek için yaklaşım biçimi...

Başlatan makinahmet, 21 Ocak 2013, 13:44:25

makinahmet

   Herkese merhaba.Herkese kolay gelsin.
   Okulda ikinci dönem projem için bi çizgi izleyen tasarlamam gerekiyor.Bildiğimiz gibi çizgi izleyenler sensörlerden gelen veriye göre hareketini gerçekleştiriyor. Genel olarak bu robotların basit olanlarında sensörlerden gelen veri bi trigger vasıtası ile 0 yada 5 volta çevrilerek pice aktarılıyor ve daha sonra hangi sensörden bilgi geliyorsa ona göre motor sürücüsü motoru sürüyor.

   Ancak pic ile sensörler arasında trigger kullanılması robotun dönüşlerde tepkilerini mekanikleştiriyor.. Bunun yerine sensörlerden gelen verinin analog olarak pice aktarılması (burada pic 16f877 olabilir) ve picte dijitale çevrildikten sonra donanımsal pwm vasıtası ile ve motor sürücüsüne gönderilen sinyal ile motorun sürülmesi, robotun dönüşlerini yaparken tepkilerin daha yumuşak ve çabuk olmasını sağlayabiliyor. Bu olay, pwm vasıtası ile motor dönüş oranlarının değiştirilmesi ile gerçekleştiriliyor.Ancak yine sorun olan şu ki, motorlara dönüş için belli oran verildiğinde robotun döneceği virajların yarıçapları aynı olmadığı için robotun ön tarafı yine yalpalama yaparak çizgiyi buluyor ve ona göre dönüş yapıyor.
 
   Robotun ön tarafı ne kadar az yalpalama yaparsa o kadar iyi olur. Dolayısı ile motor oranlarının -virajların yarıçapı ne kadar farklı olursa olsun- öyle bi verimesi lazım ki bu yalpalama olayı azalsın.

   Sensörlerden (ör:cny70'den) gelen analog verileri işlerken,sensörlerin yola göre konumları ve birbirlerine göre durumları önem arz etmekte. Öncelikle benim düşündüğüm yaklaşım biçimindeki sensör konumlarını aşağıdaki resimden bakabilirsiniz.

http://e1301.hizliresim.com/15/p/j5n3p.png

   Görüldüğü üzere yol üzerinde üç sensör bulunmakta. Birinci ve üçüncü sensörler beyaza bakarken, ikinci sensör ise siyahta. Bunlar sensörlerin konumları. Düşüncemin temelini 2. sensörün sürekli siyahta kalması gerektiği oluşturuyor.Bunu 1. ve 3. sensörlerin durumuna bakarak gerçekleştirmek lazım.Sensörler sonuçta birer ölçüm aleti sayılabilir ve her ölçüm aletinin bi hassalığı vardır. Sensörlerin gönderdiği verileri hassaslık durumuna göre pic'te çeşitli matematiksel işlemlerle işleyip motor sürücüsüne göndermek hassas ve tepki süresi hızlı bir dünüş gerçekleştirebilir.

   Düşündüğüm yaklaşım biçimindeki matematiksel hesaplamalar özet olarak şöyle.
Varsayımlar;
Sensör beyazda iken sıfır volt,siyahta iken 5v vermekte.
Sensör voltaj aralığı = 0V' dan 5V'a.
Sensör hassaslığı =%1 (yani her 0,05V hassaslık ile renk değişimi belirleniyor.)
X1 = birinci sensör (robota üstten bakıldığında solda ve beyazın üstünde)
X2 = ikinci sensör (robota üstten bakıldığında ortada ve siyahın üzerinde)
X3 = üçüncü sensör (robota üstten bakıldığında sağda ve beyazın üzerinde) olmak üzere;

Robotun ileri gitmesi için tek bi durum mevcuttur;
X1 = 0v,   X2=5v,   X3=0v

Robotun sağa dönüşünde sensör durumları şöyledir;
Durum1) X1 = 0v,   X2=5v,        X3=0v        (düz yolda)
Durum2) X1 = 0v,   X2=4.95v,   X3=0.05v   (viraja girmeye başladı)
Durum3) X1 = 0v,   X2=4.80v,   X3=0.1v     (viraja girmeye devam)
Durum4) X1 = 0v,   X2=4.75,     X3=0.15v
.
.
.
.
Durum100) X1 = 0v,   X2=0v,   X3=5v   (1 ve 2. sensörler beyazda üçüncü sensör tamamen siyahta.)

Dönüşteki sensör voltaj durumalarına bakıldığında şöyledir;
x1 = Sürekli sabit.           (0v)
x2 = Sürekli azalan.         (5v'dan 0v'a)
x3 = Sürekli artan.           (0v'dan 5v'a)
x1 + x2 = sürekli azalan  (5v'dan 0v'a)
x2 + x3 = sürekli sabit     (5v)
x1 + x3 = sürekli artan    (0v'dan 5v'a)
x1+x2+x3 = sürekli sabit (5v)

Gelelim robotun virajın sagamı yoksa solamı olduğunu anlamasına.Eğerki 3. sensör voltaj değerinde artış varsa viraj sağadır.Tam tersine 1. sensör voltaj değerinde artış varsa viraj soladır.

Bizim istediğimiz olay ise sürekli olarak x2 = 5v olması.
Sağa dönüş için konuşalım tekrar.
Azalan x2 değerini, üçüncü sensördeki değişim oranını ölçerek, aynı oranda sağ motor devrini düşürüp,yada sol motor devrini arttırıp tekrar 5V seviyesine çekmemiz gerekiyor.peki bu oran nedir?

Ör:x3 sensöründe ölçülen değer 2.5 volt olsun.
Yukardaki bağıntılarda x1 = 0 ve x2 = 2.5 volt olur.Değişim oranı %50 dir. Sağ motor devri %50 düşürülmeli yada sol motor devri %50 artmalı.
Ör:x3 sensöründe ölçülen değer 1V olsun.
Yukardaki bağıntılarda x1 = 0 ve x2 = 4 volt olur.Değişim oranı %20 dir. Sağ motor devri %20 düşürülmeli yada sol motor devri %20 artmalı.

Dediğim gibi bu bi yaklaşım biçimidir.Yaklaşımlar doğru değere yaklaşmayı sağlayan düşüncelerdir sadece. Bu tip biyaklaşım üzerine çalışıldığında,daha ayrıntılara girersek sizce bu yaklaşım doğruya ne kadar yaklaşır?

Biraz uzun bi yazı oldu başınızı ağrıttım kusura bakmayın.
Düşünceleriniz için şimdiden teşekkürler.
İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

cengz

artış veya düşüş algılama güzel bir fikir, değerleri beli bir toplamından sonra karar verdirmek daha hasas olmasını sağlayacaktır.

berat23

bu kontrast sensörleri ile çizgi izleyen pistlerinde düşündüğünüz gbi veriler elde edemezsiniz. neticede ya sihay ya da beyaz algılar gürültü ile beraber. temelden hatanız var.

LukeSkywalker

İnterpolasyon ile belki bişeyler çıkabilir ortaya...

mesaj birleştirme:: 21 Ocak 2013, 16:34:20

Alıntı yapılan: berat23 - 21 Ocak 2013, 15:55:55
bu kontrast sensörleri ile çizgi izleyen pistlerinde düşündüğünüz gbi veriler elde edemezsiniz. neticede ya sihay ya da beyaz algılar gürültü ile beraber. temelden hatanız var.
Yanlış düşünüyorsunuz. Bu veriler sensörlerden geliyor...

makinahmet

@Sn. Berat23 kontrast sensörlerinden en çok bilinen cny70 olsun bu mesela. datasheet'e baktığımızda kodak test kartı ile ölçümler yapıldığını ve grafiklerle verildiğini görüyoruz. Datasheet'te "Figure 9. Collector Current vs. Distance" grafiğine baktığımızda akımın, yaklaşımda sensörlerin bize verdiği bilgiye benzer olduğunu görmekteyiz.Test kağıdının kenarına olan "s" mesafesi bize bu bilginin alınabileceğini söylemekte. Aslında demek istediğinizi bende tam olarak anlamamış olabilirim. Daha açıklayıcı anlatabilirseniz sevinirim. Kullanılabilecek sensör tipi ne olabilir mesela?

@Sn.Cengz. Bahsettiğiniz toplamlar ne gibi toplamlar olabilir örnek verebilir misiniz?

@sn.lukeskywalker istatistiki değerden çok sayısal analiz diyorsunuz yani :)

İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

LukeSkywalker

Aynen öyle...
Hele bir de bunun kübik olanını kullanırsanız o zaman daha atraksiyonlu olur.

makinahmet

@sayın lukeskywalker interpolasyon yönteminden lineer olanı biliyorum (tabi şimdilik). En kısa zamanda kitaplardan kübik interpolasyona bakıp sisteme nasıl uyarlayabilirim ona bakacağım.Çok teşekkürler.

Yarından itibaren robotu oluşturmaya başlayacağım.İlk ölçeceğim şey sensörler olacak tabi.Uzun ve zahmetli bir süreç olacak gibi duruyor. Ama çok şey öğreneceğim kanaatindeyim. Gelişmeleri ve neler yaptığımı yavaş yavaş buraya ekleyeceğim.Bilgi paylaşıldıkça çoğalır.

İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

superconductor

Merhabalar
Çizgi izleyen robot ile bende uğraşmaktayım.Yarışma şartlarıdan dolayı sensörleri analog okumak yerine digital okuyorum.İllaki bir flash patlıyor yada pistin bir tarafı daha aydınlık oluyor, güneş vuruyor, spot yanıyor vs.Dış etkiler sensörleri baya sıkıntıya sokabiliyor.Işık geçirmez bir perdeleme yapılsa bile pistin bazı bölgeleri tozdan dolayı daha az yansıtabiliyor.

Tavsiyem sensör sayısını arttırmanız.Sensörleri yine analog okuyarak belli eşikten yukarı ise bir hata değeri verdirmeniz.Hataları içten dışa doğru arttırarak verebilirsiniz.Örneğin [5 3 1 -1 -3 -5] şeklinde.
Daha sonra oluşan hataların toplamını okuma yapan sensör sayısına böldüğünüzde çizginin yerini bulabilirsiniz.
Bulduğunuz hatayı PID yada PD kontrolle motor sürmek için kullanırsınız.
Sensörleri kalibre etmek için eşik değerini değiştirmek gerekir.
Eşik değerini bulmak için sensörden gelen en yüksek veriden en düşüğü çıkartıp sonucu ikiye bölün, bölüme en düşük değeri ekleyin.

Yarışma derdiniz yoksa analog çalışmayı iki sensörlede yapabilirsiniz.Sensörleri,çizgiyi ikiside yarım görecek şekilde koyarsınız birini - ile çarpar sonra iki sonucu toplarsınız.Bu sonucu pid denkleminde kullanabilirsiniz.İki sensörle çalışırken sensörlerin ikiside çizgi dışına yaklaşırsa hata azalacağından hızı düşürmeniz gerekir.




LukeSkywalker

http://www.micromouseonline.com/2008/11/11/line-follower-sensor-experiments/#axzz2IdHYhm3r
http://www.societyofrobots.com/member_tutorials/book/export/html/350
http://www.micromouseonline.com/2008/11/16/line-follower-sensors-setup/#axzz2IdHYhm3r

Bu da yukarıdaki arkadaşın bahsettiği dijital okuma ile yapılan PID. (Pek taraftar değilim.)
http://www.chibots.org/?q=node/339
http://www.ermicro.com/blog/?p=1163

Bana sorarsanız interpolasyon + PID ile daha iyi sonuçlar elde edilir.
Sadece kübik interpolasyon kullanılarak da mükemmele yakın sonuç elde etmek mümkn.


z

Bu yarışmalarda robot bir test turu atıp yolu hafızaya alsa sonra hafızadaki yola gore giderken ara ara da yola senkronlasa olmuyormu?

mesaj birleştirme:: 21 Ocak 2013, 21:56:55

Eğer bu yöntem kabul edilirse çözüm bezier eğrilerinde. İlk turda zaman kaybedilse bile diğer turlarda jet gibi gidilebilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

makinahmet

Cny70 sensörü var şu an elimde.Datasheet'te yazdığına göre bu alet yukarı-aşağı ve sağa-sola hareketleri alğılayabilmekte. Beyaz kağıt üzerine siyah zeminde sensörlerin birini denedim.Breadboard üzerine kurdum.siyah beyaz kağıdı sensörü tam kapatacak şekilde (sensör ile zemin arasında yükseklik farkı neredeyse yok diyelim) üzerinde gezdirdim. Siyah zemine girince 0.01 volt hassasiyeti okuyabildim. 3.95 ten 3.94'e.Denemeyi elle yaptığım için hassasiyet okumak zor oluyor. Sonuç olarak el ile binde bir hassasiyet okuduysam makina ile yapılan deneyde hassaslık daha fazla olacaktır. Demekki gerekli virajları,gerekli yazılım yazıldığında gerçekten kıvrak bi şekilde alabiliriz. 

@superconductor PID konusuna değinmişsiniz. Bu konuyu daha önce duymuştum.Şimdilik çok bilgim yok. Bizim üniversitede son sınıfta otomatik kontrol dersinde veriliyor diye biliyorum(gelecek yıl alacağım inşallah :) ). Kalibre olayında da haklısınız. Sonuç olarak zeminden belli bir yüksekliği olacağı için başlangıç değeri olarak 0v değilde daha yüksek bi değer verecektir. Maksimum olarakta 5v vermeyecektir.Bu konuları araştıracağım. Yarışmalarda başarılar dilerim. Teşekkürler. 

@LukeSkywalker verdiğiniz linklerde gerçekten faydalı bilgiler mevcut. Gerekli robotu kaba taslak, en hassas biçimde, en kısa zamanda oluşturmaya çalışacağım ve çoğu matematiksel sistemi bu yapı üzerinde deneyeceğim. Teşekkürler.

@sayın Z yarışmalara katılmadım hiç formatlarını çok bilmiyorum. Hafızaya alma işlemi ise ilgi çekici bi konu :)
İyi çalışmalar.
DC, STEP, SERVO MOTOR -> www.sinematronik.com

berat23

ben anlatamadım herhalde. pist,siyah ve beyazdan ibaretse isterseniz analog okuyun ister dijital,her sensör size aynı sizin tabirle mekanik cevabı verir zira ölçüm alınacak şey ya siyah ya da beyaz. sensörden gelen voltajın değişimi her halükarda yine sizin tabirle mekanik yani sert geçişli bir sinyal olacaktır,o ölçüm aldığınızda gördüğünüz .01 v ise gürültüdür. eğer pist ortası beyaz,kenarı tamamen siyah ve bu ikisi arasında bir yumuşak geçişten ibaret olsaydı yansımaya bağlı merkezden sapma tespit edilebilirdi. artık daha açık nasıl anlatabilrim bilemiyorum.

bu digital pid yapıyoruz diyenlerde aslında pid yapıyor denilemez,8 sensörün olsa ara durumlarla birlikte 6+8=14 durumun var ki bu çok kaba bir veri.çizginin konumunu taayıcılardaki gibi line sensor kullanarak diyelim 256 seviyede ölçersen pid anlamlı olur. yoksa iyi ayarlanmış bir aç-kapa sistemde aynı sonucu verir(diyelim 7 sensör,merkezden uzakta algıladıkça daha çok dönme mantığı).

yani analog demek sadace analog veri alman değil,fiziksel olarak öyle olması demek.yoksa elinde 3 seviyeli,8 seviyeli veriler varsa eğri uydurmalar şunlar bunlar çok anlamlı değil.

ayrıca cn70 nasıl hareket algılıyormuş?
http://www.vishay.com/docs/83751/cny70.pdf

erdo_celik

Arkadaşlar bende çizgi izleyen ile uğraşıyorum 8 sensörüm var (pololu QTR8A)bu sensörleri analog okumam lazım okumada problem yok ama kalibrasyon yapmam gerek çünkü beyazda 10 bit analog ölçümde 36 değeri siyahta 870 değerini alıyorum bu sensörün kalibrasyonu nasıl yapılıyor.yarışmalardaki gördüğüm robotlar yarışa başlamadan önce çizgi üzerinde sağa sola okuma yaptırılıyor.Burada kalibrasyonmu yapılıyor?

LukeSkywalker

Alıntı yapılan: berat23 - 22 Ocak 2013, 00:02:38
ben anlatamadım herhalde. pist,siyah ve beyazdan ibaretse isterseniz analog okuyun ister dijital,her sensör size aynı sizin tabirle mekanik cevabı verir zira ölçüm alınacak şey ya siyah ya da beyaz. sensörden gelen voltajın değişimi her halükarda yine sizin tabirle mekanik yani sert geçişli bir sinyal olacaktır,o ölçüm aldığınızda gördüğünüz .01 v ise gürültüdür. eğer pist ortası beyaz,kenarı tamamen siyah ve bu ikisi arasında bir yumuşak geçişten ibaret olsaydı yansımaya bağlı merkezden sapma tespit edilebilirdi. artık daha açık nasıl anlatabilrim bilemiyorum.

bu digital pid yapıyoruz diyenlerde aslında pid yapıyor denilemez,8 sensörün olsa ara durumlarla birlikte 6+8=14 durumun var ki bu çok kaba bir veri.çizginin konumunu taayıcılardaki gibi line sensor kullanarak diyelim 256 seviyede ölçersen pid anlamlı olur. yoksa iyi ayarlanmış bir aç-kapa sistemde aynı sonucu verir(diyelim 7 sensör,merkezden uzakta algıladıkça daha çok dönme mantığı).

yani analog demek sadace analog veri alman değil,fiziksel olarak öyle olması demek.yoksa elinde 3 seviyeli,8 seviyeli veriler varsa eğri uydurmalar şunlar bunlar çok anlamlı değil.

ayrıca cn70 nasıl hareket algılıyormuş?
http://www.vishay.com/docs/83751/cny70.pdf
Hiç uğraştınız mı çizgi izleyenle? Analog okuduğunuz zaman verilerin nasıl geldiğini çok rahat görebilirsiniz. Sensör beyaza yaklaştıkça üzerine düşen ışık miktarı artacağından üzerindeki voltaj azalır. Beyaza yaklaştıkça yerden yansıyan ışık miktarı artar. Deneme yapmadan bu kadar sert mesajlar  vermemeliyiz bence..

mesaj birleştirme:: 22 Ocak 2013, 10:01:46

Alıntı yapılan: z - 21 Ocak 2013, 21:07:20
Bu yarışmalarda robot bir test turu atıp yolu hafızaya alsa sonra hafızadaki yola gore giderken ara ara da yola senkronlasa olmuyormu?

mesaj birleştirme:: 21 Ocak 2013, 21:56:55

Eğer bu yöntem kabul edilirse çözüm bezier eğrilerinde. İlk turda zaman kaybedilse bile diğer turlarda jet gibi gidilebilir.
İki veya daha fazla tur atılan yarışmalarda bu dediğiniz encoder ile yapılıyor şu anda ecnebiler tarafından. Bizim yarışmalarda genelde tek tur atıldığı için büyük risk var hafıza konusunda.

makinahmet

  Herkese tekrar merhaba.Kolay gelsin.
  @sayın berat23 ne demek istediğinizi şimdi daha iyi anlamış durumdayım.Teşekkürler.Hareket derken yanlış kelime kullandım orda. Şöylesi daha doğru olurdu. Belli mesafe arasında önünde (0-5 mm) cisim varsa, uzaklığına ve renk değişimine göre değer veriyor. Sizin verdiğiniz datasheet'te benim dediğim grafik "Fig. 11 - Relative Collector Current vs. Displacement" grafiği.Zeminin siyah yada beyaz olması durumunda geçişlerin ani olması durumunda da haklısınız.Ancak şu ayrıntıyı göz ardı ediyorsunuz bence;

  Verdiğiniz datasheet'te 5. sayfada "PACKAGE DIMENSIONS in millimeters" başlığı altındaki Led ile transistör arası mesafenin 2.8mm olduğunu görmekteyiz.Dolayısı ile led zemine ışık yolladığı zaman, eğerki siyah çizgi ile beyaz çizginin tam geçişi bu aralığa denk gelirse,ledimiz hem siyah zemine hemde beyaz zemine ışık yollamış olacak.Mesafe arasında kalan siyah zemin ve beyaz zeminin birbirine göre alan oranlarıda dediğiniz gürültüyü oluşturacak. Dolayısı ile ara voltaj değeri bu alanların oranlarına göre oluşacak. Tabi analog okuyan başka sensörlerde mevcuttur.İlla cny olacak diye bir kaide mevcut değil :) Araştırıldığı takdirde bulunabilir.

  Bunun deneylerini ben yapacağım.Yapanlarda var." Lectura Analógica de Sensores CNY70 { turmandreams.blogspot.com } " Umarım haklısınızdır çünkü devrede trigger kullanmak işime gelir hem yorucu hesaplamalardan da kurtulmuş olurum :)


@erdo çelik sorunuzun cevabını  sayın superconductor yukarda vermiş. Bilgilerden yola çıkarak araştırma yaparsanız hesaplayabilirsiniz.

Bu arada youtube'da japonların yaptığı çizgi izleyenleri izledim. helal olsun adamlara çalışıyorlar."http://www.youtube.com/watch?v=blRPGKn5Cak"Bu projenin bana çok şey öğreteceğini şimdiden gördüm. Bu konuda bana yardımcı olan ve olacak bütün ustalara en derin saygılarımı iletirim.Bilgi paylaşıldıkça çoğalır.
İyi çalışmalar
DC, STEP, SERVO MOTOR -> www.sinematronik.com