SlideShare una empresa de Scribd logo
RoboticaEuropa.org
Primeros pasos con ROS
JUS Tu Robot
Inteligente
24 Octubre 2016
SOFTWARE
Introducción a ROS
3
Arquitectura en red
Abstracción del
hardware
Modular
Multi-PLATAFORMA y Multi-LENGUAJE
4
Algunos ejemplos  Robot móviles
 Entornos de
Inteligencia Artificial
 Asistentes personales
 Sistemas de vigilancia
5
PRELIMINARES
El cerebro distribuido
6
memoria sensorial
Visual Auditiva Háptica
Estímulo
Salida
Memoria a
CORTO plazo
Memoria a
LARGO plazo
Los sistemas de memoria
7
¿Qué es ROS?
 Un framework para desarrollo de software para
robots, bajo el concepto de META Sistema Operativo
 Su objetivo primario es la reutilización de código en
I+D en Robótica
 Fue desarrollado en 2007 por el Stanford Artificial Intelligence
Laboratory y continuó su desarrollo la empresa Willow Garage
 Gestionado y mantenido por la
Open Source Robotics Foundation
8
Arquitectura distribuida
9
Nodo Master
Permite que cada nodo vea a los demás para que puedan comunicarse
roscore
Contiene la BBDD de parámetros del robot
10
Mensajería peer-to-peer
11
Conceptos clave
Master
(roscore)
Nodos
Paquetes
(nodos)
12
Abstracción del
hardware
Control bajo-nivel
dispositivos
13
Multi-lenguaje
14
Componentes clave
15
Herramientas de
desarrollo
16
Comandos
bash
SOFTWARE
Primeros pasos
con ROS
18
El grafo de ROS
Arquitectura
http://www.andrewng.org/portfolio/stair-stanford-artificial-intelligence-robot/
http://ai.stanford.edu/~asaxena/stairmanipulation/
Visión y agarre
Navegación
Reconoc. voz y
respuesta
19
ROS_MASTER_URI = http://hostname:11311/
roscore
Arquitectura
20
Sistema de compilación de ROS
1. Incluye macros de Cmake y scripts de Python
2. Ficheros clave workspace_folder/src/
• CMakeLists.txt ' Toplevel' CMake provided by catkin
• package_1/CMakeLists.txt CMakeLists. txt file for package_1
package_1/Package.xml Package manifest
catkin
Conceptos clave
21
• Inicializar espacio de trabajo
Workspaces
Conceptos clave
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws
$ catkin_make
• Compilar espacio de trabajo
src/build/
src/devel/
$ source ~/catkin_ws/devel/setup.bash  ~/.bashrc
22
Paquetes de ROS
Conceptos clave
$ cd ~/catkin_ws/src
$ catkin_create_pkg basics rospy
dependenciasnombre
23
Los paquetes son simplemente localizaciones en el sistema de archivos
• Paquete rospy_tutorials
• Nodo talker ejecutable en /opt/ros/kinetic/share/rospy_tutorials
rosrun
Conceptos clave
$ rosrun PACKAGE EXECUTABLE [ARGS]
$ rosrun rospy_tutorials talker
24
Conceptos clave
rosrun
$ rosrun rospy_tutorials listener
$ rqt_graph
25
Namespaces
Robot con 2 cámaras
• left/image
• right/image
Nombres de dominio y re-mapeado
Conceptos clave
26
Remapping
Los nombres puede ser remapeados en tiempo real
• Streaming de video: nodo image_view , topic image
Nombres de dominio y re-mapeado
Conceptos clave
$ ./image_view image:= right/image
27
Incluir un nodo (push a node) en un Namespace
En el directorio donde está el programa camera
• Lanza el nodo camera con el nombre right
Nombres de dominio y re-mapeado
Conceptos clave
$ ./camera.py __ns:= right
Si lanzamos 2 veces el mismo nodo (no remapeamos),
la instancia más antigua es eliminada
28
Herramienta de línea de comandos para automatizar el lanzamiento
de conjuntos de nodos de ROS
roslaunch
Conceptos clave
$ roslaunch PACKAGE LAUNCH_FILE
<launch>
<node name="talker"
pkg="rospy_tutorials"
type="talker.py"
output="screen" />
<node name="listener"
pkg="rospy_tutorials"
type="listener.py"
output="screen" />
</launch>
Notación XML
29
Autocompleta líneas de comando
Tecla TAB
Conceptos clave
30
6D Pose = Position (x, y, z) + Orientation (roll, pitch, yaw)
tf
Trasformación de coordenadas
31
Vamos con los ejemplos
$ git clone https://github.com/roboticaeuropa/ros-basics
32
Publicación
Topics
#!/usr/bin/env python
import rospy
from std_msgs.msg import Int32
rospy. init_node('topic_publisher' )
pub = rospy. Publisher('counter' , Int32)
rate = rospy. Rate(2)
count = 0
while not rospy. is_shutdown():
pub. publish(count)
count += 1
rate. sleep()
$ nano
/home/pi/catkin_ws/src/basics/src/topic_publisher.py
33
Publicación
Topics
$ roscore
$ rosrun basics topic_publisher.py
$ rostopic list # Use rostopic –h for help
$ rostopic echo counter –n 5
$ rostopic hz counter
$ rqt_graph
$ nano ~/.bashrc
export EDITOR='nano -w‘ # por defecto es vim
$ echo $EDITOR
$ rosed basics topic_publisher.py
$ roscd basics
Cambia: rate = rospy.Rate(1)
Y tendrás un segundero
Tu turno
34
Suscripción
Topics
$ nano
/home/pi/catkin_ws/scr/basics/src/topic_subscriber.py
$ rosed … ¿? # Tu turno
#!/usr/bin/env Python
import rospy
from std_msgs.msg import Int32
def callback(msg):
print msg. Data
rospy. init_node('topic_subscriber' )
sub = rospy. Subscriber('counter' , Int32, callback)
rospy. spin()
35
Suscripción
Topics
$ roscore
$ rosrun basics topic_subscriber.py
#Publicar desde la línea de comandos
$ rostopic pub counter std_msgs/Int32 1000000
$ rostopic info counter
Refresca rqt_graph
36
If a topic is marked as latched when it is
advertised, subscribers automatically get
the last message sent when they subscribe
to the topic
Latched topics
Topics
pub = rospy. Publisher('map' , nav_msgs/OccupancyGrid, latched=True)
publish once
37
Cuidado al usar C++ y Python
• Uint8
• C++: 8 bits sin signo
• Python: con signo
Tipos de mensajes
Topics
Con estos tipos primitivos se
construyen los MENSAJES:
• std_msgs package
• common_msgs package
38
• Usar tipos primitivos y combinarlos
• Directorio scr/basics/msg
• Tras la definición -> catkin_make
Definición de un mensaje (1)
Topics
EJEMPLO: publicar números complejos aleatorios
• Complex.msg
float32 real
float32 imaginary
39
1. Package.xml (manifest.xml). Añadir:
• <build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
2. CMakeLists.txt …
Definición de un mensaje (2)
Topics
40
2. CMakeLists.txt
Definición de un mensaje (3)
Topics
find_package(catkin REQUIRED
COMPONENTS
roscpp
rospy
std_msgs
# Add message_generation here,
after the other packages
message_generation
)
catkin_package(
…
CATKIN_DEPENDS message_runtime
)
add_message_files(
FILES
Complex.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
$ cd ~/catkin_ws
$ catkin_make
$ rosmsg show Complex
41
message_publisher.py
Topics
#!/usr/bin/env Python
import rospy
from basics.msg import Complex
from random import random
rospy. init_node('message_publisher' )
pub = rospy. Publisher('complex' , Complex)
rate = rospy. Rate(2)
while not rospy. is_shutdown():
msg = Complex()
msg. real = random()
msg. imaginary = random()
pub. publish(msg)
rate. sleep()
42
message_subscriber.py
Topics
#!/usr/bin/env python
import rospy
from basics.msg import Complex
def callback(msg):
print 'Real:' , msg. real
print 'Imaginary:' , msg. imaginary
print
rospy. init_node('message_subscriber' )
sub = rospy. Subscriber('complex' , Complex, callback)
rospy. spin()
43
Listando los mensajes
Topics
$ rosmsg show Complex
# Lista los tipos de mensaje del paquete
$ rosmsg package basics
# Mensajes compuestos
$ rosmsg show PointStamped
44
Corriendo el código
Topics
$ roscore
$ rosrun basics message_publisher.py
$ rosrun basics message_subscriber.py
$ rqt_graph
$ rostopic info complex
45
Publicamos ‘doubled’
sólo cuando se reciben
nuevos datos ‘number’
Combinando publicadores
y suscriptores
doubler.py
Topics #!/usr/bin/env Python
import rospy
from std_msgs.msg import Int32
rospy. init_node('doubler' )
def callback(msg):
doubled = Int32()
doubled. data = msg. data * 2
pub. publish(doubled)
sub = rospy. Subscriber('number' , Int32, callback)
pub = rospy. Publisher('doubled' , Int32)
rospy. spin()
TecnologiaSocial.es

Más contenido relacionado

PDF
Python para todos
PPTX
PDF
Construyendo rootkits basicos
PDF
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
DOCX
Multitarea e hilos en java con ejemplos
ODP
Intro to DTrace
ODP
00 introducción a Python
PDF
Presentación appy/pod
Python para todos
Construyendo rootkits basicos
Desarrollo de rootkits en Linux [GuadalajaraCON 2013]
Multitarea e hilos en java con ejemplos
Intro to DTrace
00 introducción a Python
Presentación appy/pod

La actualidad más candente (20)

PDF
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
PPTX
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
PDF
Intro Python
PPTX
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
PPTX
Pablo sanemeteriovalencia
PDF
Curso puppet lenguaje_2
PPTX
PPTX
S6-POO-3.2 Contenedores Especiales
ODP
Gestionando servidores con Puppet
PDF
Semana 2 Fundamentos de Python(Variables)
PDF
Tema 12 hilos en java por gio
PPT
Programando en java
PPTX
Fundamentos de la Refactorización
PDF
Eclipse refactoring
PPTX
Programación multitarea
PPT
Programación III (Java) - 08 threads
PPTX
Programación Orientada a Objetos -Unidad 6 archivos
PDF
Lenguaje Java
PPTX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Intro Python
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Pablo sanemeteriovalencia
Curso puppet lenguaje_2
S6-POO-3.2 Contenedores Especiales
Gestionando servidores con Puppet
Semana 2 Fundamentos de Python(Variables)
Tema 12 hilos en java por gio
Programando en java
Fundamentos de la Refactorización
Eclipse refactoring
Programación multitarea
Programación III (Java) - 08 threads
Programación Orientada a Objetos -Unidad 6 archivos
Lenguaje Java
Publicidad

Destacado (14)

PDF
Kilawa Trading
PDF
Ohp Seijoen H20 06 Mojiretsu
PPT
бисмильдин жансая+мебельная фабрика+офисные работники
PPTX
El desarrollo humano
PDF
Boletim bimba 05-05-2013 (1)
PDF
Energy-Catalogue
ODP
PDF
jaffar cv pdf
PDF
080811
DOC
Archit Rai Saxena - 2 years (1)
PDF
6K37822863
DOC
Muralidharan_ Resume
PDF
QB Poster4
Kilawa Trading
Ohp Seijoen H20 06 Mojiretsu
бисмильдин жансая+мебельная фабрика+офисные работники
El desarrollo humano
Boletim bimba 05-05-2013 (1)
Energy-Catalogue
jaffar cv pdf
080811
Archit Rai Saxena - 2 years (1)
6K37822863
Muralidharan_ Resume
QB Poster4
Publicidad

Similar a 16.10.24 robots jus intro ros s4-5 (20)

PDF
Aprende Robótica con ROS y Turtlebot (nivel iniciación)
PDF
Introducción a ROS
PDF
Reporte bernardino melgarejo lugo
PDF
Presentación Taller ROS - Robotic Operating System
PDF
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
PDF
ROS - Jornadas de la ingeniería cádiz-2011
PDF
Desarrollo robótico - Robot Operating System (ROS)
PDF
Iniciación a la Robótica con ROS
PDF
Internet de las Cosas, por Ulises Gascón - Parte II
PPTX
ROS-RoboMaker-ROS2-Spanish-Presentation
PDF
Chicago boss - Altenwald - Betabeers X Córdoba
PDF
2-CapaPercepción.pdf
PPTX
Taller basico de Introduccion a Raspberry Pi.pptx
PPTX
Turbogears
ODP
Python vs Java (NotBarraLibreCamp)
PDF
Re evolución robótica
PDF
Creando un SCADA con Python y HTML5
PDF
Tr programacionrobots
PDF
Mp mardoqueo so1
PDF
Rackio framework
Aprende Robótica con ROS y Turtlebot (nivel iniciación)
Introducción a ROS
Reporte bernardino melgarejo lugo
Presentación Taller ROS - Robotic Operating System
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
ROS - Jornadas de la ingeniería cádiz-2011
Desarrollo robótico - Robot Operating System (ROS)
Iniciación a la Robótica con ROS
Internet de las Cosas, por Ulises Gascón - Parte II
ROS-RoboMaker-ROS2-Spanish-Presentation
Chicago boss - Altenwald - Betabeers X Córdoba
2-CapaPercepción.pdf
Taller basico de Introduccion a Raspberry Pi.pptx
Turbogears
Python vs Java (NotBarraLibreCamp)
Re evolución robótica
Creando un SCADA con Python y HTML5
Tr programacionrobots
Mp mardoqueo so1
Rackio framework

Más de Bernardo Ronquillo Japón (20)

PDF
ROS Insights for Self-Driving Cars
PDF
Iniciacion al Prototipado IoT con NodeRED
PDF
Talk 16.06.02 OPENEXPO How to build a Social Robot
PDF
Talk 18.06.06 OPENEXPO Paradigma Industria 4.0
PDF
Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0
PDF
Talk 17.02.03 GRE2017 Cognitive Architectures in Social Robotics
PDF
Talk 16.11.10 Robotics & Apps for Health
PDF
Getting started with Arduino/ESP32 for IoT projects
PPTX
THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...
PDF
#MeetUp: Prototipado en Robótica usando Impresión 3D
PPTX
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
PDF
THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27)
PDF
THE ROBOT ACADEMY: Metodología de Desarrollo de Robots Móviles
PDF
How do machine see us? Getting started with OpenCV
PDF
Aprende a montar tu propio servidor Web con Linux & LAMP stack
PDF
16.11.10 Health2.0 Robots y Apps para la Salud
PDF
16.05.07 OpenSouthCode: Cómo Crear un Robot Social
PPTX
Cómo crear un Robot Social con Software Libre
PDF
IO Electronics & HW layout
PPTX
Intelligent Agent with Raspberry Pi
ROS Insights for Self-Driving Cars
Iniciacion al Prototipado IoT con NodeRED
Talk 16.06.02 OPENEXPO How to build a Social Robot
Talk 18.06.06 OPENEXPO Paradigma Industria 4.0
Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0
Talk 17.02.03 GRE2017 Cognitive Architectures in Social Robotics
Talk 16.11.10 Robotics & Apps for Health
Getting started with Arduino/ESP32 for IoT projects
THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...
#MeetUp: Prototipado en Robótica usando Impresión 3D
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27)
THE ROBOT ACADEMY: Metodología de Desarrollo de Robots Móviles
How do machine see us? Getting started with OpenCV
Aprende a montar tu propio servidor Web con Linux & LAMP stack
16.11.10 Health2.0 Robots y Apps para la Salud
16.05.07 OpenSouthCode: Cómo Crear un Robot Social
Cómo crear un Robot Social con Software Libre
IO Electronics & HW layout
Intelligent Agent with Raspberry Pi

Último (11)

DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
PPTX
Fundamentos de Python - Curso de Python dia 1
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PPTX
sistemas de informacion.................
PPTX
Implementación equipo monitor12.08.25.pptx
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Conceptos basicos de Base de Datos y sus propiedades
Derechos_de_Autor_y_Creative_Commons.pptx
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
AutoCAD Herramientas para el futuro, Juan Fandiño
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
Fundamentos de Python - Curso de Python dia 1
Su punto de partida en la IA: Microsoft 365 Copilot Chat
sistemas de informacion.................
Implementación equipo monitor12.08.25.pptx

16.10.24 robots jus intro ros s4-5

  • 1. RoboticaEuropa.org Primeros pasos con ROS JUS Tu Robot Inteligente 24 Octubre 2016
  • 3. 3 Arquitectura en red Abstracción del hardware Modular Multi-PLATAFORMA y Multi-LENGUAJE
  • 4. 4 Algunos ejemplos  Robot móviles  Entornos de Inteligencia Artificial  Asistentes personales  Sistemas de vigilancia
  • 6. 6 memoria sensorial Visual Auditiva Háptica Estímulo Salida Memoria a CORTO plazo Memoria a LARGO plazo Los sistemas de memoria
  • 7. 7 ¿Qué es ROS?  Un framework para desarrollo de software para robots, bajo el concepto de META Sistema Operativo  Su objetivo primario es la reutilización de código en I+D en Robótica  Fue desarrollado en 2007 por el Stanford Artificial Intelligence Laboratory y continuó su desarrollo la empresa Willow Garage  Gestionado y mantenido por la Open Source Robotics Foundation
  • 9. 9 Nodo Master Permite que cada nodo vea a los demás para que puedan comunicarse roscore Contiene la BBDD de parámetros del robot
  • 18. 18 El grafo de ROS Arquitectura http://www.andrewng.org/portfolio/stair-stanford-artificial-intelligence-robot/ http://ai.stanford.edu/~asaxena/stairmanipulation/ Visión y agarre Navegación Reconoc. voz y respuesta
  • 20. 20 Sistema de compilación de ROS 1. Incluye macros de Cmake y scripts de Python 2. Ficheros clave workspace_folder/src/ • CMakeLists.txt ' Toplevel' CMake provided by catkin • package_1/CMakeLists.txt CMakeLists. txt file for package_1 package_1/Package.xml Package manifest catkin Conceptos clave
  • 21. 21 • Inicializar espacio de trabajo Workspaces Conceptos clave $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace $ cd ~/catkin_ws $ catkin_make • Compilar espacio de trabajo src/build/ src/devel/ $ source ~/catkin_ws/devel/setup.bash  ~/.bashrc
  • 22. 22 Paquetes de ROS Conceptos clave $ cd ~/catkin_ws/src $ catkin_create_pkg basics rospy dependenciasnombre
  • 23. 23 Los paquetes son simplemente localizaciones en el sistema de archivos • Paquete rospy_tutorials • Nodo talker ejecutable en /opt/ros/kinetic/share/rospy_tutorials rosrun Conceptos clave $ rosrun PACKAGE EXECUTABLE [ARGS] $ rosrun rospy_tutorials talker
  • 24. 24 Conceptos clave rosrun $ rosrun rospy_tutorials listener $ rqt_graph
  • 25. 25 Namespaces Robot con 2 cámaras • left/image • right/image Nombres de dominio y re-mapeado Conceptos clave
  • 26. 26 Remapping Los nombres puede ser remapeados en tiempo real • Streaming de video: nodo image_view , topic image Nombres de dominio y re-mapeado Conceptos clave $ ./image_view image:= right/image
  • 27. 27 Incluir un nodo (push a node) en un Namespace En el directorio donde está el programa camera • Lanza el nodo camera con el nombre right Nombres de dominio y re-mapeado Conceptos clave $ ./camera.py __ns:= right Si lanzamos 2 veces el mismo nodo (no remapeamos), la instancia más antigua es eliminada
  • 28. 28 Herramienta de línea de comandos para automatizar el lanzamiento de conjuntos de nodos de ROS roslaunch Conceptos clave $ roslaunch PACKAGE LAUNCH_FILE <launch> <node name="talker" pkg="rospy_tutorials" type="talker.py" output="screen" /> <node name="listener" pkg="rospy_tutorials" type="listener.py" output="screen" /> </launch> Notación XML
  • 29. 29 Autocompleta líneas de comando Tecla TAB Conceptos clave
  • 30. 30 6D Pose = Position (x, y, z) + Orientation (roll, pitch, yaw) tf Trasformación de coordenadas
  • 31. 31 Vamos con los ejemplos $ git clone https://github.com/roboticaeuropa/ros-basics
  • 32. 32 Publicación Topics #!/usr/bin/env python import rospy from std_msgs.msg import Int32 rospy. init_node('topic_publisher' ) pub = rospy. Publisher('counter' , Int32) rate = rospy. Rate(2) count = 0 while not rospy. is_shutdown(): pub. publish(count) count += 1 rate. sleep() $ nano /home/pi/catkin_ws/src/basics/src/topic_publisher.py
  • 33. 33 Publicación Topics $ roscore $ rosrun basics topic_publisher.py $ rostopic list # Use rostopic –h for help $ rostopic echo counter –n 5 $ rostopic hz counter $ rqt_graph $ nano ~/.bashrc export EDITOR='nano -w‘ # por defecto es vim $ echo $EDITOR $ rosed basics topic_publisher.py $ roscd basics Cambia: rate = rospy.Rate(1) Y tendrás un segundero Tu turno
  • 34. 34 Suscripción Topics $ nano /home/pi/catkin_ws/scr/basics/src/topic_subscriber.py $ rosed … ¿? # Tu turno #!/usr/bin/env Python import rospy from std_msgs.msg import Int32 def callback(msg): print msg. Data rospy. init_node('topic_subscriber' ) sub = rospy. Subscriber('counter' , Int32, callback) rospy. spin()
  • 35. 35 Suscripción Topics $ roscore $ rosrun basics topic_subscriber.py #Publicar desde la línea de comandos $ rostopic pub counter std_msgs/Int32 1000000 $ rostopic info counter Refresca rqt_graph
  • 36. 36 If a topic is marked as latched when it is advertised, subscribers automatically get the last message sent when they subscribe to the topic Latched topics Topics pub = rospy. Publisher('map' , nav_msgs/OccupancyGrid, latched=True) publish once
  • 37. 37 Cuidado al usar C++ y Python • Uint8 • C++: 8 bits sin signo • Python: con signo Tipos de mensajes Topics Con estos tipos primitivos se construyen los MENSAJES: • std_msgs package • common_msgs package
  • 38. 38 • Usar tipos primitivos y combinarlos • Directorio scr/basics/msg • Tras la definición -> catkin_make Definición de un mensaje (1) Topics EJEMPLO: publicar números complejos aleatorios • Complex.msg float32 real float32 imaginary
  • 39. 39 1. Package.xml (manifest.xml). Añadir: • <build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend> 2. CMakeLists.txt … Definición de un mensaje (2) Topics
  • 40. 40 2. CMakeLists.txt Definición de un mensaje (3) Topics find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs # Add message_generation here, after the other packages message_generation ) catkin_package( … CATKIN_DEPENDS message_runtime ) add_message_files( FILES Complex.msg ) generate_messages( DEPENDENCIES std_msgs ) $ cd ~/catkin_ws $ catkin_make $ rosmsg show Complex
  • 41. 41 message_publisher.py Topics #!/usr/bin/env Python import rospy from basics.msg import Complex from random import random rospy. init_node('message_publisher' ) pub = rospy. Publisher('complex' , Complex) rate = rospy. Rate(2) while not rospy. is_shutdown(): msg = Complex() msg. real = random() msg. imaginary = random() pub. publish(msg) rate. sleep()
  • 42. 42 message_subscriber.py Topics #!/usr/bin/env python import rospy from basics.msg import Complex def callback(msg): print 'Real:' , msg. real print 'Imaginary:' , msg. imaginary print rospy. init_node('message_subscriber' ) sub = rospy. Subscriber('complex' , Complex, callback) rospy. spin()
  • 43. 43 Listando los mensajes Topics $ rosmsg show Complex # Lista los tipos de mensaje del paquete $ rosmsg package basics # Mensajes compuestos $ rosmsg show PointStamped
  • 44. 44 Corriendo el código Topics $ roscore $ rosrun basics message_publisher.py $ rosrun basics message_subscriber.py $ rqt_graph $ rostopic info complex
  • 45. 45 Publicamos ‘doubled’ sólo cuando se reciben nuevos datos ‘number’ Combinando publicadores y suscriptores doubler.py Topics #!/usr/bin/env Python import rospy from std_msgs.msg import Int32 rospy. init_node('doubler' ) def callback(msg): doubled = Int32() doubled. data = msg. data * 2 pub. publish(doubled) sub = rospy. Subscriber('number' , Int32, callback) pub = rospy. Publisher('doubled' , Int32) rospy. spin()