HoverGames: Air Strategist Companion
Mejora la conciencia situacional para los equipos de bomberos forestales.
Autor: Raúl Alvarez Torrico
Esta es una traducción automática (pueden haber algunos errores de traducción) de mi proyecto original en inglés presentado la competencia de diseño "HoverGames Challenge 1: Fight Fire with Flyers" organizado por NXP. Puedes ver el artículo original en este enlace. El código de programa y diagramas aún están en Inglés.
Resumen
Air Strategist Companion es un sistema compuesto por un dron quadrotor, un servidor web y una aplicación de Android diseñada con el propósito de mejorar la conciencia situacional para los equipos de bomberos forestales.
El sistema rastrea los puntos de incendio y los miembros del equipo de extinción de incendios en tiempo real, y muestra sus ubicaciones en un mapa en línea al que se puede acceder desde un navegador web y también desde la aplicación de Android. El dron vuela sobre el área del incendio y utiliza una cámara infrarroja con visión por computadora para identificar puntos de incendio. Elige los tres más grandes en su campo de visión, para seguir de forma autónoma el patrón compuesto por ellos. Si el patrón de fuego cambia de forma, tamaño o ubicación, el dron lo rastreará y se reubicará sobre él sin intervención humana. También puede rastrear individualmente cada uno de los puntos de incendio en el patrón. Cada pocos segundos, el dron carga en el servidor web aproximaciones poligonales de los puntos de incendio detectados para dibujar en el mapa, junto con una foto de la cámara tomada desde su vista superior. También carga sus propias coordenadas GPS, velocidad de avance y altitud global / relativa; las coordenadas cartesianas y el área de superficie calculada de cada punto de incendio y también el patrón de incendio principal, y la lectura de la temperatura del suelo tomada en su posición actual. El servidor web recibe toda esta información y la visualiza en una página web. La página web también tiene un panel de control desde el cual se pueden seleccionar hasta siete modos de tareas de seguimiento autónomo para el dron. También muestra los datos meteorológicos actuales y los pronósticos del tiempo para las próximas 24 horas.
La aplicación de Android desarrollada "a medida" está diseñada para instalarse en los dispositivos móviles de los miembros de la tripulación de bomberos. La aplicación rastrea las coordenadas GPS del dispositivo y las carga en el servidor web. La posición de todos los miembros de la tripulación detectados por el sistema se visualiza con marcadores en el mapa en línea, junto con sus nombres, códigos de identificación, coordenadas GPS y estado actual. La aplicación tiene un 'botón SOS' en la GUI que los miembros de la tripulación pueden presionar para enviar una señal de 'ayuda' al servidor, en cualquier momento que lo consideren necesario. Se puede acceder a la página web que contiene el mapa desde un navegador web y también se muestra en la GUI de la aplicación de Android. Aunque este prototipo usa una cámara infrarroja para identificar puntos de incendio, el sistema puede actualizarse para usar una cámara térmica con cambios mínimos, para obtener un sistema de detección de incendios más robusto.
Video: demostración de Air Strategist Companion
Diagrama de Bloques, Hardware y Descripción Funcional
Figura 1: Diagrama de bloques
La Figura 1 muestra los principales componentes funcionales del sistema. El dron utilizado para el prototipo es el quadrotor HoverGames RDDRONE-FMUK66 de NXP con una Unidad de Gestión de Vuelo (FMU) o controlador de vuelo RDDRONE-FMUK66, también de NXP. Está equipado con una Raspberry Pi 3 B+ como computadora complementaria y una cámara infrarroja Raspberry Pi NoIR V2.0. Se eligió una cámara infrarroja (IR) para este prototipo porque el fuego generalmente emite radiación infrarroja, que se puede usar para detectar fuego, detectando luz infrarroja en lugar de color visible, lo que hace posible en teoría detectar manchas de fuego incluso detrás del humo o el polvo (suponiendo que la cámara puede detectar la banda de radiación IR particular emitida por el tipo de combustión dado).
La computadora complementaria tiene su propia fuente de alimentación independiente, por lo que puede mantenerse en funcionamiento mientras el dron está apagado para cambiar la batería. Se ejecuta un programa basado en OpenCV para acceder a la imagen de video de la cámara y detectar puntos de incendio. La cámara está montada debajo del marco del cuadrotor, apuntando hacia el suelo. Una vez que se han detectado puntos de incendio, el algoritmo selecciona los tres más grandes y calcula los polígonos de aproximación geométrica para cada uno de ellos, junto con su posición correspondiente en las coordenadas cartesianas locales y también sus áreas de superficie correspondientes. También calcula las coordenadas cartesianas locales del centro geométrico o centroide del patrón de fuego principal. También se toma una fotografía de la zona de fuego desde la posición actual del dron cada pocos segundos, junto con una lectura de la temperatura del suelo utilizando el sensor de temperatura infrarrojo Melexis MLX90614, montado en el cuadrotor al lado de la cámara y también apuntando hacia abajo, a la tierra.
Figura 2: Dron terminado
Figura 3: Sistema completo
La computadora complementaria recibe datos de telemetría ddel dron (coordenadas GPS actuales, altitud global y relativa, velocidad de avance, etc.) desde el controlador de vuelo a través de una conexión de puerto serie mediante el protocolo MAVLink. Estos datos, junto con los datos de seguimiento de incendios del sistema de visión por computadora, se envían al servidor web mediante el protocolo HTTP. La computadora complementaria usa el middleware Robot Operating System (ROS) para "unir" todos sus componentes de software: interfaz de sensores, visión por computadora, vuelo autónomo, comunicaciones HTTP con el servidor y la interfaz MAVLink con el controlador de vuelo del dron. Dos nodos ROS escritos en Python y dos escritos en C++ se encargan de todas las tareas requeridas. Para el propósito de esta "prueba de concepto", el dron usa una conexión WiFi para cargar / descargar todos los datos hacia / desde el servidor, pero se lo puede actualizar fácilmente con un módem celular GPRS para operar en áreas relativamente remotas. La Figura 2 muestra la construcción completa del dron y la Figura 3 muestra el sistema completo, incluida la computadora del centro de comando y un par de dispositivos móviles. La Figura 4 muestra la computadora complementaria montada en el chasis del quadcopter, junto con la cámara y el sensor de temperatura. La Figura 5 muestra el diagrama de conexión, incluida la interfaz con el controlador de vuelo.
Figura 4a: Montaje de la computadora acompañante
Figura 4b: Montaje de la computadora acompañante
Figura 5: Diagrama de conexiones
Después de recibir todos los datos antes mencionados del dron y los dispositivos móviles de los miembros de la tripulación, el servidor realizará cálculos adicionales y conversiones de datos, en preparación para poner a disposición la página web antes mencionada (ver Figura 6). Toda la información en la página web se actualiza automáticamente cada pocos segundos.
Figura 6: Página web del sistema
Como se mencionó anteriormente, se ha desarrollado una aplicación de Android personalizada para el uso del equipo de bomberos (ver Figura 7). La aplicación lee desde el dispositivo móvil del miembro de la tripulación las coordenadas GPS y envía estos datos al servidor web, junto con su nombre, código de identificación (ID) y estado actual. También muestra en su GUI el mapa del servidor web y tiene un 'botón SOS' que el bombero puede presionar para enviar una señal SOS al servidor en cualquier momento que se considere necesario. También tiene un botón 'Iniciar seguimiento de posición' para iniciar el seguimiento de posición GPS del dispositivo y un botón 'Detener seguimiento de posición' para detenerlo, junto con algunas vistas de texto adicionales para monitorear datos auxiliares.
Figura 7: Aplicación Android a medida.
En el centro de comando, el personal a cargo puede monitorear toda la información puesta a disposición por el sistema y, al mismo tiempo, controlar los modos de tareas de seguimiento autónomo del dron, todo desde la misma página web. Se puede acceder a la página web desde cualquier lugar del mundo con una conexión a Internet (por lo que el sistema debería otorgar privilegios de acceso, pero eso se ignoró para este prototipo). Cuando comienzan las operaciones de campo, los miembros de la tripulación del centro de comando deben desplegar el dron sobre los alrededores del área de fuego; luego, deben activar el 'modo de seguimiento de fuego autónomo' del dron para que pueda realizar sus tareas. El dron está programado para rastrear focos de fuego y miembros de la tripulación sin intervención humana. Desde la página web (y también la aplicación de Android) se puede comandar el dron y ponerlo en siete modos de seguimiento diferentes:
- Rastrear Patrón de Fuego: para rastrear el centroide del patrón de fuego principal.
- Rastrear Punto de Fuego 1: para rastrear el punto de incendio detectado más grande.
- Rastrear Punto de Fuego 2: para rastrear el segundo punto de fuego en tamaño.
- Rastrear Punto de Fuego 3: para rastrear el tercer punto de fuego en tamaño.
- Rastrear Todos los Puntos de Fuego: para rastrear los tres puntos de fuego en modo de patrullaje, uno tras otro, haciendo una pausa en cada punto de fuego antes de pasar al siguiente.
- Rastrear Miembro de la Tripulación: para rastrear a un miembro de la tripulación de bomberos, que también se selecciona desde la página web.
- Rastrear a Todos los Miembros de la Tripulación: para rastrear a todos los miembros de la tripulación en modo de patrullaje, uno tras otro, haciendo una pausa en cada miembro de la tripulación antes de pasar al siguiente.
No importa en qué dirección avance o retroceda el fuego, el dron seguirá los puntos de incendio de forma autónoma para reubicarse sobre el área principal del fuego, en base a los datos adquiridos de su sensor de visión. Una vez que la batería se agota, el dron volverá a su posición de despegue y aterrizará para un cambio de batería, sin apagar la computadora complementaria, después de lo cual se lo puede volver a desplegar nuevamente.
En todo momento, el centro de comando puede recuperar el control manual del dron y cambiarlo nuevamente al modo de seguimiento autónomo, con la ayuda del transmisor de radio control (RC). Además, al utilizar el ecosistema de software del piloto automático PX4, los datos completos de telemetría del dron están disponibles en la computadora del centro de comando mediante el uso de software de estación terrestre, como QGroundControl, que está conectado permanentemente al dron a través de los módulos de telemetría. El software de la estación terrestre también muestra un mapa con la posición actual del dron y la trayectoria descrita por él, junto con una gran cantidad de datos de telemetría, y también se lo puede usar para cambiar el dron entre modo de control manual y modo autónomo, si es necesario. Debido a que el sistema se basa en ROS, también se puede acceder en tiempo real desde cualquier computadora con Linux instalado, a través de herramientas predeterminadas de ROS, las transmisiones de video en vivo, datos de seguimiento del fuego sin procesar, datos de miembros de la tripulación de bomberos y datos de telemetría del controlador de vuelo. Por ejemplo, todas las transmisiones de video del algoritmo de procesamiento de imágenes de la cámara están disponibles en tiempo real como tópicos de ROS.
Software de la Computadora Complementaria
La computadora complementaria Raspberry Pi ejecuta Ubuntu MATE 16.04 con ROS Kinetic instalado. Los siguientes nodos ROS están a cargo de todas las tareas requeridas:
'opencv_node': escrito en Python, se encarga de acceder al video en vivo de la cámara Raspberry Pi NoIR y de ejecutar el algoritmo de detección de incendios para encontrar los puntos de incendio. El nodo ROS 'raspicam_node' libremente disponible (consulte la sección Recursos) se utiliza para acceder a la alimentación de video de la cámara. Este nodo se comunica con la cámara, para obtener la secuencia de video y la publica en el tópico de video '/raspicam_node/image/compressed', al que se suscribe el 'opencv_node'. Después de detectar los puntos de incendio, la computadora complementaria calcula los polígonos de aproximación geométrica para los tres más grandes que comprenden el patrón de incendio principal. Luego publica los vértices definitorios de cada polígono como una cadena JSON en el tópico '/fire_polygons_json'; y el área de cada punto de incendio también, al tópico '/fire_polygons_area_json'. Las coordenadas cartesianas locales del centroide del patrón de fuego también están disponibles en el tópico '/fire_pattern/pose_point'. También publica el tópico '/fire_tracking_image/compressed', que contiene la imagen de video original de la cámara, con los puntos de incendio detectados y los polígonos de aproximación superpuestos. A partir de este mismo contenido de video, este nodo guarda un captura de imagen cada pocos segundos en el sistema de archivos de la computadora complementaria, que luego se enviará al servidor para que se muestre en la página web (consulte la Figura 6). Este nodo también publica el tópico '/modified_image/size' que contiene el ancho y la altura actual de la imagen de la cámara, que también debe cargarse en el servidor web con el fin de calcular un coeficiente de conversión, de unidades en píxeles, en el que se representan las longitudes y áreas en las imágenes de la cámara, a unidades en metros, en los que los objetos se representan sobre el mapa en la página web.
Se ha implementado un "filtro pasa bajo de promedio móvil" para filtrar las coordenadas del centroide del patrón de incendio, a fin de filtrar el ruido de alta frecuencia inherente en el proceso de detección de fuego en la imagen.
'mlx90614_sensor_node': escrito en C ++, se encarga de leer la temperatura desde el sensor infrarojo de temperatura MLX9014 [Tutorial de referencia mlx90614]. Publica el tópico '/mlx90614/temp' que contiene las lecturas de temperatura.
'http_client_node': escrito en Python, se suscribe a todos los tópicos mencionados anteriormente publicados por los dos nodos anteriores, y también a algunos tópicos de MAVROS. Por ejemplo, se suscribirá al tópico '/mavros/global_position/global', del cual obtendrá las coordenadas de latitud / longitud actuales del dron y también la altitud global. También se suscribirá a '/mavros/global_position/rel_alt', de donde obtendrá la altitud relativa actual del dron con respecto al suelo; y finalmente, al tópico '/mavros/vfr_hud', del cual obtendrá la velocidad de avance del dron. Este nodo procederá a intercambiar datos con el servidor en cuatro pasos:
- Acumula datos de todos los tópicos antes mencionados en un archivo XML y los envía al servidor web a través de un requerimiento HTTP POST.
- Al emitir un requerimiento POST adicional, también enviará la fotografía del incendio tomada por la cámara, previamente almacenada en el sistema de archivos de la computadora complementaria por 'opencv_node'.
- Al enviar un requerimiento GET, descargará del servidor web el comando correspondiente al modo de tarea actualmente selecciionado para el dron, emitido por el(los) usuario(s) desde la página web.
- Al enviar otra solicitud GET, descargará del servidor web los datos de la tripulación de bomberos que contienen principalmente el nombre, la identificación y las coordenadas GPS de cada miembro de la tripulación detectado por el sistema.
Estos datos se intercambian entre el dron y el servidor web cada tres segundos. Después de recibir datos del servidor web, este nodo publicará los siguientes tópicos de ROS:
- '/drone_commands/task_mode_cmd': contiene el comando correspondiente al modo de tarea actual seleccionado para el drone en la página web. Las siguientes opciones están disponibles: TRACK_PATTERN, TRACK_FIRE_SPOT_1, TRACK_FIRE_SPOT_2, TRACK_FIRE_SPOT_3, TRACK_ALL_SPOTS, TRACK_CREW_MEMBER, TRACK_ALL_CREW_MEMBERS);
- '/drone_commands/fighter_crew_list' : contiene una lista con las coordenadas GPS de cada miembro de la tripulación.
- '/drone_commands/sel_crew_member_idx' : contiene el índice de identificación para el miembro de la tripulación seleccionado actualmente que el drone debe rastrear.
'mavros_offboard_node': el dron se conecta a la computadora compañera utilizando MAVROS (que es un puente entre MAVLink y ROS), y este nodo se encarga de controlar las capacidades de vuelo autónomo del dron mediante la publicación de tópicos MAVROS, desde los cuales, comandos MAVLink son derivados y entregados al dron. Este nodo está escrito en C++ y se suscribe a los siguientes tópicos:
- '/mavros/local_position/pose': para obtener las coordenadas cartesianas locales del dron.
- '/fire_pattern/pose_point': para obtener las coordenadas locales del centroide del patrón de fuego.
- '/fire_pattern/fire_spot1_pose_point', '/fire_pattern/fire_spot2_pose_point' y '/fire_pattern/fire_spot3_pose_point' : para obtener las coordenadas cartesianas locales de los tres puntos de incendio principales.
- '/drone_commands/task_mode_cmd': para obtener el comando para el modo de tarea actual emitido desde la página web.
- '/drone_commands/sel_crew_member_idx': para obtener el índice de identificación correspondiente al miembro de la tripulación seleccionado actualmente, al cual el drone debe rastrear (necesario para la opción de comando de tarea TRACK_CREW_MEMBER).
- '/drone_commands/fighter_crew_list': para obtener la lista de coordenadas GPS de todos los miembros de la tripulación detectados por el sistema.
Este nodo utiliza el modo de vuelo "fuera de borda" (offboard) de PX4 para controlar la posición del dron publicando nuevas coordenadas de posición en el tópico 'mavros/setpoint_position/local', cada vez que el objetivo de seguimiento del dron ha cambiado.
La Aplicación Android
La aplicación de Android se ha desarrollado en Java utilizando el IDE de Android Studio. La GUI (ver Figura 7) se compone de seis objetos:
- Un objeto 'webView', que muestra el mapa generado por el servidor web.
- Un botón 'Start Pos. Tracking', para iniciar el monitoreo de ubicación GPS del dispositivo.
- Un botón 'Stop Pos. Tracking', para detener el monitoreo.
- Un botón 'Start SOS', para enviar la señal de 'ayuda' al servidor.
- Un objeto 'textView' que muestra los resultados de las solicitudes HTTP POST, enviadas por la aplicación al servidor web para cargar los datos del miembro de la tripulación.
- Un segundo objeto 'textView' para mostrar las coordenadas GPS actuales del dispositivo móvil.
Hay una función activada por tiempo en la aplicación, encargada de recopilar los datos del GPS y el estado actual (es decir, si se presionó el botón SOS o no), y enviar los datos al servidor web a través de un requerimiento HTTP POST cada pocos segundos.
La Aplicación del Servidor Web
El servidor web tiene una página web principal con código Javascript, además de un conjunto de scripts PHP encargados de recibir los datos del dron y de los dispositivos móviles de los miembros de la tripulación; así como los comandos de modo de tarea del drone emitidos desde el panel de control de la página web principal. Veamos qué hace cada uno de los scripts PHP:
'receive_telemetry_xml.php': este script recibe el archivo de telemetría XML desde la computadora complementaria, que contiene los siguientes datos:
- Las coordenadas GPS del dron, las altitudes globales / relativas y la velocidad de avance.
- Los vértices del polígono de aproximación para cada punto de incendio en coordenadas cartesianas locales y sus áreas de superficie correspondientes, ambas en unidades de píxeles.
- Las coordenadas cartesianas del centroide del patrón de fuego, en unidades de píxeles.
- El ancho y la altura de la imagen de la cámara, también en unidades de píxeles.
- La temperatura del suelo medida en la posición actual del dron en grados Celsius.
Una vez que se recibe el archivo XML, el script procede a guardar una copia del mismo en el sistema de archivos local del servidor. Con la copia de la cadena de caracteres XML todavía en la memoria RAM, procede a convertir todas las distancias y áreas recibidas, que están en unidades de 'píxeles de cámara', a metros. Para este propósito, calculará un factor de conversión '$pixel_to_meters' para convertir todas las medidas de unidades de píxeles a metros. La Figura 8 muestra cómo se calcula el factor de conversión utilizando la altitud relativa del dron con respecto al suelo, el ángulo del campo de visión de la cámara, el tamaño de la imagen de la cámara y el teorema de Pitágoras. Algunas suposiciones se hacen de antemano para mantener los cálculos simples. Luego, con la ayuda de este factor de conversión, los vértices del polígono de fuego y las coordenadas cartesianas del centroide del patrón de fuego se convierten de coordenadas cartesianas locales en unidades de píxeles a coordenadas polares, con las distancias en metros y ángulos en radianes. Luego, estas coordenadas polares se convierten en coordenadas globales de latitud y longitud [Referencia de distancia de PHP con GPS].
Figura 8: Conversión de unidades de pixel a metros.
El script reemplazará todas las coordenadas locales originales en la cadena XML, con las nuevas coordenadas GPS convertidas, y almacenará la cadena XML nuevamente en el sistema de archivos local del servidor como una nueva copia llamada 'drone_telemetry_conv.xml'. La página web utilizará las nuevas coordenadas GPS convertidas para visualizar los polígonos de fuego en el mapa.
'receive_image.php': este script se encarga de recibir la fotografía del incendio tomada por la cámara, guardada antes por el 'opencv_node' en la computadora acompañante; que luego se mostrará en la página web y se actualizará cada pocos segundos.
'receive_fighter_data.php': se encarga de atender el requerimiento HTTP POST de la aplicación de Android en los dispositivos móviles de los miembros de la tripulación. El script recibe datos del bombero como un conjunto de pares [clave: valor] con las siguientes claves disponibles: 'unix_time', 'name', 'id_code', 'latitude', 'longitude' y 'status'. En particular, la clave 'estado' lleva la información sobre si el 'botón SOS' en la aplicación fue presionado o no. 'Unix_time' es la marca de tiempo para las coordenadas GPS obtenidas y el resto de las claves, creo que se explican por sí mismas. El script recibirá datos de todos los bomberos en tarea, que tengan la aplicación ejecutándose en sus dispositivos móviles. Luego almacenará los datos en archivos de texto individuales en el sistema de archivos local del servidor, usando el nombre de cada bombero como nombre de archivo.
'dump_fighter_data_xml.php': este script, a solicitud de la página web principal ('index.html'), volcará los datos disponibles de cada bombero como una cadena XML; que la página web solicita de forma asíncrona cada pocos segundos para visualizar la información de cada miembro de la tripulación en la página web.
'receive_drone_task_cmd.php': se encarga de recibir comandos de modo de tarea del dron desde la página web y almacenarlos en el archivo 'drone_commands.xml'. Este archivo es solicitado por el 'http_client_node' en la computadora acompañante para controlar las tareas de seguimiento autónomo del dron.
'index.html': es la página web principal y ejecuta código Javascript para interactuar con la API de Google Maps, la API de OpenWeatherMap y nuestro propio servidor web, para lograr las siguientes tareas:
- Leer desde el servidor web todos los datos proporcionados por el dron e interactuar con la API de Google Maps para dibujar el mapa, los polígonos de fuego y todos los marcadores de mapa que representan la posición del dron, la posición del centroide del patrón de fuego y las posiciones de todos los miembros de la tripulación de bomberos.
- Leer los comandos de modo de tarea del dron emitidos por los usuarios desde el panel de control de la página web y enviar estos datos al servidor web.
- Interactuar con la API de OpenWeatherMap para solicitar el clima actual y los datos del pronóstico del tiempo; que luego se muestra en la parte inferior de la página web (ver Figura 9 y Figura 10).
Figura 9: Datos del clima accesados desde un navegador web.
Figura 10: Datos del clima accesados desde la aplicación Android.
La técnica Ajax ha sido usada para actualizar de forma asíncrona todos los datos dinámicos descritos anteriormente, sin volver a cargar la página. Para acceder a la API de Google Maps y a la API de OpenWeatherMap, las contraseñas API correspondientes deben configurarse en el código fuente de la página web para acceder a ambos servicios.
Datos Visualizados en el Mapa
Además de los objetos descritos anteriormente, que se visualizan en la página web, hay datos adicionales activados por eventos de clic de ratón en el mapa. La figura 11 los muestra. Por ejemplo, al hacer clic en el marcador del mapa que representa la posición actual del dron, aparece una ventana de información que muestra la altitud relativa del dron, la velocidad de avance, las coordenadas GPS y la temperatura del terreno medida en su ubicación actual. Al hacer clic en el marcador del mapa que representa el centroide del patrón de incendio, una ventana de información similar muestra el área total cubierta por el incendio en metros cuadrados y las coordenadas GPS del centroide. Al hacer clic en cualquiera de los tres polígonos de fuego, ventanas de información correspondientes mostrarán el área cubierta del punto de fuego seleccionado en metros cuadrados y las coordenadas GPS del punto exacto en el que se emitió el clic del mouse. Esta última característica ayuda a obtener fácilmente coordenadas GPS para cualquier punto cubierto por el fuego, que se pueden usar para planificar estrategias de trabajo. Finalmente, al hacer clic en cualquier marcador que represente a un miembro de la tripulación, se muestra su nombre, su estado (si presionó el botón SOS o no), su código de identificación y sus coordenadas GPS. Además, cuando el estado del bombero es "normal", su icono de marcador correspondiente se muestra en verde, y cuando el estado cambia a "ayuda" (después de presionar el botón SOS), el icono de marcador cambia a rojo.
Figura 11: Ventanas de información de los elementos del mapa.
Desarrollo
El código relacionado con el control del dron se desarrolló con el uso de simulación. Utilicé el simulador PX4 Gazebo 'Software in The Loop' (SITL), ejecutándolo en una PC Ubuntu 18.04 con ROS Melodic instalado.
El sistema fue ampliamente probado en simulación y funcionó muy bien. Lamentablemente, hasta la fecha final de presentación de este proyecto, no hubo tiempo suficiente para probar el sistema con el dron real, pero está listo para las pruebas de campo, que se realizarán en un futuro próximo.
Cómo Poner en Funcionamiento el Sistema
- Construya su dron siguiendo las instrucciones de compilación oficiales de NXP HoverGames (https://nxp.gitbook.io/HoverGames/userguide/getting-started). Es imprescindible configurar el dron con los siguientes modos de vuelo: 'Position', para despegar el dron de forma segura, 'Offboard' para activar el modo autónomo y 'Return' para regresar el dron a la posición de despegue, especialmente para intentar recuperar el dron en caso de emergencia o cuando la batería esté agotada. El interruptor 'Kill switch' debe configurarse también para apagar la energía de los motores en caso de cualquier emergencia irrecuperable o crítica.
- Descargue la imagen Ubuntu MATE 16.04 para Raspberry Pi y grábela en una tarjeta micro SD (16 GB como mínimo), instale todo el software y realice toda la configuración descrita en el archivo 'rpi_configuration.md', disponible en el repositorio de código del proyecto.
- Copie la carpeta del espacio de trabajo ROS 'airstrategist_ws' del repositorio en su directorio '/home/pi' de Raspberry Pi y compile el espacio de trabajo. Si es nuevo en ROS, consulte la sección Recursos para obtener un enlace a tutoriales básicos de ROS.
- Abra el archivo 'http_client_node.py' en la carpeta '/home/pi/airstrategist_ws/src/opencv_tracking/scripts' y cambie todas las referencias a la raíz de mi servidor ('http://tec.bo/airstrategist/…') para la suya, para que los requerimientos HTTP POST se envíen a su propio servidor.
- Configure su propio servidor web en una red de área local instalando software de servidor HTTP y PHP, o use un servicio comercial de alojamiento web. No se necesita software de base de datos.
- Copie la carpeta 'airstrategist' de la carpeta 'WebServer' en el repositorio, a la raíz de su servidor de alojamiento web o local.
- Realice las conexiones que se muestran en la Figura 5 e instale la computadora complementaria Raspberry Pi con su powerbank en el marco del dron, como se muestra en la Figura 4a y la Figura 4b.
- Instale Android Studio en su PC de desarrollo, abra el proyecto de la aplicación Android y, en el archivo 'MainActivity.java', cambie también todas las referencias a la raíz de mi servidor ('http://tec.bo/airstrategist/…') a la dirección de su servidor. Compile y cargue la aplicación en uno o más teléfonos móviles. La aplicación se probó con un dispositivo Samsung Galaxy Note 8 SM-N950F. Podría ser necesario un cambio en la API de Android de destino y otras configuraciones adicionales para compilar la aplicación para otros modelos de dispositivos.
- Encienda el dron, pero no lo arme todavía.
- Encienda el Raspberry Pi conectándolo a su banco de energía. Utiliza un 2 "banco de energía" de batería Li-ion 18650, por lo que el dron puede cambiar la batería sin la necesidad de apagar la computadora compañera.
- Abra una conexión SSH a la Raspberry Pi desde su PC al menos en dos ventanas de terminal separadas. En la primera ventana, ejecute el archivo de inicio MAVROS 'px4.launch'; Este archivo ejecuta el servidor ROS e instancia el nodo MAVROS para comunicarse con el controlador de vuelo del dron a través de mensajes ROS. En la segunda ventana de terminal, ejecute el archivo 'hovergames_drone.launch'; Este archivo ejecuta todos los nodos ROS escritos para el proyecto. Una vez que se ejecuta este código, el servidor web comenzará a recibir todos los datos y la página web principal estará disponible en 'http: // <your_server_domain> / airstrategist /'; al que se puede acceder a través de cualquier navegador web. Probé la página con Chrome y Firefox sin problemas. Consulte la demostración de video anterior para obtener instrucciones sobre cómo ejecutarlo en simulación.
- Abra la aplicación de Android en los dispositivos móviles. La aplicación mostrará la misma página web que contiene el mapa. Haga clic en 'Iniciar pos. Seguimiento 'para comenzar a enviar las coordenadas GPS de su dispositivo móvil y datos adicionales al servidor. Unos segundos después, su posición aparecerá en el mapa como un marcador verde.
- Conecte el módulo de telemetría a su PC y abra QGroundControl para conectarse con el dron.
- Arme el dron y despegue en el modo de vuelo 'Posición' a una altitud conveniente para sus pruebas. Para las pruebas, la altitud de seguimiento se fija en 10 metros, puede cambiar esto modificando la constante 'OFFBOARD_FLYING_ALTITUDE' en el archivo '/home/pi/airstrategist_ws/src/mavros_offboard/src/mavros_offboard_node.cpp'. Por seguridad, no pruebe el sistema con un dron real en altitudes superiores a 15 metros, a menos que sepa lo que está haciendo.
- Una vez que el dron esté a la altitud deseada, desde el transmisor RC o el software de control de tierra, cambie el modo de vuelo del dron a 'Offboard', para participar en un vuelo autónomo y el dron comenzará a rastrear el objetivo seleccionado; cambie nuevamente al modo 'Posición' para desactivar el vuelo autónomo y recuperar el control manual.
- Aterrice el dron manualmente usando el transmisor RC, o cambie el modo de vuelo a 'Regresar' y el dron volverá al punto de despegue.
ADVERTENCIA: es aconsejable probar meticulosamente todos los pasos descritos, desde el primero hasta el último por separado, mediante el uso de una estrategia de prueba / depuración incremental adecuada, para asegurarse de que todo el software y hardware funciona correctamente; ejecutar el sistema en un dron real sin las pruebas adecuadas puede ser muy peligroso. Puede probar el sistema primero en simulación utilizando el flujo de trabajo detallado en el archivo 'testing_in_simulation.md'.
Conclusiones y Mejoras Futuras
El sistema funcionó muy bien en simulación. Todavía se deben realizar extensas pruebas de campo con el quadcopter real. El seguimiento de fuego por visión por computadora funciona bastante bien; aunque el algoritmo de detección de incendios es propenso a falsos positivos porque la cámara también puede detectar luz IR de otras fuentes. Seguramente, una cámara infrarroja normal no es la mejor manera de detectar incendios; sin embargo, sirvió muy bien con el propósito de construir este prototipo de "prueba de concepto". El hardware del dron HoverGames es de bajo costo y relativamente asequible. El dron fue probado por sí mismo de forma exhaustiva (aunque no hubo tiempo suficiente para probarlo con el resto del sistema) y funciona muy bien. Es muy útil para el desarrollo; no obstante, en algunas circunstancias, sería preferible o incluso necesario realizar varias actualizaciones del hardware. La computadora complementaria Raspberry Pi 3 B + manejó bien todas las tareas informáticas. Era necesario instalar un disipador de calor y un ventilador de enfriamiento.Sin el ventilador de enfriamiento, la temperatura del procesador aumentó fácilmente hasta 60 + ° C; Con el ventilador de enfriamiento, la temperatura bajó a aproximadamente 48 ° C.
Algunas mejoras al sistema que me gustaría hacer en el futuro son las siguientes:
- Sería genial actualizar el sistema con una cámara termográfica adecuada; Los cambios necesarios en el código de reconocimiento de incendios serían mínimos.
- Se podría agregar un módem GPRS y quizás una conexión LoraWAN de respaldo, para que pueda funcionar en áreas remotas.
- Haga que el dron cambie automáticamente su altitud y orientación de vez en cuando, para obtener perspectivas de vista adicionales del suelo.
- Usa la temperatura del suelo medida para ajustar la altitud del dron. Se sabe que el calor reduce la densidad del aire, lo que a su vez reduce la elevación (fuerza aerodinámica). Si el aire está demasiado caliente, el dron debería subir a una altitud más alta para mejorar la sustentación y usar menos batería, lo que a su vez conserva la autonomía del vuelo.
- Sería genial implementar el despegue automático y la reubicación del dron sobre el área del incendio, especialmente después de un cambio de batería. El dron haría una panorámica de la cámara después de despegar, para detectar la zona de fuego. Luego vuela sobre él para continuar con las tareas de seguimiento.
- Implemente una base de datos en línea para almacenar datos históricos para su posterior análisis, utilizando aprendizaje automático e inteligencia artificial.
Recursos
¿Qué es ROS?
https://www.ros.org/about-ros/
Ubuntu MATE para Raspberry Pi Modelo B 2, 3 y 3+
https://ubuntu-mate.org/raspberry-pi/
Instalación ROS Kinetic en Ubuntu
http://wiki.ros.org/kinetic/Installation/Ubuntu
Nodo ROS para módulo de cámara de Raspberry Pi
https://github.com/UbiquityRobotics/raspicam_node
MAVROS
https://dev.px4.io/v1.9.0/en/ros/mavros_installation.html
Guía del usuario de Drone HoverGames
https://nxp.gitbook.io/hovergames/userguide/getting-started
PX4 Gazebo Simulation
https://dev.px4.io/v1.9.0/en/simulation/gazebo.html
Ubuntu MATE 16.04.2 para Raspberry Pi 2 y Raspberry Pi 3
https://ubuntu-mate.org/blog/ubuntu-mate-xenial-point-2-raspberry-pi/
Tutoriales ROS
http://wiki.ros.org/ROS/Tutorials
Descarga de los Recursos
El código está disponible en nuestro repositorio.
Suscríbete a Nuestro Boletín Para Recibir Noticias Acerca de Arduino y Otros Temas
Productos Relacionados en Nuestra Tienda Virtual
Kit Cuadricóptero S500 (Tren Largo) APM DJI Compatible Básico CompletoDetalles del Producto $us 513.00 |
Kit Cuadricóptero S500 (Tren Corto) APM DJI Compatible Básico CompletoDetalles del Producto $us 493.00 |