ROS: Robot Operating System Nedir?
ROS, açılımı Robot Operating System olan ve robotları kontrol etmeyi sağlayan bir yazılımdır. İsminde işletim sistemi ifadesi geçse de insan ile robot arasında iletişimi sağlayan açık kaynak kodlu bir arayüz yazılımı denebilir.
ROS, robotlarda oldukça yaygın kullanılan yazılımdır. Robotun dış dünyadan sensörler aracığıyla aldığı verileri işleyip tekrar robota komut olarak göndermeyi sağlayan arayüzdür. Buradaki çalışma mantığı yayınlama/abone yani daha basit anlamda alıcı-gönderici mantığında çalışmaktadır. Bilgisayar ile root arasındaki bu iletişim topic’ler ve mesajlar sayesinde sağlanmaktadır. Açık kaynak kodlu(BSD) bir sistemdir. Programlama dili olarak bağımsız olarak nitelendirilebilir. Aynı robot üzerinde farklı diller(Java, Lisp, C++, Pyhton) kullanmaya izin verir. 2014 yılında yayınlanan İndigo sürümü 2019 yılına, 2016 yılında yayınlanan Kinetic Kame(LTS) sürümü ise 2021 yılına kadar desteklenmektedir.
ROS Ne İşe Yarar?
Daha önce robotların kontrolü için kullanıldığını belirttiğimiz bu arayüz kod üzerinde minimum değişiklik yaparak çalışır bir yazılım geliştirip ihtiyaca göre kullanmayı hedefler. Burada ROS’un büyük bir avantajı da önceden geliştirilmiş algoritmaları robotun işlemcisine yükle-kullan formatında hızlı bir şekilde çalışabilir ve performans karşılaştırması, gözetimi yapabilme kolaylığı sağlamaktadır.
ROS sistemi ile yönetilen robotta sensörler yardımıyla ses, görüntü gibi dış dünyadan toplanan veriler ROS ile bilgisayara ulaşır. Bilgisayarda algoritma ve kullanım alanına göre işlenen veri alıcı konumunda robota komut olarak geri dönebilmektedir. Buradaki bilgisayar ve robotun iletişimi ROS arayüzünde bulunan mesaj ve topic olarak adlandırılan öğeler ile yapılabilmektedir.
Robotikle uğraşınca maliyet hesabı da gözetmek gerekmektedir. Burada da simülasyon ortamının önemi ortaya çıkmaktadır. ROS ile tam uyumlu çalışan simülasyon ortamına ilk örnek olarak Gazebo ve Rviz ortamları verilebilir. Gazebo içerisinde barındırdığı birçok kütüphanesi ve hazır 2d ve 3d cisimlerle geliştiricilere geçekten geniş bir çalışma alanı sunmaktadır. ROS’ta package haline getirilen very Gazebo ortamında simüle edilip 3 boyutlu olarak incelenebilmektedir.
Neden ROS?
Yazılımın her alanında olduğu gibi robot geliştirme yaparken kullanılcak tek yazılım değildir. Benzer amaçlarla oluşturulmuş birçok yazılım vardır. Bunlardan bazıları Orocos, Carmen, Microsoft Robotic Studio, YARP gibi arayüzlerdir. Bu yazımızda ROS’u ele aldığımız için diğerlerinden öne geçtiği noktaları toparlayarak belirtmek istedik.
- Açık kaynak kodlu bir yazılımdır. Açık kaynak kodlu olması sınırlı bir çerçevede kalmayıp community aracılığıyla sizin gibi birçok kişi ile iletişime geçebilirsiniz. Bu toplulukta aynı zamandan sunduğu araçlar ile çalışmanızı geliştirebilir, yönetebilir ve hayalinize göre bir çalışma çıkarabilirsiniz.
- Programlama dillerinden bağımsızdır. Java, C++, Python, Lisp gibi birçok dili desteklemektedir. Aynı zamanda platformdan da bağımsızdır. İhtiyaca ya da ekip çalışmasına uygun olarak bir ROS düğümü Java ile programlanmışken diğeri C++ başka bir diğeri Python ile programlanmış olabilir. Derlenme ve çalışma sırasında entegre olarak çalışması ekip çalışması, uzaktan çalışma ya da performans optimizasyonu bakımından büyük avantaj sağlamaktadır.
- ROS’u diğer yazılımlardan farklı kılan bir özellik de hata ayıklama mekanizmasıdır. Her işlemde farklı bir konu(publish) yayınladığı için hata yönetimini kolaylaştırmaktadır.
- Modüler bir yapıda olması diğer platformlardan bu kadar önde olmasını sağlamaktadır. Başka robot control yazılımlarında bir sorun ana düğümün de durmasına neden olurken burada kullanılan düğüm yapısı bunun önüne geçmektedir.
ROS Nasıl Çalışır?
ROS sistem olarak publish-subscribe(yayınlama-abone) mesajlaşma modelini kullanarak birbirleri ile iletişim kuran düğümlerin meydana getirdiği bir mimaridir. Burada düğümden kasıt işlem yapabilen birimlerdir.
Bir örnek ile açıklamak gerekirse; bir robotta dış dünyadan görüntü verisi toplayan bir lidar ele alalım. Lidar 360 derece dönebilen ve iki boyutlu haritalama için nokta kümesi(point cloud) toplayan lazer ışın tabanlı bir ölçüm aletidir. Bir düğüm lidardan görüntü alırken diğer düğüm görüntüyü işler bir nevi anlamlandırır. Bu işlemlerin sonucuna göre başka bir düğüm ise görüntünün ele alınıp incelenmesini sağlar. Her biri farklı bir process yürüten bu düğümlerin birbirleri ile haberleşmesi ve senkron olarak çalışmaları gerekir. Bunun için aralarındaki bağlantıyı sağlamak için bir sunucuya ihtiyaç vardır. Bu ROS-Master olarak olarak adlandırılır. Bu Master sunucusu XML-RPC tabanlı bir uygulamadır. Bu sayede düğümler ve Master kullanılarak düğümler birbirleri ile iletişime geçerek istenilen işlem gerçekleştirilmiş olur. Abone mantığını tam anlatmak amacıyla örneğimize geri dönecek olursak A, B, C düğümleri olsun. A düğümü dış ortamdan lidar verisi(pcl) alsın. B düğümü veri işleme, C düğümü de görüntüyü fiziksel olarak bize gösterme düğümü olsun. Düğümler ROS Master’a kayıtlı olduklarında hepsinin publish(yayınlama) ve subscribe(abone) bilgileri ile kayıt olurlar. A düğümü verileri //pcl_data konusu ile publish eder. Buna bağıl olarak B ve C düğümlerinde subscribe tipi publish konusu ile eşleşiyorsa bu ilgili bir düğümdür ve onu kendisine alıp kendi birimde işler.
ROS’un çalışma mantığı bu şekildedir. Somut dünyadan örnek vermek gerekirse Robotis firmasının Turtlebot isimli robotları vardır. Bu robotlar üzerinde ROS kullanarak işlem yapmak zevkli bir çalışma konusudur. ROS’un kullanılabileceği ulaşılabilir bir platform olarak kısa bir şekilde Turtlebot’u tanıyalım.
Turtlebot Nedir?
Turtlebot 3 modüler, kompakt ve özelleştirilebilir yeni nesil bir mobil robottur. Robotun amacı kapasiteyi, işlevselliği ve kaliteyi ödün vermeden platformun boyutunu önemli ölçüde azaltmak ve fiyatını düşürmektir. Turtlebot 3, Open Robotics, Robotis ve İntel, Onshape, Oroca gibi daha fazla ortak arasında iş birliği projesidir.
Bu yazımızda robotik geliştirme için en çok kullanılan yazılım olan ROS özelliklerini nedenleriyle ve örnekler vererek tanıttık.
Kaynakça
[1] http://wiki.ros.org/ROS/Introduction
[2] https://roboticsbackend.com/what-is-ros/