Uživatelské nástroje

Nástroje pro tento web

Překlady této stránky?:

cs:ros

Toto je starší verze dokumentu!


ROS ve stavebnici MLAB

ROS (The Robot Operating System) je open-source balík knihoven a nástrojů, které pomáhají při stavbě a vývoji robotických systémů. Software obsahuje ovladače určitých zařízení, nástroje pro snadnou vizualizaci dat, posílání zpráv a další užitečné věci. Software používající ROS může být v jazycích Python, C++, Lisp a experimentálně v Javě nebo v jazyce Lua.

Struktura ROSu

Software používající ROS je rozčleněn do tzv. nodů.

Nod (node)

Nod je základní prvek celého ROS systému, je to jeden program, který je připojen k master-nodu. Každý node může komunikovat navzájem s ostatními pomocí připraveného messaging systému. Zprávy můžou existovat dvojího typu.

Zprávy (msg)

Zprávy můžou obsahovat typy dat, které jsou nadefinované v souboru (.msg). Zpráva může obsahovat jednu nebo více hodnot.

.msg soubor může vypadat například takto

string name
float32 hodnota

Takováto zpráva pak předává dvě hodnoty. První jako řetězec znaků a druhou jako číslo s desetinou tečkou. Každá zpráva má své téma (topic) nastavené při odeslání z nodu - (publisher). Zprávu přijme nod - (subscriber), který má pro dané téma nastavený příjem.

Servis (srv)

Servise je typ zprávy, který je definován obdobně jako zpráva (msg) pomocí souboru .srv. Navíc má tu vlastnost, že zpráva míří k určitému nodu, který na zprávu odpoví způsobem předepsaným v souboru .srv. Servis se není vhodný pro dlouhotrvající funkce, protože klient čeká na odpověď. Jen například pro čtení senzorů, získání dat atd…

příklad .srv souboru

string name
float32 hodnota
---
bool stav
Action (act)

Akce jsou typy zpráv určené pro dlouhotrvající akce. Je to obdoba servisu popsaného výše. Při jejich spuštění se nečeká na dokončení akce jako je tomu u servisů a spouštěcí klient muze mezitím provádět jinou činnost. Dlouhotrvající proces může během svého průběhu posílat informace o sobě (například procento dokončení, rychlost průběhu a další…) a při dokončení pošle další zprávu.

Toto je vhodné například, když se robot má někam pohybovat a je třeba mezitím kontrolovat ostatní součásti robota jako senzory atd…

Akce se definuje obdobně jako předchozí dva typy zpráv souborem .action:

string name         # parametry předané při startu akce
float32 hodnota
---
int32 hodnota       # informace o stavu průběhu
---
bool stav           # informace o dokončení celé akce
int32 hodnota
Master node

Master node je nod, který se spouští příkazem roscore. Slouží k snazšímu nalezení nodů navzájem, nod tedy musí být vždy spuštěn. Do tohoto nodu lze ukládat konfigurační data, které si může kterýkoliv nod získat podle jména.

Oficiální dokumentace, příklady a tutoriály jsou k dispozici zde: wiki.ros.org.

Sdílení dat po síťi

Sdílení dat mezi nody (zprávy, servisy, master-node, …) po síťi není pro ROS žádný problém a je to vyřešeno velmi jednoduše a funkčně.

Jeden počítač, na kterém běží master-node roscore je ten, na který se ostatní počítači připojují. Na vzdáleném počítači (bez master-node) spustím tento příkaz:

export ROS_MASTER_URI='http://telescopeC.local:11311'

Kde nastavím jméno počítače (nebo jeho IP adresu) (v tomto případě telescopeC.local) a port master-nodu. Ten zjistíme z jeho výpisu při spuštění, jako výchozí je port 11311.

Podrobnější popis Podrobnější popis 2

Instalace

Přidání repozitářů do systému (funguje pouze pro ubuntu Trusty (14.04), Utopic (14.10) a Vivid (15.04))

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Instalace klíčů:

 sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

Následně zaktualizovat seznam repozitářů:

sudo apt-get update

Nyní je možné nainstalovat i jen části ROSu podle účelu použití. Na pracovní desktop s monitorem se hodí celá verze, která obsahuje nástroje i snadný debugging nebo vizualizaci dat. Na Odroid bych doporučil buď desktop nebo základní verzi.

  • Celá verze: ROS, rqt, rviz, knihovna pro roboty, 2D/3D simulace, navigace and 2D/3D precepce
sudo apt-get install ros-jade-desktop-full
  • Desktopová verze: ROS, rqt, rviz, a knihovny pro roboty
sudo apt-get install ros-jade-desktop
  • Základní verze: ROS a základní komunikační balíčky. Bez grafických nástrojů.
sudo apt-get install ros-jade-ros-base

Jednotlivé balíčky lze kdykoliv doinstalovat.

Po nainstalování je potřeba inicializovat a aktualizovat program rosdep

sudo rosdep init
rosdep update

Ještě je potřeba nastavit prostředí terminálu. To lze udělat na stálo takto:

echo "source /opt/ros/jade/setup.bash" >> ~/.bashrc
source ~/.bashrc

nebo pro aktuální session terminálu spuštěním . /devel/setup.bash v pracovním repozitáři

Zde napsaný postup (02_2016) odpovídá verzi Jade 9. Vždy aktuální postup najdete v oficiální příručce wiki.ros.org, ze které je zde přejatý. Instalaci jsem testoval na PC s Ubuntu 14.04.3 LTS a na Odroidu-C1 se stejným operačním systémem. V případě problémů se obraťte opět na oficiální příručku ROS

