Neural ODE model for aircraft flight dynamics
Project description
Neural Ordinary Differential Equation (Neural ODE) model for aircraft flight dynamics
✈️ Overview
node-fdm implements a physics-guided Neural ODE framework for learning and simulating aircraft flight dynamics.
It combines data-driven learning with physical consistency, enabling the reproduction of vertical motion and energy exchanges during flight.
⚖️ Important Legal & Usage Notes
- Distributed under the EUPL-1.2 licence, with exceptions detailed in
AMENDMENT_TO_EUPL_license.md, reflecting EUROCONTROL’s status as an international organisation. - This repository is provided for research purposes only and does not constitute a regulatory framework.
EUROCONTROL disclaims any responsibility for misuse or operational application of these models.
📁 Repository Structure
├── src/node_fdm/ # Core Neural ODE library (installed as a package)
│ ├── architectures/ # Architecture specific definitions (opensky_2025, qar)
│ ├── data/ # Datasets, loaders, and flight processing
│ ├── models/ # Neural ODE modules, pretrained checkpoints, wrappers
│ └── utils/ # Data helpers, learning blocks, and physics utilities
├── scripts/ # End-to-end pipelines and runnable scripts
│ ├── opensky/ # OpenSky 2025 download/preprocess/train/infer steps
│ └── qar/ # QAR training and inference scripts + config.yaml
├── docs/ # MkDocs documentation (guide, how-to, reference, logo)
├── tests/ # Unit/integration tests for shared utilities
├── mkdocs.yml # Documentation site configuration (mkdocs-dev.yml for local)
├── pyproject.toml # Packaging configuration and dependencies
├── LICENCE.md # EUPL-1.2 licence (see AMENDMENT_TO_EUPL_license.md)
└── AMENDMENT_TO_EUPL_license.md
Configuration
- Each pipeline ships its own
config.yamlunderscripts/opensky/andscripts/qar/ - Edit dataset paths, model names, and training hyperparameters directly in the relevant subproject config before running scripts.
🎨 Use Case:
-
OpenSky Symposium 2025 — ADS-B Models
Jarry, G. & Olive, X. (2025). "Generation of Vertical Profiles with Neural Ordinary Differential Equations Trained on Open Trajectory Data," Journal of Open Aviation Science, Proceedings of the 13th OpenSky Symposium.
This repository enables full reproducibility of the study. All code used to download and preprocess the data, train the models, perform trajectory inference, and generate the figures presented in the paper is provided here.
-
SESAR Innovation Days 2025 — QAR Model
Jarry, G., Dalmau, R., Olive, X., & Very, P. (2025). "A Neural ODE Approach to Aircraft Flight Dynamics Modelling,"
Proceedings of the SESAR Innovation Days 2025, arXiv:2509.23307.
For the QAR-based model, the repository provides the full training pipeline, the complete model implementation, the inference scripts, and the final trained model weights.
⚠️ Due to proprietary restrictions, the QAR datasets themselves cannot be released; only the model, code, and weights are included.
🚧 Work in Progress
This repository is under active development. Future updates will include:
- Improve Mode S feature reconstruction to reduce errors in training and evaluation
- Extend to lateral dynamics for full trajectory generation and enhanced speed modelling
- Incorporate stronger physical constraints through physics-based loss regularization
- Train models to complete ADS-B data or generate trajectories directly from flight plans
🤝 Community — Adding a New Architecture
Community feedback and contributions are welcome to help advance the model’s robustness and applicability.
Want to extend the library with another dataset or modelling choice? Use the existing opensky_2025 and qar packages as templates:
- Copy a package skeleton: duplicate
node_fdm/architectures/opensky_2025(minimal) ornode_fdm/architectures/qar(multi-layer example) into a new foldernode_fdm/architectures/<your_arch>, keep the same file names (columns.py,flight_process.py,model.py, extra layers as needed). - Declare columns: in
columns.py, define your state (X_COLS), control (U_COLS), exogenous (E0_COLS), and extra outputs, following the existing column objects. Keep derivative columns for ODE targets. - Build layers: in
model.py, wire your layers (e.g.,TrajectoryLayer,EngineLayer,StructuredLayer) and exposeARCHITECTUREandMODEL_COLS. The OpenSky model shows a two-layer baseline; QAR illustrates stacking several derived layers. - Preprocess & filter: implement
flight_processingandsegment_filteringinflight_process.pyto clean/augment your raw data (see altitude diffs in OpenSky vs. smoothing and engine reduction in QAR). - Register the name: add your architecture key to
valid_namesinnode_fdm/architectures/mapping.pyso loaders and training scripts can find it. - Test a small run: train or run inference on a tiny slice to validate column ordering and tensor shapes before opening a pull request; sample pipelines live in
scripts/(e.g., OpenSky scripts).
If you contribute back, include a short note on your data assumptions, any proprietary constraints, and a minimal script/notebook that exercises the new architecture.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file node_fdm-0.1.0.tar.gz.
File metadata
- Download URL: node_fdm-0.1.0.tar.gz
- Upload date:
- Size: 4.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a83893d6bc2467bc21cca2131f308aa6f3a0e9e2fdc569e2d85e1b573f104b93
|
|
| MD5 |
cb0d122bd5c1b86be31123de3958b58e
|
|
| BLAKE2b-256 |
c66dc68392884d4620cb6ae46deb8b0ade606a1e3cfa77c23e7050bfaa23044f
|
Provenance
The following attestation bundles were made for node_fdm-0.1.0.tar.gz:
Publisher:
publish.yml on eurocontrol-asu/node-fdm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
node_fdm-0.1.0.tar.gz -
Subject digest:
a83893d6bc2467bc21cca2131f308aa6f3a0e9e2fdc569e2d85e1b573f104b93 - Sigstore transparency entry: 727759941
- Sigstore integration time:
-
Permalink:
eurocontrol-asu/node-fdm@27f3e6034dd9267d691bf6452ee261b198833278 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/eurocontrol-asu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27f3e6034dd9267d691bf6452ee261b198833278 -
Trigger Event:
release
-
Statement type:
File details
Details for the file node_fdm-0.1.0-py3-none-any.whl.
File metadata
- Download URL: node_fdm-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eb648e98bbc5935e04c971adeb9c25c813e4fb7e8b6ea8c6ec3fb401c329b17
|
|
| MD5 |
b7c8f1ccaa83c1d8ba9bd10cca669b8a
|
|
| BLAKE2b-256 |
dc67566338b389e6c5c2fa9cccbb1c49944cc6c26612cb486339f34b42b3716f
|
Provenance
The following attestation bundles were made for node_fdm-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on eurocontrol-asu/node-fdm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
node_fdm-0.1.0-py3-none-any.whl -
Subject digest:
1eb648e98bbc5935e04c971adeb9c25c813e4fb7e8b6ea8c6ec3fb401c329b17 - Sigstore transparency entry: 727759942
- Sigstore integration time:
-
Permalink:
eurocontrol-asu/node-fdm@27f3e6034dd9267d691bf6452ee261b198833278 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/eurocontrol-asu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@27f3e6034dd9267d691bf6452ee261b198833278 -
Trigger Event:
release
-
Statement type: