Robot Controller Projesi

Başlık ne kadar uygun oldu bilemiyorum. Çünkü okulda verilen projenin adi “nesneye dayali programlama dönem projesi”. Ben projeye başlıktaki ismi koydum. Bu dönem (2.sınıf,bahar) yapmaktan zevk aldığım bir diğer proje. Bir diğeri için Sayisal Analiz Toolkit. Projenin içeriğini anlattıktan sonra projeyi yaparken öğrendiklerimi, kaynak kodlarını ve bir kaç görsel paylaşacağım.

Proje, USARSIM denilen bir simülasyon ortamındaki robotlarla ilgili. O ortamda çeşitli robotlar oluşturuyorsunuz, bu robotları her birini ayrı ayrı kontrol ediyorsunuz. Projede bizden yapmamızı istedikleri şey: bu ortamda robotları oluşturup yön/sürüş kontrolünün yapılabilecek bir arayüz oluşturmak. Proje aslında biraz sıkıntılı çünkü projeyi programlamaktan çok o ortamı kurup çalıştırmak can sıkıyor. Projeyle ilgili daha detaylı bilgiye hocanın kendi açıklamalarının bulunduğu şu word dosyasından okuyabilirsiniz.

Proje, bir arayüz projesi olarak verilmiş ancak içerisinde çeşitli Java konularının kullanılmasını gerektiriyor. Simülasyon ortamıyla haberleşmek için soket programlama, her robotun konumunu o an hesaplayabilmek için thread konusu, aynı özelliklere sahip robot türleri olduğundan kalıtım ve GUI programlama kullanılması gerekiyor.

Soket programlamayı ilk defa bu projede kullandım. Simülasyon ortamına(server) mesaj göndermek gerekiyor robotların ortamda oluşturulabilmesi için, aynı zamanda robotların yönleriyle ilgili işlem yapmak için yine mesaj/komut göndermek gerekiyor. Ayrıca robotların konumunu arayüzdeki gösterdiğimiz için serverdan bilgide almamız gerekiyor.

Thread konusuna gelecek olursak, robotlarımızı oluşturuktan sonra bir konuma sahipler ve hareket komutlarını verdiğimizde konumları sürekli değişmeye başlıyor. Bu konum bilgisinin gerçek ve doğru olması için serverdan sürekli bir bilgi akışı olmalı. Bunun için her robot nesnesinin içinde serverdan o robotun konum bilgisini alan bir thread çalışıyor. Threadi bu şekilde kullanmak biraz zaman aldı. Konu kendi başına biraz karışık zaten ama buradaki kullanımdan sonra biraz daha somutlaştı, pekişti.

Kalıtım konusu üstteki iki paragrafta yapılanları yapmaya başlamızsanız biraz daha basit kalıyor haliyle. Bu projede iki tür robot vardı, ortak özelliklerinin yanında farklı olan tek kısım tipleriydi. Amaç katılım konusunu kullandırtmaktı sanırım. Projenin amacı arayüz konusunda kendimizi geliştirmemiz için verilse de beni soket ve thread kısmı zorladı. Arayüz tasarımıyla ilgili daha önceden bir blog yazısı yazmıştım. Burada da tabi öğrendiğim yeni şeyler oldu. Yapılan değişikliği arayüze direkt yansıtabilmek mesela bunlardan biriydi. Eklenin bir robotu combobox listesine eklemek. Onun dışında sağ tarafta seçilen robotun görülen konum bilgisi sürekli güncelleniyor. Bunun için de thread kullandım. Thread içerisinde seçilen robotun konum bilgisi alınarak arayüze yansıtılıyor.

Üstte bahsettiğim konuların kullanımıyla ilgili fikir edinmek için kodları inceleyebilirsiniz, ancak proje simülasyon ortamı olmadan bir sonuç vermeyeceği için çalıştırmak mantıklı olmayacaktır.

Kaynak Kodlari : https://dl.dropboxusercontent.com/u/44525056/WP/JavaRobotProjesi/NDKPRO.zip

(GitHub ciddi anlamda kullanmaya başladığımda kodları incelemek daha kolay olacak : ) )

Ekran Görüntüleri:

Bilgisayara format atmasaydım, görseller daha çok/farklı olabilirdi. Arka taraftaki kısım simülasyon ortamı, diğer pencere ise yaptığım projeden bir görüntü. Umarım kodları inceleyerek faydalanacağız bir şeyler bulursunuz. İyi kodlamalar.