• No se han encontrado resultados

Aplicación para el control remoto del robot Turtlebot2

N/A
N/A
Protected

Academic year: 2023

Share "Aplicación para el control remoto del robot Turtlebot2"

Copied!
84
0
0

Texto completo

Luego se implementa una aplicación de Android que se comunica con el robot para medir la intensidad de la señal RSSI. Podemos obtener y almacenar la información de los sensores del robot para luego obtener referencias de la posición del Turtlebot2.

Figura 2.1: Sistema completo
Figura 2.1: Sistema completo

Medios utilizados en el proyecto

Medios Hardware

Medios Software

Robot Operating System (ROS)

Esto permite que un robot dentro de un sistema ROS acceda a la información de otra persona y la utilice, creando los escenarios más diversos. Como mencionamos anteriormente, un robot dentro de un sistema ROS puede tener cientos de unidades informáticas. Además, los nodos también utilizan servicios RPC (Request Procedimiento Cally) y un servidor de parámetros ROS.

Ruby on Rails

Esta versión albergará la creación del frontend de control y la implementación de la primera funcionalidad de movimiento de Turtlebot2 desde la aplicación. En primer lugar, será necesario instalar Ruby y Ruby on Rails en el servidor para el desarrollo de aplicaciones[9]. Finalmente, en la línea 6 de este archivo, está el comando que iniciará el servidor de aplicaciones Ruby on Rails.

Figura 3.2: Publicación/Suscripción en ROS
Figura 3.2: Publicación/Suscripción en ROS

Metodología 9

Dimensiones de prototipos

Prototipado vertical: Este tipo de prototipado da como resultado un sistema que tiene pocas características implementadas, pero sus funcionalidades están completamente implementadas. Prototipado horizontal: Sin embargo, este otro tipo de prototipo incluye todas las características del sistema pero no contiene la funcionalidad subyacente, es decir, solo sería una simulación de la interfaz del sistema sin ninguna funcionalidad. Nuestro proyecto utilizará prototipado vertical, ya que es necesario implementar completamente las funcionalidades definidas por los requisitos establecidos, para favorecer la evaluación del prototipo y la creación de la aplicación.

Fases del Prototipo Evolutivo

Modelo - Vista - Controlador

Finalmente destacamos que este prototipo servirá de base para crear una aplicación web en el servidor desde la que el usuario podrá controlar las distintas funciones de Turtlebot2. Finalmente, devolvemos el estado de la conexión y se lo mostraremos al usuario en la vista mencionada anteriormente en el Listado 5.20. Una vez implementada la funcionalidad, es necesario ver la implementación de la interfaz que se muestra en el Listado 5.35.

Resultados 13

Definición de Requisitos

Instale archivos adicionales o dependencias en Turtlebot2 (si es necesario) Establezca una comunicación satisfactoria entre las dos máquinas.

Diseño e Implementación del prototipo

Estas variables se denominan ROS_HOSTNAME, cuyo valor corresponde a la IP del servidor, y ROS_MASTER_URI, cuyo valor corresponde a la IP y el puerto de Turtlebot2. Si por el contrario nos muestra un mensaje de error, significaría que la conexión ha fallado y tendremos que comprobar la conectividad tanto de Turtlebot2 como de nuestro servidor en la misma red, las IP que tienen y nuestras variables de entorno. Ejecutando el comando del Listado 5.8 podremos acceder al movimiento del robot con nuestro teclado, moverlo en la dirección deseada e incluso cambiar la velocidad de movimiento de Turtlebot2.

Figura 5.1: Salidas del comando roscore (izqda) y rostopic list (dcha)
Figura 5.1: Salidas del comando roscore (izqda) y rostopic list (dcha)

Realimentación del prototipo

Evaluación Final

Segundo Prototipo: Creación de la aplicación y primera funcionalidad

  • Definición de Requisitos
  • Diseño e Implementación del prototipo
  • Realimentación del prototipo
  • Evaluación Final

ELIMINAR: Esta solicitud se realiza cuando se desea eliminar un elemento de la base de datos. Una vez agregada, debe ejecutar el comando Listing5.14 para instalar la gema. Como comentamos anteriormente, este archivo es imparcial, el cual se ubicará en la barra superior de la aplicación.

