ROS'ta "msg" ve "srv" Dosyalarını Oluşturma

‘msg’ ve ‘srv’ Tanımları

‘msg’:msg dosyaları ROS alanları içerisinde kullanılan mesajları içeren basit yazı dosyalarıdır (simple text files). Bu mesajlar farklı kodlama dilleriyle yazılabilir ve kullanılabilir.

‘srv’:srv dosyaları, servisleri tanımlayan dosyalardır. İleti ve Dönüt (request and response) olmak üzere iki farklı kısım içerir. msg dosyaları, paketler içinde yer alan ‘msg kütüphanelerinde’ tutulur. srv dosyaları ise srv kütüphanelerinde tutulur.msg’ler, mesajların döndüğü alanların tipi ve bu alanların ismini satır satır text dosyalarında tutar. Bu alan tipleri aşağıdaki listedeki gibidir.

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]

Bu genel alan çeşitlerine ek olarak ROS’a özel bir çeşit de vardır:Header. Header, zaman etiketi (timestamp) ve frame koordinatları ile ilgili ROS’ta sıkça kullanılan bilgileri içerir. Bu tipte mesajları msg dosyasının ilk satırında ‘Header Header’ şekilde dosyaya başlandığından görülebilir. Aşağıda bu tipte bir msg dosyası içeriği örneği gösterilmiştir.

Header Header

string child_frame_id

geometry_msgs/PoseWithCovariance pose

geometry_msgs/TwistWithCovariance twist

srv dosyaları da tıpkı msg’ler gibi bir içeriğe sahiptir ve bu içerikler ileti ve dönüt şeklinde iki kısımlıdır. Bu iki kısım dosya içerisinde “---“ şekliyle ayrılmıştır. Aşağıda bir srv dosya örneği gösterilmektedir.

  • int64 A

    int64 B

    ---

    int 64 Sum

Yukarıdaki örnek dosya içeriğinde A ve B ileti (request), Sum ise dönüttür (response).

msg Kullanımı

msg Oluşturma

Önceki tutorial bölümlerinde oluşturulan pakete yeni bir msg dosyası kurmak için aşağıdaki kodlar kullanılır.

  • $ roscd beginner_tutorials

  • $ mkdir msg

  • $ echo “int64 num” > msg/Num.msg

Bu örnekte .msg dosyası sadece 1 satır içermektedir. İsteğe bağlı olarak satır sayıları arttırılarak daha komplike bir msg dosyası yaratılabilir.Aşağıda eklenebilecek alternatif element örnekleri verilmiştir.

  • string first_name

    string last_name

    uint8 age

    uint32 score

Bu noktada dikkat edilmesi gereken bir husus da msg dosyasının kodlama dilinde değişiklik yapılabilme özelliğidir. Böyle bir ihtiyaç oluşursa msg dosyasının kaynak kod dili C++, Python veya başka kodlama dillerine çevrilebilir. Bu işlem için yapılacaklar aşağıda sırasıyla verilmiştir.

  • Değiştirilecek msg dosyasının olduğu paketin ‘package.xml’ dosyası açılır ve içinde aşağıdaki satırların olduğundan emin olunur.
    • <build_depend>message_generation</build_depend>

    • <exec_depend>message_runtime</exec_depend>

  • Not:Kurulum zamanı (build time) için, “message_generation”, çalışma zamanı (runtime) içinse sadece “message_runtime” gerekir.

  • CMakeList.txt dosyası istenilen herhangi text editör ile açılır.(Önceki tutorialdaki rosed iyi bir opsiyondur.)
  • Message_generation gereklilikleri (dependency) altında “find_package” adında bir bölüm vardır. Bu kısım sayesinde mesaj üretilmesi mümkündür.(message_generation dependency zaten adı itibariyle bir mesajın oluşması için gereken koşulları taşıyan kısımdır.). Bu araç listesine “message_generation” eklenir. Bu ekleme sonrası “find_package” bölümü aşağıdaki gibi görünecektir.

find_package(catkin REQUIRED COMPONENTS

  • roscpp

    rospy

    std_msgs

    message_generation

)

Bazı projelerde “find_package” içinde yer alan her gereklilik sağlanmıyor olsa bile iyi sonuç alınabildiği görülebilir. Bunun nedeni ‘catkin’in o zamana kadar yapılan bütün projelerde kullanılan “find_package” gerekliliklerini kombine edebilmesidir. Daha önce bir gereklilik kullanılmışsa, sonra kullanılmasa dahi catkin eski verilerle yenileri konfigüre eder.Ancak unutulmamalıdır ki, proje izole bir şekilde işliyorsa, bu sistem çökecektir.

Aynı şekilde runtime gereklilikleri de görüntülenebilir. Bu durum aşağıda gösterildiği gibidir.

  • catkin_package{

    ...

    CATKIN_DEPENDS message_runtime ...

    ...)

Dosyanın devamında aşağıdaki kod bloğu da görülecektir.

  • # add_message_files(

    # FILES

    # Message1.msg

    # Message2.msg

    # )

Başta yer alan # kısımları silindiği ve yerine .msg dosyasındaki Message*.msg dosyaları konduğunda yeni durum aşağıdaki gibi olacaktır.

  • add_message_files(

    FILES

    Num.msg

    )

.msg dosyalarına manuel şekilde eklemeler yapıldıktan sonra, bu değişikliklerin Cmake’te de görülebildiği ve daha sonraki projelerde de farklı.msg dosyaları için kullanılabilir olup olmadığı kontrol edilmelidir.

Bunun için generate_messages() fonksiyonu çağrılabilir.Kullanımı aşağıdaki gibidir.

  • # generate_messages(

    # DEPENDENCIES

    # std_msgs

    #)

    • ->generate_messages(

      DEPENDENCIES

      std_msgs

      )

rosmsg Kullanımı

Bir msg oluşturmak için gerekenler yapıldıktan sonra, oluşturulan mesajları görebilmek için rosmsg kullanılır. Kullanımı aşağıdaki örnekte gösterilmiştir.

Kullanım:

  • $ rosmsg show [message type]

Örnek:

  • $ rosmsg show beginner_tutorials/Num

    • ->int64 num

Verilen örnekte mesaj tipi, iki parça içerir.

  • Beginner_tutorials – mesajı taşıyan paket adı
  • Num – msg’nin adı

Eğer aradığımız msg’nin paketi unutulursa paket adı yazılmadan da msg bulunabilir. Bunun için aşağıdaki kodlar kullanılır.

  • $ rosmsg show Num

    • ||

      [beginner_tutorials/Num]:||

      • int64 num

srv Kullanımı

srv Oluşturma

Önce srv oluşturmak istenen pakete gidilerek dosya oluşturulur. Bu işlem aşağıdaki gibidir.

  • $ roscd beginner_tutorials

  • $ mkdir srv

Oluşturulan srv, farklı paketlere de kopyalanabilir.Bunun için roscp ideal bir araçtır (dosyaları paketler arası kopyalamaya yarar.). Kullanımı aşağıdaki gibidir. Kullanım:

  • $ roscp [package_name] [file_to_copy_path] [copy_path]

Örnek:

  • $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

Not:msg dosyalarında yapılan kaynak kod değişimi srv’de de aynı şekildedir.

rossrv Kullanımı

rosmsg kullanımıyla tamamen aynıdır.

Yardım Komutları

ROS’un çoğu aracında olduğu gibi rosmsg ve rossrv için de yardım (help) komutları vardır. Bu komut, araçların alt-komut kodlarının ne olduğunun ve işlevlerinin anlaşılması içindir.”rosmsg –h” komutu ile kullanılır. Aşağıda alt-komutlar ve tanımları gösterilmiştir. Alt-Komutlar:

  • rosmsg show: Mesajın açıklamasını/tanımını gösterir.

    rosmsg list: Bütün mesajları listeler.

    rosmsg md5: md5sum mesajını gösterir.

    rosmsg package: İlgili paketteki tüm mesajları listeler.

    rosmsg packages: Mesaj içeren tüm paketleri listeler.

Bununla birlikte alt-komutların da help gösterimleri vardır. Aşağıda bir örnekte kullanımı gösterilmiştir.

  • *$ rosmsg show –h

    • Usage: rosmsg show [option] <message_type>

      Options:

      • -h, --help “help mesajını gösterir ve çıkar.”

        -r, --raw “ham mesaj textini gösterir, yorumlar da dahil”

Ana hatlarıyla bu tutoriale kadar kullanılan ROS komutlarına bakılacak olursa:

  • Rospack = ros+pack(age) : ROS paketlerinin kullanımını sağlar.

    Roscd = ros+cd(change directory) : ROS paketlerinin kütüphanelerini değiştirmeye yarar.

    Rosls = ros+ls(lists) : ROS paketlerindeki dosyaları listeler.

    Roscp = ros+cp(copy) : ROS paketleri arasında dosyaları kopyalamaya yarar.

    Rosmsg = ros+msg : ROS mesajları ile ilgili işlemlerde kullanılır.

    Rossrv = ros+srv : ROS servisleriyle ilgili işlemlerde kullanılır.

    Catkin_make : ROS paketlerini kurabilmeyi sağlar.

    • o Rosmake = ros+make : catkin’in ROS paket yaratma aracıdır.Sadece catkin workspace’i içinde çalışabilir.

(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

ROS'ta "msg" ve "srv" Dosyalarını Oluşturma

Description: Bu aşamada ROS’ta kullanılacak ‘msg’ ve ‘srv’ (mesaj ve servis’ dosyalarının ‘rosmsg’ gibi komut araçlarıyla oluşturulması açıklanmıştır.

Tutorial Level:

Wiki: tr/ROS/Tutorials/ROS'ta "msg" ve "srv" Dosyalarını Oluşturma (last edited 2019-03-28 08:44:31 by AlimKeremErdoğmuş)