İlk Robotum etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
İlk Robotum etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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.

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.


Mekanik ve Robotik

Sunta şasi ile tasarladığım robot. Servo kontrolü ve tek motor ile sürmek konusundaki endişelerimi paylaşmıştım. Bunun dışında aksam olarak ilk bulduğum ahşap, kalem gibi parçaları kullanmak hata payının oldukça artmasına sebep oldu. Örneğin servo ile yön vermek bir işkence idi zira servoya gönderdiğiniz +10 derece komutu her serferinde ayrı bir etki yapıyordu sanki servo canlanmış o anki ruh haline göre takılıyordu. Bunun sonuçlarına ise "Autonoumus Navigation" açısından baktığımız zaman robotun nerede olduğunu bilmesinin imkanı yoktu zira sensörler 5 gittim derken mekanik aksam 2 gidebiliyordu(Matrix gibi algılarınız sizi acaba yanıltabilirmi).


Ayrıca aldığım eski akünrobot için küçük kru akü 12 voltün oldukça ağır ve büyük olduğunu fark ettim. Bu sebeple çok komik bir fiyata daha küçük ve hafif bir akü alıp denemek istedim. Güç konusunda bir ihtiyacım baştan beri var aslında. Single board computer kullanımından daha önce bahsetmiştim, buradaki sıkıntı ise SBC'nin 5V Serializer.NET'in ise 12V ile çalışması. Bu sebeple bir "Switching Voltage Regulator" kullanma ihtiyacı doğuyor zira enerjiyi ısı olarak kaybetmek yerine daha verimli bir şekilde kullanmak istiyorum. Ne kadar çok verim o kadar az şarj demek çünkü. Aslında robotics connection daki arkadaşlar bu konuda çok güzel küçücük bir devre hazırlamışlar ancak yurt dışından böyle bir şey için 30$ ödemek bana lüks geldi.
Gelelim fikir değişikliklerine aldığım 2 yeni motor ile birlikte servo sürüşünden vazgeçtim ve difransiyel olarak sürme konusunda karar kıldım. Boşa çıkan servo ile ise Sharp Sensörleri için bir turret yaparak dönmesini sağlamayı düşünüyorum. Ayrıca bu turret üzerine bir webcam de ileride monte edebilirim. Şimdilik ilk hedefim "Drive By Wire" konusunda bir adım atmak.

11 Nisan 2008 Cuma

Evlilik, Robotik ve Sağlık Hakkında

Bu yazının başlığını okuyanlar diğer makalelerimle karşılaştırdıklarında eşimin biyomekanik bir yapıya sahip olduğu fikrine kapılabilirler en baştan sizi temin ediyorum eşim %100 et ve kemiktendir. Günümüzde kendimizi ancak sıkıştırdığımız zamanlarda yaşıyoruz belkide bu sebeple hayatımız sevdiklerimiz arasından seçim yaptığımız anlarla dolu. Eşinizin her konuda sizi desteklemesi nasıl bir şey bir fikriniz varmı?

