SlideShare una empresa de Scribd logo
1 de 101
Descargar para leer sin conexión
Desarrollo Robótico


 Robot Operating System
      (ROS)

         Vicente García Díaz – garciavicente@uniovi.es
                           Universidad de Oviedo, 2012
2


Tabla de contenidos
                      Robot Operating System

1. Introducción

2. Desarrollo con ROS

3. Comunicación entre máquinas

4. Simulador Gazebo
4

Introducción

    ¿Cómo eran antes todos los robots?
5

Introducción

    ¿Cómo son hoy los robots?
6

Introducción

    ¿Qué es ROS?
  • Es un framework utilizado para desarrollar aplicaciones
    robóticas
  • Es de código abierto

        Aplicaciones Robóticas


       Robot Operating System
                                   Fuente: http://people.umass.edu/~blaylock/LegoRobotics/



               Hardware
7

Introducción

    ¿Sobre qué
    hardware
    funciona ROS?
8

Introducción

    ¿Sobre qué SO funciona ROS?
9

Introducción

    Diferentes distribuciones de ROS
2010




                  2012




               VirtualBox virtual image with Ubuntu 12.04.1 LTS and ROS Fuerte
10

Introducción

    3 años de ROS (2010)




                           Fuente: http://www.youtube.com/watch?v=7cslPMzklVo
11

Introducción

    Willow Garage
12

Introducción

    ¿Qué proporciona ROS?
  • OBJETIVO: Crear y ejecutar código a través de diferentes
    ordenadores y robots
  • Funcionalidad del “núcleo”
    ▫ Abstracción del hardware
    ▫ Acceso a los componentes del hardware
    ▫ Mecanismo de paso de mensajes entre procesos
    ▫ Mecanismos de construcción, pruebas y logging
    ▫ Gestión de los componentes del sistema
  • Funcionalidad “extra”
    ▫ Simuladores / visualizadores
    ▫ Librerías matemáticas
    ▫ Librerías de geometría
    ▫ Librerías de reconocimiento de imágenes
    ▫ …
13

Introducción

    Principios de diseño
  • Open Source
  • Multiplataforma / lenguaje
    ▫ La comunicación se basa en XML-RPC
    ▫ Soporta diferentes lenguajes (C++, Python, Java, LISP,
      Octave, …)
  • Procesamiento distribuido
    ▫ Diseño modular
    ▫ Los procesos (NODOS) están poco acoplados
  • Tool based
14

Introducción

    Basado en componentes externos
  • OpenCV
    ▫ Visión por computador
  • Eigen
    ▫ Trabajo matricial
  • ODE+Gazebo
    ▫ Simulador
  • KDL
    ▫ Cinemática y Dinámica
  • TREX
    ▫ Planificación de alto nivel
15

Introducción                        Sistema de ficheros



    Recursos organizacionales en ROS
  • Package (paquete)
    ▫ Es la principal unidad de organización en ROS
    ▫ Análogo a un paquete Java o C#

  • Stack (pila)
    ▫ Es una colección de paquetes con funcionalidad relacionada
    ▫ Análogo a una librería DLL o JAR

  • Node (nodo)
    ▫ Es un proceso ejecutable
    ▫ Se incluye dentro de un paquete
16

Introducción                     Sistema de ficheros



    Paquetes y Pilas
  • Tanto los paquetes como las pilas contienen un archivo
    con metadatos
    ▫ Proporciona información (p.e., dependencias, flags de
      compilación, …)
    ▫ Manifiest.xml
    ▫ Stack.xml
17

Introducción             Sistema de ficheros



    Estructura básica de un paquete


                  Package
                     Nodes
                     Topics
                    Services
18

Introducción                  Sistema de ficheros



    Estructura básica de una pila

                           Stack
                                            Package
               Package                           Nodes
                                                 Topics
                 Nodes                          Services
                 Topics
                Services



                             Package
                               Nodes
                               Topics
                              Services
19

Introducción                     Sistema de ficheros



    Repositorios
  • Son una colección de paquetes y pilas disponibles online
20

Introducción                            Sistema de ficheros



    Estructura básica de un repositorio
                                   Repository

                                                          Stack
                      Stack                 Package
               Package                         Nodes
                                                                     Package
                                               Topics
                 Nodes                                                 Nodes
                                              Services
                 Topics    Package                                     Topics
                                                                      Services
                Services
                             Nodes                       Package
                             Topics
                                                           Nodes
                            Services
                                                           Topics
                                                          Services
21

Introducción                         Sistema de ficheros



    Organización general en ROS

                                Repository


           Repository                                       Repository
                                                           Stack

                                                           Pkge
                                                                    Stack
                                                                   Pkge

                        Repository                                        Pkge
22

Introducción          Sistema de ficheros



    Fenómeno exponencial
23

Introducción                  Grafo computacional



    Grafo de computación en ROS
  • Principales componentes
    ▫ Nodes
          Services                                 node

          Topics             node
                                                           node

            Messages                        roscore
                              node
      ▫ Master                                             node
      ▫ Parameter server                    node

      ▫ Bags
24

Introducción                      Grafo computacional



    Nodes
  • Es la unidad de procesamiento (proceso)

  • Normalmente se utilizan varios nodos

  • Un nodo es un ejecutable dentro de un paquete ROS

  • Para la construcción de los nodos se utilizan las librerías
    cliente
      ▫ roscpp, rospy, rosoct, roslisp, rosjava, roslua,
        roscs,…
25

Introducción                       Grafo computacional



    Topics
  • Son nombres que identifican el contenido de un mensaje
  • Los nodos son quienes pueden enviar y recibir mensajes
  • Patrón de diseño Observer
    ▫ El Publisher publica mensajes de un determinado topic
    ▫ El Subscriber se subscribe a mensajes de un
      determinado topic
                                              subscriber



                publisher   node               subscriber


                                               subscriber
26

Introducción                    Grafo computacional



    Messages
  • Estructuras de datos simples que se pasan entre los
    nodos
  • Es el contenido de los topics
  • Existen tipos primitivos estándar
    ▫ Integer
    ▫ Floating point
    ▫ Boolean
    ▫…
  • Se pueden crear tipos personalizados
27

Introducción                          Grafo computacional



    Services
  • Arquitectura cliente / servidor entre nodes
  • Realmente utilizan dos mensajes, uno en la solicitud y
    otro en la respuesta
  • El nodo “servidor” se mantiene a la espera de las
    solicitudes
  • Cuando el nodo “cliente” realiza una solicitud, el nodo
    “servidor” realiza un procesamiento y responde al
    cliente                   solicitud

                        node               node

                               respuesta
28

Introducción                         Grafo computacional



    Roscore
  • Es una colección de nodos y programas que deben
    lanzarse antes que cualquier otro elemento

  • roscore ejecuta:
    ▫ El Master
         Guarda información sobre topics y services
         Permite la comunicación entre nodos
      ▫ El Parameter Server
      ▫ El nodo rosout
29

Introducción                     Grafo computacional



    Bags
  • Archivos para guardar y volver a ejecutar datos de
    comunicación de ROS

  • Sirve para memorizar una serie de órdenes y después
    volver a repetirlas secuencialmente

  • No es necesario repetirlas todas
30

Introducción

    Comunidad
  • Web principal
    ▫ http://www.ros.org
  • Wiki
    ▫ http://www.ros.org/wiki/
  • Ticket System
    ▫ http://www.ros.org/wiki/Tickets
  • ROS Answers
    ▫ http://answers.ros.org/questions/
  • The Willow Garage Blog
    ▫ http://www.willowgarage.com/news
  • Mailing List
    ▫ https://code.ros.org/mailman/listinfo/ros-users
31

Introducción              Wiki



    Página inicial del Wiki
32

Introducción            Wiki



    Wiki. Páginas sobre packages
33

Introducción             Wiki



    Wiki. Páginas sobre stacks
35

Desarrollo con ROS                 Preparación inicial



    Creación de un workspace
  • Es un área para trabajar y crear nuevos stacks y packages
    ▫ ROS_PACKAGE_PATH
    ▫ ROS_WORKSPACE

  • rosws  Para crear un nuevo workspace y/o paquete
     ▫ $ rosws init miworkspace /opt/ros/fuerte


  • Este comando crea una serie de archivos necesarios:
    setup.bash, setup.sh, setup.zsh y el archivo oculto
    .rosinstall en la carpeta miworkspace

  • Para activar nuestro nuevo workspace:
     ▫ $ source miworkspace/setup.bash
36

Desarrollo con ROS                                 Preparación inicial



    Creación de un espacio para packages
  • Los nuevos paquetes necesitan estar incluidos en la variable ROS_PACKAGE_PATH

  • Utilizando el comando rosws, todos los nuevos paquetes son incluidos automáticamente en la
    variable ROS_PACKAGE_PATH cuando se invoca al archivo setup.bash del correspondiente
    workspace
     ▫   $ mkdir miworkspace/mipackages
     ▫   $ rosws set /miworkspace/mipackages/
     ▫   $ source miworkspace/setup.bash

  • Ahora vamos a dejar configurado el entorno para cada vez que se abra una nueva terminal
     ▫   $ echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc

     ▫   $ echo "export ROS_PACKAGE_PATH=~/miworkspace:$ROS_PACKAGE_PATH" >>
         ~/.bashrc

     ▫   $ echo "export ROS_WORKSPACE=~/miworkspace" >> ~/.bashrc

     ▫   $ echo "export ROS_HOSTNAME=localhost" >> ~/.bashrc

     ▫   $ echo "export ROS_MASTER_URI=http://localhost:11311" >> ~/.bashrc
37

Desarrollo con ROS        Sistema de archivos


    Trabajo con el sistema de archivos en ROS
38

Desarrollo con ROS                 Sistema de archivos


    Obtención de información sobre packages
  • rospack  ros + pack(age)
  • Facilita la obtención de información sin necesidad de
    utilizar comandos Linux como cd o ls
     ▫ $ rospack help

     ▫ $ rospack find [PACKAGE_NAME]

     ▫ $ rospack find timestamp_tools
     ▫ >> YOUR_INSTALL_PATH/stacks/driver_common/timestamp_tools
39

Desarrollo con ROS                          Sistema de archivos




                                                                            ?
    1.   ¿Cómo obtendrías la lista de nombres de todos los paquetes
         disponibles?

    2.   ¿Cómo obtendrías la lista de paquetes de los que depende el paquete
         rospy? ¿de qué paquetes depende?

    3.   ¿Cómo obtendrías la lista de paquetes que dependen del paquete
         roslang?

    4.   ¿Cómo obtendrías la lista de paquetes que dependen directamente
         del paquete roslang?

    5.   ¿Cómo obtendrías la lista de posibles lenguajes cliente, utilizables
         para implementar funcionalidades en ROS? ¿Qué lenguajes están
         disponibles en la distribución que estamos utilizando?
40

Desarrollo con ROS               Sistema de archivos



    Obtención de información sobre stacks
  • rosstack  ros + stack
  • Facilita la obtención de información sin necesidad de
    utilizar comandos Linux como cd o ls
     ▫ $ rosstack help

     ▫ $ rosstack find [STACK_NAME]

     ▫ $ rosstack find navigation
     ▫ >> YOUR_INSTALL_PATH/stacks/navigation
41

Desarrollo con ROS             Sistema de archivos




                                                        ?
    1. ¿Cómo obtendrías la lista de nombres de todos las
       pilas disponibles?

    2. ¿Cómo obtendrías la lista de paquetes que están
       dentro de la pila denominada navigation?

    3. ¿En qué pila está el paquete image_geometry?

    4. Utilizando únicamente un comando, averigua la
       ruta física en la que se encuentra la pila que
       contiene al paquete denominado gazebo
42

Desarrollo con ROS                 Sistema de archivos



    Navegación entre packages y stacks (I)
  • roscd  ros + cd (es parte de la suite denominada rosbash)
       ▫ $ roscd [locationname[/subdir]]

       ▫ $ roscd roscpp
       ▫ $ pwd
       ▫ >> YOUR_INSTALL_PATH/share/roscpp

       ▫ $ roscd roscpp/cmake
       ▫ $ pwd
       ▫ >> YOUR_INSTALL_PATH/share/roscpp/cmake


  1.
                                                         ?
        ¿Con qué comando podríamos comprobar que roscpp está
        realmente en la ruta YOUR_INSTALL_PATH/share/roscpp?
43

Desarrollo con ROS                      Sistema de archivos



    Navegación entre packages y stacks (II)
  • Los comandos de ROS buscan la información en las rutas indicadas en la
    variable de entorno $ROS_PACKAGE_PATH
     ▫ $ echo $ROS_PACKAGE_PATH
     ▫ >> YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks
  • roscd sin argumentos te lleva al workspace apuntado por la variable de
    entorno $ROS_WORKSPACE
    ▫ $ roscd
    ▫ $ pwd
    ▫ >> home/YOUR_USER/YOUR_WORKSPACE  p.e.,
      /home/viki/miworkspace
  • roscd puede llevarte directamente a la carpeta de logs
    ▫ $ roscd log
44

Desarrollo con ROS                           Sistema de archivos


    Listado de archivos de un package o stack
  • rosls  ros + ls (es parte de la suite denominada rosbash)
     ▫ $ rosls [locationname[/subdir]]

     ▫ $ rosls navigation
     ▫ >> Listado con archivos de la pila navigation

     ▫ $ rosls navigation/move_base
     ▫ >> Listado con archivos del paquete move_base


  • La tecla TABULADOR ayuda a completar el nombre de paquetes y
    pilas
     ▫ $ roscd roscpp_tut<<< pulsa la tecla TAB >>>
     ▫ $ roscd tur<<< pulsa la tecla TAB >>
45

Desarrollo con ROS            Sistema de archivos




                                                    ?
    1. ¿Cuántas de las carpetas contenidas en la pila
       image_common son realmente paquetes?
       ¿Cómo lo sabríamos?

    2. ¿En qué pila están contenidas los paquetes
       roscpp_tutorials y turtlesim?
46

Desarrollo con ROS                      Creación de un package



    Creación de un nuevo package
  • roscreate-pkg  Permite crear un paquete ROS y su contenido
    básico
     ▫ $ roscreate-pkg [package_name]
     ▫ $ roscreate-pkg [package_name] [depend1] [depend2]…
     ▫ >> Paquete creado

     ▫ $ roscd
     ▫ $ cd mipackages/
     ▫ $ roscreate-pkg mistutoriales std_msgs rospy roscpp

  • Se crean los siguientes archivos:
    ▫ CMakeLists.txt
    ▫ Include/mistutoriales/
    ▫ mainpage.dox
    ▫ Makefile
    ▫ manifest.xml
    ▫ Src/
47

Desarrollo con ROS                Creación de un package




                                                            ?
    1. Crea un nuevo paquete dentro de mipackages llamado
       mispruebas que dependa de los paquetes std_msgs,
       rospy, roscpp y roslisp

    2. ¿Con qué comando comprobarías la ruta de cada uno de
       los dos paquetes creados anteriormente (mistutoriales y
       mispruebas)?

    3. Muestra las dependencias directas del paquete
       mistutoriales

    4. Muestra las dependencias directas e indirectas del
       paquete mistutoriales
48

Desarrollo con ROS                            Creación de un package


    Manifiest.xml
  • $ cat manifest.xml
                     <package>
                      <description brief="mistutoriales">

                       mistutoriales

                      </description>
                      <author>viki</author>
                      <license>BSD</license>
                      <review status="unreviewed" notes=""/>
                      <url>http://ros.org/wiki/mistutoriales</url>
                      <depend package="std_msgs"/>
                      <depend package="rospy"/>
                      <depend package="roscpp"/>

                     </package>
49

Desarrollo con ROS        Creación de un package



    Construcción del package
  • rosmake  ros + make
  • Permite construir los paquetes teniendo en
    cuenta sus dependencias
     ▫ $ rosmake [package]
     ▫ $ rosmake [package1] [package2]…

     ▫ $ rosmake mistutoriales mispruebas
     ▫ >> Paquetes construidos (compilados)
50

Desarrollo con ROS                Motor de ejecución y nodes



    Inicio del motor de ejecución de ROS
  • roscore  ros + core
    ▫ $ roscore
  • Es una colección de nodos y programas básicos necesarios
    para trabajar con ROS
  • Es esencial para que los nodos puedan comunicarse
  • Sirve para inicializar el:
    ▫ El Master
    ▫ El Parameter Server
    ▫ El nodo rosout
  • Se pueden cambiar los nodos que se cargan con roscore
     ▫ $ roscd roslaunch/resources
     ▫ $ cat roscore.xml
51

Desarrollo con ROS               Motor de ejecución y nodes


    Obtención de información sobre nodes (I)
  • rosnode  ros + node
  • Muestra información sobre los nodos que se están
    ejecutando
     ▫ $ rosnode help

     ▫ $ rosnode list

     ▫ $ rosnode info [node]


  1.    ¿Cuántos nodos se están ejecutando “por defecto”?
                                                          ?
  2. Muestra información sobre él/ellos
52

Desarrollo con ROS                            Topics


    Obtención de información sobre nodes (II)

                     Node [/rosout]
                     Publications:
                     * /rosout_agg [rosgraph_msgs/Log]

                     Subscriptions:
                     * /rosout [unknown type]

                     Services:
                      * /rosout/set_logger_level
                      * /rosout/get_loggers


                     contacting node http://localhost:35579/ ...
                     Pid: 23792
53

Desarrollo con ROS                Motor de ejecución y nodes



    Ejecución de nodes
  • Se necesitan los paquetes turtlesim y rxtools
     ▫ $ sudo apt-get install ros-<distro>-rx ros-
       <distro>-turtlesim
  • rosrun  ros + run
  • Para ejecutar nodos que están dentro de un paquete
     ▫ $ rosrun [package_name] [node_name]

     ▫ $ rosrun turtlesim turtlesim_node




  • Se puede personalizar el nombre de los nodos
     ▫ $ rosrun [package_name] [node_name]
       __name:=[nuevo_nombre]
54

Desarrollo con ROS              Motor de ejecución y nodes




                                                             ?
    1. Muestra la lista de todos los nodos que se están
       ejecutando en este momento

    2. Intenta detener, mediante un comando de ROS el
       nodo que está ejecutando la ventana de la tortuga

    3. Vuelve a ejecutar el nodo turtlesim_node, pero
       ahora cambiale el nombre a mi_tortuga

    4. Muestra la lista de todos los nodos en
       funcionamiento
55

Desarrollo con ROS                     Topics



    Comunicación entre nodos
  • Antes de continuar, habrá que ejecutar
    un nuevo nodo además de mi_tortuga
     ▫ $ rosrun turtlesim
       turtle_teleop_key

  • Ambos nodos se están comunicando
    mediante un Topic de ROS

  • Turtle_teleop_key está publicando las
    pulsaciones de las teclas sobre el topic

  • Mi_tortuga está subscrito al topic para
    recibir las pulsaciones de las teclas
56

Desarrollo con ROS                   Topics



    Grafo de información sobre topics
  • rxgraph  Muestra los nodos y los topics (temas) que
    actualmente se están ejecutando
     ▫ $ rxgraph
57

Desarrollo con ROS              Topics


    Obtención de información sobre topics (I)
  • rostopic  ros + topic
  • Muestra información sobre los topics
     ▫ $ rostopic

     ▫ $ rostopic echo [topic]
     ▫ $ rostopic echo /turtle1/command_velocity

  1. ¿Ves algo? ¿Qué ocurre? ¿Cómo podría verse
     información útil?                             ?
  2. ¿Ha cambiado el grafo mostrado por rxgraph?
58

Desarrollo con ROS                               Topics


    Obtención de información sobre topics (II)
  • rostopic  ros + topic
     ▫ $ rostopic list -h
     ▫ $ rostopic list -v


  Published topics:
  * /turtle1/color_sensor [turtlesim/Color] 1 publisher
  * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
  * /rosout [rosgraph_msgs/Log] 3 publishers
  * /rosout_agg [rosgraph_msgs/Log] 1 publisher
  * /turtle1/pose [turtlesim/Pose] 1 publisher

  Subscribed topics:
  * /turtle1/command_velocity [turtlesim/Velocity] 2 subscribers
  * /rosout [rosgraph_msgs/Log] 1 subscriber
59

Desarrollo con ROS                 Topics (Messages)


    Obtención de información sobre messages
  • rostopic  ros + topic
  • Para que un publicador y un subscriptor puedan entenderse,
    han de utilizar el mismo tipo de mensaje
  • El tipo de un topic es equivalente a pensar en el tipo de
    mensaje que se publica sobre el topic
     ▫ $ rostopic type [topic]
     ▫ $ rostopic type /turtle1/command_velocity

  • rosmsg  ros + msg (message)
  • Para ver los detalles de un mensaje
     ▫ $ rosmsg

     ▫ $ rosmsg show [message]
     ▫ $ rosmsg show turtlesim/Velocity
60

Desarrollo con ROS            Topics (Messages)




                                                     ?
    1. ¿A qué topic está subscrito el nodo rosout?

    2. ¿Qué tipo tiene dicho topic?

    3. ¿Qué tipo de datos manejan los mensajes
       asociados a dicho topic?
61

Desarrollo con ROS              Topics (Messages)



    Publicación de datos sobre un topic
  • rostopic  ros + topic
     ▫ $ rostopic pub [topic] [msg_type] [args]

     ▫ $ rostopic pub -1 /turtle1/command_velocity
       turtlesim/Velocity -- 2.0 1.8

     ▫ $ rostopic pub /turtle1/command_velocity
       turtlesim/Velocity -r 1 -- 2.0 -1.8
62

Desarrollo con ROS                Topics (Messages)


    Frecuencia de publicación de messages
  • rostopic  ros + topic
     ▫ $ rostopic hz [topic]
     ▫ $ rostopic hz /turtle1/command_velocity

  1. ¿Con qué frecuencia se publica el topic turtle1/pose? ?
  2. ¿Qué tipo de datos manejan los mensajes asociados a
     dicho topic?
  3. Crea un nuevo subscriptor para mostrar la información que
     se publica con el topic turtle1/pose
  4. ¿Cambia el grafo?
  5. Crea un nuevo subscriptor para obtener el color dado por
     el sensor de la tortuga
63

Desarrollo con ROS                   Topics (Messages)



    Información gráfica sobre los datos
  • rxplot  Muestra los nodos y los topics (temas) que actualmente
    se están ejecutando
     ▫ $ rxplot [topic][field1:field2:…]
     ▫ $ rxplot turtle1/pose/x:y
64

Desarrollo con ROS                         Services y Parameters


    Obtención de información sobre services
  • rosservice  ros + service
  • Los servicios son otra forma de comunicación entre nodos
  • Permiten enviar un request y recibir una response
     ▫ $ rosservice

     ▫ $ rosservice list –n
     ▫ $ rosservice type clear

     ▫ $ rosservice call [service] [args]
     ▫ $ rosservice call clear
  • rossrv  ros + srv (service)
  • Para ver los detalles de un servicio
     ▫ $ rossrv

     ▫ $ rossrv show [service]
65

Desarrollo con ROS                 Services y Parameters




                                                             ?
    1. Muestra, utilizando un único comando, el nodo, la URI, el
       tipo y los argumentos que acepta el servicio spawn

    2. Muestra los detalles del tipo de servicio spawn (es decir,
       los datos que acepta como entrada y como salida)

    3. Invoca al servicio spawn pasándole como parámetros 3 2
       0.4 "“, ¿qué ocurre?

    4. Vuelve a invocar el servicio con otros parámetros, ¿para
       qué sirve el último parámetro?
66

Desarrollo con ROS                     Services y Parameters


    Obtención de información sobre parameters
  • rosparam  ros + parameter
  • Los parámetros permiten manipular y guardar datos en el ROS
    Parameter Server
  • Diferentes tipos de datos:
    ▫ Integer  1
    ▫ Float  1.0
    ▫ String  hello
    ▫ Boolean  true
    ▫ List  [1, 2, 3]
    ▫ Dictionary  {a: b, c: d}
  • Utilización
    ▫ $ rosparam

     ▫ $ rosparam list
     ▫ $ rosparam get background_r
     ▫ $ rosparam set background_r        255
     ▫ $ rosservice call clear
67

Desarrollo con ROS                 Services y Parameters


    Obtención de información sobre parameters
  • rosparam  ros + parameter
  • Se puede obtener información de todos los parámetros
    almacenados en el servidor al mismo tiempo
     ▫ $ rosparam get /

  • Para guardar todos los parámetos en formato YALM
     ▫ $ rosparam dump params.yaml
     ▫ $ cat params.yaml

  • Para recuperar todos los parámetos en formato YALM
     ▫ $ rosparam load params.yaml

  1. Pon el color del fondo de la pantalla de la tortuga en   ?
     verde
68

Desarrollo con ROS                    Depuración



    Inicio del sistema de depuración
  • rxconsole  Para ver mensajes de depuración
  • rxloggerlevel  Para cambiar el nivel de detalle
  • Para ver el funcionamiento vamos a cerrar todos los
    nodos y dejar solamente roscore ejecutado
     ▫ $ rxconsole
     ▫ $ rxloggerlevel
69

Desarrollo con ROS                 Depuración




                                                             ?
    1. Inicia el nodo turtlesim_node (mi_tortuga)

    2. Inicia el nodo turtle_teleop_key

    3. ¿Qué muestra el logger?

    4. Mueve con las flechas la tortuga hasta la pared (borde de
       la pantalla)

    5. ¿Qué muestra el logger?

    6. Cambia el nivel de criticidad que tiene ros.turtlesim de
       Info a Debug ¿Qué ocurre ahora?
70

Desarrollo con ROS                Depuración



    Niveles de criticidad
  • Los niveles tienen el siguiente orden:
    ▫ Fatal  mayor prioridad
    ▫ Error
    ▫ Warn
    ▫ Info
    ▫ Debug  menor prioridad

  • Se selecciona un nivel y se obtienen todos los mensajes
    de igual o superior prioridad (criticidad)
71

Desarrollo con ROS                           roslaunch



    Ejecución de un grupo de nodes
  • roslaunch  ros + launch
  • Para ejecutar varios nodos al mismo tiempo (definidos
    en un fichero)
     ▫ $ roslaunch [package] [filename.launch]
  • Para crear el fichero launch
     ▫   Paramos todos los nodos que se estaban ejecutando para empezar de cero
     ▫   $ roscd mistutoriales
     ▫   $ mkdir launch
     ▫   $ cd launch
     ▫   El siguiente paso es ir a la ruta
         Homemiworkspacemipackagemistutoriales y crear un
         archivo llamado turtlemimic.launch
72

Desarrollo con ROS                               roslaunch



    Turtlemimic.launch
         <launch>

          <group ns="turtlesim1">
           <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
          </group>

          <group ns="turtlesim2">
           <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
          </group>

          <node pkg="turtlesim" name="mimic" type="mimic">
           <remap from="input" to="turtlesim1/turtle1"/>
           <remap from="output" to="turtlesim2/turtle1"/>
          </node>

         </launch>
73

Desarrollo con ROS               roslaunch



    Lanzamiento del archivo .launch
  • Para ejecutar las dos tortugas “gemelas”
     ▫ $ roslaunch mistutoriales turtlemimic.launch
  1. Publica datos sobre una tortuga, para que las dos
     tortugas den vueltas
                                                         ?
74

Desarrollo con ROS               rosed



    Edición de archivos de un paquete
  • rosed  ros + edit (es parte de la suite denominada
    rosbash)
     ▫ $ rosed [package_name] [filename]

     ▫ $ rosed roscpp Logger.msg
     ▫ $ rosed [package_name] <tab>


  • Si no funciona es que no está instalado el editor
    utilizado por defecto
     ▫ $ sudo apt-get install vim
75

Desarrollo con ROS                    Creación de messages y services



    Creación de messages y services
  • Los paquetes pueden contener dos carpetas especiales:
    ▫ msg  Contiene archivos para describir mensajes
    ▫ srv  Contiene archivos para describir servicios
  • Los archivos están compuestos de texto plano con un
    tipo y nombre por línea. Tipos:
     ▫ int8, int16, int32, int64, float32, float64, string, time,
       duration, variable-length array[], fixed-length array[C]
  • Existe un tipo especial que es Header
76

