#03 Definície a pojmy ROS

ROS_03_titleV prvých dvoch článkoch o ROS a ROS-Industrial sme sa zaoberali pôvodom, motiváciou a stručným prehľadom možností, ktoré Robot Operating System v súčasnosti ponúka. V tomto príspevku sa bližšie pozrieme na ROS z pohľadu architektúry, objasníme si 3 základné koncepty systému a vysvetlíme si pojmy a definície s ktorými pri vývoji ROS aplikácie určite stretnete. Taktiež si povieme niečo o možnostiach programovania v ROS a o princípoch na ktorých funguje základný stavebný kameň celého ROS - komunikácia medzi jednotlivými procesmi.

Čo je ROS?

Podľa oficiálnej dokumentácie na ROS Wiki je ROS open-source meta-operating system, ktorý poskytuje štandardné služby (hadrware abstraction, low-level device control, package management) ako bežný operačný systém ale primárne je určený pre potreby robotiky.

Hlavnou motiváciou pri vývoji ROS bolo zjednodušiť "code reusability", čiže zdieľanie a opätovné využívanie už existujúceho kódu v rámci robotickej komunity. V praxi sa to vývojári snažili dosiahnuť predovšetkým dodržiavaním nasledujúcich 5 princípov:

1. Thin - Architektúra ROS bola navrhnutá tak, aby bolo možné kód vyvíjaný pre ROS použiť aj v iných frameworkoch. V súčasnosti je integrovaná podpora pre OpenRAVE, Ocoros a Player.

2. ROS Agnostic libraries - snaha udržať pri vývoji knižníc samotný kód úplne nezávislý od ROS a až následne ho doplniť jednoduchým interfacom pre komunikáciu v rámci ROS infraštruktúry.

3. Language independecne - podpora viacerých programovacích jazykov. V súčasnosti je možné vyvíjať ROS aplikácie v Pythone, C++, Lisp a taktiež existujú experimentálne knižnice v Jave a Lua jazyku.

4. Easy Testing - Podpora pre unit-testing kódu, v ROS je na tento účel integrovaný framework rostest

5. Scaling - Vývoj so zreteľom na možné použitie v rozsiahlych robotických systémoch (viď Darpa Robotics Challenge).

Výsledkom dodržiavania týchto 5 pravidiel je vysoko modulárny systém, v ktorom si užívateľ doslova vyskladá vlastnú aplikáciu ako peer-to-peer sieť samostatných procesov, ktoré medzi sebou komunikujú prostredníctvom ROS infraštruktúry (services, topics). Navyše štandardným usporiadaním kódu do packageov a open source repozitárov je dosiahnuté jednoduché zdieľanie kódu a umožnená priama spolupráca pri jeho vývoji. ROS v súčasnosti beží na systémoch s Linuxom, najčastejšie sa využíva v kombinácii s Ubuntu distribúciou, taktiež na embedded platformách typu Raspberry Pi, BeagleBone ako aj  na MAC OS X systémoch. Logo-ROS

Rozdelenie ROS 

Začínajúci vývojari, pre ktorých je ROS prvým kontaktom s open-source vývojom majú často problém vôbec sa zorientovať v štruktúre ROS. Pomôcť im v tom môže nasledovné rozdelenie systému na 3 na seba nadväzujúce koncepty:

1. ROS FileSystem Level

2. ROS Computation Graph Level

3. ROS Comunity Level