Extración de metricas de vuelo de Starship IFT-2 y ITF-3 usando inteligencia artificial con Python

abril 21, 2024

Introducción

Recientemente, mientras seguía el lanzamiento de la Starchip IFT-3, me encontré interesado en el desempeño y comportamiento de esta nave durante su vuelo. Tomando como base los datos presentados por SpaceX en sus transmisiones en vivo, decidí crear un programa para la extracción de las métricas de vuelo de la nave utilizando Python. Este proyecto permitirá mostrar datos sobre el vuelo.

Herramientas y tecnologías necesarias

Para este proyecto se hizo uso de las siguientes librerías de Python:

  • csv: Para almacenar los datos recolectados en archivos .csv para su posterior análisis.
  • json: Es necesario cargar un archivo .json que contiene información sobre el video y las regiones a analizar.
  • progressbar: Para mostrar una barra de progreso del análisis del video.
  • cv2: Se utiliza para la extracción de frames del video para la extracción de datos.
  • easyocr: Es utilizada para la extracción de texto de imágenes.

Proceso de extracción de datos de video

El código puede ser encontrado en su repositorio https://github.com/105-Code/spacex-launch-data.

Para ejecutar el programa es necesario tener descargado el video que se quiere analizar y colocarlo en la carpeta videos. Entre mejor sea la resolución del video, mejor.

Dentro de esta carpeta videos, tienes que modificar el archivo metadata.json. Este archivo es el que lee extractor.py para conocer los videos, tiempos y regiones del video que va a analizar. La estructura del objeto JSON es la siguiente:

{
    // Identificador del video, puede ser cualquier cosa
    "id":"itf-3", 
    // Ruta del video
    "path": "videos/IFT-3.webm",
    // Recolección de datos cada x cantidad de fotogramas 
    "recolection_rate":15, 
    // Segundos del video cuando inicia el despegue
    "booster_start": 52, 
    // Segundos del video cuando el booster aterriza
    "booster_end": 463,
    // Segundos del video cuando la starship inicia
    "starship_start": 220, 
    // Segundos del video cuando la starchip aterriza
    "starship_end": 568, 
    // Región del video en píxeles donde se encuentran los datos del motor de la starship
    "starship_engine_pos": {
        "x": 1742,
        "y": 912,
        "width": 160,
        "height": 150
    },
    // Otras regiones...
}

Una vez descargado el video y configurado el archivo metadata.json, solo sería necesario ejecutar el programa con python extractor.py.

El programa empezará a procesar el video y cuando termine dejará los datos en la carpeta outputs.

Datos extraídos

Los archivos extraídos son almacenados en la carpeta output y presentan la siguiente estructura:

time seconds altitude speed
00:00:03 5.5 0 13
00:00:03 6.0 0 17

Explicación de datos:

  • time: muestra el tiempo en formato hora:minutos:segundos.
  • seconds: muestra el tiempo de captura en segundos.
  • altitude: muestra la altura en kilómetros.
  • speed: muestra la velocidad en km/h.

Puede encontrar los datos que he extraído en el repositorio en la carpeta history. Se encuentran divididos por nave y propulsor.

Gráficos

Tuve la oportunidad de crear unos simples gráficos basados en los datos extraídos.

Aceleración del booster

Booster acceleration

El primer gráfico mostraría la aceleración que tuvo el booster en su vuelo. En el eje X tenemos los segundos de vuelo y en el eje Y la aceleración dada en m/s.

Velocidad y altura del Booster

Booster acceleration

El segundo gráfico mostraría la velocidad y altura que tuvo el booster en su vuelo. En el eje X tenemos los kilómetros de altura que alcanzó y en el eje Y la velocidad en km/h.

Conclusiones

A través de las bibliotecas de Python, CSV, JSON y OpenCV, pudimos automatizar la recopilación de métricas de vuelo durante el lanzamiento.

Al seguir este proceso, pudimos obtener datos precisos sobre la altitud, velocidad y otros parámetros clave del vuelo. Estos datos, presentados en archivos CSV y visualizados en gráficos, nos brindan una imagen clara del desempeño del booster y la starship a lo largo de su vuelo.

Además, al compartir el código y los resultados en el repositorio de GitHub, espero inspirar a otros a explorar y analizar los datos del vídeo de manera sencilla.

En última instancia, espero seguir trabajando y perfeccionando la extracción de datos de vídeo con Python. Dado que han surgido algunos fallos en el proceso de recolección, además, deseo implementar una función para poder detectar la cantidad de motores encendidos.