Modelovanie pomocou URDF

URDF (Unified Robot Description Format) je XML formát určený na opis modelu robota. Štruktúra súboru URDF je zobrazená na obr. 28.

<robot> – základná značka, ktorej parameter je názov modelu.

<link> – definuje diel alebo súčiastku, pri ktorej sa zadáva vzhľad, materiál a umiestnenie vzhľadom na nadradený dielec. Vzhľad sa definuje podľa základných geometrických prvkov (napr. kocka, valec, guľa) alebo pridaním už vytvorenej súčiastky pomocou značiek <mesh>, napr. <mesh filename=”package://rrbot_description/meshes/hokuyo.dae”/>. Materiál možno voliť výberom farby z RGB palety. Umiestnenie dielca je definované značkou <origin>. Umiestnenie dielu vzhľadom na nejaký iný diel treba vyriešiť pomocou kĺbu, inak sa diel bude umiestňovať vzhľadom na začiatočnú súradnicu.

<joint> – vytvorí kĺb medzi dvoma dielcami, nadradeným (parent) a podradeným (child). Parametrom tejto značky je okrem názvu kĺbu aj typ pohybu:

  • fixed – pevný kĺb, ktorý nemá umožnený pohyb. Používa sa na prepojenie dvoch dielcov.
  • continuous – kĺb sa dokáže otáčať ľubovoľne, nemá žiadne obmedzenie, napr. kolesá podvozku alebo tzv. driekový (waist) kĺb ramena.
  • revolute – otáčavý pohyb, ktorý má limity v uhloch otočenia a ktorý sa využíva predovšetkým na robotických ramenách. Pri použití treba definovať značku <limit>, ktorej parametre sú sila, rýchlosť, minimálny a maximálny uhol. Jednotky sú v radiánoch.
  • prismatic – prizmatický (posuvný) pohyb, ktorý umožňuje vysunutie ramena alebo inej súčiastky. Takisto treba definovať značku <limit>, ale tentoraz s jednotkami v metroch.

Pri kĺbe treba ešte určiť, po ktorých osiach sa bude otáčať – značka <axes>. Na jednoduchú vizualizáciu vytvoreného modelu existuje balík urdf_tutorial. Za predpokladu, že model je uložený v balíku my_package, možno vizualizáciu spustiť príkazom: roslaunch urdf_tutorial display.launch model:=’$(find my_package)/urdf/robot.urdf’ gui:=True [1, 2].

Takto definovaný model však nestačí na simuláciu, ktorá vyžaduje aj fyzikálne vlastnosti. Preto do každého dielu treba pridať:

1. Kolíziu – priestor, do ktorého sa nemôže dostať žiadna časť robota:

<collision>
<geometry>
<cylinder length=”0.3” radius=”0.01”/>
</geometry>
</collision>

2. Zotrvačnosť – treba zadať hmotnosť dielca v kg a jeho moment zotrvačnosti ako tenzor.

<inertial>
<mass value=”1”/>
<inertia ixx=”0.4” ixy=”0.0” ixz=”0.0” iyy=”0.4” iyz=”0.0” izz=”0.2”/>
</inertial>

Xacro

Postupným pridávaním ďalších dielcov, súčiastok alebo iných zariadení sa výrazne komplikuje zdrojový kód, pričom sa zväčšuje, a tak začína byť menej prehľadný. Tieto problémy by mal vyriešiť balík xacro. Súbor. xacro sa takisto píše v XML, dokonca má podobnú štruktúru ako URDF s hlavným príznakom <robot>, ktorý vyzerá napr. takto: <robot xmlns:xacro=”http://www.ros.org/wiki/xacro” name=”firefighter”>.

Hlavné výhody:

1. Definovanie konštanty <xacro:property name=”polomer” value=”.2” /> a jej následné vloženie <cylinder radius=”${polomer}” length=”.8889”/>.

2. Použitie matematiky <cylinder radius=”${2*polomer}” length=”${8/9}” />.

3. Vytváranie makier:

<xacro:macro name=”zotrvacnost” params=”hmotnost”>
<inertial>
<mass value=”${hmotnost}” />
<inertia ixx=”1.0” ixy=”0.0” ixz=”0.0” iyy=”1.0” iyz=”0.0” izz=”1.0” />
</inertial>
</xacro:macro>

A ich vkladanie do kódu <xacro:zotrvacnost hmotnost=”10”/>.

4. Vkladanie zdrojových kódov z iných súborov <xacro:include filename=”$(find my_package)/urdf/material.xacro” />.

Na to, aby sa xacro dal použiť v RVIZ-e alebo v Gazebe, treba ho prekonvertovať do súboru. urdf, a to príkazom rosrun xacro xacro model.xacro > model.urdf0. Aj keď dnes už veľa programov dokáže pracovať priamo so súborom. xacro, pre prehľadnosť práce sa odporúča konverzia do URDF [3].

Prostredie RVIZ

V predchádzajúcich častiach sa už veľakrát poukázalo na prácu s týmto prostredím, no vždy sa spomenulo len okrajovo. Teraz opíšeme väčšinu výhod, ktoré toto prostredie ponúka.

Rviz predstavuje jeden z najčastejšie používaných 3D vizualizačných prostredí v ROS-e. Je postavený na grafickej knižnici OPEN-GL (Open Graphics Library) a hlavný „grafický engine“ predstavuje OGRE (Object-Oriented Graphics Rendering Engine). Keďže toto grafické prostredie je jedným z prvých vytvorených v ROS-e, má aj najväčšiu podporu používateľov a využitie. Preto disponuje obrovským množstvom zásuvných modulov a rozšírení, ktoré veľmi zefektívňujú prácu s týmto prostredím.

Aby sme lepšie vysvetlili prácu s prostredím Rviz, uvedieme model robota, s ktorým sa reálne pracuje v Národnom centre robotiky, a lepšie priblížime jednotlivé časti tohto prostredia. Na obr. 30 vidieť model robota MRVK-01 s ramenom KV-01, ktorý bol zadefinovaný pomocou URDF [4].

Model bol zobrazený pomocou už spomenutého príkazu „roslaunch urdf_tutorial display.launch” s parametrom spusteného gui, ktoré možno vidieť po pravej strane obr. 30. Okrem tohto typu spúšťania a zobrazenia modelu možno vytvoriť aj vlastný launch súbor, kde sa presne zadefinuje, aké zásuvné a zobrazovacie moduly budú spustené. Zároveň možno nastaviť cestu k používaným súborom.

<launch>
<arg name=”model” default=”$(find názov_balíku)/urdf/názov.xacro”/>
<arg name=”gui” default=”true” />
<arg name=”rvizconfig” default=”$(find urdf_tutorial)/rviz/urdf.rviz” />
<param name=”robot_description” command=”$(find xacro)/xacro.py $(arg model)” />
<param name=”use_gui” value=”$(arg gui)”/>
<node name=”joint_state_publisher” pkg=”joint_state_publisher” type=”joint_state_publisher” />
<node name=”robot_state_publisher” pkg=”robot_state_publisher” type=”state_publisher” />
<node name=”rviz” pkg=”rviz” type=”rviz” args=”-d $(arg rvizconfig)” required=”true” />
</launch>

Tento spúšťací súbor dokáže priamo nájsť používateľský balík a ak je použitý xacro, vytvorí z neho URDF a následne spustí Rviz. Simulácia sa nespustí v základných nastaveniach, ale všetky informácie o moduloch, ktoré má pustiť, získa zo súboru urdf.rviz. Tento súbor má pevne zadefinovanú štruktúru. Avšak v prípade, že by bolo potrebné použiť vlastné nastavenia, možno ho bez problémov editovať alebo si vytvoriť nový a zadefinovať k nemu cestu. Pochopenie obsahu konfigurácie nie je vôbec náročné.

Po spustení sa zobrazí okno Rviz-u s modelom a nastaveniami, ktoré boli definované. Ak bude potrebné používať ďalšie moduly, dajú sa pridať tlačidlom add, ktoré vidno na pravej strane obr. 30. Ešte predtým musia byť jednotlivé moduly správne nastavené. Viac o tomto prostredí možno nájsť na stránke http://wiki.ros.org/rviz/Tutorials , ktorá obsahuje viacero návodov a ukážok, aké možnosti toto prostredie ponúka.

Prostredie Gazebo

Mnoho výskumníkov si však nevystačí s „s jednoduchou“ simuláciou v Rviz-e a chce, aby sa ich model robota podobal a správal reálnejšie. Z tohto dôvodu ROS disponuje aj prostredím Gazebo, ktoré pracuje s rovnakými vizualizačnými knižnicami. Avšak okrem bežnej vizualizácie ponúka aj simuláciu riadenia robota a pri skutočne dobre zadefinovanom súbore URDF dokonca aj bezchybnú simuláciu jeho fyzikálnych vlastností. Gazebo disponuje mnohými verziami a pre ROS-Indigo sa konkrétne odporúča Gazebo 2.x série. Najnovšia verzia je Gazebo 7, no pri používaní ROS Indiga alebo Jade môže byť práca s ňou problémová, preto sa odporúča sťahovať maximálne po Gazebo 6.x.

