5. Uluslararası İleri Teknolojiler Sempozyumu (IATS 09), 13-15 Mayıs 2009, Karabük, Türkiye LABİRENT ÖĞRENEN ROBOT TASARIMI VE GERÇEKLEŞTİRİLMESİ DESIGN AND IMLEMENTATION OF A ROBOT THAT LEARNS THE MAZE Oktay YAĞLI Karabük Üniversitesi, Fen Bilimleri Enstitüsü, Karabük, TR, E-posta: oktayyagli@hotmail.com Özet Bu çalışmada labirent öğrenen robot gerçekleştirilmiştir. Robot mikrodenetleyici ile kontrol edilmektedir. Robotun amacı labirent içerisindeki bir hedefi bulmak ve labirenti öğrenmektir. Labirenti öğrenen robot önceden girip de hedefi bulamadığı odalara tekrar girmez. Tasarlanan robotun boyutları, şekli, hareket organları ve kullanılan sensörler değiştirilerek, insanlar için uygun olmayan fiziksel ortamlarda veya daha farklı alanlarda kullanılabilir. Anahtar kelimeler: Mikrodenetleyici, PicBasic, Labirent, Robot, Mobil robot Abstract In this study a robot which learns the maze was constructed. The robot is controlled by a microcontroller. The aim of the robot is to find a target in the maze and to learn the maze. The robot that learned the maze doesn t enter the rooms that are entered before but the target was not found. By changing the dimensions, shape, moving parts and type of the sensors of the robot, it can be used in different fields that the conditions are not suitable for human beings. Keywords: Microcontroller, PicBasic, Maze, Robot, Mobile robot 1. Giriş Robotlar ile labirent çözme 1970 li yıllara dayanmaktadır. Hatta 1970 lerin ortalarından bu yana her yıl IEEE tarafından Micro Mouse Contest isimli labirent çözme yarışmaları düzenlenmektedir. Yarışmalardaki amaç, labirentin orta noktasını en kısa sürede bulan bir robot tasarlamak ve gerçekleştirmektir. Gerçekleştirilen robotlarda, labirent çözme programlarında 3 temel algoritma kullanılmaktadır. Bunlar rasgele arama, labirenti haritalama ve sağ veya sol duvar takibi metotlarıdır. Rasgele arama metodu bu üç metot içerisinde en iyisi, en kısası veya en hızlısı değildir ama mantıksal olarak en basit olan metottur. Bu metotta robot, labirent içerisinde rasgele ilerlemektedir. Robot sağında veya solunda bir boşluk olduğunda sağa veya sola dönme kararını rasgele vermektedir. Rastgele arama metodunun tek dezavantajı labirent çözme işleminin daha uzun süre alması ve muhtemelen istenen süreden daha fazla zaman gerektirmesidir. Ayrıca robot dönüşler sırasında yapacağı olası yanlış kararlarla saatlerce labirent içerisinde dolaşabilir. Dolayısıyla programlama konusunda biraz daha zaman harcayarak farklı algoritmalar kullanmak daha akılcıdır. Labirent haritalama metodunda ise labirent içerisindeki her bir oda, robotun labirent içerisinde harekete başlayacağı noktadan başlanarak 1,2,3,4 şeklinde numaralandırılır. Yani labirent içerisindeki her odanın bir numarası vardır. Robotun labirent içerisindeki hareketleri sırasında bulunduğu her oda numarası bir dizi içerisine kaydedilmektedir. Bu metotla robot sağ veya sol duvarı takip ederek labirenti haritalamaktadır. Haritalama işlemi sırasında ölü noktalar 0 bilgisi ile doldurulmaktadır. Robot hareketini tamamladığında labirent, oda numaraları ve sıfırlardan oluşan bir matris şeklinde ifade edilmektedir. Haritalanan labirentte robot başlangıç noktasından çıkışa en kısa yolu kullanarak ulaşabilir [1]. Bu yöntemler içerisinde en işlevsel olanı duvar izleme yöntemidir. Bu yöntemde robot labirent içerisinde sağ veya sol yanındaki duvarı izlemektedir. Bu metodu, en iyi kendimizi bir labirentin içerisinde gözleri kapalı olarak hayal ederek açıklayabiliriz. Eğer bir elimizle duvarı tutabilirsek ve çıkış da bir ada değilse, eninde sonunda çıkışı bulabiliriz. Ama çıkışa ulaşıncaya kadar mutlaka bir duvar takip edilmelidir [2]. Bu çalışmada gerçekleştirilen Labirent Robotu ile labirent içerisinde istenen bir hedefin bulunması ve arama işlemi sırasında labirentin öğrenilmesi amaçlanmıştır. Labirenti öğrenen robot ikinci çalıştırmada, daha önceden hedefi bulamadığı boş odacıklara tekrar girmeyecektir. Böylece robot, labirenti öğrenmiş ve hedefe en kısa yoldan ulaşacaktır [3]. 2. Labirent Robotu Tasarımı Robotun mekanik yapısı; alüminyum malzeme, polyemit tekerlekler ve 2 adet adım motordan oluşmaktadır. Elektronik yapısında ise 5 adet cisimden yansımalı sensör, motor sürücü devresi ve işlemci devresi bulunmaktadır. 2.1. Labirentin Tasarımı Labirent, 80cm eninde, 100cm uzunluğunda pleksiglas malzemeden yapılmıştır. Bu zemin üzerine duvarları tutturmak için 12cm yüksekliğindeki direkler 18cm aralıklarla yerleştirilmiştir. Duvarlar 18cm boyunda, 12cm yüksekliğinde ve 1.8cm genişliğindedir. Direklerin 4 tarafında da duvarların tutturulmasına imkân sağlayan oluklar vardır. Böylece duvarların yerleri değiştirilerek farklı labirent şekilleri oluşturulabilmektedir. Şekil 1 de örnek bir labirent şekli verilmiştir. IATS 09, Karabük Üniversitesi, Karabük, Türkiye
geçme yöntemiyle tutturulmuşlardır. Şaseye tutturulan gövde üzerine, labirent üzerindeki duvarları algılamak üzere 4 adet sensör yerleştirilmiştir. Robotun üst kapağında ise sensörlerin durumlarını gösteren ledler ve robotun kumanda butonları yer almaktadır. Şekil 3 te labirent robotun çalışma esnasındaki bir resmi yer almaktadır. 2.3. Motorlar ve Motor Sürücü Devre Şekil 1. Odaları değiştirilebilen labirent 2.2. Robotun Mekanik Yapısı Robotun gövdesi 13cm çapında, 12cm yüksekliğinde alüminyum borudan yapılmıştır. Robotun şasesi ise 0,5mm kalınlığında alüminyumdan yapılmıştır. Şekil 2 de robot şasesinin şekli gösterilmektedir. BİLYE Robotun hareketini 2 adet adım motoru (step motor) sağlamaktadır. Kullanılan adım motoru melez (hybrid) tip, tek kutuplu (unipolar) adım motorudur. Motor 3,6º açılı ve 100 adımlıdır. Motorlar; darlington bağlı transistörlerden oluşan motor sürücü devresi tarafından sürülmektedirler. Şekil 4 te motorları kontrol eden bu sürücü devre ve bağlantı noktaları görülmektedir. Bu devre için gerekli olan motor kontrol sinyalleri mikrodenetleyici tarafından sağlanmaktadır. Adım motorlarının sargıları, her biri darlington bağlı olan transistör çiftinin kolektörüne bağlıdır. Adım motoru sargılarındaki zıt EMK (Elektro Motor Kuvvet) dan transistörleri korumak üzere sargılara paralel diyotlar konmuştur. Bu katın beslemesi 9,6 volt tur. Devre tam yük altında 1,2A akım çekmektedir. 2.4. Robotta Kullanılan Sensörler SOL TEKERLEK SOL STEP MOTOR SENSÖR SAĞ STEP MOTOR SAĞ TEKERLEK Sensör olarak siyah beyaz renk algılayan cisimden yansımalı (opto reflective) CNY70 sensörü kullanılmıştır. Bu sensörün tercih edilme sebebi düşük maliyeti ve kolayca ulaşılabilmesidir. Sensör Şekil 5 de görüldüğü gibi IR ışık yayan bir led ile bir foto transistörden oluşmaktadır. IR ledden yayılan ışınlar bir cisme çarptığında geriye yansıyacak ve sensörün içerisindeki foto transistör yansıyan bu ışık ile iletime geçecektir. BİLYE Şekil 2. Robotun şasesi Şekil 3. Labirent robotunun görünüşü Bu şase üzerine step motorlar sırt sırta yerleştirilmişler ve polyemit malzemeden yapılan tekerlekler de step motorlara geçirilmişlerdir. Tekerlekler motor miline sıkı Şekil 4. Motor sürücü devresi Sensörün algılama mesafesi yani cisimden yansıyan ışınların foto transistorü iletime geçirebileceği mesafe 0,3mm dir. Bu algılama mesafesi robotta kullanım için uygun bir değer değildir. Bu yüzden Şekil 6 daki devre ile
algılama mesafesi arttırılmış ve ortamın aydınlık durumuna bağlı olarak 1 1,5cm mesafede algılama sağlanmıştır. Çıkış sinyalini kararlı hale getirmek için schmitt trigger çıkışlı bir invert (değil) kapısı olan 7414 entegresi kullanılmıştır. Şekil 5. CNY70 sensörün iç yapısı [4] Şekil 6. CNY70 sensörün bağlantısı Robotta kullanılan 5 sönserden, 1 tanesi robotun altında olup hedefi tespit etmek amacıyla, diğer 4 sensör ise duvarları algılamak amacıyla kullanılmıştır. Her bir sensör devresinin çıkışı PIC16F877 entegresinin A portu girişlerine bağlanmıştır. Sensörlerden gelen lojik sinyallere göre labirent içerisinde yön ve hedef bulma işlemi gerçekleştirilmiştir. 2.5. Mikrodenetleyici Katı Robotun kontrolünde Microchip firmasının üretmiş olduğu PIC16F877 mikrodenetleyicisi kullanılmıştır. PIC16F877 azaltılmış komut setine ve RISC mimarisine sahiptir. İşlem hızı 20 Mhz dir. Veriyolu 8 bittir. 14 farklı kaynaktan kesme yapılabilir. 8 Kword e kadar artan flash belleği 1 milyon kez programlanabilir. 368 Byte veri belleği, 256 Byte EEPROM veri belleği vardır. Yığın derinliği 8 bittir. Doğrudan, dolaylı ve göreceli adresleme yapabilir [5]. 16F877 mikrodenetleyicisi kolay ulaşılabilir olması, maliyetinin düşük olması, çalışma hızı, I/O pin sayısının çok olması ve EEPROM belleğinin miktarı sebebiyle bu uygulamada tercih edilmiştir. Şekil 7 de mikrodenetleyici katına ait devre şeması görülmektedir. Sensörlerden gelen giriş bilgileri A portuna bağlanmıştır. Mikrodenetleyici bu bilgileri değerlendirerek yapacağı harekete karar vermektedir. Motor dataları B portundan gönderilmektedir. İlk 4 pin (PortB.0-PortB.3) sağdaki adım motorunu, son 4 pin (PortB.4-PortB.7) soldaki adım motoru kontrol eden bitlerdir. Adım motorunun veriler arasındaki değişimi algılayabilmesi için, veriler arasında 20 msn gecikme yapılmıştır. Bu gecikmeler değiştirilerek adım motorlarının dolayısıyla da robotun daha hızlı veya daha yavaş hareket etmesi sağlanabilir. Sensör durumunu gösteren ledleri çok amaçlı kullanabilmek için, her bir sensör ledi D portundaki bir çıkışa bağlanmıştır. Böylece ledler yazılım yardımıyla istenilen şekilde yakılıp söndürülebilmektedir. Robotun besleme gerilimi, birbirlerine seri bağlı 4 adet 2.4Volt, 2 Amper Ni-Cd şarjlı pil ile sağlanmaktadır. Mikrodenetleyici katını beslemek üzere 7805 entegre gerilim regülatörü kullanılmıştır.
Şekil 7. Robotun mikrodenetleyici katı Şekil 8. Programın akış diyagramı 2.5. Robotun yazılımı Robotun yazılımında PicBasic dili kullanılmıştır. Programda sensörlerden alınan bilgilere göre robotun hareketine yön verilmektedir. Yazılım için kullanılan akış diyagramı Şekil 8 de gösterilmiştir. Start düğmesi ile birlikte robot sağında bulunan duvarı takip etmeye başlar. Robot hareketinde sağ yanında bulunan duvarı referans almaktadır. Yani robot labirent içerisinde sağındaki duvarı gördüğü müddetçe ileri yönde hareketini devam ettirmektedir. Yazılımda öncelik hedefi aramakta olan alt sensöründür. Daha sonra sırası ile sağ sensör, ön sensör, sol sensör ve son olarak da arka sensör önceliğe sahiptir. Robot sağında duvar olduğu sürece ilerleyecek, sağında boşluk olduğunda ise sağa dönecektir. Robotun dönüşleri her iki tekerleğin de dönmesi ile sağlanmaktadır. Sağa veya sola dönme hareketi, kaymaları önlemek için tek tekerlek ile değil de, aynı anda her iki tekerleği de aynı yönde döndürerek gerçekleştirilmiştir. Tekerlekleri döndüren adım motorları sırt sırta monte edildiği için robotun ileri veya geri yönde hareket etmesi için adım motorlarının zıt yönde dönmeleri gereklidir.
Yazılımda 4 temel hareket söz konusudur ve bunlar birer altprogram olarak hazırlanmıştır. Bu hareketler, ileri gitme, sağa dönme, sağa kısa dönme ve sola dönme hareketleridir. Tasarlanan labirente göre robotun geriye gitmesine ihtiyaç duyulmamaktadır. İleri gitme alt programı her çağrıldığında yaklaşık olarak 0.9cm ilerleme gerçekleşmektedir. Yazılımda sağa dönme alt programı 3 aşamalıdır. Önce 9cm ileri gitme, sonra olduğu yerde sağa dönme ve sonra da 10cm ilerleme şeklinde gerçekleşmektedir. Sağa dönme işleminden sonra 10cm ilerlemenin sebebi, robotun labirent duvarlarından birini sağ sensörü ile görmesini sağlamaktır. Aksi takdirde robot sağa dönme işleminden sonra sağında duvar olmadığı durumlarda tekrar sağa dönecektir. Sola dönme işlemi ise, robotun bulunduğu noktadan doğrudan sola dönmesiyle gerçekleştirilmektedir. Sağa dönüşlerde sağ tekerlek saat ibresinin tersi, sol tekerlek saat ibresi yönünde dönerken, sola dönüşlerde sağ tekerlek saat ibresi yönünde, sol tekerlek de saat ibresinin tersi istikametinde döndürülür. Aynı anda her iki tekerlek de döndüğü için dönüş işlemi daha kısa sürede gerçekleştirilmektedir. Şekil 9. Labirentin matris şeklinde gösterimi Robotun, hedefi araması sırasında labirenti öğrenmesi gereklidir. Bu işlem labirentin 4x5 matris gibi düşünülmesi ile sağlanmaktadır. Bu durum Şekil 9 da gösterilmiştir. Robotun yatay ve düşeydeki hareketi esnasında, bir sonraki duvara geçtiğinde satır ve sütun bilgilerini tutan değişkenlerin değerleri değiştirilmektedir. Robotun başlangıç değeri olarak x=1 ve y=1 koordinatlarında ve yön olarak da sağ yöne hareket ettiği varsayılmaktadır. Robotun ileri yöndeki hareketleri sayılmakta ve bir duvar boyundan fazla ilerleme sağlandığında, robotun yön bilgisine bağlı olarak, yatay veya düşey eksendeki koordinat bilgileri x ve y değişkenlerine aktarılmaktadır. Elde edilen x ve y değerlerine göre oluşturulan tabloya bakılarak robotun o anda hangi adreste, yani hangi koordinatta olduğu belirlenmektedir. Belirlenen bu koordinat değeri, dâhili EEPROM belleğe kaydedilmektedir. Bunun yanı sıra, herhangi bir koordinata her ulaşıldığında o koordinata kaç kez ulaşıldığı bilgisini tutan değişkenin değeri de bir arttırılmakta ve dâhili EEPROM bellek içerisine kaydedilmektedir. Her dönüş sonrasında robotun hareket yönü değişmektedir. Bu yüzden, her dönüş işleminden sonra, çağrılan bir alt program ile eski yön bilgisi ve yapılan dönüşe göre yeni yön bilgileri ayarlanmaktadır. Robotun ilk çalıştırılması öğrenme aşamasıdır. Bu ilk çalıştırma sürecinde robot, labirent içerisinde hedefi aramaktadır. Aynı zamanda robot, gittiği hücreleri ve hangi hücreye kaç kez gittiği bilgilerini dâhili EEPROM belleğe kaydetmektedir. EEPROM bellekte saklanan koordinat bilgileri ile hangi koordinata kaç kez gittiği bilgileri robotun labirenti öğrenmesi için yeterlidir. Hedefi bulan robot labirenti de öğrenmiş olmaktadır. Labirentteki odaların yerleştirilme şekline ve hedefin bulunduğu odaya bağlı olarak, öğrenme süresi 10sn ile 4 dakika arasında değişmektedir. Labirentin öğrenildiği bilgisi, dâhili EEPROM belleğin sıfır (0) nolu adresine 2 bilgisi yazılarak ifade edilir. İkinci çalıştırılmada amaç; robotun labirent içerisinde yaptığı hareketler esnasında hedefi bulamadığı boş odaları atlayarak, hedefe en kısa yoldan ulaşmasını sağlamaktır. Öğrenme safhasında dâhili EEPROM belleğe, robotun bulunduğu koordinat değerleri ve bu koordinata kaç kez geldiği bilgilerini yazılmaktaydı. Bu bilgiler kullanılarak, içerisinde hedefin olmadığı boş odalara tekrar girilmesi önlenmektedir. Bu işlem de aşağıdaki şekilde gerçekleştirilmektedir. Başlangıçta dâhili EEPROM belleğin 0 nolu adresindeki 2 bilgisi test edilmektedir. Böylece robotun daha önce öğrenme işlemini yapıp yapmadığı kontrol edilir. Robot hareketi esnasında gideceği koordinatı, o andaki yönüne ve sensörlerin durumlarına bakarak belirlemektedir. Daha sonra, önceden kaydedilmiş dâhili EEPROM bellekten bu koordinata kaç kez gelindiği bilgisini okunmaktadır. Bir sonraki işlem, bu koordinata komşu olan ve daha önceden gidilen diğer koordinatları, yine dâhili EEPROM bellekten tespit edilmesidir. Sonrasında belirlenen bu koordinatlar içerisinden, sadece bir kez gidilen koordinatlar tespit edilir. Çünkü sadece bir kez gidilen koordinatlar, hedefin bulunduğu güzergâhı göstermektedir. Sonraki işlem ise robotun bulunduğu koordinattan, o bir kez gidilen koordinata, hangi yönde hareket ile ulaşılabileceğinin hesaplanmasıdır. Bu şekilde alt sensör bilgisi kontrol edilerek labirent içerisinde harekete devam edilir. 4.Sonuç ve Öneriler Tasarlanan robotun boyutları, şekli, hareket organları kullanılan sensörler değiştirilerek farklı kullanım alanlarında değerlendirilebilir. Kullanım alanları olarak fabrikaların stok ambarları, insanların bulunmasında sakınca olan ortamlar, insanların sığamayacağı kadar küçük yerler ilk akla gelen örneklerdir. Kaynaklar [1] http://www.gorobotics.net/index.php?option=com_cont ent&task=view&id=18&itemid=46 [2] http://fox.phoenix.az.us/~mlinnen/buildmazerobot.sht ml [3] Yağlı,O.,Labirent Robotu Tasarımı ve Gerçekleştirilmesi, Yüksek Lisans Tezi, Sakarya Üniversitesi, 2005 [4] http://www.vishay.com/doc?83751 [5] http://ww1.microchip.com/downloads/en/devicedoc /30292c.pdf.