Вы находитесь на странице: 1из 12

CASO PRÁCTICO

Tema IV. Introducción a ROS. Parte 2

1. Objetivos
- Configurar y manejar el entorno ROS.
- Programar nuestro segundo paquete de ROS (nivel medio).
- Compilar y ejecutar correctamente el paquete.
- Inspeccionar las comunicaciones que se producen entre los nodos en su ejecución.

2. Crear nuestro segundo paquete en ROS:


interacción
Ya hemos visto como crear nuestro propio paquete, con la estructura de carpetas deseada,
crear mensajes personalizados, enviar y recibir mensajes, etc. El objetivo es crear un nuevo
paquete llamado interacción. Será necesario definir tres tipos de mensajes y cinco nodos. La
estructura es sencilla y se puede ver a continuación:

informacion_personal_nodo: pedirá por teclado el nombre, la edad y los posibles idiomas que
habla un usuario inventado. Este nodo estará en un bucle pidiendo información de tal manera
que se pueden introducir todos los usuarios que se desee.

emocion_usuario_nodo: de manera similar al anterior se pedirá indefinidamente, por teclado,


y en bucle la emoción expresada por el usuario.

MELECT_M7T4_171205
1
posicion_usuario_nodo: se pedirá por teclado las coordenadas del usuario en el espacio. Se
podrán introducir tantas veces como se quiera.

empaquetador_nodo: se encarga de juntar la información recibida por cada uno de los


tres
nodos en un único mensaje de ros que se lo enviará al dialogo_nodo. Hasta que no se reciban
todos los campos del mensaje a enviar, este no podrá ser enviado. Si se reciben varios mensajes
de un tipo sin haberse recibido el resto de los campos, se deberá quedarse con el último
mensaje recibido. Una vez se envié el mensaje al dialogo_nodo, se empezará a construir un
mensaje nuevo.

dialogo_nodo: se encarga de mostrar por terminal cada mensaje que recibe del nodo
empaquetador.

Los objetivos son:

a) Crear la estructura correcta y que compile.


b) Comprobar que el paso de mensajes es correcto.
c) Generar el grafo de nodos y paso de mensajes.
d) Grabar mediante rosbag unos ejemplos de uso.
e) Crear un launcher que lance todos los nodos.
f) Reproducir la interacción grabada con rosbag para que el profesor lo vea.

MELECT_M7T4_171205
2
emocion_usuario_nodo

topic: emocion_topic
informacion_personal_nodo posicion_usuario_nodo
type: std_msgs/String

topic: inf_pers_topic topic: pos_usuario_topic


type: inf_personal_usuario type: pos_usuario
empaquetado
r_nodo int x
string nombre int y
int edad int z
string[] idiomas
pos_usuario.msg
inf_personal_usuario.msg
topic: user_topic
type: usuario

inf_personal_usuario infPersonal
string emocion
pos_usuario posicion

usuario.msg

Leyenda dialogo_nodo

nodo

tipo_mensaje

MELECT_M7T4_171205
3
Añadiendo Servicios al ejercicio

Al ejercicio anteriormente propuesto vamos a añadirle un nuevo nodo que se encargue de


ofrecer servicios que realicen operaciones matemáticas. En este caso simplemente queremos
dialogo_nodo multiplique la edad recibida del usuario por dos. Para ello deberá invocar el
servicio servicio_multiplicador registrado por el nodo matematico_nodo. El resultado debe ser
mostrado por terminal por dialoogo_nodo.

emocion_usuario_nodo

informacion_personal_nodo topic: emocion_topic posicion_usuario_nodo


type: std_msgs/String

topic: inf_pers_topic topic: pos_usuario_topic


type: inf_personal_usuario type: pos_usuario
empaquetado
r_nodo int x
string nombre
int y
int edad int z
string[] idiomas
pos_usuario.msg
inf_personal_usuario.msg
topic: user_topic
type: usuario

inf_personal_usuario infPersonal
string emocion
pos_usuario posicion
matematico_nodo
usuario.msg

Leyenda dialogo_nodo int entrada


int resultado

nodo
multiplicador.srv

tipo_mensaje

MELECT_M7T4_171205
4
Añadiendo Temporizadores y nodos que trabajan con el tiempo

Al ejercicio anteriormente propuesto vamos a añadirle un nuevo nodo reloj_nodo. Este nodo se
activará mediante un mensaje que le envié dialogo_nodo llamado start_topic. Este mensaje es
enviado cuando dialogo_nodo recibe la información suministrada por el empaquetador y el
nodo matemático. La primera vez enviará start_topic, las sucesivas veces enviará reset_topic.

El nodo reloj_nodo cuando reciba el mensaje de comenzar empezará a mostrar en pantalla la


hora actual (tanto en formato UTC como en local) a una frecuencia de 3 veces por segundo.
Además de mostrar los segundos transcurridos desde el instante actual hasta que se recibió el
último mensaje de start o de reset.

