Skip to content

Repository files navigation

CoheteFA05 — Simulación de Vuelo Estocástico 6DOF y Análisis Monte Carlo

Ver demo en vivo — corre simulaciones de vuelo reales desde el navegador, sin instalar nada.

La demo corre en el tier gratuito de Render: si nadie la visitó en los últimos 15 minutos, la primera carga puede tardar 30-60 segundos mientras el servicio "despierta".

Simulador de vuelo de 6 grados de libertad (6DOF) para un cohete de ~10 kg, con motor de simulación en Fortran y una capa de análisis estadístico en Python. El proyecto caracteriza la dispersión de trayectoria de vuelo bajo incertidumbre en condiciones de lanzamiento, viento y parámetros del vehículo, siguiendo y extendiendo la metodología de Box, Bishop & Hunt (2011).

Objetivo

Responder tres preguntas concretas mediante una campaña Monte Carlo de 5000 corridas:

  1. ¿Qué tan dispersa es la trayectoria de vuelo? — caracterizado mediante elipses de confianza de Hotelling T².
  2. ¿Qué parámetros de entrada explican esa dispersión? — análisis de sensibilidad con coeficientes de regresión estandarizados (β*) y correlación de Spearman.
  3. ¿En qué régimen aerodinámico vuela el cohete? — determinación del espacio de operación en Reynolds y Mach, como punto de partida para una validación posterior por CFD en la región donde el modelo aerodinámico lineal deja de ser válido.

Motor de simulación (Fortran)

  • Integración numérica RKF45 (Runge-Kutta-Fehlberg de paso adaptativo)
  • Actitud representada con cuaterniones (sin singularidades de gimbal lock)
  • Modelo aerodinámico linealizado de Barrowman
  • Viento modelado como proceso estocástico de Ornstein-Uhlenbeck bidireccional, con ruido gaussiano vía generador Taus88

App interactiva (Streamlit)

Dashboard web que envuelve el simulador Fortran, sin necesidad de tocar la terminal:

  • Modo determinista: corre una trayectoria individual con los parámetros elegidos en la barra lateral.
  • Modo Monte Carlo: corre N trayectorias con dispersión estadística en geometría, masas y condiciones iniciales.
  • Trayectoria 3D con conos de orientación del vehículo y, en modo Monte Carlo, la elipse de dispersión al 95% proyectada sobre el punto de aterrizaje.
  • Animación sincronizada del vuelo completo: escena 3D + paneles 2D de ángulo de ataque, velocidad, viento y velocidad angular, con indicador de apogeo.
  • Landing footprint: dispersión de puntos de impacto coloreada por la variable de interés (viento, ángulo inicial, etc.), con elipse de confianza al 95%.

La app está containerizada con Docker (ver Dockerfile), lo que permite correrla de forma reproducible en cualquier sistema sin depender de un entorno conda preinstalado — es también como se despliega la demo en vivo.

Correr la app localmente

Opción A — con Docker (recomendado, no requiere conda ni gfortran instalados):

docker build -t cohetefa05-mc --load .
docker run -p 8501:8501 cohetefa05-mc

Abrir http://localhost:8501.

Opción B — con conda (requiere gfortran instalado):

conda env create -f environment.yml
conda activate cohetefa05-mc
cd src/fortran && make && cd ../..
streamlit run app/streamlit_app.py

Capa de análisis (Python)

Notebook principal: notebooks/01_exploracion_montecarlo.ipynb, apoyado en funciones puras de src/analysis/utils.py:

  • Carga y parseo de datos de campaña Monte Carlo
  • Cálculo de elipses de confianza (Hotelling T², no gaussiana ingenua)
  • Regresión estandarizada para identificar parámetros dominantes
  • Identificación del espacio Reynolds-Mach relevante para CFD

Estructura del repositorio

Monte_Carlo_Flight_Sensitivity/
├── app/                                  # Dashboard interactivo (Streamlit)
│   ├── streamlit_app.py
│   └── core/                             # Runner de Fortran, parsers, visualizaciones
├── notebooks/
│   └── 01_exploracion_montecarlo.ipynb   # Notebook principal de análisis
├── src/
│   ├── fortran/                          # Motor de simulación 6DOF
│   └── analysis/                         # Funciones de análisis (Python)
├── data/
│   └── sample/                           # Datos de muestra (N=5000 corridas)
├── docs/
│   ├── metodologia.md                    # Metodología científica detallada
│   └── bitacora_debugging.md             # Bitácora de bugs encontrados y resueltos
├── tests/                                # Tests de regresión
├── Dockerfile                            # Build reproducible de la app (multi-stage)
├── requirements-docker.txt               # Dependencias Python minimas para el contenedor
├── .dockerignore
└── environment.yml                       # Especificación del entorno conda (desarrollo/notebook)

Instalación (para el notebook de análisis)

Requiere conda (Anaconda o Miniconda).

conda env create -f environment.yml
conda activate cohetefa05-mc

Registrar el entorno como kernel de Jupyter:

python -m ipykernel install --user --name cohetefa05-mc --display-name "Python (cohetefa05-mc)"

Abrir el notebook y seleccionar el kernel "Python (cohetefa05-mc)":

jupyter lab

Solución de problemas conocidos (Windows)

El kernel muere silenciosamente al graficar con matplotlib, sin traceback de Python.

Causa: conflicto entre los runtimes de OpenMP de Intel MKL (usado por numpy/scipy) y LLVM OpenMP (usado internamente por matplotlib/freetype) al cargarse ambos en el mismo proceso — Windows termina el proceso sin dejar registro de error.

Solución: fijar la variable de entorno KMP_DUPLICATE_LIB_OK=TRUE. Si el problema persiste tras crear el entorno con environment.yml, edita el archivo kernel.json del kernel registrado (normalmente en %APPDATA%\jupyter\kernels\cohetefa05-mc\kernel.json) y agrega:

"env": {
  "KMP_DUPLICATE_LIB_OK": "TRUE"
}

Regenerar los datos (opcional)

Los datos de muestra en data/sample/ ya están incluidos en el repositorio — no es necesario compilar el Fortran para correr el notebook. Para regenerarlos:

cd src/fortran
make run

El Makefile detecta el sistema operativo automáticamente y genera el binario correspondiente (cohetefa05.exe en Windows, cohetefa05 en Linux/Mac).

Ver data/README.md para el detalle de columnas de cada archivo.

Metodología y hallazgos

La metodología completa (justificación de las elipses de Hotelling, interpretación de las poblaciones de crash, y el espacio Re-Ma para CFD) está documentada en docs/metodologia.md.

Autor

Aldo Heraclio de la Isla — estudiante de maestría en Física, Universidad Autónoma de Zacatecas (UAZ). Este proyecto forma parte de un portafolio técnico orientado a roles de análisis y ciencia de datos.

Licencia

Ver LICENSE.

About

Monte Carlo flight simulator for stochastic sensitivity and uncertainty analysis.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages