Releases: open-space-collective/open-space-toolkit-astrodynamics
15.3.1
What's Changed
- style: re-run format with clang 18 by @alex-liang3 in #528
- fix: dangling references when custom pointing by @vishwa2710 in #530
Full Changelog: 15.3.0...15.3.1
15.3.0
What's Changed
- feat: simplify elevation computations by @vishwa2710 in #522
- chore: rename groundTarget to accessTarget by @apaletta3 in #523
- fix: remove zero duration access interval padding by @apaletta3 in #524
Full Changelog: 15.2.2...15.3.0
15.2.2
- 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
What's Changed
- fix: binding naming, imports and docs by @vishwa2710 in #519
Full Changelog: 15.2.0...15.2.1
15.2.0
- feat: Least Squares Solver by @vishwa2710 in #500
- fix: elevation interval was missing in trajectory based access computation by @vishwa2710 in #509
- feat: od least squares solver by @vishwa2710 in #501
- feat: tle solver by @vishwa2710 in #510
- build: turn BUILD BENCHMARK off by default by @apaletta3 in #514
- feat: improve OD solver and TLE solver interfaces by @vishwa2710 in #512
Full Changelog: 15.1.0...15.2.0
15.1.0
What's Changed
- feat: add_orbit option for cesium viewer by @vishwa2710 in #508
Full Changelog: 15.0.0...15.1.0
15.0.0
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
⚠️ 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
-
build: bump nlopt dep to from 2.5.0 to 2.9.1 by @apaletta3 in #496
-
build: prepare for test matrix by @alex-liang3 in #490
-
build: update all gh action extensions to latest versions by @apaletta3 in #489
-
chore: fix dockerfile and setuptools warnings, bump ostk-core and boost by @alex-liang3 in #499
-
chore: package stubs in whl by @alex-liang3 in #486
-
docs: clean-up Local Orbital Frame comments by @phc1990 in #487
-
feat: add label to viewer by @vishwa2710 in #483
-
feat: off nadir angle computations by @vishwa2710 in #492
-
feat!: add correct computeJacobian method by @vishwa2710 in #485
-
feat!: include states with Maneuver by @vishwa2710 in #432
-
feat!: vectorize access generation by @vishwa2710 in #461
-
fix: use absolute path of package by @alex-liang3 in #498
-
refactor!: FiniteDifferenceSolver interface for computeStateTransitionMatrix by @apaletta3 in #497
-
refactor!: rename nadir_pointing profile to local_orbital_frame by @vishwa2710 in #484
-
refactor!: use state instead of instantposvel by @vishwa2710 in #493
-
test: reorder test fixture for clarity by @apaletta3 in #494
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 tocompute_state_transition_matrix
- Removed
coordinate_dimension
parameter - now derived fromgenerate_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 tolocal_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
What's Changed
- fix: startup script for jupyter by @vishwa2710 in #471
- feat: frozen orbit conditions by @alex-liang3 in #473
- docs: clarify altitude definition in Orbit constructors by @alex-liang3 in #475
- build: add python3.13 support by @vishwa2710 in #481
New Contributors
- @alex-liang3 made their first contribution in #473
Full Changelog: 13.0.2...13.1.0
13.0.2
What's Changed
- chore: add startup script for jupyter image by @vishwa2710 in #470
Full Changelog: 13.0.1...13.0.2