Robot İşletim Sistemi 2 (ROS 2) Mimarisi

Huseyin Kutluca
Yazılım Mimarileri
7 min readDec 6, 2020

ROS robot kontrol yazılımı geliştirmek için geliştirilmiş açık kaynak bir yazılımdır. İsminde işletim sistemi geçmesine rağmen bir işletim sistemi değildir. Temel olarak

  • İletişim altyapısı (yayımla-abone ol tabanlı iletişim ve uzaktan metot çağrısı),
  • Çerçeve yazılımları ve araçlar (görselleştirme, yapılandırma altyapısı, kayıt yeniden oynatma) ve
  • Ekosistem (simülatörler, algoritmalar, sürücüler ve programlama dili arayüzleri vb.) bütünüdür.

İlk versiyon ROS daha çok akademik projelerde kullanım alanı görüyordu. Ticari projelerde de kullanım sağlamak üzere ROS geliştirilerek şu anki versiyon olan ROS2 yayımlandı. ROS2 ile gelen en büyük değişiklik iletişim katmanı için DDS ara katmanının seçilmesi oldu. Savunma sanayi projelerinde rüştünü ispat etmiş olan DDS ara katmanı yayımla abone ol mimarisi ile robot bileşenleri arası ve robotlar arası iletişimi güçlendirmiş oldu. Hali hazırda 3–4 farklı DDS ürünü için ROS2 bağlantısı geliştirmiştir. ROS2 açık kaynak olduğundan ilgili firmalar DDS kütüphanelerini de açık kaynak olarak sektöre sunmuşlardır. ROS 2 aynı zamanda birden fazla robot arası iletişim, gerçek zamanlı iletişim ve farklı platform desteği ile daha geniş bir kullanım alanı buldu. Şu anda insansı robotlardan endüstriyel robotlara ve otonom araçlara kadar farkı alanlarda ROS 2 kullanılmaktadır.

ROS seyir, kontrol, hareket planlama, görü ve simülasyon amaçlarıyla kullanabilmek için açık kaynak olgun kütüphaneleri içermektedir. RVIS isimli 3B görselleştirme aracı ROS ile birlikte kullanılan önemli bir araçtır. Benzer şekilde Gazebo isimli simülasyon aracı da robot geliştiriciler için faz geçilmez bir araç olarak görülmektedir. Bunun dışında Open CV kütüphanesi ROS 2 de algılama amacı ile kullanılan bir kütüphanedir. Ayrıca QT grafik kütüphanesinin de ROS 2 projelerinde kullanıcı ara yüzü için kullanıldığını ve bu amaçla mevcut bir eklenti olduğunu görmekteyiz.

ROS 2 neleri içermektedir

Bu yazıda ROS ta mevcut kütüphane ve araçların kabiliyetlerine, ROS 2'nin nasıl kurulduğuna ve ROS 2 ile nasıl kod geliştirileceği detaylarına değinmeyeceğim. Bu konuları anlatan farklı Türkçe ve İngilizce kaynak ve eğitimler bulunmaktadır. İlgili arkadaşların bu kaynaklara yönelmesini öneririm.

Ben İngilizce kaynaklarda bile temiz bir şekilde anlatıldığını görmediğim ROS 2 mimarisini size anlatmaya çalışacağım.

ROS 2 Mimarisi

ROS 2 mimarisi temelde gerçek zamanlı dağıtık servis tabanlı mimari üzerinde çalışmaktadır. Robotlarda sensörleri hareket kontrolörleri, algılama algoritmaları, yapay zeka algoritmaları, seyir algoritmaları vb. birer bileşen olarak yer alabilmekte ve bu bileşenler dağıtık ortamda veri alışverişi yaparak robot kontrolünü sağlamaktadır. Veri alışverişi için ROS 2 ile seçilmiş olan DDS ara katmanı bu bileşenlerin birbiri ile dağıtık ortamda haberleşmelerini sağlamaktadır.

Bir robot kontrol yazılımında ne tür bileşenler olur

ROS 2 DDS ara katmanını doğrudan kullanmak yerine DDS üzerine kendi soyutlama katmanını (rmw) sağlamıştır. Böylelikle DDS ara katmanı ara yüzünün detayları kullanıcıdan soyutlanmıştır. Şu anki ROS 2 sürümlerinde Fast-DDS standart DDS sürümü olarak gelmektedir. Bunun dışında farklı DDS ürünler içinde rmw desteği mevcuttur. Kullanıcı istediği DDS kütüphanesini seçip kullanabilmekte hatta ağ seviyesi birlikte çalışabilirlik sayesinde birden fazla DDS kütüphanesinin aynı projede kullanılması mümkün olmaktadır. Ara katman üzerinde bulunan istemci kütüphanesi yardımı ile geliştirilen uygulamalar ara katman üzerinden haberleşebilmektedirler.

ROS 2 de ara katman ve istemci kütüphanesi mimarisi

ROS 2 İstemci Kütüphanesi

ROS 2 uygulamaları ROS Client Library (RCL) istemci kütüphanesi üzerinden ROS 2 özelliklerine erişmektedir. Rcl kütüphanesi C dili ile yazılmış olup bunun üzerinde C++ dili için Rclcpp ve Pyton dili için Rclpy istemci kütüphaneleri bulunmaktadır. Java, Go gibi diğer diller içinde bağımsız şekilde yazılmış ROS 2 istemci kütüphaneleri bulunmaktadır. İstemci kütüphanesi öncelikle ROS 2 üzerinden konu ve servis yaklaşımlarıyla veri alışverişi sağlamak üzere gerekli standart ara yüz sağlanmaktadır. Ayrıca ROS2 kütüphanesini içinde işletim sistemi soyutlama ve hazır bir takım mikro mimarı yapılar (görev yönetimi, zamanlayıcı vb.) sağlamak üzere kabiliyetler mevcuttur.

ROS 2 Çizge Yapısı

Node, topic, mesaj yapısı ve keşif ROS 2 nin temel dağıtık mimarisini oluşturmaktadır. Bu yapı ROS 2 terminolojisinde çizge (graph) olarak adlandırılmaktadır. Şimdi bu mimari temel yapıların detaylarına girelim.

ROS 2 Çizge yapısı

Düğüm (Node)

Dağıtık uygulamalar Düğüm (Node) olarak bilinen birimler olarak tasarlanmaktadır. Bir robot sisteminde sensörler (Lidar, kamera) hareket kontrolörleri (hareket sağlayan motorlar), algoritma bileşenleri (rota planlayıcı) birer düğüm olabilmektedir. ROS 2 düğüm kavramını işletim sistemi seviyesi görev (process) yapısından ayırmıştır. İstendiği takdirde bir görev içinde birden fazla düğüm yaratılıp bu düğümler bağımsız şekilde diğer düğümler ile iletişim kurabilmektedir. Sistemde bütün düğümler tek bir bilgisayarda çalışabileceği gibi birden fazla bilgisayara dağıtık şekilde yerleştirilip çalıştırılabilirler.

Konu(Topic) , Servis(Service) ve Aksiyon

Düğümler birbiri ile Konu (Topic), Servis çağrıları (Service Invocation) ve Aksiyon (Action) ile haberleşir. Konu haberleşmesi yayımla abone ol mimarisi yardımı ile bir düğümün ürettiği veri birden fazla düğüme iletilir ve benzer şekilde bir veriyi birden fazla düğüme üretebilir. ROS 2 de tanımlı Konular DDS konuları ile birebir eşleşmektedir. Servis çağrıları uygulama geliştirici bakış açısı ile uzaktan metot çağırma yaklaşımını kullanmaktadır. Bu servis çağrıları da ROS 2 de DDS ara katmanı üzerinden istek konusu ve cevap konusu olarak uygulanmaktadır. Aksiyonlar ise uzun süren servis çağrıları için kullanılan bir yaklaşımdır. İstemci sunucudan bir aksiyon ister, sunucu uzun süren işlemi başlatır, ara sonuçları yayımlar ve aksiyon bittiğinde sonucu raporlar. Böylelikle hem performans açısından hem de hataya dayanıklılık açısından büyük avantaj sağlanmış oldu. Bununla birlikte DDS ara katmanının sağladığı geniş servis kalitesi özellikleri de ROS 2 mimarisini üst seviyelere çıkaran bir etmen olmuştur.

Mesajlar (Message)

Konu iletişiminde kullanılan veri tipleri mesaj (Message) olarak adlandırılmaktadır. Bu Mesaj veri yapıları temelde DDS veri tipleri (Type) ile eşleşmektedir. Örnek bir kamera mesajı aşağıda verilmiştir:

sensor_msgs/CameraInfo
Header header
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
RegionOfInterest roi
uint32 x_offset
uint32 y_offset
uint32 height
uint32 width
float64[5] D
float64[9] K
float64[9] R
float64[12] P

ROS 2 de tanımlı mesajlar aslında birlikte çalışabilirlik için büyük önem arz etmektedir. Bu standart mesajlar yardımı ile farklı firmaların geliştirdiği kameralar hızlıca sisteme entegre edilebilmekte ve hangi model kamera olursa olsun standart mesajlar ile haberleşebilmektedir. Bu durumda ilgili kamera için geliştirilen Node bileşeni kameranın özel iletişim protokolü mesajlarını standart DDS verilerine çevirecektir. Gazebo simülasyon aracı içinde bulunan kamera simülatörü kullanarak ön çalışmalar yapılabilecektir.

