Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


De la vida (ayuda porfavor), Resúmenes de Matemáticas

Lo que pasa cuando pasa pasa que eso pasa por eso pasa

Tipo: Resúmenes

2021/2022

Subido el 29/12/2023

cara-cona
cara-cona 🇪🇸

7 documentos

1 / 4

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Plataformas Software en Robótica
Boletín 3: Servicios con ROS en C++
Ej1: Cread un mensaje personalizado (fibo.srv) para un servicio con los campos:
tope (int32, request)
lista (string, response)
Ej2: Cread un servicio “fibonacci” que reciba un mensaje personalizado fibo.srv y
calcule la secuencia de números fibonacci hasta el elemento tope”. Los numeros
generados se guardarán en un string y se devolverán al cliente del servicio.
No hace falta usar recursividad para el cálculo de los números fibonacci. Lo
podéis hacer con un bucle for.
Los números fibonacci crecen muy rápido. Usad un double para almacenarlos.
Es un servicio de juguete, no pongáis un tope muy alto (aprox. tope<100)
Para guardar los números en un string usad la librería stringstream que facilita
las cosas. Funciona parecido a cout pero almacena el contenido en un buffer
que luego podemos convertir a cadena
#include<sstream>
using namespace std;
stringstream ss;
ss<<numero<<”,”<<numero2;
..
ss.str()
Ej3: Cread un cliente para llamar al servicio fibonacci empleando el mensaje
personalizado fibo.srv. El cliente deberá de esperar a que el servicio esté activo y
solicitará por pantalla el tope para crear la lista de números. Una vez finalice
correctamente el servicio, se imprimirá por pantalla la lista de números fibonacci
devuelta en el mensaje.
Ej4: Lanzad el simulador stage con el turtlebot para crear un servicio que permita
mover al robot realizando movimientos en cuadrado. Para lanzar el servicio
necesitamos llamarlo con un mensaje que contenga el área del cuadrado y el
número de cuadrados que va a dibujar. El área del cuadrado sera un concepto que
realmente definirá lo “grande” que es cada lado y para eso usaremos el valor que le
pasamos en “request.area” como si fuesen segundos en los que el robot se va a
mover a una velocidad de 0.3 para dibujar cada lado. Ej. si le pasamos área=2 el
robot avanzará 2 segundos a una velocidad 0.3 para dibujar cada lado (movemos,
esperamos 1 sg, volvemos a mover, volvemos a esperar). Al terminar de dibujar un
lado tendrá que girar para hacer el siguiente lado. El robot parará el movimiento si
detecta un obstáculo enfrente a menos de 1 metro (requiere varios hilos de
escucha). El servicio deberá de devolver un valor booleano (response.status= true)
si ejecutó el movimiento previsto o false si no pudo realizarlo por estar muy cerca
de un obstáculo.
Para que gire 90º habría que estar mandando mensajes en un bucle y vigilando
la odometría. Para hacerlo más sencillo podéis usar este bucle que “encaja” el
giro:
msg.angular.z=1.6;
for (int i =0;i<2; i++){
pub.publish(msg);
loop_rate.sleep(); //loop_rate de 1hz
}
pf3
pf4

Vista previa parcial del texto

¡Descarga De la vida (ayuda porfavor) y más Resúmenes en PDF de Matemáticas solo en Docsity!

Plataformas Software en Robótica

