Mayıs 2009 | Sayı : 2
      Robotlarda Hareket Algoritmaları Mayıs 2009 | Sayı : 2

Merhabalar, bu yazımızda, geliştirdiğimiz robotların hareketlerini kontrol ederken karşılaşacağımız en temel birkaç soruyu ve bu sorunlara getirebileceğimiz çözümleri inceleyeceğiz ve örnek teşkil etmesi amacıyla C# dilinde ufak bazı kodlar yazacağız.

 

SORU 1: Robotun başlangıç olarak (a1,b1) noktasında konumlandığını varsayalım. Eğer robot  Ѳ açısı ile c kadar hareket ederse hangi noktaya gelir?

Bunun için öncelikle geometrik bir şekil çizilerek durum şematize edilir. Görüldüğü gibi robotumuzun x ekseni boyunca yapmış olduğu yer değiştirme miktarı b’ye eşittir. ”b” ise “cos(ѳ)*c”ye eşittir. Aynı şekilde y ekseni boyunca yapılan yer değişme miktarı ise “a=sin(ѳ)*c”ye eşittir.

Bu durum için şöyle bir C# kodu yazabiliriz:

Öncelikle x ve y  koordinatlarını double türünden tutan bir Point classı tanımlanmalıdır :

Şimdi ise kendisine parametre olarak başlangıç noktasını, hareket açısını ve c uzunluğunu gönderdiğimiz ve karşılığında (a2,b2) noktasını hesaplayarak bize yine Point türünden döndüren metodumuz :

SORU 2:Benzer şekilde, problemi tersinden ele alırsak, yani (a1,b1) noktasından (a2,b2) noktasına gitmek için hangi yönde, hangi açıyla ve ne kadar yol gitmemiz gerekmektedir sorusu için şöyle bir algoritma gereklidir.


Bu durumda öncelikle hedef noktanın koordinat düzleminde hangi bölgede bulunduğunu tespit etmemiz gerekli. Bilindiği gib 1. Bölge (+,+), 2. Bölge (-,+), 3. Bölge (-,-), 4. Bölge ise (+,-) dir.

Daha sonra hareket açısını bulmak için eğimi şu formülle hesaplarız :

Son olarak yapmamız gereken robotun alacağı en kısa mesafe olan C’yi bulmaktır ki bunu da iki nokta arası en kısa mesafe formülünden bulabiliriz :

 

Bu durumda ѳ açısını ve C mesafesini bulmak için şu metodu kullanabiliriz :

SORU 3: İki 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 olacak. Konuya pivot noktasından başlayalım; örneğin bir köşeyi almak istenmektedir 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.

Bu durumda sağ ve sol tekerleğin gideceği yolu hesaplayarak bu tekerleklere dönüş anında vermemiz gereken gücü orantısal olarak tahmin edebiliriz. Bunun içinse kullanacağımız kod şu şekilde olacaktır :

Robotlarımızı geliştirirken test aşamasında karşımıza mutlaka çıkabilecek en temel 3 soruya değindik bugün. Kafanıza takılan herhangi bir konu için bana (aras@burhanara.net) mail adresimden ulaşabilirsiniz. Hepinize robotlarınızla birlikte keyifli sürüşler dilerim.  

      Burhan ARAS
İ.Ü. Bilgisayar Mühendisliği 4. Sınıf
- Mayıs 2009 -
Editörden... | Muhammed CÜCE Bilgisayarlar ve Biz | Ilir ÇOLLAKU Bulanık Mantık | Sümeyra HAŞLAMAN C ile Hafıza Yönetimi | Mustafa Burak AMASYALI Sanal Kozalar | Neslişah ÇELİK Welcome to the Human Network | Ömer GENÇAY Neyi Nasıl Kullanıyoruz? | Erman TEPE PHP Dilinin Olmazsa Olmazları | Soner GÖNÜL HTML Tagları ve İncelikleri | Muhammed CÜCE Robotlarda Hareket Algoritmaları | Burhan ARAS Süper Bilgisayarlar | Ilgın UĞUR PGP ile E-mail, Dosya veya HDD Şifreleme | Şeyma İZMİR - Okan SÜRÜCÜ - Feyza ŞAHBUDAK
« önceki sayfa - 9 - sonraki sayfa »

Ana Sayfa | Künye | Dergimiz | | İletişim
© 2009-2010 Bilisimdergi.Com Tasarım - Kodlama : İU BİLGİSAYAR

Creative Commons License
Bilişim Dergi içeriği  Creative Commons  lisansı ile korunmaktadır.
Kaynak göstermek ve link vermek şartıyla yazılarımızı kullanabilirsiniz.