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
© Copyright 2024