Skip to content

Releases: nyx-space/anise

0.9.6: Fix transport theorem for orbit-centric frames (RIC, RCN, VNC)

08 Mar 13:52
3246a18

Choose a tag to compare

Important: the transport theorem was not correctly applied exclusively in the case of computing the RCN, RIC, and VNC frames. There was a unit issue. This release fixes this bug.

What's Changed

Full Changelog: 0.9.5...0.9.6

0.9.5: Fix python type hints + iterate over Ephemeris + fix Type2/3 for BSPs from spk_merge

25 Feb 13:43
1cc8cf8

Choose a tag to compare

New features

Bug fixes

  • Fix Type2/Type3 spline indexing for trimmed segments by @tobyhede in #662

Improvements

Dependencies

  • build(deps): update arrow requirement from 57.1.0 to 58.0.0 by @dependabot[bot] in #667
  • build(deps): update pyo3 requirement from 0.27 to 0.28 + hifitime 4.2.5 by @dependabot[bot] in #634

New Contributors

Full Changelog: 0.9.4...0.9.5

0.9.4: Support SPK Types 8/12 + export Quaternion/DCM multiplication to Python + Initial C++ bindings

12 Feb 14:11
8bf3193

Choose a tag to compare

What's Changed

Full Changelog: 0.9.3...0.9.4

0.9.3: Fix STK .e default units ; fix anise.time python type hint, update other type hints

04 Feb 15:37
7116d87

Choose a tag to compare

What's Changed

Full Changelog: 0.9.2...0.9.3

0.9.2: Fix RIC/VNC sign error; add covariance parsing to STK .e files

03 Feb 04:49
bc00da0

Choose a tag to compare

What's Changed

Full Changelog: 0.9.1...0.9.2

0.9.1: CCSDS OEM exporting epoch fix + initialize ephem record from Python

18 Jan 06:27
e143e35

Choose a tag to compare

0.9.0: Support CCSDS OEM and STK .e; Build covariance interpolation (PSD guaranteed) and orbital element uncertainty; add instrument kernel and Field of View calculations

12 Jan 18:24
feb25f1

Choose a tag to compare

🚀 Highlights

Version 0.9.0 introduces a dedicated instrument modeling module, significantly expands interoperability with industry-standard file formats (CCSDS OEM, Ansys STK), and adds "hot-swap" capabilities for kernel management.

🔭 Instrument & Field of View (Beta)

  • New Module: Introduced anise.instrument containing Instrument and FovShape classes.
  • Analysis: Added FovMargin and FovMarginToLocation to the scalar expression engine for event finding and reporting.
  • Visual Validation: Added tests/fov_plots.py demonstrating FOV pyramid construction and projection in the Moon Principal Axis frame.

⚠️ Beta Notice: The FOV margin calculation and Almanac signatures are currently in Beta. Expect potential API changes in future minor releases as the instrument modeling fidelity evolves.

📡 Interoperability & Data Exchange

  • CCSDS OEM Support:

  • Added Ephemeris.from_ccsds_oem_file() to load CCSDS Orbit Ephemeris Messages (OEM).

  • Added Almanac.load_ccsds_oem_file() to directly ingest OEMs into the frame system.

  • Added to_ccsds_oem_file() to export ephemerides.

  • STK Support: Added Ephemeris.from_stk_e_file() and Almanac.load_stk_e_file() to ingest Ansys STK .e ephemeris files.

  • Covariance Interpolation: Ephemeris interpolation via Log-Euclidean Riemannian space for covariance matrices, ensuring positive definiteness and volume preservation during sampling.

🔄 Kernel Management

  • Hot-Swapping: Added spk_swap() and bpc_swap() to the Almanac.
  • Allows in-place replacement of SPK/BPC files using a "high watermark" memory strategy (reusing existing buffers). Use this in embedded/flight software contexts.
  • Unloading: Added spk_unload() and bpc_unload().

📐 GNC & Frame Math

  • TRIAD / Align-and-Clock: Added DCM.from_align_and_clock() to construct rotation matrices based on primary/secondary vector alignment constraints.
  • Quaternion runtime frame checking: Fixed the Quaternion/Euler Parameter math to correctly use the Hamiltonian convention and use a passive rotation like the DCM.
  • Solar Elongation: Updated sun_angle_deg documentation to explicitly define conjunction/opposition geometry and illumination phases.
  • Numpy Integration: Orbit constructors now accept native numpy.array inputs for state vectors.

Pull requests

New features

Fixes

Miscellaneous

Full Changelog: 0.8.0...0.9.0

0.8.0: Event finder rewrite for correctness and speed

17 Nov 07:08
4e5f5a5

Choose a tag to compare

Gemini summary

Here are the release notes for version 0.8.0.

🚀 Major Overhaul: Event Finder

The event finding system has been completely rewritten from the ground up. This new implementation is approximately 25 times faster and resolves several bugs related to missed or incorrectly identified events (like eclipses and sunsets).

The API for event finding has been redesigned for clarity and power:

  • The Event class no longer uses desired_value and value_precision.
  • It now uses a new Condition enum (e.g., Condition.LessThan(90.0), Condition.Equals(0.0), Condition.Maximum()), which makes event definitions more intuitive.
  • The report_events function is now used for finding specific moments (events matching Equals, Minimum, or Maximum conditions).
  • The new report_event_arcs function is used to find time spans (events matching LessThan, GreaterThan, or Between conditions).
  • The report_events function no longer requires a heuristic duration argument, as the new adaptive scanner handles this automatically.

✨ New Features

  • Astrodynamics: Added support for Brouwer-Lyddane short mean elements and Equinoctial elements. These are accessible as new variants in the OrbitalElement scalar enum and via new methods on the Orbit object (e.g., orbit.sma_brouwer_short_km(), orbit.equinoctial_h()).
  • Analysis: A new anise.analysis.find_arc_intersections function is available to find common overlapping time windows from multiple EventArc lists.
  • Analysis: The report_scalars_flat function can now export results to a .csv file.
  • Python API: The Python module now exposes __version__, __author__, and __doc__ attributes.

⚠️ Breaking API Changes

  • Orbit.from_latlongalt: This method's signature has changed. It no longer accepts an angular velocity and now creates a state with ZERO angular velocity in the specified frame.
    • To get the previous behavior (specifying an angular velocity), use the new Orbit.from_latlongalt_omega method.
  • Method Renames:
    • Event.above_horizon_from_location_id is now Event.visible_from_location_id.
    • Almanac.frame_from_uid is now Almanac.frame_info.
    • All angular_velocity_wtr... (with-respect-to) methods are renamed to angular_velocity_wrt....

🛠️ Improvements and Fixes

  • AER Terrain Masks: Azimuth, Elevation, and Range (AER) calculations with terrain masks are improved. Instead of returning NaN when obstructed, the AzElRange object now populates the mask_deg field and provides a new elevation_above_mask_deg() method.
  • AER from Location: The logic for calculating AER from a location has been updated to use the new Orbit.from_latlongalt implementation, simplifying the internal logic.
  • Python API: LocationDhallSet and MetaAlmanac now have dumps/loads aliases for to_dhall/from_dhall.
  • Dependencies: Updated hifitime, pyo3, and numpy versions.
  • CI: Updated CI data files, kernel checksums, and pinned the build to Python 3.12.

Pull request summary

New features

Bug fixes

Miscellaneous

Full Changelog: 0.7.0...0.8.0

ANISE v0.7.0: The Analysis Engine

19 Oct 22:31
e5fc64a

Choose a tag to compare

This release is a massive step forward, evolving ANISE from a SPICE replacement into a comprehensive mission analysis toolkit. The centerpiece is the brand-new Analysis Engine, a powerful, expression-based framework for defining, computing, and reporting on complex astrodynamical events and values.

The highlights of this new engine include:

  • Expression-Based Reporting: Define what you want to compute—from simple orbital elements to complex vector projections—using StateSpec, ScalarExpr, and VectorExpr. The ReportScalars functionality then computes these values over any time series.
  • Robust Event Finding: Locate precise moments in time when specific conditions are met. Find every apoapsis, periapsis, eclipse, or even when an elevation angle from a ground station crosses the horizon using the new Event system.
  • First-Class Location Kernels: You can now define ground stations and other points of interest in new ANISE Location Kernel (.lka) files. These can be loaded directly into the Almanac to support azimuth, elevation, and range calculations with terrain masks.

Beyond the new engine, this release is packed with significant API improvements and internal refactors:

  • Dynamic Kernel Management: You can now load SPK and BPC kernels with aliases and unload them on the fly (spk_unload, bpc_unload), offering much greater flexibility for complex simulations. This is powered by a significant internal refactor of the Almanac.
  • Quaternions in Python: The rotation.Quaternion is now a first-class object in the Python API, providing a complete and robust interface for attitude dynamics.
  • Upgraded Time Engine: A major update to the underlying hifitime library brings a cleaner, more powerful anise.time API and a host of new functionalities.

New features

Dependencies

  • Update serde_dhall requirement from 0.12 to 0.13 by @dependabot[bot] in #512
  • Update nalgebra requirement from 0.33 to 0.34 by @dependabot[bot] in #505

Miscellaneous

Full Changelog: 0.6.8...0.7.0

0.6.9: Fix Python module import

11 Oct 02:50

Choose a tag to compare