1 Ocak 2017 Pazar

ROS (Robot Operating System ) nedir, nasıl kurulur ?

Robot İşletim Sistemi (ROS), robotu oluşturan parçaların birbirleriyle ve dış dünya ile etkileşimini basitleştirmeyi amaçlayan bir yazılım platformudur. Temel amacı kullanıcı, işletim sistemi (Ubuntu) ve ekipmanlar (sensör, kamera, joystick, vb) ile etkileşimi sağlamaktır. Bir işletim sisteminde donanım ile ilgili nasıl bir soyutlama var ise ROS içinde bu soyutlamadan bahsedebiliriz. Robotun tüm donanımsal detaylarına girmeden kontrol imkanı sunar. Örneğin bir robot kolunu hareket ettirmek için, robot kolunun donanımsal tasarımını yapanların phyton, c++ da hazırlamış olduğu kütüphaneler içindeki komutları kullanırsınız. ROS dağıtık mimari yapısını destekler. Robotun kamera görüntülerinden haritayi çıkartan ve gideceği yolu oluşturan yazılım ve donanım başka bir makinada iken, robotun tekerleğini hareket ettiren modülü başka bir makinada olabilir.

ROS sürümleri (ROS paketlerinin versiyonlanması.) kar amacı gütmeyen Open Source Robotics Foundation (OSRF) kontrolünde yayınlanır. ROS hakkında detaylı bilgi edinebileceğiniz sitesi organizasyon linkinde sunulmuştur. Sürümlere ait detaylı bilgiyi dağıtımlar linkinden bulabilirsiniz.

Ubuntu (Xenial) üzerine ilk kurulumu son sürüm olan (tavsiye edilen) Kinetic sürümü ile gerçekleştirdim. Lakin ROS un Indigo sürümünde kurulum paketi ile birlikte gelen Gazebo robot simulasyon programı desteği bu yazıyı yazarken Kinetic için yoktu ve bende öğrenme aşamasında olduğum için, iş gazebo simülatör kismina gelince kaldım. Bunun üzerine ROS Indigo sürümünü, Ubuntu 14.4 Trusty üzerine sil baştan kurmaya karar verdim.

Microsoft ortamında yazılım geliştirmeye aşina biri olup linux konusunda temel seviyede bilgi sahibi olmama rağmen kurulumu sitesindeki adımları izleyerek Kinetic için kolayca, Indigo için biraz uğraşarak gerçekleştirebildim. Sebebi ise  gazebo' ya ait modellere normal kurulumla erişemedim. Tüm modelleri ayrıca indirmek zorunda kaldım. Kinetic'den Indigo dağıtımına Gazebo simülatörünü kullanayım diye yola çıkmış ve böyle bir espri ile karşılaşmış olduk.

Sitedeki linklerin ROS sürümlerine göre bir yapılanması mevcut.

http://wiki.ros.org/<sürüm adı>/Installation/Ubuntu adresindeki <sürüm adı> değişkenine Kinetic yazarsaniz Kinetic sürümüne ait kurulum sayfalarına gidersiniz. Biz Indigo kurulumuna gideceğiz.

Şimdi ROS sitesinde Indigo kurulum talimatlarını aşağıdaki gibi terminal üzerinde sırasıyla işletelim.

ROS paketlerini alabilmek için Ubuntu program paketleri listesine (sources.list) packages.ros.org sitesini ekleyelim. Aşağıdaki tek bir komut satiridir.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
listeyi güncellemek için ROS deposuna ait anahtar bilgilerini girelim.

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

ROS kurulumuna geçmeden paketlerimizi güncelleyelim

sudo apt-get update

Şimdi ROS  ve yanında çeşitli yardımcı araçlar (rviz, rq, gazebo 2, turtlesim simulator, robot kütüphaneleri) olan paket kurulumuna geçelim. Ek bilgi olarak, ROS sürümlerinde gördüğümüz kaplumbağa (Ilk sürüm olan ROS Box Turtle'in her sürümde evrimleşmiş hali) turtlesim simulator çalıştırıldığında karşınıza çıkar.

sudo apt-get install ros-indigo-desktop-full

ROS platformunu çalıştırmak için gerekli olan ROS harici işletim sistemi bağımlılıklarını yüklemek  için aşağıdaki komutlari çalıştırıyoruz.

sudo rosdep init
rosdep update

ROS platformuna ait komutların tanınması ve çalıştırılması için ROS'a ait dosyalarin yollarının bilinmesi  gerekir. Her bir terminal oturumunda (terminal ekrani açtığınızda) bunun otomatik yapılabilmesi için aşağıdaki komutları çalıştırıyoruz. (terminalde bash kabuğu kullanıyorsak.)

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

rosintall komutunu ros paketlerini indirmek için kullanırsınız. Bu komutu kullanabilmek için sisteme kurmaniz gerekmektedir. Bunuda aşağıdaki komutla yaparız.

sudo apt-get install python-rosinstall

kurulumu bu şekilde tamaladıktan sonra aşagıdaki komutla ROS sistem değişkenlerini kontrol edebilirsiniz.

 export| grep ROS

declare -x ROSLISP_PACKAGE_DIRECTORIES=""

declare -x ROS_DISTRO="indigo"

declare -x ROS_ETC_DIR="/opt/ros/indigo/etc/ros"

declare -x ROS_MASTER_URI="http://localhost:11311"

declare -x ROS_PACKAGE_PATH="/opt/ros/indigo/share:/opt/ros/indigo/stacks"

declare -x ROS_ROOT="/opt/ros/indigo/share/ros"


Eğer değişkenleri yukarıdaki gibi göremedi iseniz setup.bash dosyasini tekrar source etmeyi denemelisiniz. Indigo sürümünü kurduğumuz için ROS_DISTRO="indigo" olduğunu gözlemleyiniz.

ROS Indigo kurulumumuzu böylelikle tamamladık. Şu aşamada terminal ekranını açıp ROS komutları girebilirsiniz.

ROS üzerinde yazılım geliştirecekseniz (ROS paketleri oluşturmak veya var olan ROS paketleri değiştirip derlemek)  catkin çalışma ortamını kurmanız gerekmektedir.

Açık kaynaklı yazılım geliştirme kalıpları, yeni problemleri çözmek için mevcut çözümleri tekrar kullanma kolaylığı nedeniyle güçlüdür. ROS'da bu mantığı kullanır. Birçok robotik uygulaması, diğer robot uygulamalarda karşılaşılan problemleri içerir veya çok benzer alt sistemlere sahiptir. Çözüm için diğer paketleri kullanmak beraberinde örgütsel zorlukları getirir. Her bir paketin kendine ait derleme şekli, bağımlı oldukları kütüphaneler bulunur.  catkin bu zorlukların üstesinden gelmek için oluşturulmuş bir dizin yapısıdır. Kurulumu için aşağıdaki komut satırlarını çalıştıralım.

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

catkin_ws dizinine baktığınızda /src dizininin oluştuğunu ve içinde CMakelist.txt dosyası olduğunu göreceksiniz. catkin_make komutunu aşağıdaki gibi çalıştırdığınızda

$ cd ~/catkin_ws/
$ catkin_make
/build
/devel dizinlerinin ve //devel dizininin içinde ise setup.*sh dosyalarını göreceksiniz. Bunlardan setup.bash dosyasini source komutu ile çalıştirarak ROS sistemine dahil ediyoruz.

$ source ~/catkin_ws/devel/setup.bash
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
İşlemi kontrol için aşağıdaki komutu çalıştırarak catkin dizininin en başa eklendiğini gözlemleyiniz.

$ echo $ROS_PACKAGE_PATH

Böylece ROS kurulumuna catkin kurulumunu da ekleyerek kurulum safhasini tamamlamış olduk.

Terminal penceresini açarak ilk komutumuz olan roscore komutunu girelim. Bu komut ROS sisteminin çalışması için gereken modül ve programların yüklenmesini sağlar. Bunlar sırası ile ROS Master, ROS Parameter service, rosout loglama modülleridir.

$ roscore

ROS platformunda aynı veya farkli bilgisayarlarda çalişan her bir kod modülü Node (düğüm) olarak geçer. Her bir düğüm robotunuzla ilgili özelleşmiş bir iş yapar. Bir düğüm oluşturmanın iki yolu vardır; birincisi terminal üzerinden ikincisi ise phyton veya c++ kodu ile düğüme ilişkin kodlamayla olur. Düğümler birbirleriyle mesajlaşabilir. Mesajlaşma ancak düğümlerin kendilerini ROS platformuna kaydettirmeleri ile mümkündür. Düğümlerin kaydedildiği ve izlendiği modül ROS Master olarak geçer. Düğümler arası haberleşme TCP/IP veya TCPROS kullanılarak yapılır. Yukarıdaki roscore komutu ile ROS Master'i devreye almış oldunuz.  Terminal ekraninda komut cevabını incelediğinizde aşağıdaki URI, master'in lokasyonunu belirtir. <makina_ismi_veya_ip> değişkeni bende osboxes gozukuyor. Bu sanal makinamin ismi. Sizde de kendi makinanizin ismi gozukecektir.

ROS_MASTER_URI=http://<makina_ismi_veya_ip>:11311/
Biraz önce açtığınız ve roscore komutunu çalıştırdığınız terminali kapatırsanız ROS sistemide kapanır. Terminali kapatmadan ctrl + c ile de ros mater modulunu kapatabilirsiniz.

Yukaridaki URI bilgisine bu haliyle müdahale etmez isek network ortamında birden fazla makinaya dağilmiş bir yapıda düğümlerin master'i bulması ve master'in düğümleri izlemesinde sıkıntı yaşayabilirsiniz. Matlab üzerinden (robotik paketi içerir ve ros platformu desteği verir.) Ubuntu kurulu makinaya erişirken  (ros platformu kurulu makinam) bu sıkıntıyı yaşadım. Çözüm olarak düğümlerin birbirlerini URI üzerinden çözmesini kolaylaştırmak için ROS_MASTER_URI ve ROS_IP platform değişkenlerini uygun ip değerleri ile her bir makina da set etmeniz gerekir.

ROS Master modülünü kapatarak aşağıdaki komutlarla önce değişkenlerin varsayılan değerlerine bakmak istiyorum.

ROS_MASTER_URI : roscore çalıştırılan makinanin ip adresini barindirmali. Ros platformunda birden fazla düğüm olabilir ama tek bir master vardir. Bizim örneğimizde master ve düğümlerin tek bir makinada olduğuna dikkat edelim.

echo ROS_MASTER_URI
komut cevabı olarak  herhangi bir değer göremedim. Bu makinada yani  192.168.1.7 nolu makinada ros master modülünün çalışmasını istediğimden dolayı aşağıdaki gibi komutu çalıştırıyorum.

echo export ROS_MASTER_URI=http://192.168.1.7:11311
yukarıdaki işlemi terminali açıp roscore çalıştırmadan önce her seferinde yapmanız gerekir. Terminal her açıldığında bu bilgileri kendisi alsın istiyorsanız bunu bash kabuğuna yazmalısınız.

echo export ROS_MASTER_URI=http://192.168.1.7:11311 >> ~/.bashrc

ROS_IP : Bulunduğunuz makinanın ip adresidir. Düğümleriniz bu bilgiyi kullanarak kendilerini master 'a kaydederler.

echo ROS_IP
komut cevabı olarak  herhangi bir değer göremedim. Bu makinada yani 192.168.1.7 de olduğum için komutu aşağıdaki gibi yazarak çalıştırıyorum.

echo export ROS_IP=192.168.1.7 >> ~/.bashrc

Bu aşamadan sonra roscore komutuyla ROS master modulunu tekrar çalıştırıp yeni master URI bilgisini gözlemleyiniz.

Aşağıdaki komutla .bashrc dosyası içinde en altta export işlemlerimiz ve source işlemlerimizin nasıl dosyaya eklendiğini görebilir ve IP, URI  değişikliklerini artık buradan da yapabilirsiniz.

gedit ~/.bashrc

Eğer sanal makinada ubuntu kurmuşşsaniz sanal makinanizda network bağlantı yöntemini bridge olarak düzenlemeniz gerekir.  Ayrıca güvenlik duvarı kullanıyorsanız (firewall) ilgili portlara erişim izni vermeniz gerekmektedir.

Böylelikle ROS nedir ve kurulumu nasıl yapılır sorularına cevap vermiş olduk. Bir sonraki yazımızda temel ros komutlarını kullanarak iki makinalı bir sistemde matlab üzerinden ROS 'a erişmek ve haberleşmeyi göstermek adına bir örnek yapacağız.

1 yorum :