Ubuntu 16.04 LTS

Stejný postup funguje i s Ubuntu 16.04 LTS a verzí ROS Kinetic Kame. Více informací o instalaci naleznete na stránkách ROS Kinetic.

Testované sestavy

  • Desktop Ubuntu 16.04.1 LTS - ROS Kinematic Kame - OK
  • Desktop Ubuntu 14.04 LTS - ROS Kinematic Kame - OK
  • Desktop Ubuntu 14.04 LTS - ROS Jade - OK
  • Odroid C1 Ubuntu 14.04 - ROS Jade - OK
  • Odroid C1 Ubuntu 14.04 - ROS Kinetic Kame - OK
  • Odroid C2 Debian Jessie - ROS Kinetic Kame - OK
  • Odroid C2 Ubuntu 16.04 LTS - ROS Kinetic Kame - OK 03/2017

samotná instalace pak probíhá příkazem:

sudo apt-get install ros-kinetic-desktop

Sensor-UI s ROS

ROS_sensor-UI je software pro vizualizaci dat ze senzorů připojených pomocí knihovny pymlabu.

Instalace

Pro rozfungování ROS_sensor-UI je potřeba mít nainstalovaný ROS v základní (nebo vyšší) verzi a pymlab.

Nejdříve stáhneme repozitář a vybereme vývojovou větev s ROS implementací

git clone git@github.com:MLAB-project/sensor-ui.git ROS_sensor-ui
cd ROS_sensor-ui && git checkout ROS_sensor-ui

Nyní si ROS_sensor-UI přeložíme pomocí: Překládají se například soubory popisující zprávy

catkin_make

Nyní můžeme spustit master-node

roscore

Aby rosrun fungoval s naším projektem, musíme ho přidat do proměnných prostředí terminálu pomocí příkazu. Tento krok musíme provést při každém spuštění sezení terminálu, ve kterém budeme chtít pracovat s naším projektem.

cd ROS_sensor-ui/ && . devel/setup.bash

Nyní bude rosrun s naším projektem fungovat z jakékoliv složky.

V dalším terminálu si spustíme ROSpymlabServer.py

rosrun sensor_server ROSpymlabServer.py

nyní jsme si spustili server, který ovládá pymlab zařízení. Server se sám nepřípojí. Čeká na zprávu od klienta, která mu řekne jaké pymlab schéma sítě má použít.

Příklad klienta

Klienta z repozitáře spustíme následovně:

rosrun sensor_server example_client_lts_sht.py

Ke správné funkci tohoto příkladu je potřeba připojených senzorů vlhkoměru SHT25 a teploměru LTS

Nyní by jste v terminálu serveru měli vidět jednotlivé senzory a data z nich. Takový řádek vypadá nějak takto:

sht25 get_hum 43.5987 || sht25 get_temp 24.9653 || lts01 get_temp 50.2070 || 

Výstup ze ROSpymlabServeru

Jako výstup jsou zprávy vlastní struktury, které obsahují informace o senzoru, jménu hodnoty (funkce, kterou se v pymlabu získá) a její hodnotu. Zprávy mají nastavené téma pymlab_data

Struktura zpráv je definována takto:

string name
float32 value

Vizualizace dat

rqt_plot

Jako jeden z užitečných nástrojů balíku ROS je rqt_plot, což je grafický program, který přijímá zpávy s určitým tématem a ty zobrazuje na monitoru. Zobrazení je provedeno pomocí knihovny Matplotlib, QwtPlot nebo PyQtGraph.

Aby bylo možné data zobrazit pomocí rqt_plot je třeba mít data z jednotlivých rozdělena tak, aby každá měla vlastní téma. To zajišťuje příkladový kód example_plotter.py, který spustíme takto.

rosrun sensor_server example_plotter.py

a pak samotný rqt_plot příkazem:

rqt_plot

V otevřeném okně si pak můžete nastavit zobrazovaná data. V použití s příkladovým kódem nás zajímají data s tématem /pymlab/sht25/get_temp, /pymlab/sht25/get_temp a /pymlab/lts01/get_temp

Výstup pak vypadá takto:

rqt_plot je možné spustit na jiném počítači než jsou připojeny senzory a to při zprovoznění sdílení zpráv popsaném výše „Sdílení dat po síťi“

Web a Highcharts

Pro zprovoznění zobrazení ve webovém prohlížeči je potřeba doinstalovat software ros_bridge.

sudo apt-get install ros-jade-rosbridge-suite
source /opt/ros/jade/setup.bash

rosbridge se pak spustí tímto příkazem.

roslaunch rosbridge_server rosbridge_websocket.launch

Pro zobrazení stránky stáhněte soubor real_time_graph.html. V něm je nejdříve potřeba na řádku 76 upravit adresa k zařízení s rosbridge. Je možné zde napsat i IP adresa (pro systém windows).

ros.connect('ws://telescopeC.local:9090');

Tato metoda není vhodná pro dlouhodobé prohlížení dat, protože JS knihovna highcharts špatně hospodaří s daty a při velkém množství dochází k zaplnění paměti a následném zaseknutí/pádu prohlížeče. Proto je dobré buď nastavit menší obnovovací frekvenci ve spouštěcím klientovi ROS_sensor-ui nebo stránku často obnovovat.

Dobrý návod pro začátky s ROSem je oficiální wiki stránka nebo tutoriál ROS 101: Intro to ROS

Aplikace ROSu v MLABu

cs/ros.1486147015.txt.gz · Poslední úprava: 2017/02/03 18:36 (upraveno mimo DokuWiki)