Boletín 3: Servicios con ROS en C++

  • Ej1 : Cread un mensaje personalizado ( fibo.srv ) para un servicio con los campos: ◦ tope (int32, request) ◦ lista (string, response)
  • Ej2 : Cread un servicio “fibonacci” que reciba un mensaje personalizado fibo.srv y calcule la secuencia de números fibonacci hasta el elemento “ tope ”. Los numeros generados se guardarán en un string y se devolverán al cliente del servicio. ◦ No hace falta usar recursividad para el cálculo de los números fibonacci. Lo podéis hacer con un bucle for. ◦ Los números fibonacci crecen muy rápido. Usad un double para almacenarlos. ◦ Es un servicio de juguete, no pongáis un tope muy alto (aprox. tope<100) ◦ Para guardar los números en un string usad la librería stringstream que facilita las cosas. Funciona parecido a cout pero almacena el contenido en un buffer que luego podemos convertir a cadena #include using namespace std; … stringstream ss; ss<<numero<<”,”<<numero2; .. ss.str()
  • Ej3 : Cread un cliente para llamar al servicio fibonacci empleando el mensaje personalizado fibo.srv. El cliente deberá de esperar a que el servicio esté activo y solicitará por pantalla el tope para crear la lista de números. Una vez finalice correctamente el servicio, se imprimirá por pantalla la lista de números fibonacci devuelta en el mensaje.
  • Ej4 : Lanzad el simulador stage con el turtlebot para crear un servicio que permita mover al robot realizando movimientos en cuadrado. Para lanzar el servicio necesitamos llamarlo con un mensaje que contenga el área del cuadrado y el número de cuadrados que va a dibujar. El área del cuadrado sera un concepto que realmente definirá lo “grande” que es cada lado y para eso usaremos el valor que le pasamos en “request.area” como si fuesen segundos en los que el robot se va a mover a una velocidad de 0.3 para dibujar cada lado. Ej. si le pasamos área=2 el robot avanzará 2 segundos a una velocidad 0.3 para dibujar cada lado (movemos, esperamos 1 sg, volvemos a mover, volvemos a esperar). Al terminar de dibujar un lado tendrá que girar para hacer el siguiente lado. El robot parará el movimiento si detecta un obstáculo enfrente a menos de 1 metro (requiere varios hilos de escucha). El servicio deberá de devolver un valor booleano (response.status= true ) si ejecutó el movimiento previsto o false si no pudo realizarlo por estar muy cerca de un obstáculo. ◦ Para que gire 90º habría que estar mandando mensajes en un bucle y vigilando la odometría. Para hacerlo más sencillo podéis usar este bucle que “encaja” el giro: msg.angular.z=1.6; for (int i = 0 ;i< 2 ; i++){ pub.publish(msg); loop_rate.sleep(); //loop_rate de 1hz }
  • Ej5: Examen parcial 2020- Cread un servicio (cliente y servidor) en el que el servidor reciba un mensaje personalizado con coordenadas ‘x’ e ‘y’. El servidor tiene que detectar la posición actual del robot y moverlo hasta la posición que le pide el cliente. El cliente, una vez finalizado el servicio, recibirá el resultado en un mensaje ( success = True o False ) y podrá enviar una nueva posición de coordenadas. Para realizar este ejercicio usaremos el simulador stage Notas para hacer el ejercicio:
  1. Para lanzar el simulador: roslaunch turtlebot_stage turtlebot_in_stage.launch
  2. El topic odom publica las posiciones del robot
  3. El simulador stage muestra las posiciones del robot en ‘x’ e ‘y’ (pulsando encima del robot) PERO para que coincidan las coordenadas que llegan por el topic y las coordenadas del stage es necesario incrementar en 2 las que llegan por el topic (ej. la posición (x=2,y=2) a través del stage es la posición (x=0,y=0) a través del topic)
  4. Desde el punto de vista del simulador, solo vamos a dejar mover al robot entre las siguientes coordenadas (para evitar las paredes). ▪ X=[0.5,3.0]; y=[0.5,5.0] ▪ Las coordenadas podrán tener un decimal (ej. x=3.1; y=1.2) ▪ Cualquier otra coordenada solicitada no iniciará el movimiento y mandará un success=False al cliente. ▪ No es necesario comprobar la distancia al obstáculo, ya que restringimos el movimiento.
  5. Tened en cuenta la siguiente conversión (se pueden comprobar ejecutando el stage y moviendo el robot publicando directamente sobre el topic adecuado): una velocidad lineal de 0.1 cada segundo desplaza 0.05 la posición de la coordenada x.
  6. Para girar el robot podéis adaptar este código (cada vuelta del bucle son 45º) msg.angular.z=1.6; for (int i = 0 ;i<vueltas; i++){ pub.publish(msg); loop_rate.sleep(); //loop_rate de 1hz } Nota: si en las pruebas cerramos e iniciamos muchas veces el stage o nuestro servicio puede que el simulador quede en un estado “raro” que no responde como debería. Si detectamos esa situación lo mejor es cerrar todas las ventas y reiniciar el simulador desde cero. Recomendación: dejad la parte del cliente para el final, ya que podemos ejecutar el servidor desde la terminal pasando el mensaje adecuado e ir observando el comportamiento.
  • Ej 7. Desarrollad el ejercicio 5 a través de clases: El objetivo de este ejercicio es presentaros una posible implementación a través de clases de los ejercicios que estamos desarrollando en los boletines.