16.10.24 robots jus intro ros s4-5

Post on 27-Jan-2017

39 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

PRELIMINARESEl cerebro distribuido

6

memoria sensorial

Visual Auditiva Háptica

Estímulo

Salida

Memoria aCORTO plazo

Memoria aLARGO 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 MasterPermite que cada nodo vea a los demás para que puedan comunicarse

roscoreContiene la BBDD de parámetros del robot

10

Mensajería peer-to-peer

11

Conceptos claveMaster

(roscore)Nodos

Paquetes(nodos)

12

Abstracción del hardware

Control bajo-niveldispositivos

13

Multi-lenguaje

14

Componentes clave

15

Herramientas de desarrollo

16

Comandosbash

SOFTWARE

Primeros pasos con ROS

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

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 claverosrun

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

TecnologiaSocial.es

top related