ROS İÇİN ÇALIŞMA ALANI OLUŞTURMA
Öncelikle linux’ta terminal komut satırını açtığımızda projemizi oluşturmak için mkdir komutu ile bir dosya oluşturuyoruz.
ROS kurulumunu gerçekleştirmek ve ROS çalışma alanını (catkin workspace) oluşturmamız için bu işlem gereklidir. Ardından catkin_make komutu ile dosyamızın ros yapılandırmasını gerçekleştiriyoruz.
Oluşturduğumuz bu dosyanın ros bağlantısını kurabilmek için;
source devel/setup.bash bu kod yazılır. Bu işlem her yeni terminal açıldığında yapılmak zorundadır.
1)Dosya sistemlerinde gezinme işlemi
Ros komutlarıyla bir paket nasıl bulunur? Bunun için;
(rospack find dosya ismi) bu komutta girilen dosya isminin hangi dizinde olduğunu gösterir. Örnek:
Eğer bu dizine ulaşmak istersek roscd komutunu kullanarak paket ismini girerek o dizinin içine gidebiliriz.
Burada gene linux’ta kullanılan cd komutunu kullanarak dizinler arası geçiş yapabilmemiz mümkün ama roscd komutu ile bu işlem daha kısa sürecektir.
· Bunların dışında ros paketinin içinde ki dosyaları listelemek için ” rosls” komutu kullanılır.
2)Ros’da paket oluşturmak
Önceden oluşturduğumuz catkin_ws/src lokasyonuna giderek catkin_create_pkg komutuyla istediğimiz isimde bir paket oluştururuz. Bu pakete std_msgs (mesajlaşma uygulamaları için gerekli kütüphane), rospy ve roscpp bağımlılıkları da eklenmelidir.
· catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
Oluşturduğumuz bu dosyayı ROS ortamına eklemek için; source ~/catkin_ws/devel/setup.bash
komutunu unutmamamız gerekir.
· Oluşturduğumuz paketin içine eklediğimiz rospy,roscpp gibi bağımlılıkları sıralı bir listesini görmek için; rospack depends1 beginner_tutorials komutu kullanılır. Eğer bu komutta “depends” kullanacak olursak bu seferde kullanılan paketlerin içinde ki tüm alt paketleri bize getirmiş olacaktır.
Şimdi de oluşturduğumuz paketi özelleştirmenin nasıl olacağına değindim.
Bu kodu yazdığımızda karşımıza:
Bir xml kodu gelecektir. Bu kodu adım adım inceleyecek olursak; burada <name> kısmında paketimizin hangi isimde olduğunu, <description> kısmında ise paketimizle alakalı bir açıklamaya gerek duyduğumuzda o alana gerekli açıklamamızı yazarız.
<maintainer email> kısmında ise insanların bize ulaşabilmesi için bir mail adresi tanımlarız.
Burada da eklediğimiz paketlerin neler olduğunu bize gösteriyor. Burada başka paketlerde eklemek istersek; build_depend komutu ile eklemek istediğimiz paketi yazıp catkin_make komutu ile de yeniden yapılandırıp işlemi gerçekleştirebiliriz.
3)ROS NODES
Ros düğümü temelde hesaplama yapan bir işlemdir. Yapmış olduğunuz uygulamaların içinde çalıştırılabilir bir programdır. Bu düğümler bir grafikte birleştirilir ve ros konularını, hizmetlerini, eylemlerini kullanarak birbirleriyle iletişim kurmaya yararlar.
Ros düğümlerini çalıştırmadan önce Ros’u aktif etmemiz gerekir. Bunun için “roscore” komutunu kullanırız. Ardından çalıştırmak istediğimiz ros modunu”rosrun” komutu ile çalıştırabiliriz. Örnek:
Burada önce roscore ile ros’u aktif ettim. Daha sonra rosrun komutu ile ros modlarından biri olan turtlesim’i çalıştırdım.
Turtlesim paketimi farklı bir isimle çalıştırmak mümkün: rosrun turtlesim turtlesim_node __name:=my_turtle
my_turtle adında yeni bir turtlesim uygulaması açmış oldu.
TURTLESIM: Aslında ilk robot simülasyon programıdır. Burada turtlesim_node’u ile birlikte çalışan diğer komutları görmek içinde: “rosnode” komutunu kullanırız.
rosnode list komutu ile de hangi rosnode komutlarının çalıştığını görebiliriz.
rosnode info komutu ile çalışan ros paketleri hakkında daha detaylı bilgi elde edebiliriz.
Burada turtlesim paketi ile birlikte çalışan abonelikleri, servisleri, yayınları bize göstermeyi sağlar.
Rosnode ping /my_turtle: Bu komut ile çalışan bir node’a ping atarak gerekli test işlemlerini yapabiliriz.
4)Ros Topic
Linux terminal satırına “rostopic” komutunu yazdığınız zaman kullanabileceğimiz komutları bize gösterir.
Rostopic list komutu ise çalışan node’umuzun yaptığı yayınları,konuları detaylı bir şekilde görmemizi sağlar.
rosrun turtlesim turtle_teleop_key: Bu komut ile turtlesim uygulamamızın simülasyonu içinde ki kampluğumbağamızı klavyemizin yön tuşları ile hareket etmesine olanak sağlar.
Yukarıdaki şekilde olduğu gibi hareket işlemini yaptıktan sonra yeni bir terminal açıp “rqt_graph” komutu ile bu hareketimizin grafiksel gösterimini açtım. Grafiksel gösterim:
rosrun rqt_graph: Turtlesim paketimizin içinde hareket ettirdiğimiz robotumuzun teleop_turtle’un cmd_vel üzerinden /turtlesim’e yayın yaptığını ve robotumuzu kontrol ettiğini görmüş olduk.
Yön tuşları ile robotumuza yaptırdığımız hareketleri grafik olarak görebildiğmiz gibi terminal satırında da görmemiz mümkün. Bunun için:
rostopic echo /turtle1/cmd_vel komutunu kullanırız.
Burada linear kısmı genelde x düzleminde hareket sağlarken angular ise z düzleminde hareket sağlar. Burada ki z hareketi aslında bizim açımız olur. X hareketi ise robotumuzun ileri ve geri hareketini sağlar.
Robotumuz’un hareket edeceği miktarı ve hangi açı ile hareket etmesini istiyorsak onları da manuel olarak belirtebilir aynı zamanda sürekli istediğimiz yönde hareketini sağlayabiliriz. Bunun için:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist “linear: komutunu kullanırız.
Burada x hareketi için 2.0 ve gideceği açıyı da -1.8 olarak belirledim. Ve robotum bu açı ve hız ile hareket edecektir. Sürekli hareketini sağlayabilmek için de:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 “linear: komutu kullanılır.
Bu şekilde sürekli hareket edecektir.
Robotun x ve y düzleminde yaptığı hareketleri takip etmek için “rosrun rqt_plot rqt_plot” komutunu kullanarak hareketlerini inceleyebiliriz.
5)ROS SERVİSLERİ
“rosservice” komutu ile ros servis paketleri içinde ki kullanabileceğimiz fonksiyonları görürüz.
“rosservice list” komutu ile de çalışmakta olan servislerimizi listeleyebilirz.
Bir servis paketini çağırıp onu çalıştırmak istiyorsak eğer:
“rosservice call / clear” Burada clear sevisini çalıştırdım. Bu komut turtlesim paketinde ki robotumuzun yaptığı çizimleri, hareketleri siler.
6)ROS PARAMETRELERİ
“rosparam” komutu ile kullanabileceğimiz parametreli fonksiyonları bize listeler.
“rosparam list” komutu ile de değiştirebileceğimiz parametreleri bize listeler. Örneğin turtlesim uygulamamızın arkaplan rengini değiştirelim. Öncelikle rosparam get / komutu ile arkaplan rengine ait tüm parametreleri listeler. Daha set komutu ile o parametreleri değiştirerek arkaplan rengini de değiştirmiş olurum.
“rosservice call /clear” bu işlem ile yaptığımız değişikliği ekranda görmemizi sağladı. Bu yaptığımız işlemleri kaydetmek için:
“rosparam dump test.yaml(sonu yaml uzantılı olmalı) olarak kaydedebiliriz.
Rosparam ile turtlesim uygulamamızın arkaplan rengini şekildeki gibi değiştirmiş olduk.
7)ROS LAUNCH
Birden fazla node çalıştırmak için kullanılan bir araçtır .xml standardında yazılır ve eğer çalıştırıldığında roscore henüz çalıştırılmamış ise onunla beraber çalışır.
Launch:Kök eleman
Node: çalıştırılacak node adı
name: node adı
Özellikleri:
Parametre verilebilir. Bu parametreler launch dosyasında arg tagları ile tanımlanır.
Burada da roslaunch kullanarak iki turtlesim paketini kullanarak yayın yaptım. Örnek:
Roscd ile beginner_tutorials/ klasörümün içine gidip orada mkdir komutu ile testt.launch adında bir launch dosyası oluşturdum. Ve bu dosyayı gedit ile çalıştırdığımda;
Burada turtlesim 1 ve turtlesim2 adında 2 adet turtlesim paketi oluşturduk ve input olarak turtlesim1, output olarak turtlesim2’yi bağlıyoruz. Ve dosyamızı kaydedip kapatıyoruz. Ardından roslaunch beginner_tutorials test.launch ile dosyamızı tarayıp kontrol ediyoruz.
Oluşturduğum launch dosyam eksiksiz bir şekilde çalışmış oldu. Daha sonra robotlarımı açıp onlara gerekli hareket işlemi kazandırdım.
İki robota manuel olarak sürekli hareket etmesi için x ekseninde bir değer verdim. Çıktısı:
Burada rostopic üzerinden cmd_vel ile turtlesim1’e yayın yapıldığını, turtlesim1’in ise mimic paketini kullanarak turtlesim2’ye turtlesim2’nin cmd_vel’i üzerinden yayın yapıldığını görebiliyoruz.
Mimic: En basit tabiri ile bir kaplumbağa’nın diğerini taklit etmesi için basit bir arayüz sağlar. Bu grafikte de 2. kaplumbağa aslında 1. kaplumbağa’yı taklit ediyor.
8)DOSYALARI DÜZENLEME
Oluşturmuş olduğumuz dosyaları düzenlemek için “rosed” komutunu kullanırız.
Kullanımı: “rosed paket_adi” şeklindedir. Bu aslında dosyanın içindeki bilgileri terminalde ki vim ya da nano gibi editörler yardımıyla linux terminalinde açıp gerekli düzenlemeleri yapmayı sağlar.
Bunun avantajı değiştirmek istediğimiz dosyanın konumuna gitmeden tek bir komut ile dosyayı açıp düzenlemeyi sağlar.
9)Ros Msg kullanımı
Ros, Ros düğümlerinin yayınladığı verileri yani mesajları açıklamak için basitleştirilmiş bir mesaj tanımlama dili kullanır. Amaç ROS araçlarının birkaç hedef dilde mesaj türü için otomatik olarak kaynak kodu oluşturmasını kolaylaştırır. Mesaj açıklamaları, bir ROS paketinin msg/ alt dizininde ki .msg dosyalarında saklanır. Bir .msg dosyasının iki bölümü vardır. Alanlar ve sabitler.
ALANLAR: Mesajın içinde gönderilen verilerdir.
SABİTLER: Bu alanları yorumlamak için kullanılabilecek yararlı değerleri tanımlarlar.
Rosmsg, mesaj tanımlama bilgilerini yazdırır. Ayrıca bir mesaj türü kullanan kaynak dosyalarını bulabilir.
msg’ler, mesajların döndüğü alanların tipi ve bu alanların ismini satır satır text dosyalarında tutar. Bu alan tipkeri şunlardır:
Önceden oluşturduğumuz pakete bir msg dosyası eklemek istersek linux’ta şu komutları kullanmamız gerekir:
-roscd beginner_tutorials
-mkdir msg
- echo “int64 Num”>msg/Num/msg
Bu komutta .msg dosyası sadece 1 satır içermektedir. Burada dikkat edilmesi gereken bir diğer husus da msg dosyasının kodlama dilinde değişiklik yapabilme özelliğine sahip olmasıdır. Eğer böyle bir ihtiyaç olursa msg dosyasının kaynak kod dili ROS’ un desteklediği c++, python gibi kodlama dillerine çevrilebilir.
- Oluşturulan mesajları görmek için rosmsg show (mesaj tipi) yazılır. Örnek
- Rosmsg show beginner_tutorials/Num
- Çıktı: int64 num
KAYNAK: