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.