#03 Definície a pojmy ROS
V 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.
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