Ticket 033: Continuous Spatiotemporal Wind Grid¶
Status: implemented.
Goal¶
Model wind as a deterministic function of position, altitude, and elapsed time beyond the current constant, altitude-layered, and scenario wind-change models.
Current Gap¶
This ticket is complete. Wind can be constant, altitude-banded, changed at scenario event times, or supplied through a deterministic spatiotemporal grid asset.
Scope¶
- Add a deterministic spatiotemporal wind provider interface.
- Define a versioned wind-grid input format.
- Add interpolation rules for latitude, longitude, altitude, and elapsed time.
- Add bounds and missing-data diagnostics.
- Keep existing
ConstantWindProvider,LayeredWindProvider, and scenariowind_changebehavior compatible. - Add estimator, scenario, CLI, and fixture coverage.
Acceptance Criteria¶
- Users can run deterministic estimates against an offline wind grid.
- Every wind sample is reproducible for a given input grid and route state.
- Unsupported or incomplete grid data fails explicitly.
Delivered¶
SpatiotemporalWindProviderinestimator/environment/wind.py— quadrilinear interpolation across time, altitude, lat, and lon axes; flat tuple storage with stride-based indexing; clamping at domain boundaries_lerpand_interp_indexmodule-level helpers usingbisect.bisect_rightwind_provider_idupdated to return"spatiotemporal_grid"forSpatiotemporalWindProvideradapters/wind_grid.py—load_wind_gridandWindGridLoadErrorfor YAML/JSON grid files- Load-time validation: axis monotonicity, minimum 2 entries per axis, exact
valuesshape check assets.wind_grid_filefield onMissionAssetsschema- CLI loads wind grid from
assets.wind_grid_file;--wind-layerflags take precedence WIND_GRID_SCHEMA_VERSION = "wind-grid.v1"andwind_gridprovenance inEnvelopeInputsSpatiotemporalWindProviderexported fromestimatorexamples/wind/pipeline_wind_grid.yamlexample grid- Golden fixture scenario
tests/fixtures/golden/spatiotemporal_wind/ - 22 new tests in
tests/test_wind_spatiotemporal.py
Integrated Surfaces¶
- Mission YAML uses
assets.wind_grid_fileto reference offline wind grids. - Wind examples live under
examples/wind/. - The
estimateandscenarioCLI commands load wind-grid assets through the same mission YAML path used by library callers. - Wind-grid behavior composes with vehicle YAML, mission route actions, terrain assets, geofence checks, landing-zone checks, scenario wind changes, result envelopes, Markdown reports, and golden fixtures.
- Scenario initial wind settings override mission wind-grid assets when set;
otherwise scenarios can inherit
assets.wind_grid_filefrom their referenced mission.wind_changeevents can still replace the active wind provider at deterministic timeline triggers.
Out of Scope¶
- Live weather API calls from core estimation.
- Probabilistic weather ensembles.
- Meteorological forecast validation.