Kendimin bile emin olmadığı konularda beni iten. Yazı yazıyormu diye hiç kimsenin girmediği bir sayfayı bütün gün kontrol eden. Fotoğrafları aktarmadığım için yazı yazmadığımı anlayarak bozuk cardreaderlı laptop'a kartı tanıtmak için sabırla uğraşan ( ki iş kolu olarak bilgi teknolojileri alanında çalışan benim). Getireceği ekonomik, sosyal yükler ne olursa olsun bir kere bile aldırmadan her serferinde hayallerime, fikirlerime saygı duyan dünya tatlısı bir eşe sahipim. Düşündümde küçük yaşlarımdan beri bu tarz hobilerle uğraşmak istememe rağmen ancak evlendikten sonra buna başlamam zaten kendi kendine bir şeyler anlatıyor. Biz erkekler düz mantık adamlarız o yüzden özetlemek gerekirse ana fikir "Beyler robot yapmaya başlamak istiyorsanız evlenin!" gibi bir yargı olabilir.
Edindiğim parçalar ile birlikte robotumun mekanik aksamını para harcamamak için boşta bulduğum ahşap, kalem, eski printer parçalarından yapmaya çalışmıştım. Güç vermem ile birlikte aksamın kötü modifiye edilmiş bir serçe'ye benzediğini fark ettim. Zira sensörler doğru açılarla hizalanmamış, tekerlekler düz bir hat üzerinde oturmamış, servolar verilen komut dışında kendi benliğine sahipmiş gibi davranırken bütün düşüncelerimi gözden geçirmek zorunda kaldım. Birinci olarak servo ile bu aleti yönetmek konusundaki korkularım kabusa dönüştü ve bundan vazgeçtim. Sonuç olarak bütün ahşap, kalem gibi ıvır zıvırlardan vazgeçip düzgün bir başlangıç yapmak için Ankara Ulus'taki "Elektronikçiler Çarşısına" Gittim dükkandakilerin bilgisine, malzemelerin çeşitliliğine hayran kaldım açıkçası zira aradıklarımı bulmak konusunda çok umutlu değildim fakat çalışır durumda palet aksamı dahil bulmamla beraber bütün fikirlerim değişti.
Gittiğim dükandan 2 adet redüktörlü ve encoder'li motor aldım (Tek Kanal Encoder), bunun dışında şasi imalatı için plexiglass, vida, somun,ve daha küçük bir akü de temin ederek eve geri döndüm. Plexiglass çok zevkli bir malzeme ancak siz siz olun plexiglass keserken ki özellikle Dremel gibi bir rotary araç ile keserken güneş gözlüğü gibi bir korumanın yeterli olacağını düşünmeyin. Ben siz yapmadan bir deney gerçekleştirdim,saolsun eşim hastanede gözlerime ait fotoğrafı paylaşmak için çekti, düzgün korumanın önemi konusunda daha iyi bir fikir edinmek üzere inceleyebilirsiniz.

plexiglass kaçmış gözün fotoğrafı

Biz eşimle her çarşamba günü genelde oturur birlikte televizyon izleriz ancak bu çarşamba farklıydı çünkü aldığım parçaları denemek için sabırsızlanıyordum eşimde yeni oyuncaklarımı denemem konusunda bana destek oldu. Plexiglass ı kesmek için ölçtüm, biçtim, çizgileri çektim havalı kesiyim diye Matriximsi güneş gözlüklerimi de taktım ve dremel'i çalıştırdım. Bir süre kestikten sonra sıcak plastik malzemeler un ufak olup üstüme sıçramaya başladığını fark ettim, ancak sıcak plastiğin dayanılabilir ve güneş gözlüğünün gözlerimi korumaya yeterli olacağını düşündüm. Fakat yanılmışım, o sıcak plastik tozlardan bir demet yukarı doğrı fırladıktan sonra sol gözümün alt kapakçığına oturdu. Eşim bu konuya alıştığı için 5 dk içinde hazırlanmıştı (biz erkekler yaramaz çocuk gibi olabiliyoruz). Daha önce gözümle ilgili yaşadığım diğer travmalardan konuya alışkın olduğumdan(bile bile yine yaptım) gözümle hiç ama hiç oynamadan direk olarak hastaneye doğru eşimle beraber yola çıktım. Yolda gözlerim yaşarmaya başlamış ve batma hissi çok artmıştı ama yinede gözüme dokunmadım. Bu yazıyı okuyanlara bir uyarı gözünüze bir şey kaçarsa (toxic olmayan) sakın çıkarmaya veya gözünüzle oynamaya batma hissine rağmen çalışmayın, gözünüzü mümkün olduğunca hareket ettirmeden doğruca hastaneye gidin. Hastanede işlemler yapılıp acile girmemle beraber biriktirdiğim o koca göz yaşları bir anda damladı ve gözümdeki o parçalar ne ise çıkmıştı zira batma hissi bir anda geçmişti. Ancak mikrop kapmasını önlemek için doktorlar gözlerimi serum ile yıkamaya karar verdi. Bakın bir koruma neler değiştiriyor.

plexiglass ameliyat masasında gözden çıkarılırken fotoğraf

Sonuç olarak ekonomik olarak ta güneş gözlüğü ile bu işe kalkışmak mantıklı değil. Zira taxi gidiş ve dönüş 15 ytl, acilde tedavi 55 ytl, teramisin göz pomadı 1ytl ve gözünüz pahabiçilemez olarak hesaplarsak. Toplam fatura Pahabiçilemez+71 YTL ye geliyor, peki koruma gözlüğü ne kadar biliyormusunuz? Sadece 2 ytl!

Tüm hayalperestlere mutlu evlilik ve kazasız hayaller dileklerimle.

7 Nisan 2008 Pazartesi

Serializer.Net ve Sharp GP2D12 Infrared Sensör hakkında

