Linux súkromne i pracovne v2.0 (20. časť): ROS background

0

V tejto časti seriálu charakterizujeme prostredie, ktoré sme získali inštaláciou balíka ROS. Opíšeme prvky tvoriace principiálne pozadie fungovania aplikácií ROS, pričom sa zameriame na najpodstatnejšie detaily súvisiace s ich prípravou, kompiláciou a spúšťaním.

Princípy ROS

Základný princíp vývoja aplikácií ROS je zdieľanie získaných výsledkov v rámci celej komunity vývojárov (Collaborative Development). Kód ROS možno použiť v rôznych frameworkoch (vrátane testovacieho) a bez problémov sa uplatní aj v rozsiahlejších robotických systémoch. Na programovanie aplikácií ROS možno použiť nielen Python, C++, Octave, Lisp, ale aj iné programovacie jazyky. Zdieľané knižnice sú založené na nezávislom kóde (tzv. agnostic libraries) a s ROS komunikujú cestou jednoduchých rozhraní. Runtime modulárneho ROS je tvorený sieťou peer-to-peer samostatných procesov, ktoré medzi sebou komunikujú prostredníctvom infraštruktúry ROS. Kód aplikácií je štruktúrovaný do balíčkov (packages), ktoré sú zdieľané cez repozitáre.

Obr. 1 Komunikácia ROS P2P

 

Koncepty ROS

Pri vývoji aplikácií využívajúcich nástroje ROS pracujú programátori s tromi úrovňami (konceptmi), ktoré pre nich predstavujú formálny rámec prípravy, kompilácie a spúšťania aplikácií:

1. Úroveň súborového systému (FileSystem Level), v rámci ktorej rozoznávame:

Balíčky (packages)

 

 

 

Metabalíčky

Sú základnou organizačnou jednotkou na štruktúrovanie súborov, patria medzi ne: runtime uzly (nodes), závislé knižnice (libraries), údajové súbory (data), konfiguračné súbory (config), spúšťacie súbory (launch)…

 

Reprezentujú skupinu prepojených balíčkov

Manifesty (package.xml)

Poskytujú metaúdaje o balíčkoch = názov, verzia, opis, licencia, závislosti…

Konfigurácie

(CMakeLists.txt)

Slúžia na definovanie pravidiel zostavenia (build) cieľov

Typy správ (msg/typ_správy.msg)

Definujú údajové štruktúry odosielaných správ

Typy služieb (srv/typ_služby.srv)

Definujú formát žiadostí a reakcií

2. Úroveň behu aplikácií (Runtime Level / Computation Graph) tvorená sieťou peer-to-peer procesov, ktoré spoločne spracúvajú údaje:

Uzly (nodes)

 

 

 

Master

Procesy realizujúce výpočty, pričom medzi sebou komunikujú prostredníctvom správ alebo služieb, na vytváranie uzlov sa využíva najmä ROS API rospy (Python) a roscpp (C++)

 

Základný uzol – roscore, ktorý registruje uzly, publisherov/subscriberov, komunikačné kanály a zabezpečuje vyhľadávanie/identifikáciu v grafe (tzv. name service)

Správy (messages)

Zabezpečujú komunikáciu medzi uzlami, ide o typové štruktúry obsahujúce vymieňané údaje konkrétnych typov (napr. boolean, int, float, string…), kód správ je písaný v jazyku IDL (Interface Definition Language)

Témy (topics)

Identifikujú obsah publikovaných/prijímaných správ, ktoré predstavujú hlavný komunikačný kanál medzi uzlami, proces, ktorý odosiela správy konkrétnej témy, sa registruje ako publisher, naopak, proces, ktorý prijíma správy konkrétnej témy, sa registruje ako subscriber, na odosielanie, resp. príjem správ pomenovanej témy sa môže registrovať viacero uzlov

Služby (services)

Poskytujú interakciu medzi uzlami pomocou dvojice správ typu požiadavka – odpoveď (request – response), uzol, ktorý správu odosiela, je v tomto prípade serverom a ten, ktorý správu prijíma, je klientom, pomenovaná služba môže byť poskytovaná jedným konkrétnym uzlom

Bagy

Sú určené na ukladanie a prehrávanie obsahu správ získaných počas používania fyzického stroja (robota), v prípade, ak fyzický robot nie je k dispozícii, používajú sa najmä na testovanie algoritmov

3. Úroveň ROS komunity (Community Level) – práca komunity podporovaná organizáciou OSRF (Open Source Robotics Foundation), ide o organizáciu, ktorá podporuje vývoj, distribúciu a osvojovanie si open source softvéru pre robotiku (osrfoundation.org):

Distribúcie

Verzie softvéru ROS so stanovenou funkcionalitou, stabilitou, kompatibilitou a úrovňou podpory

Repozitáre

Zdroje balíčkov ROS (ROS GitHub Organizations)

Wiki

Dokumentácia k jednotlivým balíčkom

FAQ (tzv. answers)

Fórum otázok a odpovedí podobný StackOverflow

Blogy

Zdroj doplnkových informácií a noviniek

 

Catkin (wiki.ros.org/catkin)

Catkin je nízkoúrovňový (low-level) zostavovací systém balíka ROS, využívajúci makrá CMake a skripty Python. Repozitáre distribúcie Oneiric obsahujú dva možné balíčky určené na inštaláciu systému Catkin, a to ros-fuerte-catkin a ros-groovy-catkin. Výberom verzie fuerte sa v našom prípade nenainštaloval skript catkin_init_workspace. Jeho úspešná inštalácia prebehla až v prípade použitia verzie groovy – sudo apt-get install ros-groovy-catkin.

Obr. 2 Pracovný priestor určený na vývoj ROS aplikácií

 

Postup vytvorenia pracovného priestoru (workspace), v rámci ktorého vytvárame aplikácie ROS, je nasledujúci:

1. vytvoríme príslušné zložky a inicializujeme pracovný priestor:

mkdir -p ~/Catkin_workspace/src

cd ~/Catkin_workspace/src

catkin_init_workspace
2. nový balíček vytvoríme v zložke ~/Catkin_workspace/src pomocou príkazu:

catkin_create_pkg názov_balíčka dep1...depN

- dep1...depN je zoznam tých balíčkov ROS, ktoré nový balíček potrebuje na svoju vlastnú funkčnosť = závislosti (dependencies), závislosti možno neskôr skontrolovať pomocou príkazu:

rospack depends1 názov_balíčka

- v procese tvorby balíčka sa vytvorí zložka ~/Catkin_workspace/src/názov_balíčka a v ňom manifest package.xml obsahujúci informácie o balíčku vrátane závislostí

3. vykonáme prvotné zostavenie balíčka:

cd ~/Catkin_workspace

catkin_make

4. cestu k novo vytvorenému balíčku pridáme do ROS_PACKAGE_PATH, pričom máme viacero možností:

a) vždy pri spustení nového terminálu zadaním:

source ~/Catkin_workspace/devel/setup.bash

b) pridaním výrazu source ~/Catkin_workspace/devel/setup.bash do .bashrc

c) zadaním príkazu:

echo „source ~/Catkin_workspace/devel/setup.bash” >> ~/.bashrc

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár