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:
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.
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.
Metadata
Release files for node-fdm 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| node_fdm-0.1.0.tar.gz | 4.3 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| node_fdm-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 8.3 MB
Release files / node_fdm-0.1.0.tar.gz
| Download URL | node_fdm-0.1.0.tar.gz |
|---|---|
| Size | 4.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a83893d6bc2467bc21cca2131f308aa6f3a0e9e2fdc569e2d85e1b573f104b93
|
|
BLAKE2b-256 checksum How to use checksums |
c66dc68392884d4620cb6ae46deb8b0ade606a1e3cfa77c23e7050bfaa23044f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 26, 2025.
Transparency logRelease files / node_fdm-0.1.0-py3-none-any.whl
| Download URL | node_fdm-0.1.0-py3-none-any.whl |
|---|---|
| Size | 4.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1eb648e98bbc5935e04c971adeb9c25c813e4fb7e8b6ea8c6ec3fb401c329b17
|
|
BLAKE2b-256 checksum How to use checksums |
dc67566338b389e6c5c2fa9cccbb1c49944cc6c26612cb486339f34b42b3716f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 26, 2025.
Transparency logSecurity for node-fdm 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for node_fdm-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 26, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.