Sharp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Sharp 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.

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.


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.