Desarrollo de un sistema conversacional con IA para el control de drones mediante voz
Abstract
This Bachelor's Final Project introduces a web application for controlling drones via voice commands, leveraging advanced artificial intelligence to process natural language and convert it into flight operations. Integrated into the Drone Engineering Ecosystem (DEE), the solution relies on a Flask-based backend and OpenAI's API to accurately interpret spoken commands, featuring both a conversational mode and a route planner capable of generating complete missions. Tests carried out with a MAVLink simulator demonstrate robust control and low latency. This approach enhances accessibility and autonomy in drone operations, laying the groundwork for future AI-driven improvements and real-world flight validations.
Full text
TRABAJO FINAL DE GRADO TÍTULO: Desarrollo de un sistema conversacional con IA para el control de drones mediante voz TITULACIÓN: Grado en Ingeniería de Sistemas de Telecomunicación AUTOR: Víctor Sorolla Bayod DIRECTOR: Miguel Valero García FECHA DEPÓSITO: 06/02/2025
TÍTULO: Desarrollo de un sistema conversacional con IA para el control de drones mediante voz TITULACIÓN: Grado en Ingeniería de Sistemas de Telecomunicación AUTOR: Víctor Sorolla Bayod DIRECTOR: Miguel Valero García FECHA DEPÓSITO: 06/02/2025 Resumen Este Trabajo de Fin de Grado presenta una aplicación web para el control de drones mediante comandos de voz, basada en técnicas avanzadas de inteligencia artificial para procesar el lenguaje natural y traducirlo en acciones de vuelo. La solución se integra en el Drone Engineering Ecosystem (DEE), donde un backend con Flask y la API de OpenAI interpretan instrucciones orales con alta precisión, ofreciendo tanto un modo conversacional como un planificador de rutas capaz de generar misiones completas. Las pruebas en un simulador MAVLink confirman un control robusto y baja latencia. Este enfoque potencia la accesibilidad y la autonomía en el manejo de drones, sentando las bases para futuras mejoras basadas en IA y validaciones en entornos de vuelo reales.
TITLE: Development of a Voice-Based Conversational AI System for Drone Control DEGREE: Bachelor's Degree in Telecommunications Systems Engineering AUTHOR: Víctor Sorolla Bayod DIRECTOR: Miguel Valero García SUBMISSION DATE: 06/02/2025 Abstract This Bachelor's Final Project introduces a web application for controlling drones via voice commands, leveraging advanced artificial intelligence to process natural language and convert it into flight operations. Integrated into the Drone Engineering Ecosystem (DEE), the solution relies on a Flask-based backend and OpenAI's API to accurately interpret spoken commands, featuring both a conversational mode and a route planner capable of generating complete missions. Tests carried out with a MAVLink simulator demonstrate robust control and low latency. This approach enhances accessibility and autonomy in drone operations, laying the groundwork for future AI-driven improvements and real-world flight validations.
Tabla de contenidos 1 INTRODUCCIÓN ..................................................................................................................... 4 2 CONTEXTO DE TRABAJO ..................................................................................................... 6 2.1 El dron ............................................................................................................................. 6 2.2 El Ecosistema DEE ......................................................................................................... 6 2.3 Sistema de Control Existente ........................................................................................ 7 3 OBJETIVOS DEL PROYECTO ............................................................................................... 8 3.1 Contribución al DEE ....................................................................................................... 8 3.2 Integración de Nuevas Funcionalidades ...................................................................... 9 3.3 Interfaz de usuario y control ......................................................................................... 9 3.4 Entorno de Desarrollo .................................................................................................. 10 3.5 Tareas del Proyecto ..................................................................................................... 10 3.6 Planificación temporal ................................................................................................. 11 4 TECNOLOGÍAS USADAS ..................................................................................................... 12 4.1 Backend: Flask y Python ............................................................................................. 12 4.1.1 ¿Qué es un endpoint? ............................................................................................ 12 4.2 Integración con OpenAI ............................................................................................... 13 4.3 Frontend y Visualización ............................................................................................. 14 4.4 Procesamiento de Audio ............................................................................................. 15 5 WEBAPP SEGURA ............................................................................................................... 16 6 SISTEMA DE CONTROL POR VOZ E INTERPRETACIÓN DE COMANDOS .................... 17 6.1 Componentes Principales ........................................................................................... 17 6.1.1 Captura y Procesamiento de Audio ........................................................................ 17 6.1.2 Interpretación Semántica ........................................................................................ 18 6.1.3 Generación de Acciones ......................................................................................... 19 6.1.4 Ejecución de Comandos ......................................................................................... 20 6.2 Sistema de Estados y Flujo de Control ...................................................................... 20 6.2.1 Estados Principales ................................................................................................ 21 6.2.2 Flujo de Procesamiento de Respuestas ................................................................. 21 6.2.3 Ejemplo de Flujo Completo ..................................................................................... 25 6.3 Integración en la Interfaz Web..................................................................................... 27 6.3.1 Frontend (HTML/JavaScript) .................................................................................. 27 7 INTERFAZ Y RETROALIMENTACIÓN VISUAL .................................................................. 30 7.1 Control Manual y Feedback ......................................................................................... 30
7.2 Ejecución de Misiones y Previsualización ................................................................. 31 7.2.1 Procesamiento de Comandos ................................................................................ 31 7.2.2 Generación y visualización de la ruta planificada ................................................... 31 7.2.3 Monitorización de Misión ........................................................................................ 33 7.3 Configuración de la Temperatura en OpenAI: Plan de Vuelo vs. Conversación ... 34 7.3.1 ¿Cómo funciona el parámetro temperature? .......................................................... 34 7.3.2 Modo Plan de Vuelo (temperature=0.3) ................................................................. 35 7.3.3 Modo Conversación (temperature=0.7) .................................................................. 36 7.3.4 Comparación de Comportamientos ........................................................................ 36 7.3.5 Pruebas y Ajustes ................................................................................................... 37 8 ENTORNO DE PRUEBAS ..................................................................................................... 38 8.1 Entorno de Pruebas ..................................................................................................... 38 8.2 Escenarios de Prueba .................................................................................................. 38 8.2.1 Pruebas de Control Manual .................................................................................... 38 8.2.2 Pruebas de Control por Voz (Modo Conversacional) ............................................. 39 8.2.3 Pruebas de Planificación de Vuelo (Modo Plan de Vuelo) ..................................... 41 8.3 Observaciones Relevantes .......................................................................................... 41 8.4 Limitaciones y Próximos Pasos de Validación ......................................................... 42 9 RETOS ESPECIALMENTE DESAFIANTES ......................................................................... 43 10 IMPACTO ECONÓMICO, MEDIOAMBIENTAL Y SOCIAL .................................................. 44 10.1 Económico .................................................................................................................... 44 10.2 Medioambiental ............................................................................................................ 44 10.3 Social ............................................................................................................................. 44 11 INTEGRACIÓN EN EL ECOSISTEMA DEE ......................................................................... 45 12 CONCLUSIONES .................................................................................................................. 47 12.1 Objetivos Alcanzados .................................................................................................. 47 12.2 Plan de Trabajo y Desviaciones .................................................................................. 47 12.3 Valoración Personal ..................................................................................................... 47 12.4 Líneas Futuras .............................................................................................................. 47 13 REFERENCIAS ...................................................................................................................... 49 14 ANEXO ................................................................................................................................... 50 14.1 Diagrama de flujo (flowchart) ...................................................................................... 50
Índice de figuras Figura 1: Fotografía del dron ......................................................................................................... 6 Figura 2: Esquema completo de la estructura del DEE ................................................................ 7 Figura 3: Diagrama de GANTT ................................................................................................... 11 Figura 4: Tarifas de la API de OpenAI según el modelo ............................................................. 13 Figura 5: Interfaz del panel de conversación .............................................................................. 14 Figura 6: Interfaz del panel de control manual ............................................................................ 15 ..................................................................................................................................................... 15 Figura 7: Interfaz del panel de plan de vuelo con una misión cargada ...................................... 15 Figura 8 : Interfaz integrada con mapa interactivo para control manual (izquierda) y Mission Planner para supervisión del vuelo (derecha). ............................................................................ 39 Figura 9: Interacción con el asistente virtual mostrando diferentes modos de personalidad (Normal, Preguntón y Borde) ...................................................................................................... 40 Figura 10: Mapa con la ruta previsualizada (línea discontinua) y el dron “moviendo” su posición en el simulador conforme avanza la misión. ............................................................................... 41 Figura 11.A: Lógica de estados y transiciones. .......................................................................... 50
Introducción 4 1 Introducción El presente Trabajo de Fin de Grado (TFG) tiene como objetivo el desarrollo de una aplicación web para el control de un dron mediante comandos de voz, integrando tecnologías de inteligencia artificial para la interpretación del lenguaje natural. Este proyecto se integra en el Drone Engineering Ecosystem (DEE), una infraestructura tecnológica desarrollada en la Escuela de Ingeniería de Telecomunicación y Aeroespacial de Castelldefels (EETAC) que proporciona un framework completo para el desarrollo de aplicaciones de drones, desarrollado de manera colaborativa por más de 30 alumnos de la EETAC, mediante sus Trabajos de final de estudios. Mi principal contribución en este trabajo ha sido el diseño y la implementación de una web app intuitiva y segura que permite a los usuarios controlar el dron de manera interactiva, mejorando la experiencia de uso y facilitando demostraciones a visitantes y potenciales usuarios del ecosistema. La aplicación integra múltiples funcionalidades clave: un sistema de control por voz con diferentes personalidades de interacción (profesional, educativa, informal), que adapta su comportamiento según el contexto de uso; un sistema de planificación de vuelo que permite dictar rutas y misiones completas mediante lenguaje natural; y una interfaz de visualización en tiempo real que muestra la posición del dron sobre un mapa interactivo, permitiendo seguir su trayectoria y el estado en el que se encuentra. La interfaz implementa dos modos principales de operación: un modo conversacional que procesa comandos de voz mediante inteligencia artificial, proporcionando feedback auditivo y visual. Por ejemplo, si el usuario dice “avanza tres metros”, la inteligencia artificial tiene que ser capaz de interpretar que acción tiene que hacer el dron y devolver una respuesta adecuada. Una de las grandes ventajas de implementar la IA en el procesamiento de los comandos, es que ésta es capaz de interpretar los comandos, es decir, no hace falta expresarse siempre de la misma forma y usar siempre las mismas palabras o verbos. Por ejemplo, en caso de que se dijera “dirígete tres metros hacia delante” la interpretación seria la misma, la cual se logra mediante el procesamiento de lenguaje natural de OpenAI, que comprende el contexto y la intención del usuario independientemente de la forma exacta en que se exprese el comando. El sistema incorpora cuatro personalidades distintas (Normal, Gracioso, Borde y Preguntón) que modifican la forma en que la IA interactúa con el usuario. También se incluye un planificador de rutas que permite definir misiones mediante instrucciones habladas, traduciendo automáticamente estas instrucciones un plan de vuelo autónomo y mostrado una previsualización de la ruta que seguirá el dron. También consta de un modo manual en el que se puede controlar el dron mediante botones para acciones más precisas o para retomar el control en caso necesario. La motivación personal para este proyecto surge del interés en el campo de los drones y la inteligencia artificial, así como del deseo de contribuir al avance de herramientas accesibles y funcionales para el manejo de drones. La estructura de esta memoria se organiza de la siguiente manera: La contextualización inicial presenta el Ecosistema de Ingeniería de Drones (DEE), estableciendo el marco tecnológico y las bases sobre las que se construye la aplicación. Esta sección examina la arquitectura del ecosistema y sus componentes principales, fundamentales para comprender las decisiones de diseño posteriores. El plan de trabajo y los objetivos definen el alcance del proyecto y la metodología empleada. La planificación detalla las fases de desarrollo, desde el análisis inicial hasta la implementación final, estableciendo hitos y entregables específicos. La sección de tecnologías examina las herramientas y frameworks seleccionados, justificando su elección en base a los requisitos del proyecto y su compatibilidad con el DEE. Este análisis
Introducción 5 abarca tanto las tecnologías de backend como los componentes de frontend necesarios para la implementación. La implementación de seguridad describe los mecanismos desarrollados para garantizar la integridad y fiabilidad del sistema. Posteriormente, el diseño de la interfaz detalla las decisiones tomadas para crear una experiencia de usuario intuitiva y fácil de usar. El núcleo técnico del proyecto se centra en el sistema de control por voz, describiendo la arquitectura de procesamiento de comandos vocales y su integración con el control del dron. Esta sección analiza la implementación del reconocimiento de voz y la interpretación de comandos mediante inteligencia artificial. Las pruebas y evaluación documentan la validación del sistema, seguidas por la descripción de la integración con el DEE. La memoria concluye con un análisis del impacto del proyecto y las conclusiones extraídas, incluyendo propuestas para futuras líneas de desarrollo.
Contexto de Trabajo 6 2 Contexto de Trabajo En este capítulo se describe el entorno en el que se desarrolla el proyecto. Se presentan primero las características principales del dron utilizado y, a continuación, se introduce la infraestructura general del DEE (Drone Engineering Ecosystem). También se explica el sistema de control que ya existía antes de comenzar este proyecto, con el fin de contextualizar los componentes de software y hardware sobre los que se han realizado las ampliaciones y mejoras. 2.1 El dron El hardware central del ecosistema DEE se basa en un dron cuadricóptero que integra múltiples sistemas para permitir un control preciso y funcionalidades avanzadas. El análisis detallado de sus componentes revela la sofisticación del sistema: El controlador de vuelo es una Pixhawk Orange Cube con firmware PX4. Dicho firmware ofrece distintos modos de vuelo (Altitud Hold, Loiter, RTL) y monitoriza la telemetría. Para la navegación, el dron cuenta con un módulo GPS con brújula y un sensor de flujo óptico que aporta posicionamiento relativo, además de un altímetro láser para medir la altura de forma más exacta. Cuatro motores brushless, controlados por ESCs individuales, proporcionan el empuje necesario, y toda la energía se distribuye a través de una placa de potencia que monitorea el consumo eléctrico. La comunicación se lleva a cabo por medio de un enlace de radio telemetría en 433 MHz y un receptor independiente para el control manual. Adicionalmente, el dron dispone de una Raspberry Pi a bordo que procesa datos de sensores y ejecuta algoritmos durante el vuelo. Figura 1: Fotografía del dron 2.2 El Ecosistema DEE El Drone Engineering Ecosystem (DEE) es un marco de trabajo colaborativo que agrupa diversos módulos de software y hardware para el control y la monitorización de drones. La figura 2 ilustra un esquema simplificado de su arquitectura principal, resaltando la comunicación mediante el protocolo MQTT: • Dron (nivel local), que incluye tanto el controlador de vuelo (Pixhawk) como la computadora a bordo.
Tecnologías Usadas 13 4. Durante la operación, se devuelven actualizaciones de estado al cliente (p. ej., “Dron en fase de ascenso”). 5. La interfaz web muestra esa retroalimentación, actualizando su visualización (posición en el mapa, mensajes de confirmación, etc.). 4.2 Integración con OpenAI La integración con OpenAI constituye uno de los elementos más críticos del sistema, ya que es responsable de interpretar los comandos de voz y generar respuestas contextuales. El sistema utiliza el modelo GPT-4 a través de la API de OpenAI, implementando un sistema de chat que mantiene el contexto de la conversación y gestiona diferentes personalidades de interacción. Para hacer uso de esta tecnología, se ha tenido que crear una cuenta en OpenAI y generar una clave API. Esta clave permite acceder a los modelos de lenguaje. Sin embargo, tiene un costo, que varía según el modelo que se use. En este proyecto se ha usado el modelo GPT-4o-mini, una versión optimizada que equilibra rendimiento y coste, siendo de los modelos más económicos. Cada llamada a la API tiene un coste fijo que varía según el número de input tokens y los outputs tokens. En otras palabras, cuanto más extenso sea el mensaje enviado y la respuesta recibida, mayor será el coste. Los tokens son unidades de texto que el modelo procesa. Por ejemplo, en español, una palabra corta suele ser un token, mientras que palabras más largas pueden ser varios tokens. Los comandos de voz típicamente son breves ("avanza tres metros", "gira a la derecha"), lo que resulta en un consumo reducido de tokens. En la siguiente tabla extraída de la propia web de OpenAI, se pueden ver los diferentes costes para cada modelo de lenguaje. Figura 4: Tarifas de la API de OpenAI según el modelo El modelo gpt-4o-mini, es el más económico con un coste de 0,75 dólares por millón de tokens generados, combinando tanto preguntas como respuestas. A pesar de ser el más económico, sus capacidades son más que suficientes para esta aplicación, ya que la interpretación de comandos de vuelo no requiere el nivel de complejidad y contextualización que ofrecen modelos más avanzados. En el contexto de este proyecto, se ha realizado un análisis de costes basado en el uso típico del sistema. Una sesión de vuelo promedio, que puede durar entre 10 y 15 minutos, genera
Tecnologías Usadas 14 aproximadamente entre 20 y 30 interacciones con la API. Considerando una media de 30 tokens por interacción (incluyendo el comando y la respuesta), una sesión típica consume alrededor de 900 tokens. Esto significa que, con un millón de tokens, el sistema podría gestionar más de 1,000 sesiones de vuelo completas, todo por un coste aproximado de 0,75 dólares. 4.3 Frontend y Visualización La interfaz de usuario se desarrolla utilizando HTML5, CSS3 y JavaScript diseñado para dispositivos móviles. Para la visualización cartográfica, se integra Leaflet.js, una biblioteca JavaScript que permite implementar mapas interactivos para visualizar la posición del dron en tiempo real dadas sus coordenadas. Para este proyecto se ha utilizado una capa de mapa satelital mediante Google Maps Tile Layer, proporcionando una representación detallada del entorno La interfaz de usuario implementa tres modos principales de operación: - Modo Conversacional: Permite el control mediante comandos de voz, con selección de diferentes personalidades para la interacción [Figura 5] - Modo Manual: Proporciona controles directos para operaciones básicas y movimientos direccionales [Figura 6]. - Modo Plan de Vuelo: Facilita la planificación de misiones mediante comandos de voz o texto, con previsualización de la ruta en el mapa [Figura 7]. Figura 5: Interfaz del panel de conversación
Tecnologías Usadas 15 Figura 6: Interfaz del panel de control manual Figura 7: Interfaz del panel de plan de vuelo con una misión cargada 4.4 Procesamiento de Audio El sistema implementa una arquitectura de procesamiento de audio que gestiona tres aspectos fundamentales: captura de audio, reconocimiento de voz y síntesis para retroalimentación. La implementación prioriza la eficiencia y minimización de latencia, factores críticos en el control de drones. La captura de audio se realiza mediante la Web Audio API, que proporciona una interfaz para el procesamiento y síntesis de audio en el navegador. Para el reconocimiento se utiliza Vosk, una biblioteca de procesamiento offline para minimizando la latencia en el reconocimiento de comandos. La síntesis de voz se implementa mediante la biblioteca gTTS (Google Text-to-Speech), un módulo de Python que actúa como interfaz para el servicio de síntesis de voz de Google Cloud. Esta biblioteca sintetiza el texto utilizando voces realistas que emulan el habla humana, proporcionando una experiencia de interacción más natural.
WebApp Segura 16 5 WebApp Segura La implementación de una conexión segura mediante HTTPS es fundamental en este proyecto, ya que los navegadores modernos requieren una conexión segura para permitir el acceso a funcionalidades críticas como la captura de audio del micrófono. Sin esta implementación, el sistema de control por voz no funcionaría, pues los navegadores bloquean el acceso al micrófono en conexiones no seguras. Para habilitar HTTPS, se generaron certificados SSL utilizando OpenSSL, una biblioteca de código abierto que proporciona herramientas criptográficas. La implementación se realizó añadiendo los certificados generados al servidor mediante la siguiente configuración en el archivo principal de la aplicación: Python app.run(host='0.0.0.0', port=5000,ssl_context=('openssl/cert.pem','openssl/key.pem')) Esta configuración implementa una conexión HTTPS que encripta la comunicación entre el cliente y el servidor, garantizando la seguridad de los datos transmitidos y permitiendo el acceso a funcionalidades del navegador que requieren un contexto seguro.
Sistema de Control por Voz e Interpretación de Comandos 17 6 Sistema de Control por Voz e Interpretación de Comandos Este sistema constituye el núcleo de la aplicación, ya que permite transformar comandos de voz en acciones ejecutables por el dron. Su arquitectura abarca varios componentes y una lógica de estados que define cómo se gestionan las interacciones con el usuario. El siguiente esquema (o diagrama de flujo) ilustra el proceso completo, desde la captura de audio hasta la ejecución final de los comandos en el dron. 6.1 Componentes Principales 6.1.1 Captura y Procesamiento de Audio • Módulo: audio_processor.py • Funcionalidad principal: o Convertir el audio del usuario (formato WEBM) a WAV usando FFmpeg. o Realizar la transcripción offline en español mediante Vosk. Código relevante: Python class AudioProcessor: def __init__(self): self.ffmpeg_path = self._get_ffmpeg_path() # Busca FFmpeg en el sistema self.model_path = "vosk-model-small-es-0.42" # Modelo de reconocimiento de voz en español def process_audio(self, audio_data): webm_path, wav_path = self._create_temp_files() # Crea archivos temporales try: # Guarda el audio recibido en formato WEBM with open(webm_path, 'wb') as f: f.write(audio_data) # Convierte WEBM a WAV usando FFmpeg (necesario para Vosk) self._convert_to_wav(webm_path, wav_path) # Transcribe el audio a texto con Vosk transcription = self._transcribe_audio(wav_path) return {'success': True, 'transcription': transcription} except Exception as e: return {'success': False, 'error': str(e)}
Sistema de Control por Voz e Interpretación de Comandos 18 6.1.2 Interpretación Semántica • Módulo: voice_control.py • Funcionalidad principal: o Enviar el texto transcrito a la API de OpenAI (modelo gpt-4o-mini) para comprender la intención del usuario. o Personalizar las respuestas en función del modo seleccionado (Normal, Gracioso, etc.) Estructura de personalidades: Python # Personalidades predefinidas para guiar a la IA PERSONALIDADES = { "normal": "Eres un asistente profesional para controlar drones...", "gracioso": "Responde con chistes relacionados con drones...", "plan_vuelo": "Genera un JSON con waypoints para misiones..." } def enviar_comando_openai(user_id, mensaje): historial = obtener_historial(user_id) # Mantiene contexto de la conversación historial.append({"role": "user", "content": mensaje}) # Llama a la API de OpenAI response = openai.ChatCompletion.create( model="gpt-4o-mini", messages=historial, temperature=0.7, max_tokens=150 # Limita la longitud de la respuesta ) respuesta = response.choices[0].message.content historial.append({"role": "assistant", "content": respuesta}) return respuesta
Sistema de Control por Voz e Interpretación de Comandos 19 Ejemplo de Salida de OpenAI (Modo Plan de Vuelo): JSON { "type": "flightPlan", "waypoints": [ {"action": "takeoff", "altitude": 5}, {"action": "move", "direction": "north", "distance": 10} ] } 6.1.3 Generación de Acciones • Módulo: plan_de_vuelo.py • Funcionalidad principal: o Traducir las instrucciones producidas por OpenAI a comandos técnicos. o Calcular posiciones geográficas para movimientos complejos. Python def calcular_nueva_posicion(lat, lon, direccion, distancia): R = 6378137 # Radio de la Tierra en metros dir_lower = direccion.lower() # Mapeo de direcciones a ángulos (0°=Norte, 90°=Este, etc.) if dir_lower == "forward": bearing = dron.heading # Usa la orientación actual del dron elif dir_lower == "right": bearing = (dron.heading + 90) % 360 else: bearings = {"north": 0, "east": 90, "south": 180, "west": 270} bearing = bearings.get(dir_lower, 0) # Cálculos trigonométricos para nueva posición (fórmula de Haversine) lat_rad = math.radians(lat) lon_rad = math.radians(lon) d_rad = distancia / R new_lat = math.degrees( math.asin( math.sin(lat_rad) * math.cos(d_rad) + math.cos(lat_rad) * math.sin(d_rad) * math.cos(math.radians(bearing)) ) )
Sistema de Control por Voz e Interpretación de Comandos 20 new_lon = math.degrees( lon_rad + math.atan2( math.sin(math.radians(bearing)) * math.sin(d_rad) * math.cos(lat_rad), math.cos(d_rad) - math.sin(lat_rad) * math.sin(math.radians(new_lat)) ) ) return {"lat": new_lat, "lon": new_lon} 6.1.4 Ejecución de Comandos • Módulo: dron_controls.py • Funcionalidad principal: o Implementar acciones básicas mediante la biblioteca dronLink. o Gestionar estados del dron (conexión, armado, despegue). Ejemplo de despegue: Python def despegar_dron(metros): if dron.state == "armed": # Verifica si el dron está listo dron.takeOff(metros) # Envía comando MAVLink de despegue return {"estado": "success"} return {"estado": "error"} def mover_dron(direccion, distancia): try: # Llama a la función de movimiento de dronLink dron.move_distance(direccion, distancia, blocking=False) return {"estado": "success"} except Exception as e: return {"estado": "error", "mensaje": str(e)} 6.2 Sistema de Estados y Flujo de Control La aplicación implementa un sistema de control basado en estado para gestionar la interacción con el usuario y la ejecución de los comandos. De esta manera, se controlan aspectos como la confirmación de acciones o la formulación de preguntas educativas antes de llevar a cabo la orden.
Sistema de Control por Voz e Interpretación de Comandos 21 6.2.1 Estados Principales En el módulo principal de lógica (p.ej. VoiceControlService), se definen atributos que controlan el flujo de la conversación y las órdenes pendientes: Python self.estado_conversacion = None # Controla el flujo de la interacción actual self.comando_pendiente = None # Almacena la acción pendiente de confirmación self.valor_pendiente = None # Parámetros asociados al comando (distancia, ángulos) La variable estado_conversacion indica si el sistema está pidiendo confirmación de una orden ("confirmar_accion"), formulando una pregunta educativa ("pregunta_educativa") o en un estado neutro (None). 6.2.2 Flujo de Procesamiento de Respuestas El flujo se inicia cuando llega la transcripción de voz, se envía el texto a la IA de OpenAI para su interpretación y, a continuación, se detecta la acción. Finalmente, se decide si se confirma la ejecución de dicha acción o se lanza una pregunta (en caso de personalidad “Preguntón”). 6.2.2.1 Detección de Comandos El sistema identifica las acciones válidas analizando la respuesta generada por la IA (OpenAI). Para ello, revisa si en el texto devuelto aparece alguna de las palabras clave configuradas. Todas las personalidades tienen instrucciones específicas para incluir la palabra de la acción clave en su respuesta, lo que facilita su detección. La función “detectar_accion_en_respuesta” revisa la respuesta de la IA, identificando si el usuario quiere “conectar”, “despegar”, “rotar” o cualquier otra acción definida en el array “self.acciones_clave:” Python def _detectar_accion_en_respuesta(self, respuesta): respuesta_lower = respuesta.lower() print(f"Analizando respuesta para detector acción: {respuesta_lower}") # Detección específica de rotación y dirección if "rotar" in respuesta_lower or "girar" in respuesta_lower: if "derecha" in respuesta_lower: return "rotar derecha" elif "izquierda" in respuesta_lower: return "rotar izquierda" return "rotar" #si no especifica la dirección # Resto de acciones for accion in self.acciones_clave: if accion in respuesta_lower: print(f"Acción detectada: {accion}")
Sistema de Control por Voz e Interpretación de Comandos 22 return accion print("No se detectó ninguna acción en la respuesta de IA") return None Las acciones válidas están predefinidas en el sistema: Python self.acciones_clave = [ "conectar", "despegar", "aterrizar", "avanzar", "retroceder", "derecha", "izquierda", "subir", "bajar", "detener", "desconectar", "rotar", "rotar derecha", "rotar izquierda" ] Una vez se reconoce alguna de estas acciones, el sistema transiciona al estado de confirmación. No obstante, si la personalidad preguntón está activa y se cumple la probabilidad establecida, puede pasar directamente al estado “pregunta_educativa”, en el que se lanza una cuestión al usuario antes de ejecutar la acción.
Sistema de Control por Voz e Interpretación de Comandos 29 El backend devuelve un objeto JSON con el estado de la operación, un mensaje y, una URL de audio para retroalimentación hablada. 6.3.1.3 Visualización de dron el mapa Se emplea Leaflet.js para mostrar la posición y la trayectoria del dron. Cada vez que se reciben nuevos datos de telemetría, se actualiza la posición del marcador y se dibuja la ruta: JavaScript function actualizarMarcadorDron(newLatLng, dronIcon, heading) { const iconStyle = ` .dron-icon { transform: rotate(${heading}deg); transition: transform 0.3s ease; } `; const iconHtml = ` <div class="dron-icon"> ${dronIcon} <div class="direction-arrow">➤</div> </div> `; // Actualización del marcador dronMarker.setIcon(L.divIcon({ className: 'dron-icon-wrapper', html: iconHtml, iconSize: [25, 25] })); } Con cada actualización, se añade el nuevo punto a dronPath para trazar una línea roja continua. En el caso de planes de vuelo, se dibuja una línea discontinua azul (previewPath) para diferenciar la ruta planificada de la ejecutada Manejo de Errores y Mensajes • Si algún endpoint REST falla, se cambia el color de los botones a rojo y se restaura al cabo de unos segundos, mostrando mensajes de error en la consola y/o en el elemento texto-respuesta. • Para la transcripción de voz, si se recibe una cadena vacía o un error, se notifica al usuario (“No se pudo transcribir”) y se omite la ejecución de órdenes.
Interfaz y Retroalimentación Visual 30 7 Interfaz y Retroalimentación Visual La aplicación implementa un sistema de control manual y planificación de misiones que se integra con la capa de presentación (frontend), ofreciendo retroalimentación visual y validaciones en tiempo real. A continuación, se detalla la estructura de la interfaz y cómo se gestionan las distintas funcionalidades. 7.1 Control Manual y Feedback La interfaz web incorpora botones para las acciones básicas (conexión al dron, despegue, aterrizaje, etc.), además de indicadores visuales que reflejan el estado de cada operación. JavaScript function conectarDron() { fetch('/conexion_dron', { method: 'POST', headers: {'Content-Type': 'application/json'} }) .then(response => response.json()) .then(data => { const btn = document.querySelector('.controlbtn[onclick="conectarDron()"]'); if (data.estado === "success") { btn.classList.add('active'); btn.style.background = '#4CAF50'; //Verde } else { btn.style.background = '#ff0000'; //Rojo setTimeout(() => { btn.style.background = '#ec7412'; }, 2000); } }); } Las acciones más destacadas de este bloque son: • Indicadores visuales del resultado de cada operación (p. ej., cambio de color en el botón). • Transiciones de color que comunican al usuario si la operación ha tenido éxito (rojo y verde) • Restauración automática a su estado original tras un breve lapso, para no saturar con notificaciones permanentes.
Interfaz y Retroalimentación Visual 31 7.2 Ejecución de Misiones y Previsualización La interfaz de planificación de vuelo integra un sistema que permite previsualizar y ejecutar misiones, asegurando que las rutas sean definidas y validadas antes de su implementación. El módulo de previsualización procesa los waypoints y genera una representación visual de la ruta planificada 7.2.1 Procesamiento de Comandos La función procesarComando recibe las instrucciones del usuario, envía la petición al backend y, al obtener la respuesta, decide si se trata de un plan de vuelo: JavaScript function procesarComando(comando) { fetch('/procesar_plan_vuelo', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({comando: comando}) }) .then(response => response.json()) .then(data => { if (data.type === 'flightPlan') { currentPlan = data; mostrarPreviewRuta(data.waypoints); } }); } Este flujo realiza: • Conversión de lenguaje natural a waypoints y parámetros de misión (gracias a la IA). • Generación de una previsualización en el mapa antes de ejecutar la ruta. 7.2.2 Generación y visualización de la ruta planificada Una vez que la función procesarComando(comando) recibe y valida el plan de vuelo generado por la IA, este se representa en el mapa interactivo utilizando la función mostrarPreviewRuta(waypoints). Esta función toma los waypoints obtenidos y los transforma en una representación visual en Leaflet.js, permitiendo que el usuario pueda verificar la ruta antes de su ejecución.
Interfaz y Retroalimentación Visual 32 JavaScript function mostrarPreviewRuta(waypoints) { if (!dronMarker) return; fetch('/telemetria') .then(response => response.json()) .then(data => { if (data.estado === "success" && data.data) { const coordinates = []; let currentPos = dronMarker.getLatLng(); let currentHeading = data.data.direccion; coordinates.push(currentPos); waypoints.forEach((wp) => { if (wp.action === 'move') { const newPos = calcularNuevaPosicion(currentPos, wp.direction, wp.distance, currentHeading); coordinates.push(newPos); currentPos = newPos; } else if (wp.action === 'rotate') { // Actualizar el heading según la rotación if (wp.clockwise === false) { currentHeading = (currentHeading - wp.degrees + 360) % 360; } else { currentHeading = (currentHeading + wp.degrees) % 360; } } }); previewPath.setLatLngs(coordinates); } }); } El proceso de previsualización sigue los siguientes pasos: 1. Obtención de la posición inicial del dron: o La función mostrarPreviewRuta() primero consulta la telemetría del dron a través del endpoint /telemetria para obtener su ubicación y orientación actual. Esto garantiza que la previsualización comience en la posición real del dron. 2. Cálculo de la trayectoria: o Se toma la posición actual (currentPos) y la orientación (currentHeading). o Se recorren los waypoints generados por la IA: ▪ Si el waypoint indica un movimiento (move), se calcula la nueva posición a partir de la distancia y dirección especificadas.
Interfaz y Retroalimentación Visual 33 ▪ Si el waypoint indica una rotación (rotate), la orientación del dron se ajusta sin cambiar su posición. 3. Dibujado de la ruta en el mapa: o Una vez calculadas todas las posiciones intermedias, se actualiza la previsualización con previewPath.setLatLngs(coordinates). o La ruta se representa con una línea azul discontinua, facilitando la distinción entre la trayectoria planeada y el recorrido real del dron. 7.2.3 Monitorización de Misión La implementación incluye un sistema de monitorización que supervisa la ejecución del plan para: • Validar que el dron sigue los waypoints correctamente. • Cancelar o modificar la ruta si surgiera algún inconveniente. • Brindar retroalimentación del progreso en tiempo real. JavaScript function procesarComando(comando) { fetch('/procesar_plan_vuelo', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({comando: comando}) }) .then(response => response.json()) .then(data => { if (data.type === 'flightPlan') { currentPlan = data; mostrarPreviewRuta(data.waypoints); } }); } Esto permite la: • Validación previa de rutas planificadas • Seguimiento en tiempo real de la ejecución • Gestión de errores y cancelaciones • Retroalimentación visual del progreso de la misión
Interfaz y Retroalimentación Visual 34 7.3 Configuración de la Temperatura en OpenAI: Plan de Vuelo vs. Conversación El parámetro temperature en los modelos de OpenAI (p. ej., GPT-3.5, GPT-4, etc.) controla el grado de aleatoriedad en la generación de texto. Conceptualmente, cuanto más alta es la temperatura, mayor es la dispersión de probabilidades al momento de seleccionar la siguiente palabra, lo que fomenta respuestas más “creativas” o impredecibles. En cambio, temperaturas bajas hacen que el modelo se incline por las secuencias de palabras estadísticamente más probables, obteniendo salidas más “conservadoras” y repetibles. Dentro de este proyecto, esta funcionalidad resulta clave para equilibrar dos necesidades muy distintas: 1. Generación de planes de vuelo (instrucciones críticas para el dron, que deben ser exactas y seguras). 2. Interacción conversacional con el usuario (donde se valora la fluidez, naturalidad y, en algunos casos, un toque creativo u humorístico). 7.3.1 ¿Cómo funciona el parámetro temperature? Internamente, el modelo de OpenAI asigna una probabilidad a cada posible “próxima palabra” (o token). Cuando la temperature es 1.0, el modelo sigue de cerca la distribución de probabilidad calculada. Al reducirla (p. ej., 0.3), se “suprime” la probabilidad de las palabras menos probables, forzando al modelo a escoger palabras más “seguras” y frecuentes. Por el contrario, si subimos la temperatura por encima de 1.0 (p. ej., 1.2), el modelo da cabida a palabras menos comunes, generando salidas más originales, pero también más impredecibles. Ventajas y desventajas • Temperatura baja (0.0 – 0.4): o Ventaja: Respuestas muy coherentes y fiables, ideales para tareas donde la exactitud es fundamental. o Inconveniente: Salidas menos “originales” o “naturales”, pueden parecer “robóticas”. • Temperatura media (0.5 – 0.7): o Ventaja: Mayor variedad en la generación de respuestas sin caer en la incoherencia. o Inconveniente: Se corre algo más de riesgo de que el modelo divague si el prompt no está bien acotado. • Temperatura alta (0.8 – 1.2): o Ventaja: Creatividad y mayor espontaneidad, útil en ámbitos artísticos o de brainstorming. o Inconveniente: Riesgo de información menos fiable o de pérdida de coherencia
Interfaz y Retroalimentación Visual 35 7.3.2 Modo Plan de Vuelo (temperature=0.3) Cuando se generan planes de vuelo, necesitamos que la IA devuelva siempre un JSON bien estructurado con las instrucciones exactas que el dron debe seguir (por ejemplo, “despegar a 3 metros”, “avanzar 5 metros hacia el norte”, etc.). Un error en esa sintaxis podría resultar en maniobras peligrosas o en la imposibilidad de leer las órdenes. 1. Precisión técnica y formato JSON obligatorio o Con temperature=0.3, el modelo tiende a repetir fielmente una plantilla del tipo: JSON { "type": "flightPlan", "waypoints": [ {"action": "takeoff", "altitude": 3}, {"action": "move", "direction": "north", "distance": 5} ] } De esta forma, no introduce variaciones “creativas” innecesarias como campos inventados o mal redactados. 2. Seguridad operativa o La capacidad de confiar en que el plan de vuelo está correctamente formateado (y que los valores numéricos tienen sentido) reduce enormemente los riesgos en la ejecución real sobre el dron. o Incluso un solo error en la estructura JSON (p. ej., llaves faltantes o comillas mal ubicadas) podría hacer que el servidor rechace el comando o, peor aún, que envíe órdenes incorrectas. 3. Menor margen de improvisación o Una temperatura baja implica pocas variaciones en el estilo de las respuestas, priorizando la exactitud y la coherencia de los datos. o El modelo se limita casi a “rellenar” los campos (acción, distancia, dirección, altitud) sin inventar opciones. En conclusión, usar temperature=0.3 en este contexto garantiza que el JSON resultante sea lo más estable y seguro posible, cumpliendo con la estructura esperada y minimizando la probabilidad de errores sintácticos o semánticos.
Interfaz y Retroalimentación Visual 36 7.3.3 Modo Conversación (temperature=0.7) A diferencia, el modo conversacional pretende que el sistema sea capaz de interactuar con el usuario de manera natural y, dependiendo de la personalidad elegida (Gracioso, Borde, Preguntón, etc.), añadir matices humorísticos, sarcásticos o inquisitivos. • Creatividad controlada: o Con temperature=0.7, la IA mantiene coherencia al mismo tiempo que introduce cierta variedad lingüística (sin caer en extravagancias). • Respuesta más “humana”: o Se busca que el asistente no conteste siempre igual a “¿Cómo estás?” o “Muéstrame el estado del dron”, dando un grado de frescura a la interacción. • Riesgos controlables: o Aunque es un poco más alta que en el plan de vuelo, 0.7 no suele dar lugar a desvaríos muy grandes. Aun así, se gestionan los prompts para recordarle al modelo que debe mantener el contexto de control de drones. 7.3.4 Comparación de Comportamientos Aspecto Plan de Vuelo Conversación Temperature 0.3 0.7 Objetivo Máxima precisión en JSON Interacción amena y flexible Naturaleza del Output Estructura rígida (JSON, waypoints) Respuestas en lenguaje natural Ventaja Principal Seguridad y consistencia Cercanía y variedad en la respuesta Desventaja Principal Menos “creatividad” Potencial de desvío / mensajes menos exactos Ejemplo de Uso {"action": "move", "direction":...} “¡Claro, avanzamos como cohete, capitán!” Tabla 1: Comparación de comportamientos según la temperatura configurada
Interfaz y Retroalimentación Visual 37 7.3.5 Pruebas y Ajustes A pesar de no haber llevado a cabo pruebas exhaustivas formales, se realizaron validaciones y experimentaciones de forma puntual para comprobar el comportamiento del sistema en diferentes condiciones. Concretamente: • Verificación manual de JSON: En distintos comandos de vuelo (despegar, avanzar, rotar, etc.), se revisó que el JSON generado por la IA tuviese la estructura correcta y los parámetros esperados. • Ensayos de conversación informal: Se interactuó con el sistema en modo “gracioso” y “preguntón” para comprobar que respondía de forma adecuada sin desviarse del contexto de control del dron. • Observaciones cualitativas: No se registraron anomalías graves en el comportamiento de la IA, y el sistema interpretó la mayoría de los comandos con precisión a la primera. Aunque no se realizó un análisis estadístico exhaustivo, estos ensayos básicos sugieren que el uso de temperature=0.3 para planes de vuelo y temperature=0.7 para la conversación cumple con los objetivos de precisión y naturalidad, respectivamente.
Entorno de Pruebas 38 8 Entorno de Pruebas En este capítulo se describen las pruebas realizadas para verificar el correcto funcionamiento de la aplicación web y del sistema de control por voz. Dado que el dron no se ha probado físicamente en vuelo real durante este período, todas las validaciones se han llevado a cabo mediante el simulador MAVLink, un entorno muy utilizado en el ecosistema DEE para reproducir las condiciones de vuelo y telemetría de forma segura. 8.1 Entorno de Pruebas • Simulador MAVLink: Se ha empleado el simulador proporcionado por el propio DEE (o bien un software de simulación SITL) para recrear los mensajes, las posiciones GPS y las respuestas típicas de un dron en vuelo. • Equipo: Un ordenador portátil con sistema operativo (indicar Windows/Linux/macOS), con Python 3.8+ y Flask. • Navegador principal: Google Chrome (versión XX) en modo HTTPS para habilitar la captura de audio. • Red local: Tanto el servidor Flask como el simulador se han ejecutado en la misma red local, comunicándose a través de MQTT y/o WebSockets. La configuración del simulador MAVLink se realizó conforme a los tutoriales facilitados en el repositorio del DEE, asignando al dron virtual los mismos parámetros de firmware (PX4) que el dron físico para que la experiencia de vuelo simulado se aproxime lo máximo posible a la real. 8.2 Escenarios de Prueba Con el propósito de abarcar las distintas funcionalidades del sistema, se han definido varios escenarios de prueba. Cada uno de ellos contempla la activación de diferentes módulos y la interacción del usuario a través de la web. 8.2.1 Pruebas de Control Manual 1. Objetivo: Verificar que, mediante los botones de la interfaz, se puedan enviar comandos básicos al dron (conectar, armar, despegar, aterrizar, etc.) y que estos se reflejen correctamente en el simulador MAVLink. 2. Procedimiento: 1. Iniciar el simulador MAVLink y arrancar el servidor Flask. 2. Acceder a la página principal (movil.html). 3. Pulsar el botón de conexión para verificar la respuesta del sistema (color del botón, mensajes de estado). 4. Ordenar un despegue manual a 3 metros (botón “Despegar”).
Integración en el Ecosistema DEE 45 11 Integración en el Ecosistema DEE La integración del proyecto en el Ecosistema Drone Engineering se ha materializado mediante la creación de un repositorio en GitHub, en el que se ha alojado todo el código desarrollado, junto con una documentación detallada y recursos multimedia que facilitan su comprensión y futura extensión. En el archivo README.md se describe de forma concisa y clara la funcionalidad principal de la aplicación, explicando cómo ésta permite controlar el dron mediante comandos de voz y planificar misiones a través de instrucciones en lenguaje natural. Se detallan los pasos necesarios para instalar la aplicación, que incluyen la configuración de Python, Flask, el broker MQTT (con instrucciones para crear un archivo de configuración, similar a lo realizado en otros proyectos colaborativos del DEE) y la instalación del modelo de reconocimiento de voz Vosk. Además, se incluyen dos videos: uno en el que se muestra la aplicación en funcionamiento (demostrando el control por voz, la planificación de misiones y la interacción a través de las diferentes personalidades) y otro que ofrece un recorrido detallado por el código, orientado a la persona que se haga cargo del relevo y que necesite introducirse en el desarrollo. La estructura del repositorio se organiza de la siguiente forma: • Directorio Raíz: Contiene el archivo principal (por ejemplo, run.py) que inicia la aplicación mediante Flask. • Carpeta app: Agrupa los módulos fundamentales del sistema, tales como: o audio_processor.py: Gestión de la captura, conversión (WEBM a WAV) y transcripción del audio. o dron_controls.py: Funciones para enviar comandos al dron mediante el protocolo MAVLink, utilizando la librería dronLink. o plan_de_vuelo.py y VoiceControlService.py: Módulos encargados de la planificación de misiones y del manejo de la lógica de estados y personalidades. o routes.py: Definición de los endpoints y rutas de la aplicación. o Subdirectorios para recursos estáticos (imágenes, hojas de estilo, scripts JavaScript) y plantillas HTML. • Carpeta bin: Incluye herramientas necesarias como el ejecutable de FFmpeg, usado para la conversión de audio. • Carpeta openssl: Contiene los certificados SSL (cert.pem y key.pem) que permiten el despliegue de la aplicación en un entorno seguro (HTTPS). • Carpeta con el modelo de Vosk: Se incluye el modelo local para el reconocimiento de voz en español, lo que minimiza la dependencia de servicios externos y reduce la latencia. Esta estructura no solo facilita la integración del nuevo módulo de control por voz con el resto del ecosistema, sino que también permite a futuros desarrolladores colaborar, comprender y ampliar el proyecto con relativa facilidad. El repositorio se encuentra disponible en la siguiente URL: https://github.com/VictorSorolla/victorsorolla-AI-Drone-Voice-Control
Integración en el Ecosistema DEE 46 Con esta integración, el proyecto enriquece el DEE al proporcionar: 1. Un sistema avanzado de control por voz, capaz de manejar distintas personalidades e interactuar de forma dinámica. 2. Compatibilidad directa con la lógica existente de dronLink y la capa de telemetría (MQTT). 3. Un ejemplo pionero del uso de Flask en el DEE, inédito hasta ahora, que facilita la adopción de frameworks web dentro del ecosistema. Con ello se abre la puerta a colaboraciones futuras y a la creación de nuevas funcionalidades, ampliando las posibilidades para la comunidad de desarrolladores y estudiantes. Así, la comunidad de la EETAC puede reutilizar la base del código y las ideas de este módulo para ampliar o crear nuevos componentes, como gestiones más avanzadas de misiones, visión por computador, u otros métodos de interacción (por ejemplo, reconocimiento de gestos u obstáculos, juegos interactivos con IA, etc.)
Conclusiones 47 12 Conclusiones 12.1 Objetivos Alcanzados • Control por Voz e Integración IA: Se ha logrado un sistema estable que recibe comandos de voz, los transcribe, los interpreta mediante OpenAI y los traduce en órdenes concretas de vuelo. • Modo Conversacional y Modo Manual: El usuario puede alternar entre hablarle al dron o pulsar botones de control, recibiendo retroalimentación visual y auditiva. • Planificación de Vuelo: Permite dictar rutas completas y visualizar una línea discontinua en el mapa antes de ejecutar la misión. • Personalidades: Se han creado distintas actitudes (“gracioso”, “borde”, “pregunton”), haciendo las pruebas más divertidas y demostraciones más atractivas. • Mantenimiento del Contexto: Aunque supuso un reto, la IA conserva el hilo de la conversación al reenviar el historial de mensajes. 12.2 Plan de Trabajo y Desviaciones El plan inicial contemplaba dividir el sistema en dos módulos principales (un servidor remoto público y un cliente que corre en local junto al dron), comunicándose por MQTT de forma transparente. Sin embargo, la implementación completa de esa arquitectura dividida (que permitiera controlar el dron desde cualquier lugar a través de internet) no se ha finalizado por cuestiones de tiempo y la complejidad añadida de integrar la IA en un entorno de producción. Aun así, la parte esencial (control del dron vía voz en la red local, con su lógica de estados e IA) está totalmente operativa. 12.3 Valoración Personal La experiencia de combinar la robótica (programación de drones) con la inteligencia artificial (procesamiento de lenguaje natural) ha sido muy enriquecedora. El modo “Preguntón” y la gestión de estados han supuesto un desafío grande, pues era necesario coordinar peticiones a la IA con la confirmación de acciones en tiempo real. A pesar de las dificultades, el resultado demuestra que es factible controlar drones con comandos de voz de manera intuitiva, abriendo la puerta a aplicaciones innovadoras y adaptables a múltiples contextos. 12.4 Líneas Futuras 1. Dividir Servidor y Cliente mediante MQTT o Completar la arquitectura propuesta para poder desplegar el servidor Flask en un hosting público, mientras el PC local (en el campo de vuelo) sólo ejecuta el dronLink y se suscribe a los mensajes. Esto permitiría control remoto. 2. Integración con más Servicios IA o Explorar otras APIs o modelos de lenguaje (locales o de terceros) para reducir costes o mejorar la latencia. o Añadir multilingüismo (por ejemplo, inglés, francés) podría ser interesante para usuarios internacionales.
Conclusiones 48 3. Mejoras en Personalidades y Pruebas de Estrés o Realizar pruebas con decenas de usuarios concurrentes, midiendo la escalabilidad de Flask y el consumo de tokens en OpenAI. o Añadir modos de personalidad adicionales (p.ej., “Asistente Educativo con preguntas avanzadas”, “Modo Humor Sarcástico”…) para enriquecer las demostraciones. 4. Pruebas en Dron Real y Optimización o Validar el comportamiento en condiciones reales de vuelo, considerando la latencia de red y la precisión requerida en despegues/aterrizajes. o Optimizar la interfaz para mayor responsividad y posibilidad de uso offline (con un modelo local). En definitiva, se considera que el proyecto ha cumplido los objetivos principales y abre interesantes rutas de exploración para quienes continúen con la Programación de Drones en la EETAC o en otros entornos académicos e industriales.
REFERENCIAS 49 13 REFERENCIAS [1] Flask. Flask Documentation. [En línea]. [Consulta: 15 septiembre 2024]. Disponible en: https://flask.palletsprojects.com/ [2] Vosk. Offline Speech Recognition. [En línea]. [Consulta: 15 septiembre 2024]. Disponible en: https://alphacephei.com/vosk/ [3] OpenAI. OpenAI API Documentation. [En línea]. [Consulta: 15 septiembre 2024]. Disponible en: https://platform.openai.com/docs/ [4] Mosquitto. Eclipse Mosquitto – An Open Source MQTT Broker. [En línea]. [Consulta: 16 septiembre 2024]. Disponible en: https://mosquitto.org/ [5] Leaflet. Leaflet.js Documentation. [En línea]. [Consulta: 16 septiembre 2024]. Disponible en: https://leafletjs.com/ [6] DroneEngineeringEcosystemDEE. EETAC – GitHub Repository. [En línea]. [Consulta: 20 septiembre 2024]. Disponible en: https://github.com/dronsEETAC/DroneEngineeringEcosystemDEE [7] Programacion-de-drones. EETAC – GitHub Repository. [En línea]. [Consulta: 20 septiembre 2024]. Disponible en: https://github.com/dronsEETAC/Programacion-de-drones [8] Python. Python 3.8+ Official Documentation. [En línea]. [Consulta: 20 septiembre 2024]. Disponible en: https://docs.python.org/3/ [9] OpenSSL. OpenSSL Documentation. [En línea]. [Consulta: 20 septiembre 2024]. Disponible en: https://www.openssl.org/docs/
Anexo 50 14 Anexo 14.1 Diagrama de flujo (flowchart) Figura 11.A: Lógica de estados y transiciones.