Desarrollo con ROS                 Creación de messages y services



    Creación de un message
  • Crearemos un mensaje en el paquete previo
     ▫ $ roscd mistutoriales
     ▫ $ mkdir msg
     ▫ $ echo "int64 num" > msg/Num.msg

  • Tenemos un archivo de texto, falta crear el código fuente
    para los diferentes lenguajes (C++, Python, …)

  • Hay que abrir CMakeLists.txt del paquete
    mistutoriales y eliminar el comentario (#) en la línea
    rosbuild_genmsg()

  1. Utiliza un comando de ROS para que muestre el contenido
     del mensaje que acabamos de crear
                                                                     ?
77

Desarrollo con ROS                     Creación de messages y services



    Creación de un service
  • Crearemos un servicio en el paquete previo
     ▫ $ roscd mistutoriales
     ▫ $ mkdir srv
  • En este punto podríamos crear un servicio “a mano” pero vamos a
    utilizar una herramienta de ROS para copiar archivos entre
    paquetes
     ▫ $ roscp [package_name] [file_to_copy_path] [copy_path]
     ▫ $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
  • Hay que abrir CMakeLists.txt del paquete mistutoriales y
    eliminar el comentario (#) en la línea rosbuild_gensrv()

  1. Utiliza un comando de ROS para que muestre el contenido del
     servicio que acabamos de crear
  2. ¿Qué ocurre si hacemos lo mismo pero sin indicar el nombre del
     paquete
                                                                         ?
78

Desarrollo con ROS              Creación de messages y services



    Compilación de messages y services
  • Necesitamos volver a generar código para los diferentes
    lenguajes
     ▫ $ rosmake mistutoriales

  • Genmsg genera una carpeta msg_gen

  • Gensrv genera una carpeta srv_gen
79

Desarrollo con ROS                  Creación de publishers y subscribers



    Creación de un publisher
  • La idea es crear un nodo “publicador” que emita un mensaje
     ▫ $ roscd mistutoriales
     ▫ $ mkdir scripts
80

Desarrollo con ROS                             Creación de publishers y subscribers



    Creación de un subscriber
  • La idea es crear un nodo “subscriptor” que se subscriba a la emisión de un mensaje
     ▫ $ scripts/listener.py
     ▫ $ chmod +x scripts/listener.py




     ▫ $ make
81

Desarrollo con ROS                    Creación de publishers y subscribers




                                                                             ?
    1. Cierra todo lo que estuviera ejecutándose referido a ROS

    2. Inicia el core de ROS

    3. Ejecuta el nodo talker

    4. Ejecuta el nodo listener

    5. ¿Qué aspecto tiene el grafo que muestra las relaciones entre
       nodos?

    6. ¿En qué carpeta se encuentra la definición del mensaje String?
82

Desarrollo con ROS                     Creación de services y clients



    Creación de un service
  • La idea es crear un nodo “servicio” que sume dos números
     ▫ $ roscd mistutoriales
     ▫ $ scripts/sumador.py
     ▫ $ chmod +x scripts/sumador.py
83

Desarrollo con ROS                      Creación de services y clients



    Creación de “cliente” que utilice el servicio creado previamente
  • La idea es crear un nodo
                             un client
     ▫ $ scripts/sumador.py
     ▫ $ chmod +x scripts/cliente_sumador.py




     ▫ $ make
84

Desarrollo con ROS                           Creación de services y clients




                                                                               ?
    1.   Cierra todo lo que estuviera ejecutándose referido a ROS

    2.   Inicia el core de ROS

    3.   Ejecuta el nodo sumador

    4.   Ejecuta el nodo cliente_sumador

    5.   ¿Qué aspecto tiene el grafo que muestra las relaciones entre nodos?




    6.   ¿En qué carpeta se encuentra la definición del servicio AddTwoInts?
85

Desarrollo con ROS                                  Trabajo con archivos .bag



    Guardar y recuperar datos
  • Vamos a guardar datos, pero primero inicializamos el sistema
     ▫   $   roscore
     ▫   $   rosrun turtlesim turtlesim_node
     ▫   $   rosrun turtlesim turtle_teleop_key
     ▫   $   rostopic list -v

              Published topics:
              * /turtle1/color_sensor [turtlesim/Color] 1 publisher
              * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
              * /rosout [roslib/Log] 2 publishers
              * /rosout_agg [roslib/Log] 1 publisher
              * /turtle1/pose [turtlesim/Pose] 1 publisher

              Subscribed topics:
              * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
              * /rosout [roslib/Log] 1 subscriber>
86

Desarrollo con ROS                    Trabajo con archivos .bag



    Guardar datos
  • rosbag  ros + bag
  • Para guardar datos generados
     ▫ $ mkdir bagfiles
     ▫ $ cd bagfiles
     ▫ $ rosbag record -a
   • Ahora estamos guardando los datos de todos los temas
     publicados…

   • Para probarlo podemos mover la tortuga…

   • Una vez publicados varios mensajes, se puede cerrar la aplicación
     rosbag y ver el archivo generado
87

Desarrollo con ROS                Trabajo con archivos .bag

                            bag: 2009-12-04-15-02-56.bag
    Visualizar datos        version: 1.2
                            start_time: 1259967777871383000
                            end_time: 1259967797238692999
  • rosbag  ros + bag      length: 19367309999
                            topics:
  • Se puede saber lo que    - name: /rosout
    hay en un archivo bag      count: 2
     ▫ $ rosbag info           datatype: roslib/Log
       <your bagfile>          md5sum: acffd30cd6b6de30f120938c17c593fb
                             - name: /turtle1/color_sensor
                               count: 1122
                               datatype: turtlesim/Color
                               md5sum: 353891e354491c51aabe32df673fb446
                             - name: /turtle1/command_velocity
                               count: 23
                               datatype: turtlesim/Velocity
                               md5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13
                             - name: /turtle1/pose
                               count: 1121
                               datatype: turtlesim/Pose
                               md5sum: 863b248d5016ca62ea2e895ae5265cf9
88

Desarrollo con ROS                      Trabajo con archivos .bag



    Recuperar datos (volver a ejecutar)
  • rosbag  ros + bag
  • Para volver a enviar los mensajes grabados
       ▫ $ rosbag play <your bagfile>




  1. Crea un bag denominado mibolsa que sólo guarde los temas

                                                                  ?
     /turtle1/command_velocity y /turtle1/pose

  2.    Sin mover la tortuga, guarda los mensajes durante un tiempo y
        visualiza el contenido de mibolsa

  3. ¿Cuántos tipos de mensajes se guardan?¿Por qué?
90

Comunicación entre máquinas

    ¿Cuál es la idea?
  • Trabajar con ROS utilizando más de una máquina

  • ROS está diseñado con el trabajo distribuido en mente

  • Idealmente un nodo no debe tener en cuenta en qué
    máquina se está ejecutando

  • Se podría mover a otra máquina…

  • …aunque no siempre es adecuado
91

Comunicación entre máquinas

    Pasos a realizar
  1. Sólo hace falta un master (core), por lo que hay que elegir
     la máquina en la que se ejecutará

  2. Todos los nodos han de configurarse para utilizar el mismo
     master
    ▫ ROS_MASTER_URI

  3. Debe existir una conectividad entre los equipos completa
     en ambas direcciones

  4. Cada máquina debe tener un nombre asignado, conocido
     por las otras máquinas
92

Comunicación entre máquinas

    Comandos involucrados
  • $ hostname  devuelve el nombre del equipo
  • Iniciamos el master en una máquina llamada “LIDER”
     ▫ $ ssh LIDER
     ▫ $ roscore
  • Iniciamos un nodo en “LIDER”
     ▫ $ ssh LIDER
     ▫ $ export ROS_MASTER_URI=http://LIDER:11311
     ▫ $ rosrun rospy_tutorials listener
  • Iniciamos un nodo en otra máquina llamada “TRABAJO”
     ▫ $ ssh TRABAJO
     ▫ $ export ROS_MASTER_URI=http://LIDER:11311
     ▫ $ rosrun rospy_tutorials talker
94

Simulador Gazebo

    ¿Qué es Gazebo?
  • No siempre disponemos de los robots reales

  • Y a veces no queremos utilizarlos para probarlos bajo
    ciertas condiciones

  • En esos casos se suele utilizar un simulador

  • Gazebo es uno de los más conocidos y completos

  • Se integra perfectamente con ROS
95

Simulador Gazebo

    Arrancando Gazebo
  • Con un mundo virtual vacio (estandard)
     ▫ $ roslaunch gazebo_worlds empty_world.launch
96

Simulador Gazebo

    Inserción de modelos en el mundo
  • Modelo de un robot PR2
     ▫ $ sudo apt-get install ros-fuerte-pr2-simulator
     ▫ $ rosmake pr2_gazebo
     ▫ $ roslaunch pr2_gazebo pr2.launch
97

Simulador Gazebo

    Obtención de datos del robot
  • Obtención del estado del robot
    ▫ Todos los topics del robot
         $ rostopic list
     ▫ Sólo los que contengan la palabra “base_”
         $ rostopic list | grep base_
                   /base_bumper
                   /base_controller/command
                   /base_controller/state
                   /base_hokuyo_node/parameter_descriptions
                   /base_hokuyo_node/parameter_updates
                   /base_odometry/odom
                   /base_odometry/odometer
                   /base_odometry/state
                   /base_pose_ground_truth
                   /base_scan
98

Simulador Gazebo


                                                                              ?
    1.   Obtén el estado actual del odómetro (mostrando lo publicado en un topic)

    2.   Ejecuta un grupo de nodos que están en el archivo teleop_keyboard.launch,
         dentro del paquete pr2_teleop. ¿Para qué parece servir?

    3.   ¿Cambia el estado actual del odómetro?

    4.   Manteniendo todo abierto, muestra información sobre el topic llamado
         /base_controller/command. ¿Qué tipo de mensaje utiliza? ¿De qué nodo
         obtiene su información? ¿Qué nodo obtiene información de este topic?

    5.   ¿Cuál es la composición del tipo de mensaje llamado geometry_msgs/Twist?
99

Simulador Gazebo

    Control del robot
  • En lugar de mover el robot mediante un nodo ya construido,
    podremos utilizar el comando rostpic pub para publicar mensajes
    de tipo geometry_msgs/Twist
     ▫ $ rostopic pub /base_controller/command
       geometry_msgs/Twist –r 15 '{linear: {x: 1.0, y: 0.0,
       z: 0.0}, angular: { x: 0.0, y: 0.0, z: -0.6} }‘

     ▫ $ rostopic pub -r 15 /base_controller/command
       geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z:
       0.0}, angular: { x: 0.0, y: 0.0, z: 0.4} }’

  • Los valores deberían verse reflejados en el nodo
    /base_odometry/state
                                                                ?
  1. Escribe el código de un nodo en un nuevo paquete para
     indicarle la velocidad al robot. Pruébalo
100

Simulador Gazebo


                                                                              ?
    1.   Muestra información sobre el topic llamado /base_scan. ¿Qué tipo de
         mensaje utiliza? ¿De qué nodo obtiene su información? ¿Qué nodo obtiene
         información de este topic?

    2.   ¿Cuál es la composición del tipo de mensaje llamado
         sensor_msgs/LaserScan?

    3.   Obtén (subscríbete) únicamente el primer mensaje que se envíe a través del
         topic /base_scan (utiliza un comando de ROS)


    4. Escribe el código de un nodo en un nuevo paquete para
       obtener los datos recibidos en el escáner. Pruébalo
101


Bibliografía


• ROS - http://www.ros.org




• Gazebo - http://http://gazebosim.org/

Más contenido relacionado

Similar a Desarrollo robótico - Robot Operating System (ROS)

Fund. cableado v&d capitulo 02.2
Fund. cableado v&d   capitulo 02.2Fund. cableado v&d   capitulo 02.2
Fund. cableado v&d capitulo 02.2Jair BG
 
Manual de javapre
Manual de javapreManual de javapre
Manual de javaprejtk1
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2prejtk1
 
10 años de repositorios cooperativos
10 años de repositorios cooperativos10 años de repositorios cooperativos
10 años de repositorios cooperativosRicard de la Vega
 
Business Logic 2012
Business Logic 2012Business Logic 2012
Business Logic 2012juanma_ari
 
Base de datos laboratorio
Base de datos laboratorioBase de datos laboratorio
Base de datos laboratoriofreddy Fred
 
SG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache CamelSG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache CamelDomingo Suarez Torres
 
Cluster beowulf javier condori flores
Cluster beowulf   javier condori floresCluster beowulf   javier condori flores
Cluster beowulf javier condori floresJavier Condori Flores
 
Plan de Administración de Redes
Plan de Administración de RedesPlan de Administración de Redes
Plan de Administración de Redesdahurfar
 
Documento Proyecto 1
Documento Proyecto 1Documento Proyecto 1
Documento Proyecto 1Boris Perez
 
Entrega Proy 1 Sist Dist
Entrega Proy 1 Sist DistEntrega Proy 1 Sist Dist
Entrega Proy 1 Sist DistBoris Perez
 
Protocolos de Red
Protocolos de RedProtocolos de Red
Protocolos de Redpafalconi
 
Uso de Dspace en la Universidad de Los Andes, Venezuela
Uso de Dspace en la Universidad de Los Andes, VenezuelaUso de Dspace en la Universidad de Los Andes, Venezuela
Uso de Dspace en la Universidad de Los Andes, VenezuelaRodrigo Torrens
 

Similar a Desarrollo robótico - Robot Operating System (ROS) (20)

13 Networking
13   Networking13   Networking
13 Networking
 
Fund. cableado v&d capitulo 02.2
Fund. cableado v&d   capitulo 02.2Fund. cableado v&d   capitulo 02.2
Fund. cableado v&d capitulo 02.2
 
Manual de javapre
Manual de javapreManual de javapre
Manual de javapre
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2pre
 
10 años de repositorios cooperativos
10 años de repositorios cooperativos10 años de repositorios cooperativos
10 años de repositorios cooperativos
 
Temas cursos
Temas   cursosTemas   cursos
Temas cursos
 
Metacoretex
MetacoretexMetacoretex
Metacoretex
 
Guía de trabajos hilos y posix
Guía de trabajos   hilos y posixGuía de trabajos   hilos y posix
Guía de trabajos hilos y posix
 
Business Logic 2012
Business Logic 2012Business Logic 2012
Business Logic 2012
 
Base de datos laboratorio
Base de datos laboratorioBase de datos laboratorio
Base de datos laboratorio
 
SG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache CamelSG 09 Patrones de Integración Empresarial Apache Camel
SG 09 Patrones de Integración Empresarial Apache Camel
 
Heidy alvarado.subredes
Heidy alvarado.subredesHeidy alvarado.subredes
Heidy alvarado.subredes
 
Cluster beowulf javier condori flores
Cluster beowulf   javier condori floresCluster beowulf   javier condori flores
Cluster beowulf javier condori flores
 
Plan de Administración de Redes
Plan de Administración de RedesPlan de Administración de Redes
Plan de Administración de Redes
 
Presentación instalacion de base de datos 2012 r3.0
Presentación instalacion de base de datos 2012 r3.0Presentación instalacion de base de datos 2012 r3.0
Presentación instalacion de base de datos 2012 r3.0
 
Documento Proyecto 1
Documento Proyecto 1Documento Proyecto 1
Documento Proyecto 1
 
Entrega Proy 1 Sist Dist
Entrega Proy 1 Sist DistEntrega Proy 1 Sist Dist
Entrega Proy 1 Sist Dist
 
ITN_Module_17.pptx
ITN_Module_17.pptxITN_Module_17.pptx
ITN_Module_17.pptx
 
Protocolos de Red
Protocolos de RedProtocolos de Red
Protocolos de Red
 
Uso de Dspace en la Universidad de Los Andes, Venezuela
Uso de Dspace en la Universidad de Los Andes, VenezuelaUso de Dspace en la Universidad de Los Andes, Venezuela
Uso de Dspace en la Universidad de Los Andes, Venezuela
 

Más de Vicente García Díaz (16)

Creating a textual domain specific language
Creating a textual domain specific languageCreating a textual domain specific language
Creating a textual domain specific language
 
Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...Introduction to architectures based on models, models and metamodels. model d...
Introduction to architectures based on models, models and metamodels. model d...
 
jBPM
jBPMjBPM
jBPM
 
Wikitude. KML y ARML
Wikitude. KML y ARMLWikitude. KML y ARML
Wikitude. KML y ARML
 
Wikitude. ARchiect
Wikitude. ARchiectWikitude. ARchiect
Wikitude. ARchiect
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Introducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelosIntroducción a la ingeniería dirigida por modelos
Introducción a la ingeniería dirigida por modelos
 
Iniciación a OpenGL
Iniciación a OpenGLIniciación a OpenGL
Iniciación a OpenGL
 
Iniciación a la realidad aumentada
Iniciación a la realidad aumentadaIniciación a la realidad aumentada
Iniciación a la realidad aumentada
 
Iniciación a ARToolKit
Iniciación a ARToolKitIniciación a ARToolKit
Iniciación a ARToolKit
 
Wikitude. Servicios Seb
Wikitude. Servicios SebWikitude. Servicios Seb
Wikitude. Servicios Seb
 
LaTeX
LaTeXLaTeX
LaTeX
 
Automatización y Microsoft Word
Automatización y Microsoft WordAutomatización y Microsoft Word
Automatización y Microsoft Word
 
Árboles
ÁrbolesÁrboles
Árboles
 
Dispersión y tablas hash
Dispersión y tablas hashDispersión y tablas hash
Dispersión y tablas hash
 
Grafos
GrafosGrafos
Grafos
 

Último

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 

Último (20)

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 

Desarrollo robótico - Robot Operating System (ROS)

  • 1. Desarrollo Robótico Robot Operating System (ROS) Vicente García Díaz – garciavicente@uniovi.es Universidad de Oviedo, 2012
  • 2. 2 Tabla de contenidos Robot Operating System 1. Introducción 2. Desarrollo con ROS 3. Comunicación entre máquinas 4. Simulador Gazebo
  • 3.
  • 4. 4 Introducción ¿Cómo eran antes todos los robots?
  • 5. 5 Introducción ¿Cómo son hoy los robots?
  • 6. 6 Introducción ¿Qué es ROS? • Es un framework utilizado para desarrollar aplicaciones robóticas • Es de código abierto Aplicaciones Robóticas Robot Operating System Fuente: http://people.umass.edu/~blaylock/LegoRobotics/ Hardware
  • 7. 7 Introducción ¿Sobre qué hardware funciona ROS?
  • 8. 8 Introducción ¿Sobre qué SO funciona ROS?
  • 9. 9 Introducción Diferentes distribuciones de ROS 2010 2012 VirtualBox virtual image with Ubuntu 12.04.1 LTS and ROS Fuerte
  • 10. 10 Introducción 3 años de ROS (2010) Fuente: http://www.youtube.com/watch?v=7cslPMzklVo
  • 11. 11 Introducción Willow Garage
  • 12. 12 Introducción ¿Qué proporciona ROS? • OBJETIVO: Crear y ejecutar código a través de diferentes ordenadores y robots • Funcionalidad del “núcleo” ▫ Abstracción del hardware ▫ Acceso a los componentes del hardware ▫ Mecanismo de paso de mensajes entre procesos ▫ Mecanismos de construcción, pruebas y logging ▫ Gestión de los componentes del sistema • Funcionalidad “extra” ▫ Simuladores / visualizadores ▫ Librerías matemáticas ▫ Librerías de geometría ▫ Librerías de reconocimiento de imágenes ▫ …
  • 13. 13 Introducción Principios de diseño • Open Source • Multiplataforma / lenguaje ▫ La comunicación se basa en XML-RPC ▫ Soporta diferentes lenguajes (C++, Python, Java, LISP, Octave, …) • Procesamiento distribuido ▫ Diseño modular ▫ Los procesos (NODOS) están poco acoplados • Tool based
  • 14. 14 Introducción Basado en componentes externos • OpenCV ▫ Visión por computador • Eigen ▫ Trabajo matricial • ODE+Gazebo ▫ Simulador • KDL ▫ Cinemática y Dinámica • TREX ▫ Planificación de alto nivel
  • 15. 15 Introducción Sistema de ficheros Recursos organizacionales en ROS • Package (paquete) ▫ Es la principal unidad de organización en ROS ▫ Análogo a un paquete Java o C# • Stack (pila) ▫ Es una colección de paquetes con funcionalidad relacionada ▫ Análogo a una librería DLL o JAR • Node (nodo) ▫ Es un proceso ejecutable ▫ Se incluye dentro de un paquete
  • 16. 16 Introducción Sistema de ficheros Paquetes y Pilas • Tanto los paquetes como las pilas contienen un archivo con metadatos ▫ Proporciona información (p.e., dependencias, flags de compilación, …) ▫ Manifiest.xml ▫ Stack.xml
  • 17. 17 Introducción Sistema de ficheros Estructura básica de un paquete Package Nodes Topics Services
  • 18. 18 Introducción Sistema de ficheros Estructura básica de una pila Stack Package Package Nodes Topics Nodes Services Topics Services Package Nodes Topics Services
  • 19. 19 Introducción Sistema de ficheros Repositorios • Son una colección de paquetes y pilas disponibles online
  • 20. 20 Introducción Sistema de ficheros Estructura básica de un repositorio Repository Stack Stack Package Package Nodes Package Topics Nodes Nodes Services Topics Package Topics Services Services Nodes Package Topics Nodes Services Topics Services
  • 21. 21 Introducción Sistema de ficheros Organización general en ROS Repository Repository Repository Stack Pkge Stack Pkge Repository Pkge
  • 22. 22 Introducción Sistema de ficheros Fenómeno exponencial
  • 23. 23 Introducción Grafo computacional Grafo de computación en ROS • Principales componentes ▫ Nodes  Services node  Topics node node  Messages roscore node ▫ Master node ▫ Parameter server node ▫ Bags
  • 24. 24 Introducción Grafo computacional Nodes • Es la unidad de procesamiento (proceso) • Normalmente se utilizan varios nodos • Un nodo es un ejecutable dentro de un paquete ROS • Para la construcción de los nodos se utilizan las librerías cliente ▫ roscpp, rospy, rosoct, roslisp, rosjava, roslua, roscs,…
  • 25. 25 Introducción Grafo computacional Topics • Son nombres que identifican el contenido de un mensaje • Los nodos son quienes pueden enviar y recibir mensajes • Patrón de diseño Observer ▫ El Publisher publica mensajes de un determinado topic ▫ El Subscriber se subscribe a mensajes de un determinado topic subscriber publisher node subscriber subscriber
  • 26. 26 Introducción Grafo computacional Messages • Estructuras de datos simples que se pasan entre los nodos • Es el contenido de los topics • Existen tipos primitivos estándar ▫ Integer ▫ Floating point ▫ Boolean ▫… • Se pueden crear tipos personalizados
  • 27. 27 Introducción Grafo computacional Services • Arquitectura cliente / servidor entre nodes • Realmente utilizan dos mensajes, uno en la solicitud y otro en la respuesta • El nodo “servidor” se mantiene a la espera de las solicitudes • Cuando el nodo “cliente” realiza una solicitud, el nodo “servidor” realiza un procesamiento y responde al cliente solicitud node node respuesta
  • 28. 28 Introducción Grafo computacional Roscore • Es una colección de nodos y programas que deben lanzarse antes que cualquier otro elemento • roscore ejecuta: ▫ El Master  Guarda información sobre topics y services  Permite la comunicación entre nodos ▫ El Parameter Server ▫ El nodo rosout
  • 29. 29 Introducción Grafo computacional Bags • Archivos para guardar y volver a ejecutar datos de comunicación de ROS • Sirve para memorizar una serie de órdenes y después volver a repetirlas secuencialmente • No es necesario repetirlas todas
  • 30. 30 Introducción Comunidad • Web principal ▫ http://www.ros.org • Wiki ▫ http://www.ros.org/wiki/ • Ticket System ▫ http://www.ros.org/wiki/Tickets • ROS Answers ▫ http://answers.ros.org/questions/ • The Willow Garage Blog ▫ http://www.willowgarage.com/news • Mailing List ▫ https://code.ros.org/mailman/listinfo/ros-users
  • 31. 31 Introducción Wiki Página inicial del Wiki
  • 32. 32 Introducción Wiki Wiki. Páginas sobre packages
  • 33. 33 Introducción Wiki Wiki. Páginas sobre stacks
  • 34.
  • 35. 35 Desarrollo con ROS Preparación inicial Creación de un workspace • Es un área para trabajar y crear nuevos stacks y packages ▫ ROS_PACKAGE_PATH ▫ ROS_WORKSPACE • rosws  Para crear un nuevo workspace y/o paquete ▫ $ rosws init miworkspace /opt/ros/fuerte • Este comando crea una serie de archivos necesarios: setup.bash, setup.sh, setup.zsh y el archivo oculto .rosinstall en la carpeta miworkspace • Para activar nuestro nuevo workspace: ▫ $ source miworkspace/setup.bash
  • 36. 36 Desarrollo con ROS Preparación inicial Creación de un espacio para packages • Los nuevos paquetes necesitan estar incluidos en la variable ROS_PACKAGE_PATH • Utilizando el comando rosws, todos los nuevos paquetes son incluidos automáticamente en la variable ROS_PACKAGE_PATH cuando se invoca al archivo setup.bash del correspondiente workspace ▫ $ mkdir miworkspace/mipackages ▫ $ rosws set /miworkspace/mipackages/ ▫ $ source miworkspace/setup.bash • Ahora vamos a dejar configurado el entorno para cada vez que se abra una nueva terminal ▫ $ echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc ▫ $ echo "export ROS_PACKAGE_PATH=~/miworkspace:$ROS_PACKAGE_PATH" >> ~/.bashrc ▫ $ echo "export ROS_WORKSPACE=~/miworkspace" >> ~/.bashrc ▫ $ echo "export ROS_HOSTNAME=localhost" >> ~/.bashrc ▫ $ echo "export ROS_MASTER_URI=http://localhost:11311" >> ~/.bashrc
  • 37. 37 Desarrollo con ROS Sistema de archivos Trabajo con el sistema de archivos en ROS
  • 38. 38 Desarrollo con ROS Sistema de archivos Obtención de información sobre packages • rospack  ros + pack(age) • Facilita la obtención de información sin necesidad de utilizar comandos Linux como cd o ls ▫ $ rospack help ▫ $ rospack find [PACKAGE_NAME] ▫ $ rospack find timestamp_tools ▫ >> YOUR_INSTALL_PATH/stacks/driver_common/timestamp_tools
  • 39. 39 Desarrollo con ROS Sistema de archivos ? 1. ¿Cómo obtendrías la lista de nombres de todos los paquetes disponibles? 2. ¿Cómo obtendrías la lista de paquetes de los que depende el paquete rospy? ¿de qué paquetes depende? 3. ¿Cómo obtendrías la lista de paquetes que dependen del paquete roslang? 4. ¿Cómo obtendrías la lista de paquetes que dependen directamente del paquete roslang? 5. ¿Cómo obtendrías la lista de posibles lenguajes cliente, utilizables para implementar funcionalidades en ROS? ¿Qué lenguajes están disponibles en la distribución que estamos utilizando?
  • 40. 40 Desarrollo con ROS Sistema de archivos Obtención de información sobre stacks • rosstack  ros + stack • Facilita la obtención de información sin necesidad de utilizar comandos Linux como cd o ls ▫ $ rosstack help ▫ $ rosstack find [STACK_NAME] ▫ $ rosstack find navigation ▫ >> YOUR_INSTALL_PATH/stacks/navigation
  • 41. 41 Desarrollo con ROS Sistema de archivos ? 1. ¿Cómo obtendrías la lista de nombres de todos las pilas disponibles? 2. ¿Cómo obtendrías la lista de paquetes que están dentro de la pila denominada navigation? 3. ¿En qué pila está el paquete image_geometry? 4. Utilizando únicamente un comando, averigua la ruta física en la que se encuentra la pila que contiene al paquete denominado gazebo
  • 42. 42 Desarrollo con ROS Sistema de archivos Navegación entre packages y stacks (I) • roscd  ros + cd (es parte de la suite denominada rosbash) ▫ $ roscd [locationname[/subdir]] ▫ $ roscd roscpp ▫ $ pwd ▫ >> YOUR_INSTALL_PATH/share/roscpp ▫ $ roscd roscpp/cmake ▫ $ pwd ▫ >> YOUR_INSTALL_PATH/share/roscpp/cmake 1. ? ¿Con qué comando podríamos comprobar que roscpp está realmente en la ruta YOUR_INSTALL_PATH/share/roscpp?
  • 43. 43 Desarrollo con ROS Sistema de archivos Navegación entre packages y stacks (II) • Los comandos de ROS buscan la información en las rutas indicadas en la variable de entorno $ROS_PACKAGE_PATH ▫ $ echo $ROS_PACKAGE_PATH ▫ >> YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks • roscd sin argumentos te lleva al workspace apuntado por la variable de entorno $ROS_WORKSPACE ▫ $ roscd ▫ $ pwd ▫ >> home/YOUR_USER/YOUR_WORKSPACE  p.e., /home/viki/miworkspace • roscd puede llevarte directamente a la carpeta de logs ▫ $ roscd log
  • 44. 44 Desarrollo con ROS Sistema de archivos Listado de archivos de un package o stack • rosls  ros + ls (es parte de la suite denominada rosbash) ▫ $ rosls [locationname[/subdir]] ▫ $ rosls navigation ▫ >> Listado con archivos de la pila navigation ▫ $ rosls navigation/move_base ▫ >> Listado con archivos del paquete move_base • La tecla TABULADOR ayuda a completar el nombre de paquetes y pilas ▫ $ roscd roscpp_tut<<< pulsa la tecla TAB >>> ▫ $ roscd tur<<< pulsa la tecla TAB >>
  • 45. 45 Desarrollo con ROS Sistema de archivos ? 1. ¿Cuántas de las carpetas contenidas en la pila image_common son realmente paquetes? ¿Cómo lo sabríamos? 2. ¿En qué pila están contenidas los paquetes roscpp_tutorials y turtlesim?
  • 46. 46 Desarrollo con ROS Creación de un package Creación de un nuevo package • roscreate-pkg  Permite crear un paquete ROS y su contenido básico ▫ $ roscreate-pkg [package_name] ▫ $ roscreate-pkg [package_name] [depend1] [depend2]… ▫ >> Paquete creado ▫ $ roscd ▫ $ cd mipackages/ ▫ $ roscreate-pkg mistutoriales std_msgs rospy roscpp • Se crean los siguientes archivos: ▫ CMakeLists.txt ▫ Include/mistutoriales/ ▫ mainpage.dox ▫ Makefile ▫ manifest.xml ▫ Src/
  • 47. 47 Desarrollo con ROS Creación de un package ? 1. Crea un nuevo paquete dentro de mipackages llamado mispruebas que dependa de los paquetes std_msgs, rospy, roscpp y roslisp 2. ¿Con qué comando comprobarías la ruta de cada uno de los dos paquetes creados anteriormente (mistutoriales y mispruebas)? 3. Muestra las dependencias directas del paquete mistutoriales 4. Muestra las dependencias directas e indirectas del paquete mistutoriales
  • 48. 48 Desarrollo con ROS Creación de un package Manifiest.xml • $ cat manifest.xml <package> <description brief="mistutoriales"> mistutoriales </description> <author>viki</author> <license>BSD</license> <review status="unreviewed" notes=""/> <url>http://ros.org/wiki/mistutoriales</url> <depend package="std_msgs"/> <depend package="rospy"/> <depend package="roscpp"/> </package>
  • 49. 49 Desarrollo con ROS Creación de un package Construcción del package • rosmake  ros + make • Permite construir los paquetes teniendo en cuenta sus dependencias ▫ $ rosmake [package] ▫ $ rosmake [package1] [package2]… ▫ $ rosmake mistutoriales mispruebas ▫ >> Paquetes construidos (compilados)
  • 50. 50 Desarrollo con ROS Motor de ejecución y nodes Inicio del motor de ejecución de ROS • roscore  ros + core ▫ $ roscore • Es una colección de nodos y programas básicos necesarios para trabajar con ROS • Es esencial para que los nodos puedan comunicarse • Sirve para inicializar el: ▫ El Master ▫ El Parameter Server ▫ El nodo rosout • Se pueden cambiar los nodos que se cargan con roscore ▫ $ roscd roslaunch/resources ▫ $ cat roscore.xml
  • 51. 51 Desarrollo con ROS Motor de ejecución y nodes Obtención de información sobre nodes (I) • rosnode  ros + node • Muestra información sobre los nodos que se están ejecutando ▫ $ rosnode help ▫ $ rosnode list ▫ $ rosnode info [node] 1. ¿Cuántos nodos se están ejecutando “por defecto”? ? 2. Muestra información sobre él/ellos
  • 52. 52 Desarrollo con ROS Topics Obtención de información sobre nodes (II) Node [/rosout] Publications: * /rosout_agg [rosgraph_msgs/Log] Subscriptions: * /rosout [unknown type] Services: * /rosout/set_logger_level * /rosout/get_loggers contacting node http://localhost:35579/ ... Pid: 23792
  • 53. 53 Desarrollo con ROS Motor de ejecución y nodes Ejecución de nodes • Se necesitan los paquetes turtlesim y rxtools ▫ $ sudo apt-get install ros-<distro>-rx ros- <distro>-turtlesim • rosrun  ros + run • Para ejecutar nodos que están dentro de un paquete ▫ $ rosrun [package_name] [node_name] ▫ $ rosrun turtlesim turtlesim_node • Se puede personalizar el nombre de los nodos ▫ $ rosrun [package_name] [node_name] __name:=[nuevo_nombre]
  • 54. 54 Desarrollo con ROS Motor de ejecución y nodes ? 1. Muestra la lista de todos los nodos que se están ejecutando en este momento 2. Intenta detener, mediante un comando de ROS el nodo que está ejecutando la ventana de la tortuga 3. Vuelve a ejecutar el nodo turtlesim_node, pero ahora cambiale el nombre a mi_tortuga 4. Muestra la lista de todos los nodos en funcionamiento
  • 55. 55 Desarrollo con ROS Topics Comunicación entre nodos • Antes de continuar, habrá que ejecutar un nuevo nodo además de mi_tortuga ▫ $ rosrun turtlesim turtle_teleop_key • Ambos nodos se están comunicando mediante un Topic de ROS • Turtle_teleop_key está publicando las pulsaciones de las teclas sobre el topic • Mi_tortuga está subscrito al topic para recibir las pulsaciones de las teclas
  • 56. 56 Desarrollo con ROS Topics Grafo de información sobre topics • rxgraph  Muestra los nodos y los topics (temas) que actualmente se están ejecutando ▫ $ rxgraph
  • 57. 57 Desarrollo con ROS Topics Obtención de información sobre topics (I) • rostopic  ros + topic • Muestra información sobre los topics ▫ $ rostopic ▫ $ rostopic echo [topic] ▫ $ rostopic echo /turtle1/command_velocity 1. ¿Ves algo? ¿Qué ocurre? ¿Cómo podría verse información útil? ? 2. ¿Ha cambiado el grafo mostrado por rxgraph?
  • 58. 58 Desarrollo con ROS Topics Obtención de información sobre topics (II) • rostopic  ros + topic ▫ $ rostopic list -h ▫ $ rostopic list -v Published topics: * /turtle1/color_sensor [turtlesim/Color] 1 publisher * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher * /rosout [rosgraph_msgs/Log] 3 publishers * /rosout_agg [rosgraph_msgs/Log] 1 publisher * /turtle1/pose [turtlesim/Pose] 1 publisher Subscribed topics: * /turtle1/command_velocity [turtlesim/Velocity] 2 subscribers * /rosout [rosgraph_msgs/Log] 1 subscriber
  • 59. 59 Desarrollo con ROS Topics (Messages) Obtención de información sobre messages • rostopic  ros + topic • Para que un publicador y un subscriptor puedan entenderse, han de utilizar el mismo tipo de mensaje • El tipo de un topic es equivalente a pensar en el tipo de mensaje que se publica sobre el topic ▫ $ rostopic type [topic] ▫ $ rostopic type /turtle1/command_velocity • rosmsg  ros + msg (message) • Para ver los detalles de un mensaje ▫ $ rosmsg ▫ $ rosmsg show [message] ▫ $ rosmsg show turtlesim/Velocity
  • 60. 60 Desarrollo con ROS Topics (Messages) ? 1. ¿A qué topic está subscrito el nodo rosout? 2. ¿Qué tipo tiene dicho topic? 3. ¿Qué tipo de datos manejan los mensajes asociados a dicho topic?
  • 61. 61 Desarrollo con ROS Topics (Messages) Publicación de datos sobre un topic • rostopic  ros + topic ▫ $ rostopic pub [topic] [msg_type] [args] ▫ $ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity -- 2.0 1.8 ▫ $ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8
  • 62. 62 Desarrollo con ROS Topics (Messages) Frecuencia de publicación de messages • rostopic  ros + topic ▫ $ rostopic hz [topic] ▫ $ rostopic hz /turtle1/command_velocity 1. ¿Con qué frecuencia se publica el topic turtle1/pose? ? 2. ¿Qué tipo de datos manejan los mensajes asociados a dicho topic? 3. Crea un nuevo subscriptor para mostrar la información que se publica con el topic turtle1/pose 4. ¿Cambia el grafo? 5. Crea un nuevo subscriptor para obtener el color dado por el sensor de la tortuga
  • 63. 63 Desarrollo con ROS Topics (Messages) Información gráfica sobre los datos • rxplot  Muestra los nodos y los topics (temas) que actualmente se están ejecutando ▫ $ rxplot [topic][field1:field2:…] ▫ $ rxplot turtle1/pose/x:y
  • 64. 64 Desarrollo con ROS Services y Parameters Obtención de información sobre services • rosservice  ros + service • Los servicios son otra forma de comunicación entre nodos • Permiten enviar un request y recibir una response ▫ $ rosservice ▫ $ rosservice list –n ▫ $ rosservice type clear ▫ $ rosservice call [service] [args] ▫ $ rosservice call clear • rossrv  ros + srv (service) • Para ver los detalles de un servicio ▫ $ rossrv ▫ $ rossrv show [service]
  • 65. 65 Desarrollo con ROS Services y Parameters ? 1. Muestra, utilizando un único comando, el nodo, la URI, el tipo y los argumentos que acepta el servicio spawn 2. Muestra los detalles del tipo de servicio spawn (es decir, los datos que acepta como entrada y como salida) 3. Invoca al servicio spawn pasándole como parámetros 3 2 0.4 "“, ¿qué ocurre? 4. Vuelve a invocar el servicio con otros parámetros, ¿para qué sirve el último parámetro?
  • 66. 66 Desarrollo con ROS Services y Parameters Obtención de información sobre parameters • rosparam  ros + parameter • Los parámetros permiten manipular y guardar datos en el ROS Parameter Server • Diferentes tipos de datos: ▫ Integer  1 ▫ Float  1.0 ▫ String  hello ▫ Boolean  true ▫ List  [1, 2, 3] ▫ Dictionary  {a: b, c: d} • Utilización ▫ $ rosparam ▫ $ rosparam list ▫ $ rosparam get background_r ▫ $ rosparam set background_r 255 ▫ $ rosservice call clear
  • 67. 67 Desarrollo con ROS Services y Parameters Obtención de información sobre parameters • rosparam  ros + parameter • Se puede obtener información de todos los parámetros almacenados en el servidor al mismo tiempo ▫ $ rosparam get / • Para guardar todos los parámetos en formato YALM ▫ $ rosparam dump params.yaml ▫ $ cat params.yaml • Para recuperar todos los parámetos en formato YALM ▫ $ rosparam load params.yaml 1. Pon el color del fondo de la pantalla de la tortuga en ? verde
  • 68. 68 Desarrollo con ROS Depuración Inicio del sistema de depuración • rxconsole  Para ver mensajes de depuración • rxloggerlevel  Para cambiar el nivel de detalle • Para ver el funcionamiento vamos a cerrar todos los nodos y dejar solamente roscore ejecutado ▫ $ rxconsole ▫ $ rxloggerlevel
  • 69. 69 Desarrollo con ROS Depuración ? 1. Inicia el nodo turtlesim_node (mi_tortuga) 2. Inicia el nodo turtle_teleop_key 3. ¿Qué muestra el logger? 4. Mueve con las flechas la tortuga hasta la pared (borde de la pantalla) 5. ¿Qué muestra el logger? 6. Cambia el nivel de criticidad que tiene ros.turtlesim de Info a Debug ¿Qué ocurre ahora?
  • 70. 70 Desarrollo con ROS Depuración Niveles de criticidad • Los niveles tienen el siguiente orden: ▫ Fatal  mayor prioridad ▫ Error ▫ Warn ▫ Info ▫ Debug  menor prioridad • Se selecciona un nivel y se obtienen todos los mensajes de igual o superior prioridad (criticidad)
  • 71. 71 Desarrollo con ROS roslaunch Ejecución de un grupo de nodes • roslaunch  ros + launch • Para ejecutar varios nodos al mismo tiempo (definidos en un fichero) ▫ $ roslaunch [package] [filename.launch] • Para crear el fichero launch ▫ Paramos todos los nodos que se estaban ejecutando para empezar de cero ▫ $ roscd mistutoriales ▫ $ mkdir launch ▫ $ cd launch ▫ El siguiente paso es ir a la ruta Homemiworkspacemipackagemistutoriales y crear un archivo llamado turtlemimic.launch
  • 72. 72 Desarrollo con ROS roslaunch Turtlemimic.launch <launch> <group ns="turtlesim1"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <group ns="turtlesim2"> <node pkg="turtlesim" name="sim" type="turtlesim_node"/> </group> <node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1"/> <remap from="output" to="turtlesim2/turtle1"/> </node> </launch>
  • 73. 73 Desarrollo con ROS roslaunch Lanzamiento del archivo .launch • Para ejecutar las dos tortugas “gemelas” ▫ $ roslaunch mistutoriales turtlemimic.launch 1. Publica datos sobre una tortuga, para que las dos tortugas den vueltas ?
  • 74. 74 Desarrollo con ROS rosed Edición de archivos de un paquete • rosed  ros + edit (es parte de la suite denominada rosbash) ▫ $ rosed [package_name] [filename] ▫ $ rosed roscpp Logger.msg ▫ $ rosed [package_name] <tab> • Si no funciona es que no está instalado el editor utilizado por defecto ▫ $ sudo apt-get install vim
  • 75. 75 Desarrollo con ROS Creación de messages y services Creación de messages y services • Los paquetes pueden contener dos carpetas especiales: ▫ msg  Contiene archivos para describir mensajes ▫ srv  Contiene archivos para describir servicios • Los archivos están compuestos de texto plano con un tipo y nombre por línea. Tipos: ▫ int8, int16, int32, int64, float32, float64, string, time, duration, variable-length array[], fixed-length array[C] • Existe un tipo especial que es Header
  • 76. 76 Desarrollo con ROS Creación de messages y services Creación de un message • Crearemos un mensaje en el paquete previo ▫ $ roscd mistutoriales ▫ $ mkdir msg ▫ $ echo "int64 num" > msg/Num.msg • Tenemos un archivo de texto, falta crear el código fuente para los diferentes lenguajes (C++, Python, …) • Hay que abrir CMakeLists.txt del paquete mistutoriales y eliminar el comentario (#) en la línea rosbuild_genmsg() 1. Utiliza un comando de ROS para que muestre el contenido del mensaje que acabamos de crear ?
  • 77. 77 Desarrollo con ROS Creación de messages y services Creación de un service • Crearemos un servicio en el paquete previo ▫ $ roscd mistutoriales ▫ $ mkdir srv • En este punto podríamos crear un servicio “a mano” pero vamos a utilizar una herramienta de ROS para copiar archivos entre paquetes ▫ $ roscp [package_name] [file_to_copy_path] [copy_path] ▫ $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv • Hay que abrir CMakeLists.txt del paquete mistutoriales y eliminar el comentario (#) en la línea rosbuild_gensrv() 1. Utiliza un comando de ROS para que muestre el contenido del servicio que acabamos de crear 2. ¿Qué ocurre si hacemos lo mismo pero sin indicar el nombre del paquete ?
  • 78. 78 Desarrollo con ROS Creación de messages y services Compilación de messages y services • Necesitamos volver a generar código para los diferentes lenguajes ▫ $ rosmake mistutoriales • Genmsg genera una carpeta msg_gen • Gensrv genera una carpeta srv_gen
  • 79. 79 Desarrollo con ROS Creación de publishers y subscribers Creación de un publisher • La idea es crear un nodo “publicador” que emita un mensaje ▫ $ roscd mistutoriales ▫ $ mkdir scripts
  • 80. 80 Desarrollo con ROS Creación de publishers y subscribers Creación de un subscriber • La idea es crear un nodo “subscriptor” que se subscriba a la emisión de un mensaje ▫ $ scripts/listener.py ▫ $ chmod +x scripts/listener.py ▫ $ make
  • 81. 81 Desarrollo con ROS Creación de publishers y subscribers ? 1. Cierra todo lo que estuviera ejecutándose referido a ROS 2. Inicia el core de ROS 3. Ejecuta el nodo talker 4. Ejecuta el nodo listener 5. ¿Qué aspecto tiene el grafo que muestra las relaciones entre nodos? 6. ¿En qué carpeta se encuentra la definición del mensaje String?
  • 82. 82 Desarrollo con ROS Creación de services y clients Creación de un service • La idea es crear un nodo “servicio” que sume dos números ▫ $ roscd mistutoriales ▫ $ scripts/sumador.py ▫ $ chmod +x scripts/sumador.py
  • 83. 83 Desarrollo con ROS Creación de services y clients Creación de “cliente” que utilice el servicio creado previamente • La idea es crear un nodo un client ▫ $ scripts/sumador.py ▫ $ chmod +x scripts/cliente_sumador.py ▫ $ make
  • 84. 84 Desarrollo con ROS Creación de services y clients ? 1. Cierra todo lo que estuviera ejecutándose referido a ROS 2. Inicia el core de ROS 3. Ejecuta el nodo sumador 4. Ejecuta el nodo cliente_sumador 5. ¿Qué aspecto tiene el grafo que muestra las relaciones entre nodos? 6. ¿En qué carpeta se encuentra la definición del servicio AddTwoInts?
  • 85. 85 Desarrollo con ROS Trabajo con archivos .bag Guardar y recuperar datos • Vamos a guardar datos, pero primero inicializamos el sistema ▫ $ roscore ▫ $ rosrun turtlesim turtlesim_node ▫ $ rosrun turtlesim turtle_teleop_key ▫ $ rostopic list -v Published topics: * /turtle1/color_sensor [turtlesim/Color] 1 publisher * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher * /rosout [roslib/Log] 2 publishers * /rosout_agg [roslib/Log] 1 publisher * /turtle1/pose [turtlesim/Pose] 1 publisher Subscribed topics: * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber * /rosout [roslib/Log] 1 subscriber>
  • 86. 86 Desarrollo con ROS Trabajo con archivos .bag Guardar datos • rosbag  ros + bag • Para guardar datos generados ▫ $ mkdir bagfiles ▫ $ cd bagfiles ▫ $ rosbag record -a • Ahora estamos guardando los datos de todos los temas publicados… • Para probarlo podemos mover la tortuga… • Una vez publicados varios mensajes, se puede cerrar la aplicación rosbag y ver el archivo generado
  • 87. 87 Desarrollo con ROS Trabajo con archivos .bag bag: 2009-12-04-15-02-56.bag Visualizar datos version: 1.2 start_time: 1259967777871383000 end_time: 1259967797238692999 • rosbag  ros + bag length: 19367309999 topics: • Se puede saber lo que - name: /rosout hay en un archivo bag count: 2 ▫ $ rosbag info datatype: roslib/Log <your bagfile> md5sum: acffd30cd6b6de30f120938c17c593fb - name: /turtle1/color_sensor count: 1122 datatype: turtlesim/Color md5sum: 353891e354491c51aabe32df673fb446 - name: /turtle1/command_velocity count: 23 datatype: turtlesim/Velocity md5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13 - name: /turtle1/pose count: 1121 datatype: turtlesim/Pose md5sum: 863b248d5016ca62ea2e895ae5265cf9
  • 88. 88 Desarrollo con ROS Trabajo con archivos .bag Recuperar datos (volver a ejecutar) • rosbag  ros + bag • Para volver a enviar los mensajes grabados ▫ $ rosbag play <your bagfile> 1. Crea un bag denominado mibolsa que sólo guarde los temas ? /turtle1/command_velocity y /turtle1/pose 2. Sin mover la tortuga, guarda los mensajes durante un tiempo y visualiza el contenido de mibolsa 3. ¿Cuántos tipos de mensajes se guardan?¿Por qué?
  • 89.
  • 90. 90 Comunicación entre máquinas ¿Cuál es la idea? • Trabajar con ROS utilizando más de una máquina • ROS está diseñado con el trabajo distribuido en mente • Idealmente un nodo no debe tener en cuenta en qué máquina se está ejecutando • Se podría mover a otra máquina… • …aunque no siempre es adecuado
  • 91. 91 Comunicación entre máquinas Pasos a realizar 1. Sólo hace falta un master (core), por lo que hay que elegir la máquina en la que se ejecutará 2. Todos los nodos han de configurarse para utilizar el mismo master ▫ ROS_MASTER_URI 3. Debe existir una conectividad entre los equipos completa en ambas direcciones 4. Cada máquina debe tener un nombre asignado, conocido por las otras máquinas
  • 92. 92 Comunicación entre máquinas Comandos involucrados • $ hostname  devuelve el nombre del equipo • Iniciamos el master en una máquina llamada “LIDER” ▫ $ ssh LIDER ▫ $ roscore • Iniciamos un nodo en “LIDER” ▫ $ ssh LIDER ▫ $ export ROS_MASTER_URI=http://LIDER:11311 ▫ $ rosrun rospy_tutorials listener • Iniciamos un nodo en otra máquina llamada “TRABAJO” ▫ $ ssh TRABAJO ▫ $ export ROS_MASTER_URI=http://LIDER:11311 ▫ $ rosrun rospy_tutorials talker
  • 93.
  • 94. 94 Simulador Gazebo ¿Qué es Gazebo? • No siempre disponemos de los robots reales • Y a veces no queremos utilizarlos para probarlos bajo ciertas condiciones • En esos casos se suele utilizar un simulador • Gazebo es uno de los más conocidos y completos • Se integra perfectamente con ROS
  • 95. 95 Simulador Gazebo Arrancando Gazebo • Con un mundo virtual vacio (estandard) ▫ $ roslaunch gazebo_worlds empty_world.launch
  • 96. 96 Simulador Gazebo Inserción de modelos en el mundo • Modelo de un robot PR2 ▫ $ sudo apt-get install ros-fuerte-pr2-simulator ▫ $ rosmake pr2_gazebo ▫ $ roslaunch pr2_gazebo pr2.launch
  • 97. 97 Simulador Gazebo Obtención de datos del robot • Obtención del estado del robot ▫ Todos los topics del robot  $ rostopic list ▫ Sólo los que contengan la palabra “base_”  $ rostopic list | grep base_ /base_bumper /base_controller/command /base_controller/state /base_hokuyo_node/parameter_descriptions /base_hokuyo_node/parameter_updates /base_odometry/odom /base_odometry/odometer /base_odometry/state /base_pose_ground_truth /base_scan
  • 98. 98 Simulador Gazebo ? 1. Obtén el estado actual del odómetro (mostrando lo publicado en un topic) 2. Ejecuta un grupo de nodos que están en el archivo teleop_keyboard.launch, dentro del paquete pr2_teleop. ¿Para qué parece servir? 3. ¿Cambia el estado actual del odómetro? 4. Manteniendo todo abierto, muestra información sobre el topic llamado /base_controller/command. ¿Qué tipo de mensaje utiliza? ¿De qué nodo obtiene su información? ¿Qué nodo obtiene información de este topic? 5. ¿Cuál es la composición del tipo de mensaje llamado geometry_msgs/Twist?
  • 99. 99 Simulador Gazebo Control del robot • En lugar de mover el robot mediante un nodo ya construido, podremos utilizar el comando rostpic pub para publicar mensajes de tipo geometry_msgs/Twist ▫ $ rostopic pub /base_controller/command geometry_msgs/Twist –r 15 '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: { x: 0.0, y: 0.0, z: -0.6} }‘ ▫ $ rostopic pub -r 15 /base_controller/command geometry_msgs/Twist '{linear: {x: 1.0, y: 0.0, z: 0.0}, angular: { x: 0.0, y: 0.0, z: 0.4} }’ • Los valores deberían verse reflejados en el nodo /base_odometry/state ? 1. Escribe el código de un nodo en un nuevo paquete para indicarle la velocidad al robot. Pruébalo
  • 100. 100 Simulador Gazebo ? 1. Muestra información sobre el topic llamado /base_scan. ¿Qué tipo de mensaje utiliza? ¿De qué nodo obtiene su información? ¿Qué nodo obtiene información de este topic? 2. ¿Cuál es la composición del tipo de mensaje llamado sensor_msgs/LaserScan? 3. Obtén (subscríbete) únicamente el primer mensaje que se envíe a través del topic /base_scan (utiliza un comando de ROS) 4. Escribe el código de un nodo en un nuevo paquete para obtener los datos recibidos en el escáner. Pruébalo
  • 101. 101 Bibliografía • ROS - http://www.ros.org • Gazebo - http://http://gazebosim.org/