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
$ 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_URIkomut 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:11311yukarı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_IPkomut 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.
Hocam Tebrikler ve teşekkürler
YanıtlaSil