Bu yazı, Robot yapımını merak eden ilgililer için orta seviye dokumanlardan 3.südür.
Robotik projeler karmaşıklaştıkça, tek bir monolitik kod dosyasıyla sensör okuma, hareket planlama ve donanım kontrolünü yönetmek sürdürülebilir olmaktan çıkar. Bu noktada devreye giren ROS (Robot Operating System), robotik yazılımını modüler, yeniden kullanılabilir ve dağıtık bileşenler hâlinde organize etmeyi sağlayan bir yazılım çatısıdır. Bu yazıda ROS’un temel mimari kavramlarını, mesajlaşma sistemini ve orta seviye bir robotik projesinde nasıl kullanılacağını ele alıyoruz.
ROS Nedir ve Neden Kullanılır?
ROS, adının aksine bir işletim sistemi değil, Linux (veya diğer işletim sistemleri) üzerinde çalışan bir orta katman yazılım (middleware) çatısıdır. ROS’un temel değer önerisi, robotik sistemlerde sıkça tekrarlanan sorunlara (süreçler arası iletişim, donanım soyutlama, görselleştirme, hata ayıklama araçları) hazır ve topluluk tarafından test edilmiş çözümler sunmasıdır.
Bir geliştirici, sıfırdan bir mesajlaşma protokolü yazmak yerine, ROS’un sunduğu standart iletişim mekanizmalarını kullanarak sensör sürücüleri, kontrol algoritmaları ve görselleştirme araçları arasında hızlıca bağlantı kurabilir. Bu modülerlik aynı zamanda, bir bileşenin (örneğin bir kamera sürücüsünün) başka bir projede yeniden kullanılmasını da kolaylaştırır.
Temel Mimari Birim: Node
ROS mimarisinin temel yapı taşı node’dur (düğüm). Her node, belirli bir görevi yerine getiren bağımsız bir işlemdir; örneğin bir node yalnızca bir kameradan görüntü okuyabilir, başka bir node bu görüntüyü işleyerek nesne tespiti yapabilir, üçüncü bir node ise tespit sonucuna göre motor komutları üretebilir. Node’ların birbirinden bağımsız süreçler olarak çalışması, bir node’un çökmesi durumunda tüm sistemin değil yalnızca o node’un etkilenmesini sağlar ve bu da hata ayıklamayı ve sistem kararlılığını kolaylaştırır. ROS’ta node’ların hangi node’ların çalıştığını, hangi bağlantıların kurulduğunu izlemek için rosnode ve rqt_graph gibi araçlar kullanılır.
Mesajlaşma Mekanizmaları: Topic, Service ve Action
ROS’ta node’lar arası iletişim üç temel mekanizma üzerinden gerçekleşir. Topic tabanlı iletişim, yayın-abone (publish-subscribe) modeline dayanır; bir node belirli bir konuya (topic) sürekli veri yayınlarken, bu veriye ihtiyaç duyan bir veya birden fazla node aynı konuya abone olarak veriyi alır. Bu model, sensör verisi gibi sürekli akan ve tek yönlü bilgi akışı gerektiren durumlar için idealdir.
Örneğin bir IMU node’u yönelim verisini sürekli bir topic’e yayınlayabilir. Service tabanlı iletişim ise istek-yanıt (request-response) modeline dayanır ve bir node’un başka bir node’dan tek seferlik, senkron bir işlem sonucu istediği durumlarda kullanılır; örneğin bir haritanın anlık bir görüntüsünü almak.
Action mekanizması ise uzun süren ve geri bildirim gerektiren görevler için tasarlanmıştır; örneğin bir robotun belirli bir noktaya gitme görevi, hedefe ulaşana kadar ilerleme durumu bilgisini periyodik olarak geri bildirebilir ve gerektiğinde iptal edilebilir.
Mesaj Tipleri ve Paket Yapısı
ROS’ta node’lar arasında taşınan veri, önceden tanımlanmış mesaj tipleri aracılığıyla yapılandırılır. Standart mesaj tipleri arasında konum bilgisi için geometry_msgs/Pose, sensör verisi için sensor_msgs/LaserScan gibi hazır tanımlar bulunur, ancak geliştiriciler kendi projelerine özgü özel mesaj tipleri de tanımlayabilir.
ROS projeleri, paket (package) adı verilen birimler hâlinde organize edilir; her paket genellikle ilgili node’ları, mesaj tanımlarını, yapılandırma dosyalarını ve başlatma (launch) dosyalarını bir arada bulundurur.
Bu paket yapısı, bir robotik projenin farklı bileşenlerinin (örneğin navigasyon paketi, algı paketi, kontrol paketi) birbirinden bağımsız olarak geliştirilip test edilmesine ve daha sonra bir araya getirilmesine imkân tanır.
Koordinat Çerçeveleri ve TF Sistemi
Bir robotik sistemde genellikle birden fazla koordinat çerçevesi (örneğin robot gövdesi, kamera, lazer sensörü, dünya çerçevesi) eş zamanlı olarak var olur ve bu çerçeveler arasındaki dönüşümlerin sürekli takip edilmesi gerekir.
ROS’un TF (Transform) sistemi, bu koordinat dönüşümlerini zaman içinde izleyen ve sorgulanabilir hâle getiren merkezi bir mekanizma sunar. Örneğin bir lazer sensörü tarafından tespit edilen bir engelin konumu, sensör çerçevesinden dünya çerçevesine TF sistemi aracılığıyla otomatik olarak dönüştürülebilir; bu da geliştiricinin her seferinde manuel koordinat dönüşümü hesaplaması gerekliliğini ortadan kaldırır.
ROS 1 ve ROS 2 Arasındaki Temel Farklar
ROS’un ilk nesli (ROS 1), akademik ve hobi projelerinde geniş bir kullanıcı tabanına sahip olmakla birlikte, merkezi bir roscore sürecine bağımlılığı ve gerçek zamanlı garantiler sunmaması gibi kısıtlara sahiptir. ROS 2, bu kısıtları gidermek amacıyla geliştirilmiş olup, node’lar arası iletişimde merkezi bir aracıya ihtiyaç duymayan DDS (Data Distribution Service) protokolünü temel almaktadır.
Bu mimari değişiklik, ROS 2’nin çoklu robot sistemlerinde ve gerçek zamanlı kontrol gerektiren endüstriyel uygulamalarda daha güvenilir çalışmasını sağlamaktadır. Yeni başlanan orta ve ileri seviye projeler için günümüzde genellikle ROS 2’nin tercih edilmesi önerilmektedir, çünkü ROS 1’in resmi destek süreci sona ermiş durumdadır.
Görselleştirme ve Hata Ayıklama Araçları
ROS ekosistemi, geliştirme sürecini kolaylaştıran çeşitli görsel araçlarla birlikte gelir. RViz, robotun sensör verilerini, koordinat çerçevelerini ve planlanan yörüngeleri üç boyutlu olarak görselleştirmeyi sağlarken, Gazebo gibi simülasyon ortamları, fiziksel bir robot olmadan yazılımın gerçekçi bir fizik motoru üzerinde test edilmesine imkân tanır. rqt_grapharacı, çalışan tüm node’lar ve aralarındaki topic bağlantılarını görsel bir graf olarak sunarak, karmaşık bir sistemde veri akışının anlaşılmasını kolaylaştırır.
Sonuç
ROS, robotik yazılımını node, topic, service ve action gibi standart yapı taşları üzerinden modüler bir şekilde organize etmeyi sağlayan, robotik alanında yaygın olarak benimsenmiş bir yazılım çatısıdır.
TF sistemi ve zengin görselleştirme araçları, karmaşık robotik sistemlerin geliştirilmesini ve hata ayıklamasını önemli ölçüde kolaylaştırmaktadır. Serinin son bölümünde, bu yazılım mimarisi üzerinde çalışan görüntü işleme ve bilgisayarlı görü tekniklerini, robotun çevresini görsel olarak nasıl algıladığını ele alacağız.
Sıkça Sorulan Sorular
Hayır, ROS bir işletim sistemi değil, Linux gibi bir işletim sistemi üzerinde çalışan ve robotik yazılım bileşenleri arasındaki iletişimi standartlaştıran bir orta katman yazılım çatısıdır.
Node, ROS mimarisinde belirli bir görevi (örneğin sensör okuma veya motor kontrolü) yerine getiren bağımsız bir işlemdir.
Topic, sürekli ve tek yönlü veri akışı gerektiren yayın-abone iletişimi için kullanılırken, service tek seferlik istek-yanıt tabanlı senkron işlemler için kullanılır.
ROS 2, merkezi bir roscore sürecine bağımlı olan ROS 1’in aksine, DDS protokolünü temel alan dağıtık bir mimariye sahiptir ve bu sayede gerçek zamanlı ve çoklu robot uygulamalarında daha güvenilir çalışır.
TF sistemi, bir robotik sistemdeki farklı koordinat çerçeveleri (sensör, robot gövdesi, dünya çerçevesi) arasındaki dönüşümleri zaman içinde takip ederek, manuel koordinat hesaplaması ihtiyacını ortadan kaldırır.
İlgili Yazılar
Sensör Füzyonu ve Filtreleme: Robotik Algı Sistemlerinde Veri Birleştirme
Robot Kinematiği ve Dinamiği: Matematiksel Modelleme Temelleri
Robot Nasıl Yapılır? 1. Bölüm: Planlama ve Tasarım Aşaması
Görüntü İşleme ve Bilgisayarlı Görü ile Robot Algısı
Türkiye’de Robotik Teknolojisi: Yerli Girişimler ve Projeler
Robot Etiği ve Toplumsal Etkileri: Robotik Teknolojisinin Hukuki ve Sosyal Boyutu
Robot Nasıl Yapılır? 4. Bölüm: Test, Kalibrasyon ve Otonomiye Geçiş
Robot Nasıl Yapılır? 3. Bölüm: Yazılım ve Kontrol Algoritmaları