Figura 5.3: Boceto del menú inicial de la aplicación
Figura 5.3: Boceto del menú inicial de la aplicación

Tercer Prototipo: Aplicación de mapeado

  • Definición de requisitos
  • Diseño e Implementación del prototipo
  • Realimentación del prototipo
  • Evaluación final

Si se cumple esta condición, se ejecutará el método de la línea 6, iniciando el nodo. Posteriormente, mediante la función send_file descargaremos la imagen para que el usuario pueda acceder a ella. Antes de finalizar este apartado conviene aclarar que la carga y visualización de mapas en la aplicación queda excluida de la fase de diseño.

Figura 5.10: Funcionalidad de movimiento libre: Turtlebot2 desconectado y formulario actualizado
Figura 5.10: Funcionalidad de movimiento libre: Turtlebot2 desconectado y formulario actualizado

Cuarto Prototipo: Visualización del entorno

  • Definición de requisitos
  • Diseño e Implementación del prototipo
  • Realimentación del prototipo
  • Evaluación final

Una vez definido el elemento que mostrará las imágenes del stream al usuario, solo queda ejecutar el comando para iniciar el nodo. Al capturar la salida de este comando, sabremos si este nodo está suscrito a un tema o si no está iniciado. Finalmente, en la línea 5 está el comando necesario para iniciar el nodo y dejarlo en segundo plano, ya que no es necesario recuperar la salida estándar del comando en cuestión.

Quinto Prototipo: Funcionalidad de órdenes secuenciales

  • Definición de requisitos
  • Diseño e Implementación del prototipo
  • Realimentación del prototipo
  • Evaluación final

Por primera vez en este proyecto utilizaremos la base de datos de la aplicación, ya que almacenaremos las órdenes que el usuario defina, junto con la velocidad y el tiempo o número de veces que se ejecutarán. Se ha creado una funcionalidad dentro de la aplicación que permite generar mapas y descargar toda su información en un archivo Zip. Agregue una mejora a la visualización del mapa, incluida la posición actual de Turtlebot2 en él.

Figura 5.16: Funcionalidad de manejo libre con cámara integrada
Figura 5.16: Funcionalidad de manejo libre con cámara integrada

Conclusiones 55

Estimación de costes

Para fundamentar las competencias C1 y C2 se realizó el desarrollo de los objetivos O1 y O2, es decir, la instalación, configuración y setup del sistema operativo ROS, el lenguaje Ruby y el framework Ruby on Rails. en el servidor para que la aplicación se comunique con Turtlebot2. Para justificar la competencia C3 se realizó el diseño e implementación de la aplicación web de control remoto y sus funcionalidades y aplicaciones internas: Esto quiere decir que esta competencia se defiende por los objetivos O2, O3 y O4. El precio de las horas se calcula teniendo en cuenta que una hora de trabajo corresponde a 50€.

Propuestas de trabajo futuro

Arquitectura de la aplicación Ruby on Rails

Turtlebot2

Publicación/Suscripción en ROS

Modelo Vista Controlador

Roscore Y Rostopic

Movimiento del Turtlebot2 por teclado

Boceto del menú inicial de la aplicación

Diagrama de Secuencia: Conectar Robot

Boceto de la Funcionalidad de Movimiento Libre

Interfaz del menú inicial de la aplicación

Interfaz del menú inicial de la aplicación

Rotación del Turtlebot2

Menú inicial con Turtlebot2 conectado

Funcionalidad de movimiento libre: Turtlebot2 desconectado y formulario actualizado 33

Diagrama de secuencia: Funcionalidad de gestor de mapas

Bocetos de menú y control de la funcionalidad de mapeado

Bocetos de listado de mapas y mapa una vez abierto

Interfaz de la funcionalidad de mapeado

Funcionalidad de manejo libre con cámara integrada

Diagrama de secuencia: Funcionalidad de Movimientos secuenciales

Boceto Funcionalidad movimiento secuencial

Funcionalidad de Movimiento Secuencial

Resumen de objetivos

Justificación de competencias

Estimación de horas y costes

Estimación de costes hardware

Instalación de ROS

Inicialización de Rosdep

Configuración de las variables de entorno

Conexión SSH con el Turtlebot2