Serializer.Net e bağlanabilir devre elemanlarının çeşitliliği konusunda Serializer.Net User Guide dan bilgi alabilirsiniz. Tekerleklerin dönmesini ve attığı tur sayısı üzerinden mesafeyi ölçebileceğiniz quadrature wheel encoder benim yapmayı düşündüğüm tasarımda bu encoderlar tekerlek yerine motor üzerinde zaten bulunuyor.

Serializer .NET Robot Kontrolorü ve bağlanan bileşenler

Bu sebeple tekerleğin çapı ile ilgili ufak bir matematik hesabıyla birlikte ne kadar mesafe katettiğine dair veri alabiliyor olacağım, tabiki teorik olarak. Zira cimriliğim yüzünden 2 motor kullanarak difransiyel olarak motoru sürmektense tek motor ve bir servo yardımıyla motor sürmek gibi bir fikire kapıldım bu bana 30$ gibi bir tasarruf sağlasada pişman olmama az kaldı. Bunun nedeni ise servo ile yön verdiğimiz zaman bu hesapların oldukça karmaşık bir duruma gelmesi. Diğer bir sıkıntı ise düzgün çalışan bir servo mekanizması yapmanın görünenden daha zor olması.

Sharp GP2D12 IR Sensor

Sürüş ve mesafe demişken duvar gibi engelleri algılamak için yine biraz cimrilik yaparak 3 tane Sharp GP2D12 IR Sensor aldım. Bu sensörler 10cm ile 80cm arasında ölçüm yapabiliyorlar ancak yüzeyin mat ve parlak olması ölçümlerde farklılık yaratabiliyor. Sensörler doğrusal olarak ölçüm yapıyor yani görünüşüne bakarak 60 derece bir açıda ne var ne yok ölçüm alacak diye bir fikre kapılmayın. 10cm 4 derece 80 cm ise 30 derece ile algılayabiliyor. Bu sensörlerden gelen verilere göre iki eksende gelen engelleri plot ederek bir harita çıkarmayı düşünüyorum. Burada önemli olan 10 cm den daha yakında bir engel olursa robotun nasıl davranacağı zira bump sensor gibi bir donanım almadım yine cimrilikten ve Gp2d12 bu mesafeden kısa olanları algılamıyor. Eğer daha fazla bir bütçem olsaydı Sonar tarzı sensörleri büyük olasılıkla tercih ediyor olurdum.

5 Nisan 2008 Cumartesi

Serializer.Net ve USB Ttl Modülü

Serializer .Net FotoğrafıSerializer.Net ve diğer devre elemanlarıyla ilgili biraz daha bilgi vermek istedim. Serializer.Net DC motorlar, servolar, analog sensörler, I2C , switchler ve diğer cihazları .NET framework ve Robotics Studio ile kontrol etmek için bize bir interface sunuyor. Üzerindeki TTL seri port'a USB, Serial, Bluetooth gibi farklı seri interface modülleri takabiliyorsunuz. Bu interface aracılığıyla Serializer.Net'i herhangi bir bilgisayar'a bağlıyabiliyorsunuz. Benim tercihim USB modül üzerinden oldu zira kablosuz modüller hem pahalı hem de ben robotumu üzerine bir Single Board Computer koymayı düşünüyorum. Böylece kablosuz aktarım benim için bir sorun olmaktan çıkıyor. Eğer ileride kablosuz veri aktarımı tercih edersem bunu direk olarak Serializer.Net'e modül takarak değil bunun yerine SBC üzerine takılan bir modül ile yapmayı düşünüyorum. Bunun nedeni ise robotumun kendi başına ihtiyacı olan her şeyi barındırmasını istemem. Zira kablosuz bir modül kullansaydım SBC nin başka bir lokasyonda bulunması gerekebilirdi. Tamamiyle tercih meselesi.
Seri Usb TTl Serial Modülü
TTL Portuna USB Modülünü oturtuktan sonra ve güç bağlantılarını yaptığınızda Serializer.Net çalışmaya hazır oluyor. USB den makinanıza bağladığınızda bunu bir seri port olarak XP de otomatik olarak tanıyor. Hyperterminal ile Baud ve parity ayarlarını yaptıktan sonra komutları göndererek led, servo pozisyonu, sensör okumaları gibi işlemleri burası üzerinden de yapabiliyorsunuz ilk denemeler için hızlı ve basit bir çözüm.