Na obr. 31 vidieť model robota, ktorý bol úspešné vložený do Gazeba. Ako vidno na obrázku, robot je prevrátený, a to z toho dôvodu, že pri testovaní pohybu ramena sa použila veľká rýchlosť a jeho dynamika a neúmerné vysunutie spôsobili prevrátenie robota. Keďže žiaden výskumník nechce, aby reálne došlo k takejto situácii, Gazebo predstavuje vynikajúci nástroj na testovanie každej činnosti, ktorú má robot vykonávať.

Pri definovaní modelu robota boli využité súbory URDF, vytvorené rovnakým spôsobom, aký bol už opísaný. Gazebo vyžaduje skutočne dobre zadefinovaný model a na rozdiel od Rviz-u treba mať pri simulácii zadefinovaný parameter <inertial>, ktorý definuje fyzikálne vlastnosti zotrvačnosti modelu. Všetky parametre, ktoré sú zadané do URDF, sú aj reálne prebraté Gazebom a jeho fyzika s nimi pracuje. Keď sa teda napríklad zadefinujú nedostatočná sila motorov a slabé prevodovky, tak sa rameno ani nepohne, prípadne nebude schopné držať požadovanú polohu. Viac o tomto prostredí možno nájsť na http://gazebosim.org/tutorials?tut=ros_urdf.
Okrem bežného simulovania fyziky môže byť Gazebo použité aj na simulovanie kamier alebo veľkého množstva senzorov, pričom dokáže priamo simulovať výstupy z týchto zariadení a kontrolovať ich správanie. Na obr. 32 vidieť simuláciu kamery pripevnenej na fiktívnom ramene.
Pre ešte lepšie pochopenie spúšťania Gazeba a práce s ním uvedieme ukážku realizácie a práce s laserovým diaľkomerom Hokuyo.

Hokuyo v simulácii

Na simuláciu laserového diaľkomera v Gazebe treba najskôr v URDF vytvoriť jeho značku <link> a značku<gazebo>. Značka <link> je jednoduchá, ale značka <gazebo> obsahuje pomerne veľa ďalších nastavení diaľkomera. Tieto dva elementy vidieť na obr. 33.

K dispozícii je viacero zásuvných modulov, ktoré simulujú laserový diaľkomer. Úspešne sa podarilo použiť ray plugin libgazebo_ros_laser.so. Korektne vytvorený model potom možno spustiť. Najskôr však treba spustiť Gazebo a vytvoriť v ňom model sveta. V balíčku Gazebo ROS je niekoľko spúšťacích súborov, v ktorých sú už vytvorené modely sveta. Možno využiť empty_world.launch alebo si možno vytvoriť svoj vlastný model sveta a spustiť ho. Na spustenie robota v Gazebe obsahuje balíček gazebo_ros uzol spawn_model a robot sa spúšťa takto: rosrun gazebo_ros spawn_model -file cesta_k_URDF/vase_urdf.urdf -urdf -model meno_modelu.
V Gazebe možno pridávať diaľkomeru do meracieho priestoru prekážky. Odmerané údaje o vzdialenosti sa tiež posielajú do témy, takže v Rviz-e možno údaje z diaľkomera pozorovať. Na to však treba ešte publikovať transformáciu skenera.

Užitočné tipy – rosbag

Rosbag je balíček, ktorý slúži na nahrávanie a prehrávanie súborov formátu bag. Bag je formát súboru, ktorý využíva ROS na uchovávanie správ poslaných cez témy. Rosbag ponúka viacero príkazov, ktoré možno využiť. Najzaujímavejšími sú príkazy record a play, pomocou ktorých možno nahrať a následne spätne prehrať komunikáciu, ktorá prebehla na téme. Peknou ukážkou môže byť nahratie videa do súboru bag. Na publikovanie videa je v ROS-e viacero balíčkov, tu bude použitý balíček usb_cam (sudo apt-get install ros-indigo-usb-cam). Pri spustení uzla treba špecifikovať kameru. Základným nastavením parametra video_device je /dev/video0, čo sú najčastejšie webové kamery notebookov. Ak sa používa práve toto zariadenie, netreba meniť žiaden parameter. Ak používateľ nevie, ako sa volá jeho kamera, možno to zistiť príkazom ls /dev | grep video. Ak teda používateľ nepoužíva zariadenie /dev/video0, treba exportovať parameter na parametrový server alebo spustiť uzol s argumentom (rosrun usb_cam usb_cam_node _video_device:=cesta_k_vašej_kamere). Obraz si možno pozrieť pomocou rqt_image_view a v ľavom hornom rohu vybrať /usb_cam/image_raw. Ak všetko beží, ako má, možno skúsiť nahrať video:

cd ~/catkin_ws
mkdir bag_files
cd bag_files
rosbag record /-a.

Parameter -a znamená nahrávanie všetkých tém. Dôležitým upozornením je, že netreba nechávať nahrávanie bežať dlho, nahráva sa totiž aj topic /usb_cam/image_raw, ktorý prenáša veľké množstvo údajov, a preto bude výsledný súbor bag zaberať veľa miesta na disku. Program možno prerušiť pomocou CTRL+C. Po ukončení uzla usb_cam možno prehrať súbor bag pomocou rospab play názov_bag_suboru. Nahraté správy sa teraz posielajú do témy, z ktorej boli nahraté, a obraz možno sledovať v rqt_image_view. To možno spraviť s akoukoľvek témou a nahrané dáta použiť neskôr na simuláciu alebo odladenie.

Užitočné tipy – ROS na Androide

V Google Play je dostupných niekoľko aplikácií, ktoré dokážu komunikovať s ROSmastrom a môžu tak slúžiť na vizualizáciu a riadenie. Jednou z nich je aplikácia Make a Map, ktorá obsahuje joystick a dokáže vizualizovať mapu vytvorenú algoritmom SLAM, odometriu a obraz z kamery. Z aplikácie sa možno pripojiť na ROSmastra iba ak v termináli, v ktorom bol pustený master a nebola exportovaná premenná ROS_IP. V každom ďalšom termináli, v ktorom bežia uzly, ju už treba exportovať na zabezpečenie korektnej komunikácie. Používatelia si môžu skúsiť preniesť obraz z kamery počítača do mobilného zariadenia (rosrun usb_cam usb_cam_node /usb_cam/image_raw/compressed:=/compressed_image). Argument je iba premenovaný z témy /usb_cam/image_raw/compressed na tému /compressed_image, ktorú používa android.

Záver

V tomto článku sme na jednoduchej ukážke demonštrovali základné princípy modelovania robota vo formáte URDF. Bližšie sme opísali prostredie RVIZ a Gazebo s ukážkami robota MRVK s ramenom KV-01. Koniec článku bol venovaný opäť užitočným radám, a to ako využiť ROSbag a ako funguje ROS na androide. Tento článok je ukončením série Začíname s ROS-om, v ktorej boli opísané základy ROS-u. V budúcnosti budú v ATP Journale publikované ďalšie články o ROS-e, zamerané na pokročilejšie aplikácie, ako sú Moveit alebo SLAM, ktoré budú otestované na už spomenutom robote MRVK a ramene KV-01.

Literatúra

[1] Autor neuvedený: Building a Visual Robot Model with URDF. [online]. Citované 4. 3. 2016. Dostupné na: http://wiki.ros.org/urdf/Tutorials/Building%20a%20Visual%20Robot%20Model%20with%20URDF%20from%20Scratch
[2] Autor neuvedený: Building a Movable Robot Model with URDF. [online]. Citované 4. 3. 2015. Dostupné na: http://www.ros.org/news/2015/05/ros-jade-turtle-release.html
[3] Martinez, A. – Fernández, E.: Learning ROS for Robotics Programming. 1. vyd. Birmingham: PucktPublishingLtd. 2013. 303 s. ISBN978-1-78216-144-8.
[4] Autor neuvedený: rviz/UserGuide. [online]. Citované 6. 3. 2016. Dostupné na: http://wiki.ros.org/rviz/UserGuide 
[5] Autor neuvedený: ros_gzplugins. [online]. Citované 7. 3. 2016. Dostupné na: http://gazebosim.org/tutorials?tut=ros_gzplugins
[6] Autor neuvedený: Bags. [online]. Citované 7. 3. 2016. Dostupné na: http://wiki.ros.org/Bags
[7] Autor neuvedený: rosbag/Commandline. [online]. Citované 11. 3. 2016. Dostupné na: http://wiki.ros.org/rosbag/Commandline
[8] Autor neuvedený: usb_cam. [online]. Citované 11. 3. 2016. Dostupné na: http://wiki.ros.org/usb_cam

Miroslav Kohút
Matej Bartošovič
Michal Dobiš
doc. Ing. František Duchoň, PhD.
Ing. Andrej Babinec, PhD.

STU Bratislava
Fakulta elektrotechniky a informatiku
Ústav robotiky a kybernetiky
Ilkovičova 3, 812 19 Bratislava
frantisek.duchon@stuba.sk 
www.urk.fei.stuba.sk