Koş robot koş

Robotları seviyoruz; bazı işleri bizim yerimize ve genelde bizden çok daha iyi, hızlı, ve güvenilir yapıyorlar. Zeki robotları daha çok seviyoruz; bulunabilecekleri her durumu önceden düşünüp ilgili davranışları tasarlamaktan bizi kurtarıyorlar. Ancak en çok mobil zeki robotları seviyoruz; iş görecekleri alan bizim onları götürüp yerleştirdiğimiz ve onların manipülatörleri ile erişebildikleri alanla kısıtlı kalmıyor, görev alanlarına kendileri ulaşabiliyorlar. Mobilite robotlar için de insanlar ve hayvanlar için olduğu kadar önemlidir. Hareket edebilme ve yer değiştirebilme yeteneği sayesinde robot içinde bulunduğu ortamı ve dolayısıyla algılarını değiştirebilir, değişik algılar sayesinde değişik deneyimler edinebilir.

Robotlar hareket etmek için iş göreceği ortama göre tasarlanan pek çok değişik mobilite konfigürasyonu kullanabilirler. Tekerlekler, paletler, bacaklar, yüzgeçler, ve pervaneler bazı örnekler olarak gösterilebilir.

Hangi mobilite konfigürasyonu seçilirse seçilsin, robota verilen hareket komutlarını bireysel motor komutlarına çevirmek için bir takım kinematik hesapları yapmak gerekir. Kinematik hesaplarının karmaşıklığı da mobilite konfigürasyonuna karar verilmesinde ve tasarlanmasında oldukça etkilidir. Bu yazımda özel olarak bacaklı robotların hareket ettirilmesi üzerinde duracağım.

Bacaklı robotlarla ilk olarak 2003 yılında Boğaziçi Üniversitesi Yapay Zeka Laboratuvarı‘nda tanıştım.

Bu robot bir Sony Aibo ERS-210 idi. Aynı sene gönüllü olarak RoboCup‘ın 4-bacaklı Ligi’nde (şimdiki Standart Platform Ligi) yarışan Cerberus robot futbolu takımı için çalışmaya başladım. Takıma dahil olduğumda gördüğüm en önemli eksik hızlı ve esnek bir hareket modülünün olmamasıydı. Bu duruma el atmaya karar verdim ve lisans tezimin de bir parçası olarak Aibo robotları için hızlı ve esnek bir hareket modülü geliştirdim. Buradaki en önemli gereksinim robotun vücudunun doğrultusunu değiştirmeden istenen her yöne doğru ve limitler dahilinde istenen her hızda hareket edebilmesiydi (omnidirectional motion). Bir alışveriş arabasının hareketi bu hareket tipine en iyi örnek olarak verilebilir; arabanın ön kısmının baktığı yönü değiştirmeden onu sağa sola çekebilir, çapraz ilerletebilir, kendi etrafında döndürebilir, ya da tüm bu hareketlerin birleşimi ile oluşan daha karmaşık bir hareket elde edebilirsiniz. Öyleyse bu hareket serbestliğini elde edebilmek için robotun bacaklarına birer tekerlekmiş gibi davranıp onların dönüş doğrultularını değiştirerek robotu istediğimiz gibi hareket ettirebilecektik. Şu aşamada çözülmesi gereken iki problem vardı: her bir bacağın nasıl hareket edeceği ve 4 bacağın birbirleriyle nasıl koordine olacakları. Bacakların hareketleri için patileri yarım elips şeklinde bir patika üzerinde ilerletmeyi uygun gördük; yarım elipsin eğri kısmında bacak yerden havalanacak, düz kısmında ise yere basıp yere paralel olarak robotu hareket ettirecekti. Bu patikayı takip edebilmek için önceden bahsettiğim kinematik hesaplarına ihtiyacımız olduğundan bacakların basit bir kinematik modelini oluşturup robotun patisinin yarı eliptik patika üzerinde istediğimiz bir noktaya gidebilmesi için eklem açılarının hangi değerleri almaları gerektiğini ters kinematik denklemleri ile hesapladım. Sonrasında robotun patisini bu patika üzerindeki noktalara sırasıyla göndererek sürekli bir hareket elde ettim. Şu ana kadar anlattıklarımı aşağıdaki şekil özetliyor.

Bu şekilde patinin belirlenen patika üzerindeki noktaları sırasıyla takip ederek nasıl hareket ettiği görülüyor. Ayrıca bahsettiğim “alışveriş arabası” hareketinin ileri, sol, ve dönüş hareketlerinin bileşimi ile nasıl elde edilebileceği de sağ alt köşede gösteriliyor. İkinci problemimiz olan bacakların koordinasyonu sorununu da çapraz bacakları aynı anda hareket ettirip karşılıklı bacaklar arasına Pi kadar faz farkı koyarak robotumuzu literatürde trot gait olarak geçen yürüyüş stiline kavuşturarak çözdüm. Robot yeterince hızlı hareket ettiği için bu yürüyüş stilinde denge problemi de yaşanmıyor. Son olarak atılması gereken adım ise en verimli yürüyüşü elde etmek için robotun hareketini belirli parametreler ile tanımlayıp bu parametrelerin eniyi (optimal) değerlerini elde etmekti. Bu aşamada makine öğrenmesi devreye girdi. Yarı eliptik yörüngelerin yarıçapları, hareketsiz duruş sırasında patilerin gövdeye göre olan ilk konumları, robotun gövdesinin yerden yüksekliği, ve yarı eliptik yörüngenin kaç tane ara noktaya bölüneceği gibi değerler genetik algoritmalar kullanılarak optimize edildi. Bu süreç kabaca şöyle işlemektedir. Bu parametrelerin değişik değerleri ile bir popülasyon oluşturulur ve popülasyondaki her bir birey robot üzerinde denenip belirlenen bir performans kriterine göre (bu durumda bizim performans kriterimiz robotun hızı idi) performansı ölçülür. Tüm bireyler bu şekilde denendikten sonra en iyi performansı sağlayan bireyler kromozomların çaprazlandığı gibi çaprazlanır ve bu çaprazlamalar sonucu daha sağlıklı bireylerden oluşan yeni bir popülasyon oluşturulur ve kötü performans gösteren bireyler de “en sağlıklı olan hayatta kalır” prensibi gereği yok olurlar. Performans belirli bir değere ulaşıp daha fazla iyileşemez hale geldiğinde süreç durdurulur ve en sağlıklı birey, yani parametre değerleri robot üzerinde kullanılmaya başlanır. Bu tasarımımız ile Aibo ERS-210 robotları ile o zamana kadar elde edilememiş bir hız olan 315 mm/s hıza erişip çalışmamızla gurur duymuştuk. :)
Bir sonraki yazımda çok daha zor bir problem olan insansı robotların hareket ettirilmesi ve bu konuda şu ana kadar yapılmış çalışmalardan bahsedeceğim. Görüşmek üzere. :)

August 26, 2008. robotik. No Comments.

No Comments

Be the first to comment!

Leave a Reply

Trackback URI