27 Temmuz 2008 Pazar

Tekrar Üniversiteliyim

Metu WBL LogoBilgi Teknolojileri konusunda hayatımda bir kez olsun eğitim almak hep hayalimdi. Uzun bir aradan sonra sonunda ODTÜ Enformatik Enstitüsü WBL yüksek lisans programına kabul edildim ve sevinçten havalara uçtum. Eylül ayında kayıtlarım ve dersler başlayacak şimdiden sabırsızlınayorum. Herkesin hayallerine bir adım daha yaklaşması dileğiyle.

27 Mayıs 2008 Salı

Robotunuzda Difransiyel Sürüş ile Köşeleri Almak

Servo ile sürüşten vazgeçmemle birlikte difransiyel sürüş ile ilgilenmem gerekti. Kınematik ve matematik bilgim oldukça temel olmasına rağmen biraz araştırınca difransiyel sürüşü ilgilendiren denklemler konusunda biraz fikir sahibi oldum. Burada gidilen mesafe açısından istenilen açıları dönmek için ne yapmak gerekir buna değineceğim. Zaman, hız ve ivmelenme burada bahsedeceklerim içersinde yer almıyor belki ileride bunlar üzerinde zaman harcama fırsatım olduğunda değinebilirim.


Sorunumuza şöyle bakalım iki tekerlekli bir aracı nasıl istediğimiz açıda döndürebiliriz? Örneğin bir tekerlekli sandalyeyi 90 derece sola döndürmek için hangi tekerleği ne kadar döndürmek gerekir? Bunun gibi basit soruların cevapları robotun hareketi ile ilgili sorularımızın da cevaplarını oluşturuyor olucak.
Konuya pivot noktasından başlayalım örneğin bir köşeyi almak istiyorsunuz ama burada 90 derecelik direk dönüşler yerine ark çizmek işimize gelecektir. O zaman bu ark'ı nereye göre çizeceğiz. Bir sütunun etrafından köşeyi sola doğru alacağımızı hayal edersek sütun bizim pivot noktamız oluyor. "r" sütun ile sol tekerlek arasındaki mesafemiz olarak ve "b" yi de iki tekerleğin merkez noktaları (şaftı) arasındaki mesafe olarak kabul edersek.


"SL" Sol tekerleğin gideceği mesafe "SR" ise Sağ tekerleğin gideceği mesafe oluyor. Böylece "Q" açısında yuvarlak bir dönüş için gerekenleri temel olarak tamamlamış oluyoruz. PID veya PWM motor kontrolü ile birlikte ilk denemelerimi yakında paylaşıyor olurum. Bir sonraki merak konum ise zaman, ivmelenme, hız gibi etkenlerin de dahil olduğu daha az hata payı barındıran modeller nedir?

26 Mayıs 2008 Pazartesi

İsminizi Ay'a Gönderin

isminizi aya gönderin sertifika
Nasa LRO yani "Lunar Reconnaissance Orbiter" uzay aracı ile birlikte isminizi Ay'a göndermek için bir proje düzenlemiş. http://lro.jhuapl.edu/NameToMoon/ adresinden isminiz ve soyisminizi girdiğinizde sağdaki resimde görebileceğiniz bir sertifika basma imkanı da olabiliyor. Bu girilen bilgiler bir veritabanına aktarıldıktan sonra bir mikroçip üzerine gömülecek. 27 Haziran 2008 bu güzel projeye katılım için son gün . Kaynak:http://www.nasa.gov/mission_pages/LRO/main/index.html

25 Mayıs 2008 Pazar

Microsoft Robotics Studio, C#, Servo ve IR Sensör ile Engel Tanıma