Inicialización de Roscore

Listado de Topics disponibles

Lanzamiento de scripts básicos

Teleoperación del Turtlebot2

Como puede ver, la aplicación web ejecutará un método llamado connect_robot, que transformará y ejecutará el método start_roscore, que ejecutará los comandos en Listings5.5y. Quieres que la interacción del usuario con la aplicación sea lo más fácil posible, por eso, como mencionamos antes, deseas implementar un formulario con 4 botones. La versión de Ruby que instalaremos será la 2.3.1 y la versión de Ruby on Rails será la 5.2.2.

Creación de nueva aplicación de Ruby on Rails

Inicialmente, queríamos imitar el movimiento como se ve en la Figura 5.2 presionando las teclas apropiadas. Sin embargo, dado que las pulsaciones de teclas requerirían implementar algún patrón que capture la pulsación de teclas en tiempo real, como el patrón Observer, se descartó por ser demasiado complejo, dejando solo los botones direccionales.

Lanzamiento del servidor de nuestra aplicación de Ruby on Rails

Lanzamiento del servidor de nuestra aplicación de Ruby on Rails

Welcome_controller.rb

Archivo index.html.erb

En Ruby on Rails, las bibliotecas se llaman Gems y las gemas se pueden instalar agregándolas al archivo Gem en la raíz del proyecto. La gema que necesitamos se llama net-ssh-session1 y nos permite abrir sesiones SSH con Turtlebot2. Para agregarlo al archivo Gem, simplemente escriba el nombre de la gema y la versión a usar al final del archivo y Ruby on Rails la buscará automáticamente.

Comando para instalar gemas en Ruby on Rails

Conectar Robot: arrancar servicios

Para hacer esto, decidimos llamar a la vista que albergará la funcionalidad de movimiento drive_robot.html.erb.

Vista de funcionalidad de manejo libre drive_robot.html.erb

Código del partial form_controls.html.erb

Sin embargo, aparecerá el formulario para seleccionar la dirección de Turtlebot2, como se describe anteriormente. Esta lista muestra los cuatro botones que tiene el formulario (que representan los cuatro diseños). Lo que harán estos envíos es que, cuando el usuario seleccione un movimiento, enviarán los parámetros al método select_direction (representado por la línea 2) a través de una solicitud POST.

Código del helper robot_actions_helper.rb

Este método, gracias al comando de la línea 3, creará una publicación sobre el tema/cmd_vel_mux/input/teleop, enviando para información un mensaje del tipo geometría_msgs/Twist, que tiene como parámetros un vector de velocidad lineal (o uno de velocidad angular). velocidad si fuera una curva). Finalmente, en la Figura 5.7 mostraremos cómo se implementa la interfaz de esta funcionalidad, en contraste con el boceto de la Figura 5.5 realizado anteriormente. Para ello se implementa un botón que lanza los comandos necesarios y recoge el estado de la conexión.

Figura 5.7: Interfaz del menú inicial de la aplicación
Figura 5.7: Interfaz del menú inicial de la aplicación

Implementación de partial _robot_status.html.erb

Por otro lado, se estima que es mejor que los servicios y nodos de Turtlebot2 se inicien a pedido, en lugar de hacerlo automáticamente al abrir la aplicación. Para hacer esto, en lugar de llamar al método start_rosocore como hicimos en el Listado 5.15, adjuntaremos una ruta y un método al botón, permitiendo que se llame a voluntad. El Listado 5.20 muestra la implementación del botón junto con una etiqueta que indica su estado.

Método get_robot_status

Además, cuando el usuario pasa el cursor sobre la etiqueta, si se produce un error, el usuario podrá ver el mensaje de error, por ejemplo, al conectarse a la dirección IP, nuestra máquina no pudo encontrarla en la red. Durante la creación de este prototipo, se notó que el movimiento realizado en la aplicación Turtlebot2 no se realiza de manera fluida, es decir, se realiza de manera intermitente, recorriendo espacios pequeños durante un corto período de tiempo. Por este motivo es fundamental mejorar el movimiento, porque un movimiento lento haría que la aplicación perdiera sentido y utilidad.

Creación del ROS Workspace

Cuando se muestra el estado, si el estado está vinculado, aparecerá una etiqueta verde con ese estado. Sin embargo, si la conexión falla o Turtlebot2 está desconectado, aparecerá una etiqueta roja. Esto nos lleva a considerar la creación de un script en Python para ejecutar el movimiento con mayor precisión.

Modificación de variable de entorno ROS_PACKAGE_PATH

Alojaremos este script en un paquete ROS, en Python y C++, para que podamos acceder a las bibliotecas de ROS. Por ello, utilizaremos este tutorial [13] como guía, donde se explica cómo crear un paquete ROS para desarrollar nuestros scripts. En particular, este ejemplo nos dice cómo crear un script para hacer avanzar Turtlebot2, pero primero configurará nuestro espacio de trabajo, que es nuestro entorno donde almacenaremos y desarrollaremos nuestros scripts ROS.

Creación de carpeta "src"para workspace de ROS

Fichero move.py

Creación de fichero move.py ejecutable

Las siguientes líneas (Líneas 12 - 16) establecerán las variables que marcarán el envío de mensajes: r para la velocidad de envío del mensaje, speedytime para los argumentos de velocidad y tiempo elegidos por el usuario, y move_cmd, que será un objeto. . Torsión que tiene dos vectores, uno para la velocidad lineal y otro para la velocidad angular. Las líneas 18-20 ejecutarán el bucle tantas veces como el usuario elija, publicando el mensaje una vez por iteración. Después de explicar qué hace el script, debe incluirse en la aplicación.

Helper robot_actions_helper.rb tras incluir cambios

Estableceremos que sólo queremos movernos en el eje X de forma lineal y que no queremos girar alrededor del eje Z de forma angular. Cuando finalice el ciclo, se ejecutará el método de apagado, publicando un mensaje Twist sin parámetros, o lo que sea, y enviando una orden al robot para que se detenga.

Método para girar el Turtlebot2 hacia la derecha

En este método podrás ver cómo el comando rostopic pub se ejecutará tantas veces como el número de veces que el usuario haya llamado, representado por la variable tiempo. Una vez publicado el aviso, esta publicación se realizará una vez al iteración del bucle para que el sistema ROS mantenga automáticamente el mensaje bloqueado y visible en el tema especificado durante 3 segundos. Se ha tomado como base de dicho script la implementación de este tutorial de ejemplo [14].

Script rotate.py : Rotación del Turtlebot2

En negro se indica el ángulo de giro a ejecutar, es decir, un giro de 90° hacia la derecha. Una vez que hayamos explicado el tipo de mapa que se generará, continuaremos explicando el comportamiento deseado de nuestro prototipo, para lo que usaremos el diagrama de secuencia que se encuentra en la Figura 5.12. Para mostrar el mapa generado en la aplicación web, debe guardar los archivos localmente.

Figura 5.8: Rotación del Turtlebot2
Figura 5.8: Rotación del Turtlebot2

Comando para guardar mapas en local

Finalmente, en la Figura 5.15 podemos ver cómo se ve la implementación de la interfaz descrita anteriormente en contraste con los bocetos de la Figura 5.13. Para resolver el error, se sugirió iniciar el nodo de la misma manera que iniciamos los servicios de Turtlebot en el Listado 5.15. Además, tendrá Javascript integrado para realizar las acciones, de modo que no sea necesario actualizar la página para verificar el estado de la tabla de pedidos.

Además, todas las acciones se eliminan de la tabla Robot_actions para evitar que Turtlebot2 ejecute nuevas órdenes. Para hacer esto, la creación de un Makefile determina que los archivos temporales de la aplicación se limpien y se inicien.

Figura 5.13: Bocetos de menú y control de la funcionalidad de mapeado
Figura 5.13: Bocetos de menú y control de la funcionalidad de mapeado

Figure

Figura 2.1: Sistema completo
Tabla 2.1: Resumen de objetivos ID Objetivo Resumen
Figura 3.1: Modelo Turtlebot2 utilizado en el proyecto
Figura 3.2: Publicación/Suscripción en ROS
+7

Referencias

Documento similar

Recomendó a los líderes educativos viajar en grupo, salir con el equipo de trabajo para aquellos que se encuentran ubicados en comunidades donde el Conafe ofrece