Turtle'ı Hareket Ettir (TurtleSim)
Özet
Move Turtle, ROS’un TurtleSim’inde kaplumbağayı belirli koordinatlara (noktalara) hareket ettiren basit bir ROS python betiğidir. Bu proje, Colorado School of Mines (CSOM)’deki CSCI473 sınıfı projesi olarak başladı ve daha sonra kapalı döngü sistemlerinin nasıl oluşturulabileceğini öğrenmemi sağlayan bir proje haline geldi; bu bilgi, CSOM’un Human Center Robotics (HCR) Laboratuvarı’ndaki çalışmalarıma yardımcı olmak için kullanıldı.
Bağlam
Kısaca, ROS, Robot Operating Systems anlamına gelir. ROS, genellikle Ubuntu işletim sistemiyle birlikte kullanılan açık kaynaklı bir robotik ara katman yazılımıdır ve bir robot sisteminin yazılım bileşenlerini/kümelerini daha iyi yönetmek için kullanılır. ROS’un resmi wiki üzerinden ROS kullanmayı öğrenebilirsiniz. ROS’ta yazdığınız kod C++ veya Python’da olur.
TurtleSim, ROS ve ROS paketlerine yeni başlayanlar için bir giriş olarak kullanılan basit bir 2D robot simülatörüdür. TurtleSim sadece bir kaplumbağa ile basit bir 2D ekran açar. O kaplumbağa “robot” gibi davranır ve ona hareket ve/veya dönüş mesajları gönderebilirsiniz. Hareket ederken, TurtleSim gerçek dünya fiziğini basit bir şekilde simüle etmek için bazı rastgele hatalar üretir.
ROS ve TurtleSim’in ne olduğunu bildiğinize göre, neden onları kullanıyordum? 2020 baharında Colorado School of Mines’te lisans bilgisayar bilimi derslerim arasında “Human Centered Robotics” adlı bir ders alıyordum. Ders, Dr. Hao Zhang tarafından verildi. Ders üç projeden oluşuyordu ve ilk proje ROS’u kurmak, ROS’u öğrenmek ve kaplumbağanın TurtleSim’de bir M çizmesini sağlayacak açık döngü ya da kapalı döngü algoritması uygulamaktı. Orijinal proje açıklaması BURADA görülebilir.
Dersi alırken bu projeyi açık döngü algoritmasıyla tamamladım. Çözüm çalıştı ama gerçekten kötüydü ve “iyi” bir A çizdi ama “harika” değildi. Projeyi Şubat 2020 ortasında teslim ettikten sonra bir yıl sonra, Şubat 2021 civarında unutmuştum.
Zorluk
Şubat 2021’de Colorado School of Mines’te Dr. Hao Zhang altında Human Centered Robotics (HCR) Laboratuvarı’nda Araştırma Asistanı olarak işe başladım. Laboratuvarın amacı “ömür boyu işbirlikçi özerklik” üzerine araştırma yapmak ve robotların uzun süreler boyunca çalışmasını ve uyum sağlamasını mümkün kılmaktır. 9-1-2022 (1 Eylül 2022) itibarıyla laboratuvar Colorado School of Mines’ten University of Massachusetts Amherst’a taşındı. Ancak ben çalıştığım zamanlar Colorado’da kaldı.
HCR Laboratuvarı’nda Triton projesi üzerinde çalışmam istendi. Triton projesi, birden çok, onlarca robot olan Triton’ları içeriyordu. Triton’lar üçgen omni wheel yer robotlarıydı ve şöyle görünüyordu:
Triton’ların yanı sıra, yerden birkaç feet yüksekte “sekizgen düzen” içinde yerleştirilmiş sekiz IR Kamera OptiTrack tarafından sağlanmıştır. Bu kameralar, Optitrack’in Motive yazılımı, Windows 10 çalışan bir PC ve ROS kullanılarak, nesnelerin gerçek dünya konumları motion capture markers ile belirlenebilen 2x2x2 metre (x, y, z) bir alan oluşturur.
Triton projesindeki ilk görevim, Triton robotunu belirli bir gerçek dünya konumuna hareket ettiren betikler yazmaktı. O zamanlar bunu nasıl başaracağımı bilmiyordum ama CSCI473’teki ilk projeyi hatırladım; kapalı döngü sisteminin fikri bana tanıtılmıştı, bu yüzden kapalı döngü sistemlerini ve geri besleme sistemlerini araştırmaya başladım.
Araştırma
Araştırmam sırasında AerospaceControlsLab tarafından hazırlanmış harika bir video keşfettim:
Bu videoda bir PID sisteminin fikri gösterildi ve açıklandı. PID sistemi, gerçek dünyadan gelen verilere dayanarak belirli çıkış(lar) üreten kapalı döngü, kontrol döngüsü sistemidir. Temel olarak, istenen değer ile ölçülen değer arasındaki farkı temel alarak çıktısını ayarlayan bir geri besleme sistemidir. PID kontrolörünün formülü:
$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$
- $u(t)$ kontrol sinyalidir.
- $K_p$, $K_i$, $K_d$ sırasıyla orantısal, integral ve türev kazançlarıdır.
- $e(t)$ hata sinyalidir (istenen ve gerçek çıkış arasındaki fark).
- $\int e(t) dt$ hatanın zaman içindeki integralidir.
- $\frac{de(t)}{dt}$ hatanın türevidir.
Daha fazla bilgi için AerospaceControlsLab’ın videosuna veya bu harika wikipedia makalesine bakabilirsiniz.
Araştırmamı akıllı arkadaşlarım ve profesörlerimden yardım alarak ve araştırma yaparak, Triton’un belirli bir koordinata ulaşması için Proportional Controller (P Controller) kullanmanın en iyi çözüm olduğunu belirledim.
Triton bir yer robotu olduğu için sadece X ve Y koordinatlarıyla ilgilenmem yeterli. Bunu bilerek, P Controller içinde ölçülmesi ve işlenmesi gereken istenen ve ölçülen değerleri belirlemem gerekiyordu. Araştırmamda ROS wiki’de Go to Goal adlı harika bir gönderi buldum; burada aşağıdaki hatalar üzerine odaklanmışlardı:
- Mesafe Hatası: İstenen konum (X, Y) ile mevcut konum (X, Y) arasındaki mesafe farkı.
- Theta Hatası: İstenen yön ile mevcut yön arasındaki fark.
Önerilen Çözüm
Tüm bunları göz önünde bulundurarak, Triton’un hedef koordinatına ve mevcut koordinatına göre mesafe ve theta hataları için Proportional Controller kullanmak çözüm olur. Ancak bunu fiziksel bir sisteme uygulamadan önce, bir simülasyonda test etmek istedim ve o zaman TurtleSim’i simülasyon olarak kullanmanın en iyi seçim olduğunu düşündüm.
Simülasyonda Test
Teorik çözüm belirlendikten sonra, gerçek dünyada değil, simülasyon üzerinden doğrulamayı tercih ettim. Gerçek dünya genellikle gürültüyle doludur ve çözümün etkinliğini azaltabilir. Bunu fark ederek, CSCI473 projemi yeniden gözden geçirip bu teorik çözüm için bir test ortamı olarak kullandım.
Eski kodu ROS Melodic’ten ROS Noetic’e güncelleyip bazı iteratif iyileştirmelerle, önerilen çözümü TurtleSim’de çalıştırdım. İşlevselliğinin gösterimi, bazı güzel hedef koordinat yolları ile birlikte bu blog yazısının sonunda bulunabilir. Tüm kodlar BURADA görülebilir.
Sonuç
Özetle, bu proje sayesinde TurtleSim kaplumbağası kapalı döngü sistemiyle belirli koordinatlara etkili bir şekilde yönlendirildi ve 2020’deki açık döngü sistemimden çok daha iyi performans gösterdi. Başarıyla test edildi ve Triton robotlarıyla uyguladım. Ancak gerçek dünyadaki gürültü beklenmedik sorunlar ortaya çıkardı ve haftalarca hata ayıklama ve gerçek dünya testleri gerektirdi. Bu haftalardan sonra, TurtleSim’de test ettiğim çözümü kullanarak Triton’un belirli gerçek dünya koordinatlarına ulaşmasını sağladım. İşte TurtleSim’de test edilen yöntemle Triton’un belirli gerçek dünya koordinatlarına hareket etmesinin bir demosu:
Geriye dönüp baktığımda, daha gerçek dünya fiziğini simüle eden bir simülasyon kullanmalıydım. TurtleSim öğrenmek için harika ama gerçek dünya robotik fikirlerini test etmek için ideal değil. O zamanlar basit kullanımım için yeterli olduğunu düşündüm ama bu daha sonra kanıtlandı.
Bu blog yazısının temel amacı, TurtleSim’deki kaplumbağanın ve ardından Triton robotlarının belirli hedef konumlarına (X, Y) tam olarak yönlendirilmesini sağlayan bir kapalı döngü sistemi oluşturmayı açıklamaktı. Bu hedefe ulaşıldığını düşünüyorum, ancak HCR Laboratuvarı’ndaki çalışmalarımda bir ilgi çekmiş olabilir. Bunu bilerek, HCR Laboratuvarı’ndaki iş deneyimlerim hakkında daha fazla blog yazısı yapma planlarım var…
Turtle (TurtleSim) Hareket Demosu
Bu video aşağıdaki demoları içerir:
- Cayley Nodal: Basit bir Cayley Nodal tasarımı
- Circles: Bir örümcek ağı gibi tasarım
- Inner Circles: “İç içe daireler” tasarımı
- M: Çok basit bir M tasarımı