En son makalemde açı mesafe arasındaki ilişkiden bahsetmiş rota planlama için nasıl kullanılabileceğine değinmiştim. Basit trigonometriden faydalandığımız bir diğer konuda engel tanıma. Bildiğiniz üzere mesafe ölçümü için sharp ir mesafe sensörleri kullanıyorum. Bu yazımda C# ve Microsoft Robotics Studio ile sabit olarak duran robotun çevredeki engelleri olan algısından bahsedeceğim.
Engel tanıma için bu testimde robot durağan iken etrafındaki engelleri nasıl algılıyor bunu merak ettim. Video da daha iyi görebileceğiniz gibi robotumun üzerinde servo üzerine monte edilmiş 3 adet Sharp IR mesafe sensörü var. Aslında burada basit olarak yaptığım 20 derece lik hareketlerle sensöre ait okumaları alıp bunları bir kartezyen koordinat sisteminde göstermek. "+" işaretleri algıladığı engelleri belirtiyor. Aslında robotun yaptığı işlemler basit ve şu şekilde.
  1. Son dereceye 20 derece ekle ve servoyu hareket ettir.
  2. 500 ms bekle (daha doğru bir okuma için)
  3. Sharp IR sensörden gelen mesafeyi oku.
  4. Mesafe ve açıdan gelen bilgilere göre merkez nokta kendin olmak üzere bunu kartezyen koordinat sitemine çiz.

Bahsi geçen adımlar için bir timerdan faydalanıp son okuma derecesini integer olarak tuttum. Timer tick fonksiyona ise yukarıdaki işlemleri ekledim oldukça basit.

Microsoft Robotics Studio C# ve IR Sensör ile Engel Tanıma Bu tarz bir tarama işleminin en kötü yanı tarama işleminin aldığı süre zira okuma derecesini düşürürseniz tarama çok uzun sürüyor ama aldığınız veriler daha detaylı oluyor. Dereceyi arttırırsanız ise doğal olarak o açı aralığındaki bir nesneyi kaçırma ihtimaliniz oldukça artıyor.
Okumalarda yaşadığım bir diğer sıkıntı ise ortamın ısısı, ışık, parlaklı ve matlık gibi etkenlerin sharp ir mesafe sensörü üzerindeki etkisi. Sharp IR sensörün gönderdiği ışın ve çarptığı yüzeyin açısı sanki algılamada hata payını arttırıyor. Video da izleyeceğiniz gibi eğimi düşük yani ışını daha küçük bir açıyla çarptığı noktalar algılanan mesafede değişimlere sebep oluyor. Geniş açıdan baktığımızda ise turret'ın dönme hareketi ile okumalar arasında bir ilişki olduğunu söyleyebilirim. Duvar gibi düz bir yüzeyi çizgi olarak algılamak yerine eğri olarak algılıyor. Bunun üzerine yoğunlaşmam ve ışının olası çarpma açılarını değerlendirecek bir normalizasyon algoritması üzerinde çalışmam gerekecektir. Yoksa robot olduğunu düşündüğü yerde hiçbir zaman olamayacak ve engel olmadığını düşündüğü yerde bir engel ile karşılaşacaktır. Bunların hepsi ayrı bir dalın uzmanlık alanı bu sebeple ileride odometri ve slam algoritmaları üzerine biraz daha yoğunlaşacağım.

Bir sonraki denememde servoyu sadece gerekli olduğu zamanda kullanarak okuma yapmak ve hareketli olarak yapılan algılamalar üzerinde yoğunlaşacağım. Bu durumda önümde SLAM algoritamaları, odometri gibi kavramlar beni bekliyor olacak. Engellere takılmamanız dileğiyle.

8 Mayıs 2008 Perşembe

Robotik Rota Planlama. Gidilecek Açı ve Mesafe Bilinen Noktanın Koordinatlarını Bulmak.

Otonom hareket işin içine girince ne kadar sevmesemde matematik ile uğraşmak bir zorunluluk halini alıyor. Robotumun hareketlerini kendi başına yapabilmesi için Kartezyen koordinat sistemi üzerinden rotaların(waypoint) hesaplanması temel trigonometri kullanımını mecburi kılıyor. Örneğin robotumun a(0,0) bilinen noktasından Q açısında c mesafe ilerlemesi istendiği zaman b(x,y) varış koordinatı ne olur? Bu soruyu cevaplamak için ezber halinde verilen ama ne işe yaradığını öğrenemediğim matematik bilgilerim üzerinde düşünmem gerekti. Zira keşke üçgenler üzerinde formüller göstermek yerine örnek kullanım alanlarını da lise de bize öğretselerdi.
SinA = a/c formülBu formül çıkış noktamız oluyor. Biz A açısını ve c yani mesafemizi biliyoruz. Böylece a = SinA x c ve b=CosA x c oluyor. Artık x ve y ekseninde kaç birim ekleyeceğimizi bildiğimiz için a(0,0) noktasından b(?,?) noktasına gidiş için a(0+a,0+b) bizim varış noktamızın yani b noktasının koordinatları oluyor. C# math class yardımıyla bu hesaplamaları basit bir kod yazarak yapabiliriz. Örnek olarak aşağıda yazdığım kodun bir bölümünü bulabilirsiniz.

