Uživatelské nástroje

Nástroje pro tento web


cs:ros

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


Předchozí verze
Poslední revize
cs:ros [2018/07/20 20:27] – [ROS Kinetic (10)] roman
Řádek 1: Řádek 1:
 +====== ROS ve stavebnici MLAB ======
 +
 +[[http://www.ros.org/|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 [[https://www.python.org/|Python]], [[https://cs.wikipedia.org/wiki/C%2B%2B|C++]], [[https://cs.wikipedia.org/wiki/Lisp|Lisp]] a experimentálně v Javě nebo v jazyce Lua.
 +
 +<WRAP center round tip 60%>
 +Instalace aktuální verze ROS Kinetic (10) je popsána [[cs:ros#ros_kinetic_10|níže]].
 +</WRAP>
 +
 +
 +===== 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: [[http://wiki.ros.org/| wiki.ros.org]].
 +
 +===== Sdílení dat po síti =====
 +Sdílení dat mezi nody (zprávy, servisy, master-node, ...) po síti 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.
 +
 +[[http://wiki.ros.org/ROS/Tutorials/MultipleMachines|Podrobnější popis]]
 +[[http://answers.ros.org/question/38694/running-ros-across-multiple-machines/?answer=38971#post-id-38971|Podrobnější popis 2]]
 +====== Instalace ======
 +
 +===== ROS jade (9) =====
 +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: <wrap lo>ROS, rqt, rviz, knihovna pro roboty, 2D/3D simulace, navigace and 2D/3D precepce</wrap>
 +
 +  sudo apt-get install ros-jade-desktop-full
 +
 +  * Desktopová verze: <wrap lo>ROS, rqt, rviz, a knihovny pro roboty</wrap>
 +
 +  sudo apt-get install ros-jade-desktop
 +
 +  * Základní verze: <wrap lo>ROS a základní komunikační balíčky. Bez grafických nástrojů.</wrap>
 +
 +  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
 +
 +<WRAP center round info 100%>
 +Zde napsaný postup <wrap lo>(02_2016)</wrap> odpovídá verzi Jade 9. Vždy aktuální postup najdete v oficiální příručce [[http://wiki.ros.org/ROS/Installation|wiki.ros.org]], ze které je zde přejatý. Instalaci jsem testoval na PC s Ubuntu 14.04.3 LTS a na [[cs:odroid-c1|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 [[http://wiki.ros.org/ROS/|ROS]]
 +</WRAP>
 +
 +===== ROS Kinetic (10) =====
 +Postup instalace je převzat z oficiálního postupu dostupného [[http://wiki.ros.org/ROS/Installation|online]]. Popisovaný postup je pro OS Ubuntu (Wily 15.10 a Xenial 16.04)
 +
 +  sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
 +  sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116
 +  sudo apt update
 +
 +    *  Celá verze: <wrap lo>ROS, rqt, rviz, knihovna pro roboty, 2D/3D simulace, navigace and 2D/3D precepce</wrap>
 +
 +  sudo apt install ros-kinetic-desktop-full
 +
 +  * Desktopová verze: <wrap lo>ROS, rqt, rviz, a knihovny pro roboty</wrap>
 +
 +  sudo apt install ros-kinetic-desktop
 +
 +  * Základní verze: <wrap lo>ROS a základní komunikační balíčky. Bez grafických nástrojů.</wrap>
 +
 +  sudo apt install ros-kinetic-ros-base
 +
 +Po instalace je potřeba nastavit závislosti uvnitř ROSu.
 +  sudo rosdep init
 +  rosdep update
 +
 +  export CMAKE_PREFIX_PATH=/opt/ros/kinetic/
 +  
 +Pro snadné spouštění je vhodné nastavit prostředí terminálu nastálo.
 +  echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
 +  source ~/.bashrc
 +
 +Tím je instalace ROSu dokončena...
 +Můžete pokračovat na nastavení systému [[cs:robozor:arom#instalace|AROM]].
 +==== Testované sestavy ====
 +  * Desktop Ubuntu amd64 16.04.1 LTS - ROS Kinematic Kame - OK
 +  * Desktop Ubuntu amd64 14.04 LTS - ROS Kinematic Kame - OK 
 +  * Desktop Ubuntu amd64 14.04 LTS - ROS Jade - OK 
 +  * Odroid C1 Ubuntu 14.04 - ROS Jade - OK
 +  * Odroid C1 Ubuntu 14.04 - ROS Kinetic Kame - OK
 +  * Odroid C1+ Ubuntu 16.04.02 - ROS Kinetic Kame - OK <wrap lo>03/2017</wrap>
 +  * Odroid C2 Debian Jessie - ROS Kinetic Kame - OK
 +  * Odroid C2 Ubuntu 16.04 LTS - ROS Kinetic Kame - OK <wrap lo>03/2017</wrap>
 +
 +
 +====== Sensor-UI s ROS ======
 +[[https://github.com/MLAB-project/sensor-ui/tree/ROS_sensor-ui|ROS_sensor-UI]] je software pro vizualizaci dat ze senzorů připojených pomocí knihovny [[cs:pymlab|pymlabu]]. 
 +
 +==== Instalace ====
 +Pro rozfungování [[https://github.com/MLAB-project/sensor-ui/tree/ROS_sensor-ui|ROS_sensor-UI]] je potřeba mít nainstalovaný ROS v základní (nebo vyšší) verzi a [[cs:pymlab|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í: <wrap lo>Překládají se například soubory popisující zprávy</wrap>
 +  catkin_make
 +
 +Nyní můžeme spustit master-node
 +  roscore
 +
 +<WRAP center round tip 100%>
 +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.
 +</WRAP>
 +
 +  
 +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é [[cs:pymlab|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 [[cs:sht25v|SHT25]] a teploměru [[cs:lts|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:
 +{{ :cs:sw:ros_sensor-ui01.png?600 |}}
 +
 +''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  ''[[http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge|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 [[https://raw.githubusercontent.com/MLAB-project/sensor-ui/ROS_sensor-ui/real_time_graph.html|real_time_graph.html]]. V něm je nejdříve potřeba na [[https://github.com/MLAB-project/sensor-ui/blob/ROS_sensor-ui/real_time_graph.html#L76|řá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');
 +  
 +<WRAP center round important 100%>
 +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.
 +</WRAP>
 +
 +==== Návody ====
 +Dobrý návod pro začátky s ROSem je oficiální wiki stránka nebo tutoriál [[https://www.clearpathrobotics.com/assets/guides/ros/index.html|ROS 101: Intro to ROS]]
 +
 +====== Aplikace ROSu v MLABu ======
 +
 +  * [[cs:robozor:arom|AROM - Autonomous robotic observatory manager]]
 +  * [[cs:designs:windowsblind| Inteligentní ovladač žaluzií.]]
  
cs/ros.txt · Poslední úprava: 2018/07/20 20:27 (upraveno mimo DokuWiki)