Table of Contents

3D Simulatsioon

Simulatsioon on reaalmaailma protsessi või süsteemi jäljendamine ajas. Eelnevalt tegelesime lihtsa kahedimensioonilise simulatsiooniga. Simuleerida on võimalik ka väga keerukaid kolmedimensioonilisi süsteeme. Simuleerimine on ROSi ja roboti arendamise protsessi väga tähtis osa, kuna see võimaldab robotit programmeerida ja sellega eksperimenteerida füüsilist robotit omamata. Roboti simulatsioon on iga roboti ehitaja jaoks oluline vahend. Hästi välja töötatud simulaator võimaldab kiiresti testida algoritme, kohandada roboteid ja isegi treenida tehisintellekte. Meie valisime simulaatoriks Gazebo. Gazebo pakub võimalust simuleerida täpselt ja efektiivselt mitut robotit keerulistes sise- ja väliskeskkondades. Simulaatoris on paljude võimalustega füüsikamootor, kõrgkvaliteerne graafika ja hea ühilduvus ROSiga. Võimalik on simuleerida erinevaid mootoreid ja liigendeid ning erinevaid andureid, näiteks kaamera ja lidar. Gazebo simulaatorit on võimalik jookutada käsurealt (headless) või koos mugava graafilise kasutajaliidesega

Paigaldamine

Gazebo paigaldamiseks on loodud automaatne paigaldusskript:

 curl -sSL http://get.gazebosim.org | sh

URDF

Unifitseeritud roboti kirjelduse formaat (Unified Robot Description Format) (URDF) on XML formaadis roboti mudel. Mudel sisaldab eelkõige kordinaatide raame (/tf). Nende abil saame teada mis sõltuvuses on roboti erinevad osad. Näiteks saame teada kus kohas robotil asub kaamera. URDF faile kasutatab ka simulaator. Selle järgi teab simulaator, mis kujuga on roboti osad ja kus asuvad roboti liigendid. URDF failide tegemine võib alguses tunduda keeruline, kuid õnneks on paljude populaarsete robotite mudelid internetis vabalt saadaval.

Selleks, et roboti mudelit nii simulatsioonis, kui ka Rvizis muuta tuleb muuta roboti URDF faili. See on vajalik, kui tahame muuta roboti konfiguratsiooni, näiteks lisada robotile andureid.

Näide URDF failist:

 <?xml version="1.0"?>
 <robot name="myRobot">
   
   <link name="base_link">
     <visual>
       <geometry>
         <cylinder length="0.6" radius="0.2"/>
       </geometry>
     </visual>
   </link>
 
   <link name="right_leg">
     <visual>
       <geometry>
         <box size="0.6 0.1 0.2"/>
       </geometry>
     </visual>
   </link>
 
   <joint name="base_to_right_leg" type="fixed">
     <parent link="base_link"/>
     <child link="right_leg"/>
   </joint>
 
 </robot>