16.10.24 robots jus intro ros s4-5
TRANSCRIPT
![Page 1: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/1.jpg)
RoboticaEuropa.org
Primeros pasos con ROS
JUS Tu Robot Inteligente
24 Octubre 2016
![Page 2: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/2.jpg)
SOFTWARE
Introducción a ROS
![Page 3: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/5.jpg)
5
PRELIMINARESEl cerebro distribuido
![Page 6: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/8.jpg)
8
Arquitectura distribuida
![Page 9: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/10.jpg)
10
Mensajería peer-to-peer
![Page 11: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/11.jpg)
11
Conceptos claveMaster
(roscore)Nodos
Paquetes(nodos)
![Page 12: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/12.jpg)
12
Abstracción del hardware
Control bajo-niveldispositivos
![Page 13: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/13.jpg)
13
Multi-lenguaje
![Page 14: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/14.jpg)
14
Componentes clave
![Page 15: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/15.jpg)
15
Herramientas de desarrollo
![Page 16: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/16.jpg)
16
Comandosbash
![Page 17: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/17.jpg)
SOFTWARE
Primeros pasos con ROS
![Page 18: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/18.jpg)
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 20: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/24.jpg)
24
Conceptos claverosrun
$ rosrun rospy_tutorials listener
$ rqt_graph
![Page 25: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/29.jpg)
29
Autocompleta líneas de comando
Tecla TAB
Conceptos clave
![Page 30: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/31.jpg)
31
Vamos con los ejemplos
$ git clone https://github.com/roboticaeuropa/ros-basics
![Page 32: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/42.jpg)
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
rospy. init_node('message_subscriber' )
sub = rospy. Subscriber('complex' , Complex, callback)
rospy. spin()
![Page 43: 16.10.24 robots jus intro ros s4-5](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022042706/588b3f911a28ab5a5b8b6637/html5/thumbnails/45.jpg)
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()