Simuladores

Simuladores
¿Que es un simulador?
●
Un simulador pretende reproducir tanto las sensaciones físicas (velocidad,
aceleración, percepción del entorno) como el comportamiento de lo que se
pretende simular
●
Ejemplos:
○
○
○
○
○
Simuladores de vuelo
Simuladores de conducción
Simuladores de redes
Simuladores médicos
etc
Ventajas
●
●
●
●
●
●
●
●
●
●
Desventajas
●
●
●
●
●
Gazebo
Gazebo
●
●
●
●
●
●
Actualmente en desarrollo por la OSRF (Open Source Robotics Fundation)
Plataformas soportadas: Linux, Windows e IOS
Plugins: C++
Integrado con ROS
Licencia: Open source - Apache 2.0
Versión 7.1.0
Arquitectura
Dos procesos:
●
Servidor: Simula la física, renders y genera los datos de los sensores
○
●
gzserver
Cliente: Provee interacción y visualización de la simulación
○
gzclient
Interfaz Gazebo
Vista del mundo
●
●
●
Muestra el mundo y todos los modelos que se encuentren en el
Se pueden agregar, manipular y remover modelos
Se puede cambiar entre los modelos View, Translate y Rotate en la parte
izquierda de la barra de tareas
Agregar un modelo al mundo
Guardando un mundo
nombre: my_world.sdf
Abriendo un mundo
Un mundo guardado puede ser cargado utilizando el siguiente comando:
$ gazebo my_world.sdf
Simulation Description Format (SDF)
SDF es un XML que contiene una descripción completa de todas las cosas que
tiene el mundo y los robots, incluyendo:
●
●
●
●
●
Escena: Luz ambiente, propiedades del cielo y sombras
Físicas: Gravedad, paso del tiempo y motor físico
Modelo: Links, objetos de colisión, joints y sensores
Luz: Puntos y origen de la luz
Plugins: Sobre un mundo, modelo, sensor
• http://gazebosim.org/sdf.html
Construyendo un mundo
●
●
●
●
Describe una colección de robots, objetos y parámetros globales incluyendo
el cielo, luz ambiente, y propiedades físicas
Utiliza el formato SDF y tiene una extensión .world
El servidor de gazebo lee el archivo y genera el mundo
Ejemplo:
$ gazebo name_world.world
Ejemplo: willowgarage.world
<?xml version="1.0" ?>
<sdf version="1.4">
<world name="default">
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<include>
<uri>model://willowgarage</uri>
</include>
</world>
</sdf>
●
●
Tres modelos referenciados
Primero se buscan en la base de datos de modelos de gazebo, si no se
encuentran son descargados de la base de datos online
Ejemplo: Willow Garage
Modelo
●
●
●
●
●
Define una entidad física, su cinemática y las propiedades de visión.
Representa desde una simple forma a un robot complejo. Incluso el suelo es
un modelo.
Puede contener uno o más plugins, lo que afecta al comportamiento del
mismo
Utiliza el mismo formato SDF que el mundo, pero contiene un único tag
<model>
Una vez creado, se puede agregar a un archivo del mundo:
<include filename=”model_file_name”/>
Modelo SDF de willowgarage
<?xml version="1.0" ?>
<sdf version="1.5">
<model name="willowgarage">
<static>true</static>
<pose>-20 -20 0 0 0 0</pose>
<link name="walls">
<collision name="collision">
<geometry>
<mesh>
<uri>model://willowgarage/meshes/willowgarage_collision.dae</uri>
</mesh>
</geometry>
</collision>
<visual name="visual">
<geometry>
<mesh>
<uri>model://willowgarage/meshes/willowgarage_visual.dae</uri>
</mesh>
</geometry>
<cast_shadows>false</cast_shadows>
</visual>
</link>
</model>
</sdf>
Componentes de un modelo
●
●
●
●
●
●
●
Links: Un link contiene las propiedades físicas de un cuerpo
Collision: Encapsula la geometría utilizada para las colisiones.
Visual: Utilizado para visualizar partes de un link
Inertial: Describe las propiedades dinámicas de un link, como ser la masa y la
matriz de inercia rotacional.
Sensor: Adquiere datos del mundo para ser usados en plugins.
Joints: Conecta dos links, se establece una relación padre-hijo
Plugin:Biblioteca compartida para controlar el modelo
Gazebo + Ros
●
●
●
●
Se encuentran integrados a través del paquete gazebo_ros
Comunicación bidireccional entre gazebo y ros
Información de los sensores y física es mandada desde gazebo a ros
ros manda a gazebo los comandos para los actuadores
Ejecutar Gazebo + Ros
●
Comando para ejecutar gazebo utilizando ros:
$rosrun gazebo_ros gazebo
Estructura de un paquete
poner ejemplo de la web de gazebo y ros tutorials
Ejemplo: willowgarage_world.launch
<launch>
<include file="$(find gazebo_ros)/launch/
empty_world.launch">
<arg name="world_name" value="worlds/willowgarage.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
</launch>
●
Utiliza empty_world.launch, el único parámetro a cambiar es el del nombre
del mundo
Ejemplo de uso: TurtleBot
Simulación: TurtleBot
●
Instalar el paquete de simulación de TurtleBot:
$ sudo apt-get install ros-indigo-turtlebot-gazebo
ros-indigo-turtlebotapps
●
Ejecutar un mundo simple con Turtlebot:
$ roslaunch turtlebot_gazebo turtlebot_world.launch
Moviendo TurtleBot con Teleop
●
Instalar:
$ sudo apt-get install ros-indigo-turtlebot-apps rosindigo-turtlebot-rviz-launchers
●
Ejecutar el paquete teleop para mover el robot:
$ roslaunch turtlebot_teleop keyboard_teleop.launch
●
Ver lo que el robot ve - RViz:
$ roslaunch turtlebot_rviz_launchers view_robot.launch
Moviendo TurtleBot mediante código
●
Crear un nodo para que TurtleBot se desplace
$ catkin_create_pkg turtlebot_random_walk std_msgs rospy
roscpp
●
●
●
Crear un archivo .cpp en el directorio src: random_walk.cpp
Crear un archivo .launch en el directorio launch: random_walk.launch
Ejecutar
$ roslaunch turtlebot_random_walk random_walk.launch
Instalación
●
●
●
●
Ros Indigo + Gazebo V2.2
Ros Jade + Gazebo V4.0
Gazebo - http://gazebosim.org/
Gazebo tutorials - http://gazebosim.org/tutorials