Documentos de Académico
Documentos de Profesional
Documentos de Cultura
este trabajo puede ser retomado por otros investigadores o incluso realizar un trabajo en
paralelo con el controlador implementado de una forma sencilla.
controllerNameCallback: esta función tiene como objetivo rellenar una lista con
los nombres de los controladores disponibles en la red de ROS (en este caso solo habrá
uno, el controlador de ROS que tiene el vehículo autónomo).
o Entrada: mensaje con el nombre del controlador.
o Salida: se introduce el controlador en la lista de controladores y aumenta el
contador de controladores.
GPSCallback: esta función tiene como objetivo almacenar la posición captada por el
dispositivo GPS.
o Entrada: valores recogidos por el dispositivo GPS.
o Salida: los valores recogidos por el dispositivo GPS quedan almacenados en su
variable correspondiente.
compassCallback: esta función tiene como objetivo almacenar los valores recogidos
por el dispositivo brújula.
o Entrada: valores recogidos por el dispositivo brújula.
o Salida: los valores recogidos por el dispositivo brújula quedan almacenados en
su variable correspondiente.
87
quit: esta función tiene como objetivo detener la ejecución del controlador.
o Entrada: señal de finalización.
o Salida: se detiene la simulación y termina con la comunicación entre el
controlador del vehículo y el hilo de ROS.
Salvo estos cambios en la asignación de los valores de los dispositivos del vehículo, la
funcionalidad del controlador como tal es exactamente la misma. Se han eliminado los métodos
establecerAnguloDireccion (por no ser necesario como se ha mencionado antes) y
ejecutar (porque su funcionalidad ha pasado al método main). El resto de métodos no han
sido modificados.
88
5.3.4.3. Función main
La función main sigue siendo la función principal del controlador, pero ha sufrido
grandes cambios respecto a la implementación básica en C++. Al no existir ya la clase
controladorVehiculoAutonomo para instanciar y llamar a su función ejecutar, ahora la
función main contiene de forma explícita toda la funcionalidad de esa función ejecutar.
Además de contener la funcionalidad de la antigua función ejecutar, también implementa
todo lo necesario para activar los dispositivos del vehículo autónomo mediante ROS, así como
la búsqueda del controlador del vehículo y la subscripción al hilo creado por este para poder
establecer así la comunicación mediante el controlador del vehículo autónomo y el controlador
de ROS que utiliza éste dentro de Webots.
En la Figura 61 se puede ver de forma gráfica lo que ocurre mientras se está ejecutando
el controlador de ROS, el controlador del vehículo autónomo y la simulación está activa.
89
Como se puede observar, existen dos partes en las conexiones que se están llevando a
cabo. Por una parte, tenemos el nodo llamado carrito_4141_gutmor_VirtualBox, que se
corresponde con el nodo generado por el controlador ROS de Webots para la simulación que se
está llevando a cabo en el programa. Ese nodo identifica al vehículo autónomo dentro de la
simulación. Por otra parte, está el nodo controladorVehiculoAutonomo que se corresponde con
el nodo del controlador implementado en C++ para el control del vehículo autónomo. Se pueden
distinguir además tres hilos a través de los que se están comunicando los dos nodos antes
mencionados. Estos hilos corresponden con los dispositivos brújula, laser SICK y GPS.
En la Figura 62 puede verse como se comunican ambos nodos mediante estos hilos. Por
ejemplo, el nodo correspondiente al vehículo autónomo, en azul, publica los datos recogidos
por el dispositivo brújula en su hilo correspondiente, en rojo, mientras que el n odo
correspondiente al controlador, en verde, está suscrito a ese mismo hilo para poder utilizar los
datos recogidos por la brújula para llevar a cabo su funcionalidad.
Figura 62: Publicación y subscripción a un hilo durante la ejecución del controlador en ROS
Para explicar de una forma más sencilla como funciona el controlador mediante ROS, en
la Figura 63 se presenta un esquema de lo que ocurre cuando se necesita cambiar el ángulo de
las ruedas del vehículo.
90
Figura 63: Ejemplo funcionamiento de ROS para modificar ángulo de rueda
1. El nodo del controlador recibe los datos recogidos por los sensores del vehículo
mediante su suscripción a los hilos correspondientes.
2. Tras analizar esos datos, se determina que se debe cambiar el ángulo de las ruedas del
vehículo.
3. El nodo del controlador envía una petición al nodo del vehículo autónomo con un nuevo
valor para el ángulo de las ruedas para que éste lo cambie en la simulación.
4. El nodo del vehículo autónomo envía una respuesta al nodo del controlador indicando
si la operación requerida se ha llevado a cabo satisfactoriamente o no.
91