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.
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.
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.
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.
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.
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.
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.
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.
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.