SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
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

La actualidad más candente

Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXTaller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXRichard Eliseo Mendoza Gafaro
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
 
Intro Python
Intro PythonIntro Python
Intro Pythonctme
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
Curso puppet lenguaje_2
Curso puppet lenguaje_2Curso puppet lenguaje_2
Curso puppet lenguaje_2martacdehesa
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gioRobert Wolf
 
Programando en java
Programando en javaProgramando en java
Programando en javajulianbm60
 
Fundamentos de la Refactorización
Fundamentos de la RefactorizaciónFundamentos de la Refactorización
Fundamentos de la RefactorizaciónJavier Pérez
 
Eclipse refactoring
Eclipse refactoringEclipse refactoring
Eclipse refactoringsrcid
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitareabowelmx
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosJosé Antonio Sandoval Acosta
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Javapbcanessa
 

La actualidad más candente (20)

Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXTaller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Intro Python
Intro PythonIntro Python
Intro Python
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Pablo sanemeteriovalencia
Pablo sanemeteriovalenciaPablo sanemeteriovalencia
Pablo sanemeteriovalencia
 
Curso puppet lenguaje_2
Curso puppet lenguaje_2Curso puppet lenguaje_2
Curso puppet lenguaje_2
 
S6-Contenedores
S6-ContenedoresS6-Contenedores
S6-Contenedores
 
S6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores EspecialesS6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores Especiales
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Semana 2 Fundamentos de Python(Variables)
Semana 2   Fundamentos de Python(Variables)Semana 2   Fundamentos de Python(Variables)
Semana 2 Fundamentos de Python(Variables)
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Fundamentos de la Refactorización
Fundamentos de la RefactorizaciónFundamentos de la Refactorización
Fundamentos de la Refactorización
 
Networking
NetworkingNetworking
Networking
 
Eclipse refactoring
Eclipse refactoringEclipse refactoring
Eclipse refactoring
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Programación III (Java) - 08 threads
Programación III (Java) - 08 threadsProgramación III (Java) - 08 threads
Programación III (Java) - 08 threads
 
Programación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivosProgramación Orientada a Objetos -Unidad 6 archivos
Programación Orientada a Objetos -Unidad 6 archivos
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Debian
DebianDebian
Debian
 

Destacado (14)

Kilawa Trading
Kilawa TradingKilawa Trading
Kilawa Trading
 
Ohp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 MojiretsuOhp Seijoen H20 06 Mojiretsu
Ohp Seijoen H20 06 Mojiretsu
 
бисмильдин жансая+мебельная фабрика+офисные работники
бисмильдин жансая+мебельная фабрика+офисные работникибисмильдин жансая+мебельная фабрика+офисные работники
бисмильдин жансая+мебельная фабрика+офисные работники
 
El desarrollo humano
El desarrollo humanoEl desarrollo humano
El desarrollo humano
 
Boletim bimba 05-05-2013 (1)
Boletim bimba   05-05-2013 (1)Boletim bimba   05-05-2013 (1)
Boletim bimba 05-05-2013 (1)
 
Energy-Catalogue
Energy-CatalogueEnergy-Catalogue
Energy-Catalogue
 
Korina
KorinaKorina
Korina
 
jaffar cv pdf
jaffar cv pdfjaffar cv pdf
jaffar cv pdf
 
080811
080811080811
080811
 
Archit Rai Saxena - 2 years (1)
Archit Rai Saxena - 2 years (1)Archit Rai Saxena - 2 years (1)
Archit Rai Saxena - 2 years (1)
 
6K37822863
6K378228636K37822863
6K37822863
 
Nivel i
Nivel iNivel i
Nivel i
 
Muralidharan_ Resume
Muralidharan_ ResumeMuralidharan_ Resume
Muralidharan_ Resume
 
QB Poster4
QB Poster4QB Poster4
QB Poster4
 

Similar a ROS Introducción a la robótica con ROS

Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...Alvaro Angel Romero Gandul
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndkBarcelona GTUG
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]RootedCON
 
Desarrollando aplicaciones .NET en Linux
Desarrollando aplicaciones .NET en LinuxDesarrollando aplicaciones .NET en Linux
Desarrollando aplicaciones .NET en LinuxMarlon Leandro
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2EmmanuelAv
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptxGabriela Soto
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkMario IC
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)videos
 
Programación de módulos para Drupal 7
Programación de módulos para Drupal 7Programación de módulos para Drupal 7
Programación de módulos para Drupal 7Cristian Mamani
 

Similar a ROS Introducción a la robótica con ROS (20)

Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
Integración de ROS (Robot Operating System) con las plataformas Arduino y Ras...
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
 
Desarrollando aplicaciones .NET en Linux
Desarrollando aplicaciones .NET en LinuxDesarrollando aplicaciones .NET en Linux
Desarrollando aplicaciones .NET en Linux
 
Curso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.jsCurso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.js
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Portafolio parcial 2
Portafolio parcial 2Portafolio parcial 2
Portafolio parcial 2
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
SBC semana01
SBC semana01SBC semana01
SBC semana01
 
Ejercicios java parte 1
Ejercicios java parte 1Ejercicios java parte 1
Ejercicios java parte 1
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Programación de módulos para Drupal 7
Programación de módulos para Drupal 7Programación de módulos para Drupal 7
Programación de módulos para Drupal 7
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Sistema operativo mac
Sistema operativo macSistema operativo mac
Sistema operativo mac
 
Sistema operativo mac
Sistema operativo macSistema operativo mac
Sistema operativo mac
 

Más de Bernardo Ronquillo Japón

Talk 16.06.02 OPENEXPO How to build a Social Robot
 Talk 16.06.02 OPENEXPO How to build a Social Robot Talk 16.06.02 OPENEXPO How to build a Social Robot
Talk 16.06.02 OPENEXPO How to build a Social RobotBernardo Ronquillo Japón
 
Talk 18.06.06 OPENEXPO Paradigma Industria 4.0
 Talk 18.06.06 OPENEXPO Paradigma Industria 4.0 Talk 18.06.06 OPENEXPO Paradigma Industria 4.0
Talk 18.06.06 OPENEXPO Paradigma Industria 4.0Bernardo Ronquillo Japón
 
Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0
 Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0 Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0
Talk 17.06.01 OPENEXPO Robotica Colaborativa en la Industria 4.0Bernardo Ronquillo Japón
 
Talk 17.02.03 GRE2017 Cognitive Architectures in Social Robotics
 Talk 17.02.03 GRE2017 Cognitive Architectures in Social Robotics Talk 17.02.03 GRE2017 Cognitive Architectures in Social Robotics
Talk 17.02.03 GRE2017 Cognitive Architectures in Social RoboticsBernardo Ronquillo Japón
 
Getting started with Arduino/ESP32 for IoT projects
Getting started with Arduino/ESP32 for IoT projectsGetting started with Arduino/ESP32 for IoT projects
Getting started with Arduino/ESP32 for IoT projectsBernardo Ronquillo Japón
 
THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...
THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...
THE ROBOT ACADEMY: Programa Sociocomunicativo de Atención Infantil Temprana p...Bernardo Ronquillo Japón
 
#MeetUp: Prototipado en Robótica usando Impresión 3D
#MeetUp: Prototipado en Robótica usando Impresión 3D#MeetUp: Prototipado en Robótica usando Impresión 3D
#MeetUp: Prototipado en Robótica usando Impresión 3DBernardo Ronquillo Japón
 
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)
Curso: Iniciación a la robótica con RaspberryPi y ROS (Info)Bernardo Ronquillo Japón
 
THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27)
THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27) THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27)
THE ROBOT ACADEMY: Meet Up Linux for ROBOTS#1 (17.04.27) Bernardo Ronquillo Japón
 
THE ROBOT ACADEMY: Metodología de Desarrollo de Robots Móviles
THE ROBOT ACADEMY: Metodología de Desarrollo de Robots MóvilesTHE ROBOT ACADEMY: Metodología de Desarrollo de Robots Móviles
THE ROBOT ACADEMY: Metodología de Desarrollo de Robots MóvilesBernardo Ronquillo Japón
 
How do machine see us? Getting started with OpenCV
How do machine see us? Getting started with OpenCVHow do machine see us? Getting started with OpenCV
How do machine see us? Getting started with OpenCVBernardo Ronquillo Japón
 
Aprende a montar tu propio servidor Web con Linux & LAMP stack
Aprende a montar tu propio servidor Web con Linux & LAMP stackAprende a montar tu propio servidor Web con Linux & LAMP stack
Aprende a montar tu propio servidor Web con Linux & LAMP stackBernardo Ronquillo Japón
 
16.11.10 Health2.0 Robots y Apps para la Salud
16.11.10 Health2.0 Robots y Apps para la Salud16.11.10 Health2.0 Robots y Apps para la Salud
16.11.10 Health2.0 Robots y Apps para la SaludBernardo Ronquillo Japón
 
16.05.07 OpenSouthCode: Cómo Crear un Robot Social
16.05.07 OpenSouthCode: Cómo Crear un Robot Social16.05.07 OpenSouthCode: Cómo Crear un Robot Social
16.05.07 OpenSouthCode: Cómo Crear un Robot SocialBernardo Ronquillo Japón
 
Cómo crear un Robot Social con Software Libre
Cómo crear un Robot Social con Software LibreCómo crear un Robot Social con Software Libre
Cómo crear un Robot Social con Software LibreBernardo Ronquillo Japón
 

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

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

ROS Introducción a la robótica con ROS

  • 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()