Çalisma ortamimizda iki adet makina var. Bir adet windows 7 pc ve bir adet windows 10 dizüstü bilgisayar. Windows 7 pc de matlab R2015b kurulu. Dizüstü makina üzerinde vmware sanal makinada Ubuntu 14.4 kurulu. Ubuntu 14.4 isletim sistemini Osboxes sitesinden edinebilirsiniz.
Dizüstü makina mobil robotumuz olup, wifi üzerinden ağ ortamina bagli. Iki makinayi robotun özellesmis isler yapan parçalariymis gibi düsünecegiz. Hatirlarsaniz ROS ag ortaminda dagitik mimariyi desteklemektedir. Masaüstü makinaya ubuntu kurmadigima dikkat etmissinizdir. Matlab robotik paketi sayesinde windows üzerinde iken, Ubuntu üzerindeki bir ROS düğümü ve ROS master ile baglanti sağlayabilirsiniz.
Windows 7 makina başlangıçta türkçe dil desteği ile kuruluydu. Matlab kurulumu gerçekleştirdikten sonra ROS Master 'i matlab komut satırından çalıştırmak istediğimde komut hata verdi. Yegane çözüm olarak işletimin dilini ingilizceye çevirdim ve tekrar denediğimde hatanın ortadan kalktığını ve ROS Master'in çalıştığını gördüm. Bu zaman kurtaran bilgiden sonra ilk olarak Matlab robotik paketi üzerinde çalışmaya başlayalım.
Aşağıdaki komutu Matlab komut penceresine yazarak makinanızın ip bilgisini öğrenelim. Üzerinde çalıştığım, Matlab kurulu makinada bu değer 192.168.1.2 olarak gözüktü.
system('ipconfig')
Bir önceki yazida bahsedilen ROS sistem değişkenlerini kontrol edelim.getenv('ROS_MASTER_URI')
getenv('ROS_IP')
Bu değerler varsayılan olarak boş gelecektir. Bu şekilde ROS master modülünü çalıştıralım. (Matlab komut penceresi temizleme komutu clc, değişkenleri silme komutu clear dir.)rosinitAşağıda komut cevabına baktığımda makina ismi "ev" olduğu için URI bilgiside aşağıdaki şekilde gözüktü. Sizde de kendi makina isminiz gözükecektir. Ayrıca Master URI port numarası siz değiştirmedikçe Ubuntu ve Matlab için varsayılan olarak aşağıda görüldüğü gibi 11311 değerindedir.
Initializing ROS master on http://ev:11311/.
Initializing global node /matlab_global_node_40973 with NodeURI http://ev:3988/
Network üzerinde haberleşme problemi oluşmaması için ROS_MASTER_URI ve ROS_IP değerlerini uygun değerleriyle değiştireceğim.
setenv('ROS_IP','192.168.1.2')
Yeni değerlerin etkin olabilmesi için ROS platformunu kapatıp tekrar devreye alacağım.rosshutdown
rosinitAşağıda komut geri dönüş mesajına baktığımızda yukarıda girilen değerler kullanılarak ROS platformunun master ve bir global düğümle başlatıldığını göreceksiniz.
Initializing ROS master on http://ev:11311/.
Initializing global node /matlab_global_node_94215 with NodeURI http://192.168.1.2:4050/
Bu aşamada ROS master çalışmaya başladı. Şimdi komut penceresinde ROS ortamında var olan düğümleri listelemek için rosnode komutunu çalıştıralım. Bu ve yazacağımız komutlar ROS platformu komut kümesine aittir, yani Ubuntu üzerinde kullanılır. Matlab robotik paketi bize ROS simülasyonunu sağladığı için bu komutları windows makina üzerinde kullanabilmekteyiz.rosnode list
/matlab_global_node_94215 şeklinde bir sonuç geldi. Ubuntu makinada master açmak için roscore ile başlayıp bu komutu çalıştırsaydim matlab'den farklı olarak /rosout diye bir düğüm ile karşılaşacaktım.
Düğümlerin koşturulabilir ve diğer düğümlerle mesajlar üzerinden haberleşebilir programlar olduğunu tekrar hatirlayalim. Haberleşebilmek için düğümlerin birbirlerine mesaj göndermesi (publisher) ve alabilmesi(subscriber) gerekir. ROS platformunda mesajın bir konusu (topic) ve tipi olmak zorundadır. Aradaki ilişkiyi böylede göstermek mümkündür; (Node<---->Topic---->Message)
Bir düğüm birden fazla topik yayınlayabilir ve birden fazla topiğe üye olabilir. Gerek düğüm ve gerekse topik isimleri sistem bazında tekil olmalıdır.
/rosout düğümüde /rosout topiğine üye olduğu (Subscriber) için bu mesajları alabilir ve bunları bir log dosyasında saklar ve/veya bu log mesajlarını diğer abone düğümlere /rosout_agg topiği üzerinden yayınlayabilir (Publisher). Aşağıda /rosout düğümünün bu bilgi ışığında Ubuntu üzerinde inceleyebilirsiniz.
Mesaj tipi isimlendirmesinde ise [C dili] / [PascalType] olduğunu görmekteyiz.
(/) işareti ise bize düğümün global isim uzayı (namespace) altında olduğunu gösterir. Isim uzayı, tıpkı diğer karmaşık ve birden fazla modülün iç içe kullanıldığı ve tekilliğin sağlanması gereken sistemlerde olduğu gibi ROS platformunda da önemli bir yer tutar. Bunu dosya sistemindeki dizin yapısına benzetebiliriz. /home/user1/readme.txt ile /home/user2/readme.txt farklı dosyalardır. Isim çakışmasının önüne isim uzayı kullanılarak geçilir.
Düğüm hakkında detaylı bilgi almak için aşağıdaki komutu çalıştıralım.
rosnode info /matlab_global_node_94215
Node: [/matlab_global_node_94215]
URI: [http://192.168.1.2:4050/]
Publications (1 Active Topics):
* /rosout
Subscriptions (0 Active Topics):
Services (0 Active):
Publications kısmında düğümün yayınladığı topic /rosout olarak gözükmektedir. Matlab Global düğümümüz sanki Ubuntu daki /rosout düğümü gibi işlev görmektedir (Ubuntu'da roscore ile master çalışmaya başladığında oluşan loglama düğümü).Topik hakkında detay bilgi almak için aşağıdaki komutu çalıştıralım.
rostopic info /rosoutCevap olarak gelen bilgi aşağıdadır.
Type: rosgraph_msgs/Log
Publishers:
* /matlab_global_node_94215 (http://192.168.1.2:4050/)
Subscribers:
Topiğin mesaj tipi rosgraph_msgs/Log olarak verilmiş.
Topiği yayınlayan düğüm /matlab_global_node_94215 olarak verilmiş.
Topiğin ürettiği mesaja abone olan herhangi bir düğüm gözükmemekte.
Şimdide rosgraph_msg/Log mesaj tipi hakkında bilgi alalım.
rosmsg show rosgraph_msgs/Log
Cevap olarak gelen bilgi aşağıdadır. (% işareti Matlab için açıklama satırıdır. )
%% %% Severity Level constants %% int8 DEBUG=1 %debug Level int8 INFO=2 %general Level int8 WARN=4 %warning Level int8 ERROR=8 %error Level int8 FATAL=16 %fatal/critical Level %% %% Fields %% std_msgs/Header Header int8 Level char Name % Name of the node char Msg % message char File % File the message came from char Function % Function the message came from uint32 Line % Line the message came from char[] Topics % topic names that the node publishes
Bu aşamaya kadar ROS üzerinde sıklıkla kullanılan komutları konu ile ilişkilendirerek anlattım.
Komutları Ubuntu üzerinde kullanabilir, parametreli kullanımlarini -h yardım dosyaları ile öğrenebilirsiniz. Örnek : rosmsg -h
Matlab'de ise F1 ile yardım dosyaları açılacaktır.
Bundan sonraki yazımızda Ubuntu makinasini da devreye alip ağ ortamında haberleşme kısmına geçeceğiz.

Eline sağlık
YanıtlaSil