Skip to content

Releases: open-space-collective/open-space-toolkit-astrodynamics

15.3.1

26 Feb 04:39
d91c39d
Compare
Choose a tag to compare

What's Changed

Full Changelog: 15.3.0...15.3.1

15.3.0

18 Feb 16:17
c9cc2ac
Compare
Choose a tag to compare

What's Changed

Full Changelog: 15.2.2...15.3.0

15.2.2

13 Feb 11:10
18a5d66
Compare
Choose a tag to compare
  • fix: skip importing coordinates that are none in State.from_dict by @vishwa2710 in #520
  • fix: missing binding get_provider_type for LocalOrbitalFrameFactory by @vishwa2710 in #521

Full Changelog: 15.2.1...15.2.2

15.2.1

12 Feb 05:15
f786ae7
Compare
Choose a tag to compare

What's Changed

Full Changelog: 15.2.0...15.2.1

15.2.0

11 Feb 16:11
a6075a4
Compare
Choose a tag to compare

Full Changelog: 15.1.0...15.2.0

15.1.0

01 Feb 03:01
0fb71e0
Compare
Choose a tag to compare

What's Changed

Full Changelog: 15.0.0...15.1.0

15.0.0

31 Jan 22:10
dadb183
Compare
Choose a tag to compare

⚠️ This release fixes the stubs issues introduced in the previous release, the py.typed file has been removed, it will be re-introduced in a future release once the stubs have been comprehensively be tested against.

What's Changed

  • style: reapply clang-format by @alex-liang3 in #505
  • chore: add convenience method for total size of state builder by @apaletta3 in #504
  • docs: update index.rst to include data and provider by @vishwa2710 in #503
  • fix!: stubs breaking mypy by @alex-liang3 in #506 ⚠️ This contains a breaking change to CDM construction ⚠️
  • build: loosen boost req to 1.82, bump physics to 12 by @alex-liang3 in #507

Full Changelog: 14.0.0...15.0.0

14.0.0

23 Jan 23:33
ce35abf
Compare
Choose a tag to compare

⚠️ This release includes type stubs in the Python bindings, which may contain syntax errors that cause mypy to crash.

While we work to resolve these issues, it's recommended to add no_site_packages = True to your mypy config to suppress these errors.

What's Changed

Migration Guide

Finite Difference Solver

# Before
output: np.ndarray = finite_difference_solver.compute_jacobian(
    state=state,
    instants=instants,
    generate_states_coordinates=generate_states_coordinates,
    coordinate_dimension=2,
)

# Now
output: list[np.ndarray] = finite_difference_solver.compute_state_transition_matrix(
    state=state,
    instants=instants,
    generate_states_coordinates=generate_states_coordinates,
)
assert len(output) = len(instants)
  • compute_jacobian renamed to compute_state_transition_matrix
  • Removed coordinate_dimension parameter - now derived from generate_states_coordinates
  • compute_state_transition_matrix now returns a list of state transition matrices with proper ordering, before it would return a single np.ndarray that had N columns for the first dimension, N columns for the second dimension etc. which was confusing to parse

Profile

# Before
Profile.nadir_pointing(orbit=orbit, orbital_frame_type=Orbit.FrameType.VVLH)

# Now 
Profile.local_orbital_frame_pointing(orbit=orbit, orbital_frame_type=Orbit.FrameType.VVLH)
  • nadir_pointing renamed to local_orbital_frame_pointing to reflect broader functionality

Local Orbital Frame Factory

# Before
local_orbital_frame_factory.generate_frame(
    instant=instant,
    position_vector=position_vector,
    velocity_vector=velocity_vector
)

# Now
local_orbital_frame_factory.generate_frame(state=state)
  • Consolidated parameters into single state object

Generator

# Before
generator = Generator.aer_mask(
    azimuth_elevation_mask=azimuth_elevation_mask,
    range_range=range_range,
    environment=environment
)

from_trajectory = ...
to_trajectory = ...
accesses = generator.compute_accesses(
    interval=interval,
    from_trajectory=from_trajectory,
    to_trajectory=to_trajectory,
)

# Now
from ostk.astrodynamics.access import Generator, VisibilityCriterion, AccessTarget

generator = Generator(environment=environment)

visibility_criterion = VisibilityCriterion.from_aer_mask(
    azimuth_elevation_mask=azimuth_elevation_mask,
    range_interval=range_interval,
)

access_target = AccessTarget.from_lla(
    lla=LLA.vector(50.0, 30.0, 0.0),
    visibility_criterion=visibility_criterion,
    celestial=environment.access_celestial_object_with_name("Earth")
)

accesses = generator.compute_accesses(
    interval=interval,
    access_target=access_target,
    to_trajectory=...
)
  • Simplified generator creation
  • Constraints were previously defined at the Generator level, they are now defined at an AccessTarget level, allowing us to compute accesses with multiple access targets for a single satellite in a more efficient way
  • Please refer to the access computation notebook for in-depth examples

Maneuver

# Before
maneuver = Maneuver(instants, Frame.GCRF(), acceleration_profile, mass_flow_rate_profile)

acceleration_profile = maneuver.get_acceleration_profile()
instants = maneuver.get_instants()
mass_flow_rate_profile = maneuver.get_mass_flow_rate_profile()

# Now
coordinate_subsets = [
    CartesianPosition.default(),
    CartesianVelocity.default(),
    CartesianAcceleration.thrust_acceleration(),
    CoordinateSubset.mass_flow_rate(),
]

state_builder = StateBuilder(
    frame=Frame.GCRF(),
    coordinate_subsets=coordinate_subsets,
)

states = [state_builder.build(Instant.J2000(), coordinates), ...]
maneuver = Maneuver(states)

states = maneuver.get_states()
acceleration_profile = list(map(lambda state: state.extract_coordinate(CartesianAcceleration.thrust_acceleration()), states))
mass_flow_rate_profile = list(map(lambda state: state.extract_coordinate(CoordinateSubset.mass_flow_rate()), states))
instants = list(map(lambda state: state.get_instant(), states))
  • Consolidated acceleration, and mass flow rate profiles into a State object, including the position and velocity so that we can conveniently convert to local orbital frame definitions
  • New CartesianAcceleration subset to describe accelerations

New Features

  • Added label annotation support in viewer:
viewer.add_label(
    position=Position.meters([6671000.0, 0.0, 0.0], Frame.ITRF()),
    text="Hello, World!",
    size=1.0,
    color="red",
)
  • Added off-nadir angle computation:
from ostk.astrodynamics.data.provider import compute_off_nadir_angles

along_track, cross_track, off_nadir = compute_off_nadir_angles(
    state=state,
    target_position=target_position,
)
  • Cartesian Acceleration subset
from ostk.astrodynamics.trajectory.state.coordinate_subsets import CartesianAcceleration

cartesian_acceleration = CartesianAcceleration.default()
thrust_acceleration = CartesianAcceleration.thrust_acceleration()

Full Changelog: 13.1.0...14.0.0

13.1.0

20 Dec 05:53
911b0ba
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 13.0.2...13.1.0

13.0.2

06 Dec 06:42
cd88494
Compare
Choose a tag to compare

What's Changed

Full Changelog: 13.0.1...13.0.2