#04 Základné princípy ROS

ROS_princip_title

V predchádzajúcom článku sme si vysvetlili čo je to ROS, stručne popísali základy jeho architektúry, rozdelenie na 3 nadväzujúce koncepty a vysvetlili dôležité pojmy, s ktorými sa pri vývoji v ROS určite stretnete. V tomto príspevku sa pozrieme bližšie na princíp fungovania ROS aplikácie. Na jednoduchom príklade sa pokúsime ilustrovať úlohu mastra, komunikáciu medzi jednotlivými procesmi po topicoch ako aj základné volanie servicov. Inšpiráciou pre vznik tohto príspevku bol pôvodný text na stránke jedného z lídrov vo vývoji a výrobe pokročilých robotických platforiem - Clearpath Robotics.

Jadrom každej ROS aplikácie je Master. Tým že Master registruje všetky komponenty aplikácie(obr. nižšie), umožňuje procesom vzájomnú identifikáciu a komunikáciu. Vďaka mastru nie je potrebné zadávať IP adresy cieľového počítača a príšlušného socketu, stačí jednoducho zadať názov topicu ktorý chceme publikovať alebo subscribovať a master sa postará o zvyšnú časť práce.

ROS_princip_01

Príklad: Povedzme že máme mobilného robota s kamerou, riadeného on-board počítačom s ROS. Na strane robota beží driver pre kameru a jednoduchý node, ktorý vykonáva základné spracovane obrazu. Obraz z kamery robota je zároveň bezdrôtovo prenášaný do vzdialeného notebooku. Schéma takéhoto systému by vyzerala nasledovne:

ROS_princip_03

Ako vidieť ide o klasický jednosmerný publish/subscribe spôsob komunikácie. Keď Camera node prijme a spracuje dáta z kamery, okamžite ich publikuje na topic /image_data/Message. Na tento topic sú subscribnuté Image Processing Node cez Wifi aj Image Display Node ktorý beží na vzdialenom notebooku. Nový message na topicu vyvolá v obidvoch nodoch event, ktorý je následne spracovaný v callbacku - v pripade prvého nodu sa vykoná spracovanie obrazu, v prípade druhého sa vykreslí obraz na displej. Samozrejme nad celou aplikáciou udržuje kontrolu ROS Master, ktorý v tomto prípade beží na strane robota.

Mierne odlišným spôsobom komunikácie je request/reply, ktorý je v ROS uplementovaný prostredníctvom servicov. V tomto prípade sa dáta z kamery nestreamujú voľne ako v prípade publish/subscribe metódy ale naopak, jeden node si ich vyžiadava formou requestov od druhého. ROS_princip_04

Rovnakým princípom, čiže kombinovaním nodov, messageov a servicov sa v ROS postupne vyskladávajú celé robotické aplikácie. Tutorialové príklady možno nie sú až tak zaujímavé, každopádne ak už máte virtuálny model svojho robota prepojený s reálnym robotom, spracúvate dáta zo senzorov a všetko to vizualizujete v RVize, tam si už začnete uvedomovať silu tohto frameworku. Na udržanie prehľadu v podobných komplikovanejších aplikáciách sa v ROS používa nástroj rqt_graph. Príklad rqt_grafu jednoduchšej ROS aplikácie s modelom robota a vizualizáciou v simulátore Gazebo:

rqt_graph

SPOLUAUTOR VAŠICH VEDOMOSTÍ JE:

SRS_logo