double rada = double.Parse(numDirection.Value.ToString()) * (Math.PI / 180);

double sina = System.Math.Sin(rada);
double da = sina * Double.Parse(numDistance.Value.ToString());

double cosa = System.Math.Cos(rada);
double db = cosa * Double.Parse(numDistance.Value.ToString());

int x = lastx + Convert.ToInt32(da);
int y = lasty - Convert.ToInt32(db);

fncPaintChangePoint(x, y);
fncPaintDrawLine(lastx, lasty, x, y);

start = false;
lastx = x;
lasty = y;
Artık gidilecek noktamızı açı ve mesafe girerek görebildiğimize göre rotamızı planlamaya başlayabiliriz. Yazdığım ufak bir uygulama ile sonucu görebilirsiniz.


Robotik Rota Planlama ve Waypoint

Gidilecek mesafe ve açı verildikten sonra gördüğünüz gibi bu noktalar işaretleniyor. Rotanızdan şaşmamanız dileğiyle.

16 Nisan 2008 Çarşamba

Beyin ile Kontrol, EEG(Electroencephalography), OpenEEG, Örüntü Tanıma ve Alternatif Kullanım Alanları

eeg dalga örneği1929' da Hans Berger adında bir Alman doktor beyinin elektriksel hareketlerini kayıt edebilen ve bunları grafiksel olarak bir kağıtta gösterebilen buluşunu açıkladı. Ayrıca bu elektriksel hareketlerin beyinin aktivitelerine göre değiştiğini de keşfetti, bu değişimler uyku, oksijen eksikliği ve epilepsi gibi bazı hastalıklarda da ortaya çıkıyordu. İlk başta, diğer bilim adamları kendisine gülmesine rağmen çalışmaları klinik neuro fizyoloji alanında çığır açtı. Teknoloji günümüze kadar oldukça gelişti ve iş bilgisayarları bu yöntemle kontrol etmeye kadar geldi. Tabiki bunu "acaba herhangi bir cihazı düşünerek kontrol edebilirmiyim?" sorusunu biraz araştırırken öğrendim. Aklıma ilk gelen robot kontrolü için bu yöntem kullanılabilirmi sorusu oldu? (Resim Kaynak OpenEEG)

Eeg Delta Dalgası ÖrneğiEEG yani Electroencephalography beyindeki elektriksel hareketleri algılayan bir cihaz olduğundan bahsetmiştim. Peki nedir bu elektriksel hareketler? Beyinin farklı bölgelerinde sürekli olarak elektriksel faliyetler meydana geliyor, bu faliyetler bölgeye, algılara ve duyulara göre değişim gösteriyor ve çoğu 1-20Hz aralığında meydana geliyor. Bu hareketleri dalga olarak ortaya çıkıyor ve 5 çeşite ayrılyor Alpha, Beta, Delta,Theta ve Gamma dalgaları. Her bir dalga beyinin farklı bir bölgesinde ve farklı faliyetlerde ortaya çıkıyor örneğin Delta dalgaları 3 Hz e kadar çıkabilmekle beraber yetişkinlerin ön loblarda ortaya çıkıyor ve uyurken değişim gösterebiliyor (Sol tarafta örnek bir delta dalgasını görebilirsiniz). (Resim Kaynak: Wikipedia)

Bunları öğrendikten sonra bu dalgalardaki değişimleri algılayarak bunlara tepki veren bir yazılım yapılabilirmi konusunu araştırmaya başladım. İlk aşama olarak bu elektriksel faliyetleri ölçmek ve kaydetmek için bir eeg cihazına ihtiyacım olacaktır? Ancak EEG cihazları oldukça pahalı olduğu için kendime ait bir tane yapmam gerekecektir. Bu sebeple biraz araştırmadan sonra OpenEEG adında bir projeye denk geldi burada kendi EEG cihazını yapmak için devre planları ve bunlara ait firmware'lar mevcut. OpenEEG iki bileşeden oluşuyor Amplifikatör ve Dijital board.

Amplifikatör Modular EEG Amplifikatör Modular EEG (Kaynak http://openeeg.sourceforge.net/doc/modeeg/modeeg.html)

Digital Board Modular EEG

Digital Board Modular EEG (Kaynak http://openeeg.sourceforge.net/doc/modeeg/modeeg.html)

Bu devrelere bağlı elektrodlar yardımıyla beyindeki elektriksel aktiviteleri kaydetmek için bilgisayarınıza bir arabirim sağlayabiliyorsunuz. Mantığıma göre eğer bir değişimi ölçebiliyorsak bunu bir girdi olarak kullanabiliriz. Bu girdi televizyonu açmak ta olabilir yada bir robotu ileri hareket ettirmek te olabilir. Bence buradaki normal dönemdeki patternları ölçerek ve farklı tepkilerimizdeki değişimlerini kullanarak bu tepkilerimizle bir devre yardımıyla acaba kontrol edebilirmiyiz?

Bunu öğrenmek için önce mevcut projemi bitirmem, 200€ luk bir tasarruf yapmam ve bu konudaki iştahımı arttırmam gerekiyor. Şimdilik sadece bir düşünceden ibaret.

15 Nisan 2008 Salı

12V u 5V a düşürmek

12v 5v a düşüren devre lm2575 devre şeması Daha önce robotuma SBC monte etmek istediğimden sözetmiştim. Bu isteğimle beraber 12V luk akümden 12V çeken serializer.net in yanına 5v çeken bir sbc kullanmam gerekiyor. İkisini aynı aküden besleme isteğimle beraber (ağırlık meselesi) bu tarz işlemleri yapmak için %45 verimlilikle çalıştığı söylenen lineer voltaj regülatörleri ve %80'e yakın verimlilikle çalışan switching voltaj regülatörleri olduğunu öğrendim. Bu switching voltaj regülatörlerini aramama rağmen bulamamla beraber esnaf arkadaşlar bu işi kendimin yapabileceğini söyledi. Kendi devrelerimi hazırlamaktan sürekli kaçmama rağmen bulduğum şemayla beraber gerekli devre elemanlarını istedim ve kendim yapmaya karar verdim.12v 5v a düşüren devre lm2575 devre şeması

Henüz fiyat gelmemiş olmasına rağmen 10 YTL gibi bir rakama bana patlayacağını esnaf arkadaş iletti. İşin ilginç yanı ise bana ikinci kez "bu işlere girişiyorsan eninde sonunda eline havya alman gerekecek" demesiydi. Sanırım temel olarak elektronik öğrenmem gerekecek ve bu da ilerideki belki olabilecek daha karmaşık projeler için gerekli ve faydalı olacak.

12 Nisan 2008 Cumartesi

İlk Robotumun ve İlk Hareketleri

Uzun bekleyişler ve biraz hayal kırıklığından sonra ilk robotumun ana hatlarıyla montajını bitirdim. Şu an için encoder bağlı değil ancak video da göreceğiniz gibi servo ve motorlar çalışıyor. Bir adet usb kamera eklemeyi de ihmal etmedim. SBC için bir regüle devre hazırlar hazırlamaz SBC nin montajını da yapacağım böylece artık laptop'a bağlı kalmama gerek kalmayacak ve robot kapalı bir sistem olma yolunda bir adım daha atmış olacak.



Microsoft Robotics Studio C# ile yapılan bir robotMekanik aksam beklediğimden çok daha iyi oldu plexiglass sakat ama kolay çalışabilir ve şık bir malzeme. Robotun ortaya çıkması ve belirginleşmesiyle beraber insan daha bir heyecanlanıyor. Bu arada eşimden robotun çok güzel olmasına rağmen çekimin ve çekim yerinin çok kötü olduğuna dair bir yorum aldım. Robotumu masadan kaldırıp evde dolaşırken bir video daha hazırlayacağım ancak bu konuda şu an için zaman harcamak istemiyorum. En azından bir fikir vermesi açısından bu ilk hareketler şimdilik yeterli olur sanırım.

Herkesin hayallerinin gerçek olması dileğimle.