ROS - Robot Operating System Nedir?
    
      10 March 2015
    
    
      Öncelikle ROS'u kısaca tanımlamaya çalışacağım;
      
        - Robotlar için bir işletim sistemidir.
 
        - Paketler için bir koleksiyondur ve yazılım derleme aracı olarak kullanılmaktadır.
 
        - Dağıtılmış işlemler/makineler arası iletişim ve yapılandırma için bir mimaridir.
 
        - Sistemin çalışma ve analiz aşamaları için geliştirme aracı olarak kullanılabilir.
 
        - Dil bağımsız bir mimariye sahiptir. Aynı robot üzerinden birçok farklı dil kullanılabilir. (c++, python, lisp, java)
 
      
      ROS Ne Değildir?
      
        - Gerçek bir işletim sistemi değildir.
 
        - Bir programlama dili değildir.
 
        - Geliştirme ortamı/IDE değildir.
 
      
      ROS Dağıtımları
      
        - ROS Fuerte Turtle
 
        - ROS Electric Emys
 
        - ROS Diamondback
 
        - ROS C Turtle
 
        - ROS Box Turtle
 
      
      ROS ve Komponentleri
      ROS Core
      ROS Master,
      
        - Merkezi XML-RPC sunucusudur.
 
        - Bağlantıların iletişimi sağlamaktadır.
 
        - Sabit konfigürasyon parametreleri ya da diğer keyfi verileri kaydeder.
 
        - Aslında, insanların anlayabileceği dilde mesajları barındırran ağ tabanlı bir yapıdır.
 
      
      ROS Stacks & Packages
      ROS kodu iki farklı seviye içerisinde gruplanmıştır;
      
      Packages, ROS'a çok küçük bir bağımlılıklar bağlanmış yazılım koleksiyonlarıdır. Stacks ise bu ufak parçaların bir araya gelerek oluşturduğu dağıtıma verilen isimdir.
      Packages
      
        - Kodlarınızı, build yapılandırmasınızı ve launch dosyalarınızı barındıran bir dizindir.
 
        - Birden fazla 
node içerebilir. 
        - İçerisinde 
manifest.xml adında bağımlılıkların tanımlandığı bir konfigürasyon dosyası barındırır. 
        - Sadece paketin amacı ile ilgili kodları içerir.
 
      
      Nodes
      
        - Bazı fonksyionları yerine getiren yapılardır.
 
        - Diğer 
Topic ve Servicesler ile haberleşebilir. 
        - Node isimleri benzersizdir.
 
        - Node yapısı, iyi ayrılmış, skale edilebilir bir yapının oluşturulması için vardır.
 
      
      Build System
      
        - Kodların nasıl derleneceğinin belirtildiği 
CMakelist.txt dosyasına ihtiyaç duymaktadır. 
        rosmake komutu paket ve bağımlılıkları derler. 
        - Eğer bağımlılıklar indirilmemişse, indirilir ve kurulur.
 
        - Aynı anda birden fazla paket derlenebilir. ROS önce bağımlılıkları çözer.
 
      
      Komut Satırı
      ROS aşağıdaki bazı komutları içerisinde barındırır;
      
        roscd: ROS paketi dizinine geçer. 
        rosls: Paket içeriğini listeler. 
        rosmake: Paketi derler. 
        roscreate-pkg: Yeni bir paket oluşturur. 
        rosdep: Paket bağımlılıklarını listeler. 
        roscp: Paketler arası kopyalama işlemi gerçekleştirir. 
        rostest: Test dosyalarını çalıştırır. 
      
      İletişim Yolları
      Topic (Pub/Sub)
      
        - Asenkron iletişimler için kullanılır.
 
        - İçerisinde güçlü mesaj tipleri barındırır.
 
        - Callback fonksyionlara sahiptir, bu sayede mutli-thread çalışabilir.
 
        - İstek/cevap etkileşimleri için uygun değildir.
 
        - Çoktan-Çoka bağlantılar için uygundur.
 
      
      Service (Higher Priority)
      
        - Standart fonksiyonlar gibi, senkron olarak kullanılır.
 
        - Güçlü mesaj tiplerini içerisinde barındırır.
 
        - Bire-bir iletişim için uygundur.
 
        - Birden fazla istemciler olabilir.
 
        - Servis çağrıları boyunca Topic Callback fonksyionları herhangi bir sorun teşkil etmez.
 
      
      Actions
      
        - Topic yapısının üzerine inşaa edilmiştir.
 
        - Uzun işlemler gerçekleştirilmesi için kullanılır.
 
        - İptal edilebilir.
 
      
      Messages
      
        - Node iletişimi mesaj gönderimi üzerine kuruludur.
 
        - Mesajlar, özel tipli alanlardan oluşan bir veri yapısından ibarettir.
 
        - ROS içerisinde birçok hazır mesaj standartı vardır ve özel olarak buna yenileri eklenebilir.