Además el nodo_reloj deberá tener un Timer que se venza cada minuto. Una vez que se venza
dicho Timer enviará un mensaje de still_alive al nodo dialogo_nodo. Este último deberá mostrar
en pantalla que el reloj sigue funcionando correctamente.

Se deberá añadir al launcher los nodos necesarios.

MELECT_M7T4_171205
5
emocion_usuario_nodo

topic: emocion_topic
informacion_personal_nodo posicion_usuario_nodo
type: std_msgs/String

topic: inf_pers_topic topic: pos_usuario_topic


type: inf_personal_usuario type: pos_usuario
empaquetado
r_nodo int x
string nombre int y
int edad int z
string[] idiomas
pos_usuario.msg
inf_personal_usuario.msg
topic: still_alive topic: user_topic
type: std_msgs/Bool type: usuario

inf_personal_usuario infPersonal
string emocion
pos_usuario posicion
topic: start_topic
matematico_nodo
type: std_msgs/String
usuario.msg
reloj_nodo

dialogo_nodo int entrada


Leyenda
topic: reset_topic int resultado
type: std_msgs/String
nodo
multiplicador.srv

tipo_mensaje

MELECT_M7T4_171205
6
Añadiendo Síntesis de voz (TTS)

Adicionalmente a la salida por pantalla del nodo dialogo_nodo se pide que se emita por los
altavoces del sistema mediante un software de Text To Speech.

Para ello instalar el paquete espeak.

$ sudo apt-get install espeak

Desde el nodo_dialogo hacer una llamada al sistema con el texto a sintetizar, de una manera
similar a la siguiente:

string text= “Este es el texto a sintetizar”;

string command = “espeak –v es \“” + text +”\””;

sytem (command.c_str());

MELECT_M7T4_171205
7
Ejecutando los nodos remotamente

ROS está concebido para ser usado de manera distribuida, con lo cual si hemos seguidos los
pasos correctamente, vamos a probar a lanzar los nodos en diferentes ordenadores. Para ello
los ordenadores deben estar conectados en el mismo segmento de red (en el caso de la
univerisad podrán estar conectados por VPN para conseguir estar bajo el mismo segmento de

red), cada uno de estos ordenadores lanzará uno de los nodos del ejercicio anterior. El
ordenador que ejecute dialogo_nodo debe recibir y mostrar en pantalla correctamente la
información suministrada.

Es necesario en cada PC establecer el ordenador donde corre el roscore. Sólo uno de los pc’s
ejecutará roscore (al que llamaremos MASTER), en cambio todos deben establecer la variable
de entorno que indica en que IP corre el master:

export ROS_MASTER_URI= http://ip_donde_corre_ros_core:11311

Podemos encontrarnos con algún problema de red, permisos, etc. Se recomienda usar ping,
netcat, cortaguegos:

/etc/hosts.deny

/etc/hosts.allow

/etc/hosts

Para probar el funcionamiento distribuido de ROS se recomienda al usuario que implemente un


chat sencillo. En el cual se pueda realizar una conversación multiusuario.
MELECT_M7T4_171205
8
Solución del problema con el código fuente comentado

Para comprobar si efectivamente la solución adoptada coincide con la solución aportada por el
profesor, se pone a disposición del alumno el código fuente que soluciona el problema
planteado.

MELECT_M7T4_171205
9
3. Forma de entrega
La entrega de la práctica ha de hacerse a través de la plataforma en el espacio habilitado
para ello. Todas aquellas prácticas que no sean entregadas por este medio y/o fuera de las

fechas inicio y fin del curso, pueden no ser consideradas para su corrección y su
correspondiente calificación.

Para acceder al espacio habilitado para la entrega de prácticas, ha de entrar en la práctica


correspondiente y hacer clic en “Agregar entrega” Una vez dentro, puede dejar
escrito un
texto en el recuadro “Texto en línea”. Este escrito puede ser una aclaración para los docentes
sobre su práctica, o puede ser ésta misma si pudiese entregarse con sólo texto. Así
mismo,
puede adjuntar un archivo con la tarea resuelta. Para ello, en “ rchivos enviados” puede
arrastrar dentro del recuadro el archivo que desea adjunta, o puede buscar el archivo en
ordenador haciendo clic en “ gregar ”.

Una vez seguros de haber adjuntado correctamente las prácticas, hay que pinchar en el
botón “Guardar cambios”

4. Tiempo estimado
- Tiempo: 16 horas.

5. Materiales Necesarios
- Un ordenador con al menos Ubuntu 14.04 y ROS indigo instalados.
MELECT_M7T4_171205
10
6. Matriz Calificación

Nº Criterios
Puntaje Puntaje Comentario
máximo obtenido

Consideró los puntos solicitados


en la
entrega de la tarea (Nombre del
1 recurso, formato, dirección web, 3
descripción y fuente o autor).

2 Elrecurso aporta información 5


relacionada al módulo 1
Redacta una breve conclusión entre 3 y
3 5 líneas, justificando la elección 2
del
recurso digital elegido. 10
Total

MELECT_M7T4_171205
11

Вам также может понравиться