Yapay Sinir Ağları ile Ters Kinematik Çözümü

Engin Kaya
Jul 29, 2019 · 5 min read

Giriş

Yapay sinir ağlarının hali hazırda bulunan farklı veri setlerini kullanarak sınıflandırma ve regresyon amaçlı kullanımı yeni başlayan pek çok kişinin aşina olduğu örneklerdir. Fakat bunlarla birlikte robotikte de yörünge planlaması, görev öğrenmesi, motor kontrolü gibi pek çok uygulama alanı mevcuttur. Bu yazıda yapay sinir ağlarının robotikte kullanımına örnek olabilecek bir uygulamayı göstermeyi amaçlıyorum.

İster insansı (humanoid), ister endüstriyel robot (robot kol) her türlü robotun kontrolü eklemlerinde bulunan motorların kontrol edilmesiyle mümkündür. Genel olarak amaç, bu eklemleri uygun şekilde sürüp robotun istenilen kısmını veya robot kolun ucunu (end effector) istenen pozisyona getirmektir. Eklemlerin pozisyonları ile robotun uç noktası arasında ileri kinematik olarak adlandırılan matematiksel bir dönüşüm denklemi mevcuttur. Fakat robot kontrol edilirken esas istenilen, uç noktanın konum ve yöneliminin verilip eklemlerdeki açıların ne olacağının bilinmesidir. Bu işlem ters kinematik olarak adlandırılmakta olup robot kontrolünün yanı sıra bilgisayarlı animasyonda da sıkça kullanılmaktadır.

Ters kinematik probleminin bilinen ve kullanılan farklı çözüm yöntemleri vardır. Temel olarak robotun geometrisinden hesaplanmakta veya iteratif olarak açıların güncellenmesiyle bulunabilmektedir. Bu yöntemlerin karmaşıklık, yüksek hesaplama maliyeti, bazı durumlarda çözümün bulunamaması gibi sorunları vardır ve eklem sayısı arttıkça bu problemler de büyür. Yapay sinir ağları da lineer olmayan sistemleri modellemek için kullanılabileceği için problemimize çözüm olarak kullanılabilir.

Bu yazıda üç döner ekleme sahip ve düzlem üzerinde hareket eden (2 boyutta) basit bir robot kolun öncelikle ileri kinematik eşitliğini çıkaracağız. Sonrasında, bunu kullanarak, eklem açıları ve robot kolun uç noktasının pozisyonunu elde ederek ters kinematiğimizi öğrenecek olan sinir ağında kullanmak üzere veri setimizi oluşturacağız. Keras ile modelleyeceğimiz sinir ağımızı eğitip test ettikten sonra matplot kütüphanesini kullanarak robot kolu görsel olarak oluşturup yazımızı sonlandıracağız. Tam kodlara bu link üzerinden ulaşabilirsiniz. Hazırsanız başlayalım.

Yapay Sinir Ağları ile Ters Kinematik Çözümü

Şekil 1. Robot kol konfigürasyonu

İleri kinematik dönüşümlerini çıkaracağımız üç döner eklemli bir robotun konfigürasyonunu Şekil 1'deki gibi düşünebilirsiniz. Burada her bir döner eklemin belirli bir açı aralığında hareket etme kabiliyeti vardır ve buna bağlı olarak da robot kolun uç noktasının erişebileceği çalışma alanı değişmektedir. Şimdilik her bir eklemin hareket alanını [0,pi/2] aralığında kalacak şekilde ele alalım. Bu açıların sıfır derecesi bir önceki eklemin doğrultusunda olup, saat yönünün tersine doğru artacak şekilde tanımlanmıştır. Bu yüzden, her bir açının, referans noktası olarak kabul edeceğimiz (0,0) noktasındaki çerçeveye göre gerçek değeri bir önceki eklemin açısına bağlı olarak değişmektedir. Bu durum her bir eklemin çerçevesinin referans noktasındaki çerçeveye (yani global bir çerçeveye) göre bir dönüşüm matrisi kullanılarak çözülebilmektedir. Her bir eklem için oluşturulan dönüşüm matrislerinin art arda çarpılmasıyla referans çerçeve ile robotun uç noktası arasındaki dönüşüm matrisi elde edilmiş olur.

Eklem değişkenlerine bağlı olarak bu matrisin elde edilmesinde kullanılan en bilindik yöntem Denavit-Hartenberg(DH) yöntemidir. Detaylarına burada girmeyeceğimiz bu yöntem ile oluşturduğumuz konfigürasyon için elde edilen DH parametreleri Tablo 1'de görülmektedir. Merak edenler için çıkarımına dair videolu anlatım bu linktedir.

Tablo 1. Robot konfigürasyonumuzun DH tablosu

Tablodaki parametreleri kullanarak ileri kinematik dönüşümünü elde edeceğimiz fonksiyonu Şekil 2'deki gibi tanımlayabiliriz.

Şekil 2. İleri kinematik denklemleri

Artık makine öğrenmesinde kullanacağımız verileri toplamak için altyapıyı hazırlamış olduk. Şimdi her bir eklem açısını [0,pi/2] aralığında rastgele seçip bunları ileri kinematik fonksiyonumuza göndererek robot kolun uç noktasının poziyonunu bulabiliriz. Yazacağımız bir döngü ile de istediğimiz kadar veri toplayabiliriz. Burada ben, uç noktanın x ve y eksenlerinin pozitif tarafında (birinci bölge) kalmasını sağlayacak bir kısıt da ekledim. Toplayacağımız örnek sayısını da 2000 olarak belirledikten sonra topladığımız verilerin konum ve yönelimlerinin Şekil 3'teki gibi olmaktadır. Bu verilerin %85'ini eğitim, %15'ini test için kullanacak şekilde rastgele ayırıyoruz.

Oluşturacağımız yapay sinir ağı iki gizli katman bir de çıkış katmanından oluşmak üzere 3 katmandan oluşan ileri beslemeli basit bir yapıda olacaktır. Gizli katmanda 40, çıkış katmanında 3 nöronun olduğu ve ‘Adam’ algoritmasıyla optimize edilen yapay sinir ağını Keras ile hızlıca Şekil 4'teki gibi tanımlayabiliriz.

Şekil 4. Kullanılan yapay sinir ağı yapısı

Modelimizi 100 epoc eğittiğimiz zaman eğitim setinin başarımını yaklaşık %92 olarak elde ediyoruz. Test setimize baktığımızda da yine yaklaşık %93 başarıma sahip olduğumuzu görüyoruz. Modelimize robotun uç noktasının konum ve açısını verip buraya gelmesi için eklem açılarının ne olması gerektiğini elde etmiş olduk. Test setindeki veriler için bu eklem açılarını hesaplatıp, daha sonra bunları kullanarak, ileriKinematik fonksiyonumuz ile uç noktanın konum ve açısını bulabiliriz. Örnek olarak test setinden 10 veri için bu işlemi yaptığımızda Şekil 5'teki gibi bir sonuç elde etmiş oluyoruz.

Şekil 5. Test Sonuçları

Şekil 5'ten gördüğümüz üzere yapay sinir ağları ile bulduğumuz açılar kullanılarak elde edilen uç noktalar ile hedef açılardan elde edilen uç noktalar arasında çok az bir fark mevcut.

Olaya biraz daha görsellik katmak istersek, tasarladığımız robot kolun her bir eklemini ve linkini matplot kütüphanesi ile çizdirebiliriz. Bunun için sadece robot kolun uç noktasının değil aradaki her bir eklemin de konumunu ve açısını yani dönüşüm matrisini bilmemiz gerekmektedir. ileriKinematik adıyla tanımladığımız fonksiyonumuzun çıktısını sadece uç nokta değil, diğer eklemleri de verecek şekilde Şekil 6'daki gibi güncelleyelim.

Şekil 6. Güncellenmiş İleri Kinematik Fonksiyonu

Bu fonksiyon ile birlikte her bir eklemin referans çerçeveye göre olan dönüşümünü elde etmiş olduk. Şimdi her bir eklemi ‘o’ marker ile çizip ardışık iki eklem arasını da düz çizgi ile doldurarak robot kolumuzu çizebiliriz. Son olarak robot kolun uç noktasına da Şekil 2'de olduğu gibi bir tutucu uç çizebiliriz. Bunu sağlayacak olan kod Şekil 7'deki gibi olacaktır.

Şekil 7. Robot kol çizimi

Bir figür üzerine hem tahminlerimizi hem de hedeflediğimiz robot kol açılarını çizebiliriz. Bunun için aynı fonksiyonu bir de farklı renkler ile çizilecek halini tanımlayabiliriz. Sonuç olarak iki robot kolumuzu örnek bir test verisi için çizdirdiğimizde Şekil 8'deki gibi olduğu, yani tahmin ettiğimiz açıların da hedeflediğimiz açılar ile yaklaşık aynı olduğunu görebiliriz.

Şekil 8. Robot kol çizimi

Kapanış

Bu yazıda robot kontrolünde kullanılan ters kinematik çözümünün yapay sinir ağları ile nasıl elde edilebileceğini görüp, uygulamış olduk. Burada ele aldığımız örnek senaryo pek çok kısıt içerdiği için gayet yüksek başarım elde ettik. Siz farklı uygulamalar yapıp sonuçları görmek için eklem sayısını, eklemlerin açı aralığını, örnek sayısını, sinir ağı yapısını değiştirebilir, hatta düzlemsel robot yerine üç boyutlu robot ile de çalışıp sonuçları inceleyebilirsiniz.

Kodların tamamına github üzerindeki bu linkten ulaşabilirsiniz.

Sorularınızı ve görüşlerinizi yorumlara bırakabilirsiniz.

Referanslar

https://www.sciencedirect.com/science/article/pii/S2212017313006361

http://hilmi.trakya.edu.tr/ders_notlari/robotik/Temel%20Robotik2.pdf

https://medium.com/@kasunvimukthijayalath/building-ann-to-solve-inverse-kinematics-of-a-3-dof-robot-arm-2b1c3655a303

https://studywolf.wordpress.com/2013/08/21/robot-control-forward-transformation-matrices/

http://enesbot.me/tutorial-forward-kinematics-part-i.html

https://www.youtube.com/watch?v=VIWC3g16BiE

Deep Learning Türkiye

Türkiye'nin En Büyük Yapay Zeka Topluluğu tarafından yapay…

Engin Kaya

Written by

https://twitter.com/kaengn

Deep Learning Türkiye

Türkiye'nin En Büyük Yapay Zeka Topluluğu tarafından yapay zekanın alt dalları olan makine öğrenmesi ve derin öğrenme alanlarındaki Türkiye'den üretilen içerikleri bulabilirsiniz.

More From Medium

More on Python from Deep Learning Türkiye

More on Python from Deep Learning Türkiye

XGBoost Dosyaları

More on Python from Deep Learning Türkiye

More on Python from Deep Learning Türkiye

Kümeleme Teknikleri ve Python’da K-Means

More on Python from Deep Learning Türkiye

More on Python from Deep Learning Türkiye

Python SciPy Modülü-1 Giriş-Temel Fonksiyonlar

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade