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
cs:ros [2018/07/20 20:26] – [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... 
-==== 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)