ROS 2 DDS ara katmanında tanımlı olan servis kalitesi özelliklerini (QOS) de etkin olarak kullanmaktadır. Örneğin devamlı güncellenen sensör verisi iyi niyetli olarak gönderilirken robotun bir işi yapması için gönderilen komut güvenilir olarak gönderilebilmektedir. DDS deki zengin servis kalitesi özelliklerini konular ile eşleştirmek önemli bir tasarım kararıdır. Verinin türüne göre kullanılabilecek hazır servis kalitesi profilleri tanımlanmış ve yeni tanımlana konular ile ilgili servis kalitesi bu profillerden birisi seçilerek belirlenmektedir. Bu servis kalitesi profillerine konuda DDS tasarım kalıpları yazımda değinmiştim. ROS 2 de tanımlanmış QOS profilleri servis, sensör verisi, parametreler ve varsayılan olarak bilinmektedir. Örneğin sensör verisi iyi niyetli güvenirlik servis kalitesini kullanmakta iken parametreler güvenilir servis kalitesi değerini kullanmaktadır.

Uygulamaların birbirini dağıtık ortamda keşfi

ROS 1 de keşiş ve mesaj iletimi Roscore isimli bir servis üzerinden iletişim kuruyor idi. DDS ara katmanı veriyi dağıtmak için bir aracı (broker) ihtiyacı duymamaktadır. Ayrıca DDS ara katmanında uygulamalar birbirini özel DDS konuları vasıtası ile dinamik olarak keşfetmektedir. Sonuç olarak DDS ROS 2'nin ihtiyaç duyduğu keşif, dağıtım ve veriyi kodlama ihtiyaçlarını karşılayarak ROS 2'yi merkezi olmayan bir mimariye geçirmiş oldu. Yani, yeni mimaride Roscore servisi emekliye sevk edilmiştir.

ROS2 Cihaz adaptasyonu

Robot sistemlerinde bulunan sensör, eylemci gibi cihazlarında düğüm olarak ROS 2 sistemine entegre edildiğinden bahsetmiştik. Bu cihazların entegrasyonu için yazılması gerekli koda ROS terminolojisinde Adaptör (wrapper) denmektedir. Bu yaklaşım daha önce açık mimari sistemlerde gördüğümüz yaklaşım ile benzer yapı göstermektedir. Örneğin bir motor kontrolörü için geliştirilecek adaptör yazılımı ilgili motor kontrolörü ara yüzünden bağımsız olarak verileri konu olarak yayımlayacak (mevcut hız ve motor durumu) ve konu olarak aldığı verileri motora iletecektir(Hız komutu). Kamera kontrolü için istendiği takdirde servis ara yüzü sunulabilecektir (motoru durdurma). Bu adaptör yazılımı motora ait parametreleri parametre sunucusundan alabilecek ve motoru bu parametrelerle başlatabilecektir (maksimum hız).

Bir motor adaptör düğümü mimarisi

Parametre Sunucusu

ROS 2 de mimari bir birim olarak dikkate alınabilecek ortak servislerden birisi parametre sunucusudur. Bu şekilde tüm düğümler saklamak istedikleri parametreleri saklayabilmekte ve geri alabilmektedir.

Kayıt ve Yeniden Oynatma

ROS 2 de DDS verilerini kayıt edip yeniden oynatmaya yönelik ROS2 Bag servisi bulunmaktadır. Kayıt ve yeniden oynatma böyle dağıtık gerçek zamanlı sistemlerde görev sonrası davranış analizi ve test amacı ile etkin olarak kullanılabilmektedir.

ROS1-ROS2 Köprüsü

Hali hazırda ROS-1 ile geliştirilmiş düğümlerin ROS-2 ortamında kullanılması için geliştirilmiş bir adaptör yazılımıdır.

ROS 2 ve Emniyet Kritik Projelerde Kullanımı

Son yıllarda ROS2 özellikle otonom araç geliştiricileri tarafından büyük ilgi görmektedir. Bu firmalar kendi geliştirecekleri sistemler için birçok altyapıyı hazır olarak sunan ROS2'yi temel alarak autoware gibi başka kütüphanelerle bir araya getirip prototip çalışmalarına başlamışlardır. Peki prototip çalışmaları başarılı olduğu durumda gerçek sistemde de açık kaynak olan ve otomotiv dünyasının istediği emniyet şartlarını ( ISO 26262) açık kaynak ROS2 kütüphaneleri karşılamayacaktır. Tabi ki bu durumu gören altyapı firmaları öncelikle ROS 2 kütüphanelerini gerçek zamanlı işletim sistemlerine adapte etmeye başlamıştır. Bununla birlikte emniyet kritik projelerde kullanabilecek ROS2 kütüphanelerini ilgili test ve dokümantasyonları ile birlikte hazırlamaya başlamıştır.

İlgili C4 Diyagramları:

https://github.com/hkutluca/yazilimmimarileri/tree/master/ROS2

--

--

Huseyin Kutluca
Yazılım Mimarileri

Highly motivated Software Architect with hands-on experience in design and development of mission critical distributed systems.