16.10.24 robots jus intro ros s4-5

46
RoboticaEuropa.org Primeros pasos con ROS JUS Tu Robot Inteligente 24 Octubre 2016

Upload: bernardo-ronquillo-japon

Post on 27-Jan-2017

39 views

Category:

Software


3 download

TRANSCRIPT

Page 1: 16.10.24 robots jus intro ros s4-5

RoboticaEuropa.org

Primeros pasos con ROS

JUS Tu Robot Inteligente

24 Octubre 2016

Page 2: 16.10.24 robots jus intro ros s4-5

SOFTWARE

Introducción a ROS

Page 3: 16.10.24 robots jus intro ros s4-5

3

Arquitectura en red

Abstracción del hardware

Modular

Multi-PLATAFORMA y Multi-LENGUAJE

Page 4: 16.10.24 robots jus intro ros s4-5

4

Algunos ejemplos Robot móviles

Entornos de Inteligencia Artificial

Asistentes personales

Sistemas de vigilancia

Page 5: 16.10.24 robots jus intro ros s4-5

5

PRELIMINARESEl cerebro distribuido

Page 6: 16.10.24 robots jus intro ros s4-5

6

memoria sensorial

Visual Auditiva Háptica

Estímulo

Salida

Memoria aCORTO plazo

Memoria aLARGO plazo

Los sistemas de memoria

Page 7: 16.10.24 robots jus intro ros s4-5

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

Page 8: 16.10.24 robots jus intro ros s4-5

8

Arquitectura distribuida

Page 9: 16.10.24 robots jus intro ros s4-5

9

Nodo MasterPermite que cada nodo vea a los demás para que puedan comunicarse

roscoreContiene la BBDD de parámetros del robot

Page 10: 16.10.24 robots jus intro ros s4-5

10

Mensajería peer-to-peer

Page 11: 16.10.24 robots jus intro ros s4-5

11

Conceptos claveMaster

(roscore)Nodos

Paquetes(nodos)

Page 12: 16.10.24 robots jus intro ros s4-5

12

Abstracción del hardware

Control bajo-niveldispositivos

Page 13: 16.10.24 robots jus intro ros s4-5

13

Multi-lenguaje

Page 14: 16.10.24 robots jus intro ros s4-5

14

Componentes clave

Page 15: 16.10.24 robots jus intro ros s4-5

15

Herramientas de desarrollo

Page 16: 16.10.24 robots jus intro ros s4-5

16

Comandosbash

Page 17: 16.10.24 robots jus intro ros s4-5

SOFTWARE

Primeros pasos con ROS

Page 18: 16.10.24 robots jus intro ros s4-5

18

El grafo de ROS

Arquitecturahttp://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

Page 19: 16.10.24 robots jus intro ros s4-5

19

ROS_MASTER_URI = http://hostname:11311/

roscore

Arquitectura

Page 20: 16.10.24 robots jus intro ros s4-5

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

Page 21: 16.10.24 robots jus intro ros s4-5

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

Page 22: 16.10.24 robots jus intro ros s4-5

22

Paquetes de ROS

Conceptos clave

$ cd ~/catkin_ws/src

$ catkin_create_pkg basics rospy

dependenciasnombre

Page 23: 16.10.24 robots jus intro ros s4-5

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

Page 24: 16.10.24 robots jus intro ros s4-5

24

Conceptos claverosrun

$ rosrun rospy_tutorials listener

$ rqt_graph

Page 25: 16.10.24 robots jus intro ros s4-5

25

Namespaces

Robot con 2 cámaras

• left/image

• right/image

Nombres de dominio y re-mapeado

Conceptos clave

Page 26: 16.10.24 robots jus intro ros s4-5

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

Page 27: 16.10.24 robots jus intro ros s4-5

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

Page 28: 16.10.24 robots jus intro ros s4-5

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

Page 29: 16.10.24 robots jus intro ros s4-5

29

Autocompleta líneas de comando

Tecla TAB

Conceptos clave

Page 30: 16.10.24 robots jus intro ros s4-5

30

6D Pose = Position (x, y, z) + Orientation (roll, pitch, yaw)

tf

Trasformación de coordenadas

Page 31: 16.10.24 robots jus intro ros s4-5

31

Vamos con los ejemplos

$ git clone https://github.com/roboticaeuropa/ros-basics

Page 32: 16.10.24 robots jus intro ros s4-5

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

Page 33: 16.10.24 robots jus intro ros s4-5

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

Page 34: 16.10.24 robots jus intro ros s4-5

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

Page 35: 16.10.24 robots jus intro ros s4-5

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

Page 36: 16.10.24 robots jus intro ros s4-5

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

Page 37: 16.10.24 robots jus intro ros s4-5

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

Page 38: 16.10.24 robots jus intro ros s4-5

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

Page 39: 16.10.24 robots jus intro ros s4-5

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

Page 40: 16.10.24 robots jus intro ros s4-5

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

Page 41: 16.10.24 robots jus intro ros s4-5

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

Page 42: 16.10.24 robots jus intro ros s4-5

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

Page 43: 16.10.24 robots jus intro ros s4-5

43

Listando los mensajes

Topics

$ rosmsg show Complex

# Lista los tipos de mensaje del paquete

$ rosmsg package basics

# Mensajes compuestos

$ rosmsg show PointStamped

Page 44: 16.10.24 robots jus intro ros s4-5

44

Corriendo el código

Topics

$ roscore

$ rosrun basics message_publisher.py

$ rosrun basics message_subscriber.py

$ rqt_graph

$ rostopic info complex

Page 45: 16.10.24 robots jus intro ros s4-5

45

Publicamos ‘doubled’

sólo cuando se reciben

nuevos datos ‘number’

Combinando publicadores y suscriptoresdoubler.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()

Page 46: 16.10.24 robots jus intro ros s4-5

TecnologiaSocial.es