Projet d'optimisation de trajectoires aériennes basé sur des données ADS-B (OpenSky Network) avec prise en compte des conditions météorologiques réelles.
Ce projet permet de :
- Récupérer et parser des données de trajectoires au format KML (OpenSky Network)
- Appliquer un filtre de Kalman pour le lissage et la prédiction
- Utiliser des B-splines pour l'interpolation et l'optimisation
- Intégrer des données météorologiques (vent, température, pression)
- Générer des trajectoires optimisées
.
├── src/
│ ├── data/
│ │ ├── kml_parser.py # Parser de fichiers KML
│ │ └── data_models.py # Modèles de données
│ ├── filters/
│ │ └── kalman_filter.py # Implémentation du filtre de Kalman
│ ├── optimization/
│ │ ├── bspline.py # Interpolation B-spline
│ │ └── trajectory_optimizer.py # Optimiseur principal
│ ├── weather/
│ │ └── weather_api.py # Intégration API météo
│ └── utils/
│ └── visualization.py # Outils de visualisation
├── examples/
│ └── optimize_trajectory.py # Exemple d'utilisation
├── data/
│ └── sample/ # Données d'exemple
├── tests/
│ └── ... # Tests unitaires
├── requirements.txt # Dépendances Python
└── README.md
pip install -r requirements.txtfrom src.data.kml_parser import KMLParser
from src.optimization.trajectory_optimizer import TrajectoryOptimizer, OptimizationMethod
parser = KMLParser('data/sample/F-HZUE-track-EGM96.kml')
trajectory = parser.parse()
optimizer = TrajectoryOptimizer(method=OptimizationMethod.HYBRID)
result = optimizer.optimize(trajectory, target_points=100)
print(f"Compression : {result.metrics['compression_ratio']:.2%}")
print(f"Smoothness : {result.metrics['smoothness']:.2f}")Sorties générées : output/comparison.png, output/trajectory_map.html
- OpenSky Network : https://opensky-network.org/ → rechercher un vol → exporter KML
- FlightRadar24 : https://www.flightradar24.com/ (compte premium requis)
numpy- Calculs numériquesscipy- Optimisation et B-splineslxml- Parsing XML/KMLmatplotlib- Visualisationrequests- Requêtes API météopyproj- Conversions de coordonnées
Dashboard Streamlit Amélioré - Interface professionnelle et intuitive :
cd examples
streamlit run dashboard_improved.pyFonctionnalités du Dashboard :
- 🎨 Design moderne avec CSS personnalisé
- 📊 4 graphiques de comparaison (altitude, vitesse, montée, courbure)
- 🎯 Sélection point de départ d'optimisation
- 💾 Export des résultats en CSV
- 📖 Guide d'utilisation intégré
- ⚡ Feedback visuel en temps réel
Voir DASHBOARD_IMPROVEMENTS.md pour tous les détails.
from src.data.kml_parser import KMLParser
from src.optimization.trajectory_optimizer import TrajectoryOptimizer, OptimizationMethod
# Charger les données
parser = KMLParser('data/flight_trajectory.kml')
trajectory = parser.parse()
# Optimiser avec point de départ personnalisé
optimizer = TrajectoryOptimizer(method=OptimizationMethod.HYBRID)
optimized = optimizer.optimize(
trajectory,
target_points=100,
start_time=600 # Optimiser après 10 minutes
)
# Afficher les métriques
print(f"Compression: {optimized.metrics['compression_ratio']:.2%}")Le projet propose 5 méthodes d'optimisation différentes :
- ✅ Lissage des données bruitées ADS-B
- ✅ Estimation de la vitesse et de l'accélération
- ⚡ Ultra-rapide (0.04s)
⚠️ Ne réduit pas le nombre de points
- ✅ Interpolation lisse par courbes cubiques
- ✅ Compression des données (60% de réduction)
- ⚡ Très rapide (0.002s)
- ✅ Contrôle de la courbure et continuité
- 🏆 RECOMMANDÉ - Meilleur compromis qualité/performance
- ✅ Combine le lissage et la compression
- ✅ Smoothness optimale (25,029 vs 147,624 original)
- ✅ 60% de compression avec excellente qualité
- ✅ Optimisation tenant compte du vent
- ✅ Réduction de la consommation de carburant
- 🌤️ Utilise des données météo réelles ou simulées
- ✅ Optimisation mathématique non-linéaire
- ✅ Meilleure compression (80% de réduction)
- ✅ Respect strict des contraintes
⚠️ Plus lent (28s vs 0.04s)
| Méthode | Points | Temps | Smoothness | Usage recommandé |
|---|---|---|---|---|
| Kalman | 501 | 0.04s | ⭐⭐⭐ | Lissage simple |
| B-spline | 200 | 0.002s | ⭐⭐⭐⭐ | Compression rapide |
| Hybride | 200 | 0.04s | ⭐⭐⭐⭐⭐ | Usage général 🏆 |
| Météo | 200 | 0.04s | ⭐⭐⭐⭐ | Optimisation réaliste |
| NLP | 99 | 28s | ⭐⭐⭐ | Compression max |
Pour comparer toutes les méthodes visuellement :
python examples/compare_methods.py # Comparaison complète
python examples/radar_comparison.py # Graphique radar📖 Voir METHODES_OPTIMISATION.md pour l'analyse détaillée et les corrections implémentées.
Le projet peut intégrer des données météorologiques pour optimiser les trajectoires :
- Données de vent (direction, intensité)
- Température
- Pression atmosphérique
API supportées :
- OpenWeatherMap
- NOAA
- Données personnalisées
MIT
Projet technique ENAC - 2A