open-space-toolkit-astrodynamics 17.2.0__py312-none-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- open_space_toolkit_astrodynamics-17.2.0.dist-info/METADATA +30 -0
- open_space_toolkit_astrodynamics-17.2.0.dist-info/RECORD +151 -0
- open_space_toolkit_astrodynamics-17.2.0.dist-info/WHEEL +5 -0
- open_space_toolkit_astrodynamics-17.2.0.dist-info/top_level.txt +1 -0
- open_space_toolkit_astrodynamics-17.2.0.dist-info/zip-safe +1 -0
- ostk/__init__.py +1 -0
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-312-x86_64-linux-gnu.so +0 -0
- ostk/astrodynamics/__init__.py +11 -0
- ostk/astrodynamics/__init__.pyi +720 -0
- ostk/astrodynamics/access.pyi +577 -0
- ostk/astrodynamics/conjunction/__init__.pyi +121 -0
- ostk/astrodynamics/conjunction/close_approach.pyi +89 -0
- ostk/astrodynamics/conjunction/message/__init__.pyi +3 -0
- ostk/astrodynamics/conjunction/message/ccsds.pyi +705 -0
- ostk/astrodynamics/converters.py +130 -0
- ostk/astrodynamics/converters.pyi +58 -0
- ostk/astrodynamics/data/__init__.pyi +3 -0
- ostk/astrodynamics/data/provider.pyi +22 -0
- ostk/astrodynamics/dataframe.py +597 -0
- ostk/astrodynamics/display.py +281 -0
- ostk/astrodynamics/dynamics.pyi +311 -0
- ostk/astrodynamics/eclipse.pyi +70 -0
- ostk/astrodynamics/estimator.pyi +268 -0
- ostk/astrodynamics/event_condition.pyi +910 -0
- ostk/astrodynamics/flight/__init__.pyi +626 -0
- ostk/astrodynamics/flight/profile/__init__.pyi +99 -0
- ostk/astrodynamics/flight/profile/model.pyi +179 -0
- ostk/astrodynamics/flight/system.pyi +268 -0
- ostk/astrodynamics/guidance_law.pyi +416 -0
- ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.17 +0 -0
- ostk/astrodynamics/pytrajectory/__init__.py +1 -0
- ostk/astrodynamics/pytrajectory/__init__.pyi +3 -0
- ostk/astrodynamics/pytrajectory/pystate.py +263 -0
- ostk/astrodynamics/pytrajectory/pystate.pyi +66 -0
- ostk/astrodynamics/solver.pyi +432 -0
- ostk/astrodynamics/test/__init__.py +1 -0
- ostk/astrodynamics/test/access/__init__.py +1 -0
- ostk/astrodynamics/test/access/test_generator.py +319 -0
- ostk/astrodynamics/test/access/test_visibility_criterion.py +201 -0
- ostk/astrodynamics/test/conftest.py +119 -0
- ostk/astrodynamics/test/conjunction/close_approach/__init__.py +0 -0
- ostk/astrodynamics/test/conjunction/close_approach/test_generator.py +228 -0
- ostk/astrodynamics/test/conjunction/message/ccsds/__init__.py +1 -0
- ostk/astrodynamics/test/conjunction/message/ccsds/conftest.py +325 -0
- ostk/astrodynamics/test/conjunction/message/ccsds/data/cdm.json +303 -0
- ostk/astrodynamics/test/conjunction/message/ccsds/test_cdm.py +416 -0
- ostk/astrodynamics/test/conjunction/test_close_approach.py +244 -0
- ostk/astrodynamics/test/data/provider/test_off_nadir.py +58 -0
- ostk/astrodynamics/test/dynamics/__init__.py +1 -0
- ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity.csv +565 -0
- ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity_Truth.csv +100 -0
- ostk/astrodynamics/test/dynamics/test_atmospheric_drag.py +128 -0
- ostk/astrodynamics/test/dynamics/test_central_body_gravity.py +58 -0
- ostk/astrodynamics/test/dynamics/test_dynamics.py +50 -0
- ostk/astrodynamics/test/dynamics/test_position_derivative.py +51 -0
- ostk/astrodynamics/test/dynamics/test_tabulated.py +138 -0
- ostk/astrodynamics/test/dynamics/test_third_body_gravity.py +67 -0
- ostk/astrodynamics/test/dynamics/test_thruster.py +157 -0
- ostk/astrodynamics/test/eclipse/__init__.py +1 -0
- ostk/astrodynamics/test/eclipse/test_generator.py +138 -0
- ostk/astrodynamics/test/estimator/test_orbit_determination_solver.py +261 -0
- ostk/astrodynamics/test/estimator/test_tle_solver.py +216 -0
- ostk/astrodynamics/test/event_condition/test_angular_condition.py +113 -0
- ostk/astrodynamics/test/event_condition/test_boolean_condition.py +55 -0
- ostk/astrodynamics/test/event_condition/test_brouwer_lyddane_mean_long_condition.py +135 -0
- ostk/astrodynamics/test/event_condition/test_coe_condition.py +135 -0
- ostk/astrodynamics/test/event_condition/test_instant_condition.py +48 -0
- ostk/astrodynamics/test/event_condition/test_logical_condition.py +120 -0
- ostk/astrodynamics/test/event_condition/test_real_condition.py +50 -0
- ostk/astrodynamics/test/flight/__init__.py +1 -0
- ostk/astrodynamics/test/flight/profile/model/test_tabulated_profile.py +115 -0
- ostk/astrodynamics/test/flight/system/__init__.py +1 -0
- ostk/astrodynamics/test/flight/system/test_propulsion_system.py +64 -0
- ostk/astrodynamics/test/flight/system/test_satellite_system.py +83 -0
- ostk/astrodynamics/test/flight/system/test_satellite_system_builder.py +71 -0
- ostk/astrodynamics/test/flight/test_maneuver.py +231 -0
- ostk/astrodynamics/test/flight/test_profile.py +293 -0
- ostk/astrodynamics/test/flight/test_system.py +45 -0
- ostk/astrodynamics/test/guidance_law/test_constant_thrust.py +177 -0
- ostk/astrodynamics/test/guidance_law/test_guidance_law.py +60 -0
- ostk/astrodynamics/test/guidance_law/test_heterogeneous_guidance_law.py +164 -0
- ostk/astrodynamics/test/guidance_law/test_qlaw.py +209 -0
- ostk/astrodynamics/test/solvers/__init__.py +1 -0
- ostk/astrodynamics/test/solvers/test_finite_difference_solver.py +196 -0
- ostk/astrodynamics/test/solvers/test_least_squares_solver.py +334 -0
- ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +161 -0
- ostk/astrodynamics/test/test_access.py +128 -0
- ostk/astrodynamics/test/test_converters.py +290 -0
- ostk/astrodynamics/test/test_dataframe.py +1355 -0
- ostk/astrodynamics/test/test_display.py +184 -0
- ostk/astrodynamics/test/test_event_condition.py +80 -0
- ostk/astrodynamics/test/test_import.py +26 -0
- ostk/astrodynamics/test/test_root_solver.py +70 -0
- ostk/astrodynamics/test/test_trajectory.py +126 -0
- ostk/astrodynamics/test/test_utilities.py +338 -0
- ostk/astrodynamics/test/test_viewer.py +318 -0
- ostk/astrodynamics/test/trajectory/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/model/test_nadir_trajectory.py +87 -0
- ostk/astrodynamics/test/trajectory/model/test_tabulated_trajectory.py +303 -0
- ostk/astrodynamics/test/trajectory/model/test_target_scan_trajectory.py +126 -0
- ostk/astrodynamics/test/trajectory/orbit/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/message/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/message/spacex/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/message/spacex/conftest.py +18 -0
- ostk/astrodynamics/test/trajectory/orbit/message/spacex/data/opm_1.yaml +44 -0
- ostk/astrodynamics/test/trajectory/orbit/message/spacex/test_opm.py +108 -0
- ostk/astrodynamics/test/trajectory/orbit/models/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py +65 -0
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py +102 -0
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py +102 -0
- ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +305 -0
- ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py +337 -0
- ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py +130 -0
- ostk/astrodynamics/test/trajectory/orbit/models/test_modified_equinoctial.py +142 -0
- ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py +234 -0
- ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py +380 -0
- ostk/astrodynamics/test/trajectory/orbit/test_model.py +1 -0
- ostk/astrodynamics/test/trajectory/orbit/test_pass.py +75 -0
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_angular_velocity.py +30 -0
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quaternion.py +18 -0
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_acceleration.py +136 -0
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py +107 -0
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_velocity.py +115 -0
- ostk/astrodynamics/test/trajectory/state/test_coordinate_broker.py +84 -0
- ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +58 -0
- ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +316 -0
- ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py +81 -0
- ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +119 -0
- ostk/astrodynamics/test/trajectory/test_model.py +1 -0
- ostk/astrodynamics/test/trajectory/test_orbit.py +212 -0
- ostk/astrodynamics/test/trajectory/test_propagator.py +452 -0
- ostk/astrodynamics/test/trajectory/test_segment.py +694 -0
- ostk/astrodynamics/test/trajectory/test_sequence.py +550 -0
- ostk/astrodynamics/test/trajectory/test_state.py +629 -0
- ostk/astrodynamics/test/trajectory/test_state_builder.py +172 -0
- ostk/astrodynamics/trajectory/__init__.pyi +1982 -0
- ostk/astrodynamics/trajectory/model.pyi +259 -0
- ostk/astrodynamics/trajectory/orbit/__init__.pyi +349 -0
- ostk/astrodynamics/trajectory/orbit/message/__init__.pyi +3 -0
- ostk/astrodynamics/trajectory/orbit/message/spacex.pyi +264 -0
- ostk/astrodynamics/trajectory/orbit/model/__init__.pyi +648 -0
- ostk/astrodynamics/trajectory/orbit/model/brouwerLyddaneMean.pyi +121 -0
- ostk/astrodynamics/trajectory/orbit/model/kepler.pyi +709 -0
- ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi +330 -0
- ostk/astrodynamics/trajectory/state/__init__.pyi +402 -0
- ostk/astrodynamics/trajectory/state/coordinate_subset.pyi +208 -0
- ostk/astrodynamics/utilities.py +396 -0
- ostk/astrodynamics/viewer.py +851 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import numpy
|
|
3
|
+
import ostk.astrodynamics
|
|
4
|
+
import ostk.astrodynamics.trajectory
|
|
5
|
+
import ostk.core.type
|
|
6
|
+
import ostk.mathematics.curve_fitting
|
|
7
|
+
import ostk.mathematics.geometry.d3.object
|
|
8
|
+
import ostk.mathematics.geometry.d3.transformation.rotation
|
|
9
|
+
import ostk.physics.coordinate
|
|
10
|
+
import ostk.physics.time
|
|
11
|
+
import ostk.physics.unit
|
|
12
|
+
import typing
|
|
13
|
+
from . import profile
|
|
14
|
+
from . import system
|
|
15
|
+
__all__ = ['Maneuver', 'Profile', 'System', 'profile', 'system']
|
|
16
|
+
class Maneuver:
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
Spacecraft Maneuver class.
|
|
20
|
+
Store an acceleration and mass flow rate profile of a spacecraft maneuver.
|
|
21
|
+
|
|
22
|
+
"""
|
|
23
|
+
__hash__: typing.ClassVar[None] = None
|
|
24
|
+
@staticmethod
|
|
25
|
+
def constant_mass_flow_rate_profile(states: list[ostk.astrodynamics.trajectory.State], mass_flow_rate: ostk.core.type.Real) -> Maneuver:
|
|
26
|
+
"""
|
|
27
|
+
Create a maneuver from a constant mass flow rate profile.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
instants (list[Instant]): An array of instants, must be sorted.
|
|
31
|
+
acceleration_profile (list[numpy.ndarray]): An acceleration profile of the maneuver, one numpy.ndarray per instant.
|
|
32
|
+
frame (Frame): A frame in which the acceleration profile is defined.
|
|
33
|
+
mass_flow_rate (float): The constant mass flow rate (negative number expected).
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Maneuver: The created maneuver.
|
|
37
|
+
"""
|
|
38
|
+
def __eq__(self, arg0: Maneuver) -> bool:
|
|
39
|
+
...
|
|
40
|
+
def __init__(self, states: list[ostk.astrodynamics.trajectory.State]) -> None:
|
|
41
|
+
"""
|
|
42
|
+
Constructor.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
states (list[State]): An list of states, must be sorted, must include the CartesianPosition, CartesianVelocity, CartesianAcceleration and MassFlowRate subsets.
|
|
46
|
+
"""
|
|
47
|
+
def __ne__(self, arg0: Maneuver) -> bool:
|
|
48
|
+
...
|
|
49
|
+
def __repr__(self) -> str:
|
|
50
|
+
...
|
|
51
|
+
def __str__(self) -> str:
|
|
52
|
+
...
|
|
53
|
+
def calculate_average_specific_impulse(self, initial_spacecraft_mass: ostk.physics.unit.Mass) -> ostk.core.type.Real:
|
|
54
|
+
"""
|
|
55
|
+
Calculate the average specific impulse of the maneuver.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
initial_spacecraft_mass (Mass): The initial mass of the spacecraft.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
float: The average specific impulse (s).
|
|
62
|
+
"""
|
|
63
|
+
def calculate_average_thrust(self, initial_spacecraft_mass: ostk.physics.unit.Mass) -> ostk.core.type.Real:
|
|
64
|
+
"""
|
|
65
|
+
Calculate the average thrust of the maneuver.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
initial_spacecraft_mass (Mass): The initial mass of the spacecraft.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
float: The average thrust (N).
|
|
72
|
+
"""
|
|
73
|
+
def calculate_delta_mass(self) -> ostk.physics.unit.Mass:
|
|
74
|
+
"""
|
|
75
|
+
Calculate the delta mass of the maneuver.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
Mass: The delta mass (always positive) (kg).
|
|
79
|
+
"""
|
|
80
|
+
def calculate_delta_v(self) -> ostk.core.type.Real:
|
|
81
|
+
"""
|
|
82
|
+
Calculate the delta-v of the maneuver.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
float: The delta-v value (m/s).
|
|
86
|
+
"""
|
|
87
|
+
def calculate_mean_thrust_direction_and_maximum_angular_offset(self, local_orbital_frame_factory: ostk.astrodynamics.trajectory.LocalOrbitalFrameFactory) -> tuple[ostk.astrodynamics.trajectory.LocalOrbitalFrameDirection, ostk.physics.unit.Angle]:
|
|
88
|
+
"""
|
|
89
|
+
Calculate the mean thrust direction in the Local Orbital Frame and its maximum angular offset w.r.t. the maneuver's thrust acceleration directions.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
local_orbital_frame_factory (LocalOrbitalFrameFactory): The local orbital frame factory.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Tuple[LocalOrbitalFrameDirection, Angle]: The mean thrust direction and its maximum angular offset.
|
|
96
|
+
"""
|
|
97
|
+
def get_interval(self) -> ostk.physics.time.Interval:
|
|
98
|
+
"""
|
|
99
|
+
Get the interval of the maneuver.
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
Interval: The interval.
|
|
103
|
+
"""
|
|
104
|
+
def get_states(self) -> list[ostk.astrodynamics.trajectory.State]:
|
|
105
|
+
"""
|
|
106
|
+
Get the states.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
list[State]: The states.
|
|
110
|
+
"""
|
|
111
|
+
def is_defined(self) -> bool:
|
|
112
|
+
"""
|
|
113
|
+
Check if the maneuver is defined.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
bool: True if the maneuver is defined, False otherwise. (Always returns true).
|
|
117
|
+
"""
|
|
118
|
+
def to_constant_local_orbital_frame_direction_maneuver(self, local_orbital_frame_factory: ostk.astrodynamics.trajectory.LocalOrbitalFrameFactory, maximum_allowed_angular_offset: ostk.physics.unit.Angle = ...) -> Maneuver:
|
|
119
|
+
"""
|
|
120
|
+
Create a maneuver with a constant thrust acceleration direction in the Local Orbital Frame.
|
|
121
|
+
|
|
122
|
+
The new Maneuver contains the same states as the original Maneuver, but the thrust acceleration direction is
|
|
123
|
+
constant in the Local Orbital Frame. Said direction is the mean direction of the thrust acceleration directions
|
|
124
|
+
in the Local Orbital Frame of the original Maneuver. The thrust acceleration magnitude profile is the same as the original.
|
|
125
|
+
|
|
126
|
+
If defined, a runtime error will be thrown if the maximum allowed angular offset between the original thrust acceleration direction
|
|
127
|
+
and the mean thrust direction is violated.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
local_orbital_frame_factory (LocalOrbitalFrameFactory): The local orbital frame factory.
|
|
131
|
+
maximum_allowed_angular_offset (Angle, optional): The maximum allowed angular offset to consider (if any). Defaults to Undefined.
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
Maneuver: The constant local orbital frame direction maneuver.
|
|
135
|
+
"""
|
|
136
|
+
def to_tabulated_dynamics(self, frame: ostk.physics.coordinate.Frame = ..., interpolation_type: ostk.mathematics.curve_fitting.Interpolator.Type = ...) -> ...:
|
|
137
|
+
"""
|
|
138
|
+
Convert the maneuver to tabulated dynamics.
|
|
139
|
+
|
|
140
|
+
Args:
|
|
141
|
+
frame (Frame, optional): The frame in which the acceleration profile is defined. Defaults to the default acceleration frame.
|
|
142
|
+
interpolation_type (Interpolator.Type, optional): The interpolation type to use. Defaults to the default interpolation type.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
Tabulated: The tabulated dynamics.
|
|
146
|
+
"""
|
|
147
|
+
class Profile:
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
Spacecraft Flight Profile.
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
"""
|
|
154
|
+
class Axis:
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
The axis of the profile.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
Members:
|
|
161
|
+
|
|
162
|
+
X : X axis
|
|
163
|
+
|
|
164
|
+
Y : Y axis
|
|
165
|
+
|
|
166
|
+
Z : Z axis
|
|
167
|
+
"""
|
|
168
|
+
X: typing.ClassVar[Profile.Axis] # value = <Axis.X: 0>
|
|
169
|
+
Y: typing.ClassVar[Profile.Axis] # value = <Axis.Y: 1>
|
|
170
|
+
Z: typing.ClassVar[Profile.Axis] # value = <Axis.Z: 2>
|
|
171
|
+
__members__: typing.ClassVar[dict[str, Profile.Axis]] # value = {'X': <Axis.X: 0>, 'Y': <Axis.Y: 1>, 'Z': <Axis.Z: 2>}
|
|
172
|
+
def __eq__(self, other: typing.Any) -> bool:
|
|
173
|
+
...
|
|
174
|
+
def __getstate__(self) -> int:
|
|
175
|
+
...
|
|
176
|
+
def __hash__(self) -> int:
|
|
177
|
+
...
|
|
178
|
+
def __index__(self) -> int:
|
|
179
|
+
...
|
|
180
|
+
def __init__(self, value: int) -> None:
|
|
181
|
+
...
|
|
182
|
+
def __int__(self) -> int:
|
|
183
|
+
...
|
|
184
|
+
def __ne__(self, other: typing.Any) -> bool:
|
|
185
|
+
...
|
|
186
|
+
def __repr__(self) -> str:
|
|
187
|
+
...
|
|
188
|
+
def __setstate__(self, state: int) -> None:
|
|
189
|
+
...
|
|
190
|
+
def __str__(self) -> str:
|
|
191
|
+
...
|
|
192
|
+
@property
|
|
193
|
+
def name(self) -> str:
|
|
194
|
+
...
|
|
195
|
+
@property
|
|
196
|
+
def value(self) -> int:
|
|
197
|
+
...
|
|
198
|
+
class CustomTarget(Profile.Target):
|
|
199
|
+
"""
|
|
200
|
+
|
|
201
|
+
The custom target.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
"""
|
|
205
|
+
@typing.overload
|
|
206
|
+
def __init__(self, orientation_generator: typing.Callable[[ostk.astrodynamics.trajectory.State], numpy.ndarray[numpy.float64[3, 1]]], direction: numpy.ndarray[numpy.float64[3, 1]]) -> None:
|
|
207
|
+
"""
|
|
208
|
+
Constructor.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
orientation_generator (Callable[np.ndarray, State]]): The orientation generator, accepts a state and returns a size 3 array of directions.
|
|
212
|
+
direction (Vector3d): The direction.
|
|
213
|
+
"""
|
|
214
|
+
@typing.overload
|
|
215
|
+
def __init__(self, orientation_generator: typing.Callable[[ostk.astrodynamics.trajectory.State], numpy.ndarray[numpy.float64[3, 1]]], axis: Profile.Axis, anti_direction: bool = False) -> None:
|
|
216
|
+
"""
|
|
217
|
+
Constructor from an axis.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
orientation_generator (Callable[np.ndarray, State]]): The orientation generator, accepts a state and returns a size 3 array of directions.
|
|
221
|
+
axis (Axis): The axis to convert to a direction vector.
|
|
222
|
+
anti_direction (bool): If true, the direction is flipped. Defaults to False.
|
|
223
|
+
"""
|
|
224
|
+
@property
|
|
225
|
+
def orientation_generator(self) -> typing.Callable[[ostk.astrodynamics.trajectory.State], numpy.ndarray[numpy.float64[3, 1]]]:
|
|
226
|
+
"""
|
|
227
|
+
The orientation generator of the target.
|
|
228
|
+
"""
|
|
229
|
+
class OrientationProfileTarget(Profile.Target):
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
The alignment profile target.
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
"""
|
|
236
|
+
@typing.overload
|
|
237
|
+
def __init__(self, orientation_profile: list[tuple[ostk.physics.time.Instant, numpy.ndarray[numpy.float64[3, 1]]]], direction: numpy.ndarray[numpy.float64[3, 1]], interpolator_type: ostk.mathematics.curve_fitting.Interpolator.Type = ...) -> None:
|
|
238
|
+
"""
|
|
239
|
+
Constructor.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
orientation_profile (list[Tuple[Instant, Vector3d]]): The orientation profile.
|
|
243
|
+
direction (Vector3d): The direction.
|
|
244
|
+
interpolator_type (Interpolator.Type, optional): The type of interpolator to use. Defaults to Barycentric Rational.
|
|
245
|
+
"""
|
|
246
|
+
@typing.overload
|
|
247
|
+
def __init__(self, orientation_profile: list[tuple[ostk.physics.time.Instant, numpy.ndarray[numpy.float64[3, 1]]]], axis: Profile.Axis, anti_direction: bool = False, interpolator_type: ostk.mathematics.curve_fitting.Interpolator.Type = ...) -> None:
|
|
248
|
+
"""
|
|
249
|
+
Constructor from an axis.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
orientation_profile (list[Tuple[Instant, Vector3d]]): The orientation profile.
|
|
253
|
+
axis (Axis): The axis to convert to a direction vector.
|
|
254
|
+
anti_direction (bool): If true, the direction is flipped. Defaults to False.
|
|
255
|
+
interpolator_type (Interpolator.Type, optional): The type of interpolator to use. Defaults to Barycentric Rational.
|
|
256
|
+
"""
|
|
257
|
+
@property
|
|
258
|
+
def orientation_profile(self) -> list[tuple[ostk.physics.time.Instant, numpy.ndarray[numpy.float64[3, 1]]]]:
|
|
259
|
+
"""
|
|
260
|
+
The orientation profile of the target.
|
|
261
|
+
"""
|
|
262
|
+
class Target:
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
The target of the profile.
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
"""
|
|
269
|
+
@typing.overload
|
|
270
|
+
def __init__(self, type: Profile.TargetType, direction: numpy.ndarray[numpy.float64[3, 1]]) -> None:
|
|
271
|
+
"""
|
|
272
|
+
Constructor.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
type (Profile.TargetType): The target type.
|
|
276
|
+
direction (Vector3d): The direction.
|
|
277
|
+
"""
|
|
278
|
+
@typing.overload
|
|
279
|
+
def __init__(self, type: Profile.TargetType, axis: Profile.Axis, anti_direction: bool = False) -> None:
|
|
280
|
+
"""
|
|
281
|
+
Constructor.
|
|
282
|
+
|
|
283
|
+
Args:
|
|
284
|
+
type (Profile.TargetType): The target type.
|
|
285
|
+
axis (Profile.Axis): The axis.
|
|
286
|
+
anti_direction (bool): True if the direction is flipped, False otherwise. Defaults to False.
|
|
287
|
+
"""
|
|
288
|
+
@property
|
|
289
|
+
def direction(self) -> numpy.ndarray[numpy.float64[3, 1]]:
|
|
290
|
+
"""
|
|
291
|
+
The direction of the target.
|
|
292
|
+
"""
|
|
293
|
+
@property
|
|
294
|
+
def type(self) -> Profile.TargetType:
|
|
295
|
+
"""
|
|
296
|
+
The type of the target.
|
|
297
|
+
"""
|
|
298
|
+
class TargetType:
|
|
299
|
+
"""
|
|
300
|
+
|
|
301
|
+
The target type of the profile.
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
Members:
|
|
305
|
+
|
|
306
|
+
GeocentricNadir : Geocentric nadir
|
|
307
|
+
|
|
308
|
+
GeodeticNadir : Geodetic nadir
|
|
309
|
+
|
|
310
|
+
TargetPosition : Target position
|
|
311
|
+
|
|
312
|
+
TargetVelocity : Target velocity
|
|
313
|
+
|
|
314
|
+
TargetSlidingGroundVelocity : Target sliding ground velocity
|
|
315
|
+
|
|
316
|
+
Sun : Sun
|
|
317
|
+
|
|
318
|
+
Moon : Moon
|
|
319
|
+
|
|
320
|
+
VelocityECI : Velocity in ECI
|
|
321
|
+
|
|
322
|
+
OrbitalMomentum : Orbital momentum
|
|
323
|
+
|
|
324
|
+
OrientationProfile : Orientation profile
|
|
325
|
+
|
|
326
|
+
Custom : Custom
|
|
327
|
+
"""
|
|
328
|
+
Custom: typing.ClassVar[Profile.TargetType] # value = <TargetType.Custom: 10>
|
|
329
|
+
GeocentricNadir: typing.ClassVar[Profile.TargetType] # value = <TargetType.GeocentricNadir: 0>
|
|
330
|
+
GeodeticNadir: typing.ClassVar[Profile.TargetType] # value = <TargetType.GeodeticNadir: 1>
|
|
331
|
+
Moon: typing.ClassVar[Profile.TargetType] # value = <TargetType.Moon: 6>
|
|
332
|
+
OrbitalMomentum: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrbitalMomentum: 8>
|
|
333
|
+
OrientationProfile: typing.ClassVar[Profile.TargetType] # value = <TargetType.OrientationProfile: 9>
|
|
334
|
+
Sun: typing.ClassVar[Profile.TargetType] # value = <TargetType.Sun: 5>
|
|
335
|
+
TargetPosition: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetPosition: 2>
|
|
336
|
+
TargetSlidingGroundVelocity: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetSlidingGroundVelocity: 4>
|
|
337
|
+
TargetVelocity: typing.ClassVar[Profile.TargetType] # value = <TargetType.TargetVelocity: 3>
|
|
338
|
+
VelocityECI: typing.ClassVar[Profile.TargetType] # value = <TargetType.VelocityECI: 7>
|
|
339
|
+
__members__: typing.ClassVar[dict[str, Profile.TargetType]] # value = {'GeocentricNadir': <TargetType.GeocentricNadir: 0>, 'GeodeticNadir': <TargetType.GeodeticNadir: 1>, 'TargetPosition': <TargetType.TargetPosition: 2>, 'TargetVelocity': <TargetType.TargetVelocity: 3>, 'TargetSlidingGroundVelocity': <TargetType.TargetSlidingGroundVelocity: 4>, 'Sun': <TargetType.Sun: 5>, 'Moon': <TargetType.Moon: 6>, 'VelocityECI': <TargetType.VelocityECI: 7>, 'OrbitalMomentum': <TargetType.OrbitalMomentum: 8>, 'OrientationProfile': <TargetType.OrientationProfile: 9>, 'Custom': <TargetType.Custom: 10>}
|
|
340
|
+
def __eq__(self, other: typing.Any) -> bool:
|
|
341
|
+
...
|
|
342
|
+
def __getstate__(self) -> int:
|
|
343
|
+
...
|
|
344
|
+
def __hash__(self) -> int:
|
|
345
|
+
...
|
|
346
|
+
def __index__(self) -> int:
|
|
347
|
+
...
|
|
348
|
+
def __init__(self, value: int) -> None:
|
|
349
|
+
...
|
|
350
|
+
def __int__(self) -> int:
|
|
351
|
+
...
|
|
352
|
+
def __ne__(self, other: typing.Any) -> bool:
|
|
353
|
+
...
|
|
354
|
+
def __repr__(self) -> str:
|
|
355
|
+
...
|
|
356
|
+
def __setstate__(self, state: int) -> None:
|
|
357
|
+
...
|
|
358
|
+
def __str__(self) -> str:
|
|
359
|
+
...
|
|
360
|
+
@property
|
|
361
|
+
def name(self) -> str:
|
|
362
|
+
...
|
|
363
|
+
@property
|
|
364
|
+
def value(self) -> int:
|
|
365
|
+
...
|
|
366
|
+
class TrajectoryTarget(Profile.Target):
|
|
367
|
+
"""
|
|
368
|
+
|
|
369
|
+
The trajectory target.
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
"""
|
|
373
|
+
@staticmethod
|
|
374
|
+
@typing.overload
|
|
375
|
+
def target_position(trajectory: ostk.astrodynamics.Trajectory, direction: numpy.ndarray[numpy.float64[3, 1]]) -> Profile.TrajectoryTarget:
|
|
376
|
+
"""
|
|
377
|
+
Create a target, which produces a vector pointing from the observer to the target position.
|
|
378
|
+
"""
|
|
379
|
+
@staticmethod
|
|
380
|
+
@typing.overload
|
|
381
|
+
def target_position(trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> Profile.TrajectoryTarget:
|
|
382
|
+
"""
|
|
383
|
+
Create a target, which produces a vector pointing from the observer to the target position.
|
|
384
|
+
|
|
385
|
+
Args:
|
|
386
|
+
trajectory (Trajectory): The trajectory.
|
|
387
|
+
axis (Axis): The axis to convert to a direction vector.
|
|
388
|
+
anti_direction (bool): If true, the direction is flipped. Defaults to False.
|
|
389
|
+
"""
|
|
390
|
+
@staticmethod
|
|
391
|
+
@typing.overload
|
|
392
|
+
def target_sliding_ground_velocity(trajectory: ostk.astrodynamics.Trajectory, direction: numpy.ndarray[numpy.float64[3, 1]]) -> Profile.TrajectoryTarget:
|
|
393
|
+
"""
|
|
394
|
+
Create a target, which produces a vector pointing along the ground velocity vector (aka the scan direction of the point sliding across the ground).
|
|
395
|
+
This will compensate for the rotation of the referenced celestial body.
|
|
396
|
+
"""
|
|
397
|
+
@staticmethod
|
|
398
|
+
@typing.overload
|
|
399
|
+
def target_sliding_ground_velocity(trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> Profile.TrajectoryTarget:
|
|
400
|
+
"""
|
|
401
|
+
Create a target, which produces a vector pointing along the ground velocity vector (aka the scan direction of the point sliding across the ground).
|
|
402
|
+
This will compensate for the rotation of the referenced celestial body.
|
|
403
|
+
|
|
404
|
+
Args:
|
|
405
|
+
trajectory (Trajectory): The trajectory.
|
|
406
|
+
axis (Axis): The axis to convert to a direction vector.
|
|
407
|
+
anti_direction (bool): If true, the direction is flipped. Defaults to False.
|
|
408
|
+
"""
|
|
409
|
+
@staticmethod
|
|
410
|
+
@typing.overload
|
|
411
|
+
def target_velocity(trajectory: ostk.astrodynamics.Trajectory, direction: numpy.ndarray[numpy.float64[3, 1]]) -> Profile.TrajectoryTarget:
|
|
412
|
+
"""
|
|
413
|
+
Create a target, which produces a vector pointing along the scan direction.
|
|
414
|
+
"""
|
|
415
|
+
@staticmethod
|
|
416
|
+
@typing.overload
|
|
417
|
+
def target_velocity(trajectory: ostk.astrodynamics.Trajectory, axis: Profile.Axis, anti_direction: bool = False) -> Profile.TrajectoryTarget:
|
|
418
|
+
"""
|
|
419
|
+
Create a target, which produces a vector pointing along the scan direction.
|
|
420
|
+
|
|
421
|
+
Args:
|
|
422
|
+
trajectory (Trajectory): The trajectory.
|
|
423
|
+
axis (Axis): The axis to convert to a direction vector.
|
|
424
|
+
anti_direction (bool): If true, the direction is flipped. Defaults to False.
|
|
425
|
+
"""
|
|
426
|
+
@property
|
|
427
|
+
def trajectory(self) -> ostk.astrodynamics.Trajectory:
|
|
428
|
+
"""
|
|
429
|
+
The trajectory of the target. Used to compute the target position or velocity.
|
|
430
|
+
"""
|
|
431
|
+
@staticmethod
|
|
432
|
+
def align_and_constrain(alignment_target: Profile.Target, clocking_target: Profile.Target, angular_offset: ostk.physics.unit.Angle = ...) -> typing.Callable[[ostk.astrodynamics.trajectory.State], ostk.mathematics.geometry.d3.transformation.rotation.Quaternion]:
|
|
433
|
+
"""
|
|
434
|
+
Generate a function that provides a quaternion that aligns to the `alignment_target` and constrains to the `clocking_target` for a given state.
|
|
435
|
+
|
|
436
|
+
Args:
|
|
437
|
+
alignment_target (Profile.Target | Profile.TrajectoryTarget | Profile.OrientationProfileTarget | Profile.CustomTarget): The alignment target.
|
|
438
|
+
clocking_target (Profile.Target | Profile.TrajectoryTarget | Profile.OrientationProfileTarget | Profile.CustomTarget): The clocking target.
|
|
439
|
+
angular_offset (Angle): The angular offset. Defaults to `Angle.Zero()`.
|
|
440
|
+
|
|
441
|
+
Returns:
|
|
442
|
+
callable[Quaternion, State]: The custom orientation.
|
|
443
|
+
"""
|
|
444
|
+
@staticmethod
|
|
445
|
+
@typing.overload
|
|
446
|
+
def custom_pointing(orbit: ostk.astrodynamics.trajectory.Orbit, orientation_generator: typing.Callable[[ostk.astrodynamics.trajectory.State], ostk.mathematics.geometry.d3.transformation.rotation.Quaternion]) -> Profile:
|
|
447
|
+
"""
|
|
448
|
+
Create a custom pointing profile.
|
|
449
|
+
|
|
450
|
+
Args:
|
|
451
|
+
orbit (Orbit): The orbit.
|
|
452
|
+
orientation_generator (callable[Quaternion, State]): The orientation generator. Typically used in conjunction with `align_and_constrain`.
|
|
453
|
+
|
|
454
|
+
Returns:
|
|
455
|
+
Profile: The custom pointing profile.
|
|
456
|
+
"""
|
|
457
|
+
@staticmethod
|
|
458
|
+
@typing.overload
|
|
459
|
+
def custom_pointing(orbit: ostk.astrodynamics.trajectory.Orbit, alignment_target: Profile.Target, clocking_target: Profile.Target, angular_offset: ostk.physics.unit.Angle = ...) -> Profile:
|
|
460
|
+
"""
|
|
461
|
+
Create a custom pointing profile.
|
|
462
|
+
|
|
463
|
+
Args:
|
|
464
|
+
orbit (Orbit): The orbit.
|
|
465
|
+
alignment_target (Profile.Target): The alignment target.
|
|
466
|
+
clocking_target (Profile.Target): The clocking target.
|
|
467
|
+
angular_offset (Angle): The angular offset. Defaults to `Angle.Zero()`.
|
|
468
|
+
|
|
469
|
+
Returns:
|
|
470
|
+
Profile: The custom pointing profile.
|
|
471
|
+
"""
|
|
472
|
+
@staticmethod
|
|
473
|
+
def inertial_pointing(trajectory: ostk.astrodynamics.Trajectory, quaternion: ostk.mathematics.geometry.d3.transformation.rotation.Quaternion) -> Profile:
|
|
474
|
+
"""
|
|
475
|
+
Create an inertial pointing profile.
|
|
476
|
+
|
|
477
|
+
Args:
|
|
478
|
+
trajectory (Trajectory): The trajectory.
|
|
479
|
+
quaternion (Quaternion): The quaternion.
|
|
480
|
+
|
|
481
|
+
Returns:
|
|
482
|
+
Profile: The inertial pointing profile.
|
|
483
|
+
"""
|
|
484
|
+
@staticmethod
|
|
485
|
+
def local_orbital_frame_pointing(orbit: ostk.astrodynamics.trajectory.Orbit, orbital_frame_type: ostk.astrodynamics.trajectory.Orbit.FrameType) -> Profile:
|
|
486
|
+
"""
|
|
487
|
+
Create a profile aligned with the provided local orbital frame type.
|
|
488
|
+
|
|
489
|
+
Args:
|
|
490
|
+
orbit (Orbit): The orbit.
|
|
491
|
+
orbital_frame_type (OrbitalFrameType): The type of the orbital frame.
|
|
492
|
+
|
|
493
|
+
Returns:
|
|
494
|
+
Profile: The profile aligned with the local orbital frame.
|
|
495
|
+
"""
|
|
496
|
+
@staticmethod
|
|
497
|
+
def undefined() -> Profile:
|
|
498
|
+
"""
|
|
499
|
+
Create an undefined profile.
|
|
500
|
+
|
|
501
|
+
Returns:
|
|
502
|
+
Profile: The undefined profile.
|
|
503
|
+
"""
|
|
504
|
+
def __init__(self, model: typing.Any) -> None:
|
|
505
|
+
"""
|
|
506
|
+
Constructor.
|
|
507
|
+
|
|
508
|
+
Args:
|
|
509
|
+
model (Model): The profile model.
|
|
510
|
+
"""
|
|
511
|
+
def __repr__(self) -> str:
|
|
512
|
+
...
|
|
513
|
+
def __str__(self) -> str:
|
|
514
|
+
...
|
|
515
|
+
def access_model(self) -> ...:
|
|
516
|
+
"""
|
|
517
|
+
Access the profile model.
|
|
518
|
+
|
|
519
|
+
Returns:
|
|
520
|
+
Model: The profile model.
|
|
521
|
+
"""
|
|
522
|
+
def construct_body_frame(self, frame_name: ostk.core.type.String, overwrite: bool = False) -> ostk.physics.coordinate.Frame:
|
|
523
|
+
"""
|
|
524
|
+
Construct the body frame of the profile.
|
|
525
|
+
|
|
526
|
+
Args:
|
|
527
|
+
frame_name (str): The name of the frame.
|
|
528
|
+
overwrite (bool): If True, destruct existing frame with same name. Defaults to False.
|
|
529
|
+
|
|
530
|
+
Returns:
|
|
531
|
+
Frame: The body frame of the profile.
|
|
532
|
+
"""
|
|
533
|
+
def get_axes_at(self, instant: ostk.physics.time.Instant) -> ostk.physics.coordinate.Axes:
|
|
534
|
+
"""
|
|
535
|
+
Get the axes of the profile at a given instant.
|
|
536
|
+
|
|
537
|
+
Args:
|
|
538
|
+
instant (Instant): The instant.
|
|
539
|
+
|
|
540
|
+
Returns:
|
|
541
|
+
Frame: The axes of the profile at the given instant.
|
|
542
|
+
"""
|
|
543
|
+
def get_state_at(self, instant: ostk.physics.time.Instant) -> ostk.astrodynamics.trajectory.State:
|
|
544
|
+
"""
|
|
545
|
+
Get the state of the profile at a given instant.
|
|
546
|
+
|
|
547
|
+
Args:
|
|
548
|
+
instant (Instant): The instant.
|
|
549
|
+
|
|
550
|
+
Returns:
|
|
551
|
+
State: The state of the profile at the given instant.
|
|
552
|
+
"""
|
|
553
|
+
def get_states_at(self, instants: list[ostk.physics.time.Instant]) -> list[ostk.astrodynamics.trajectory.State]:
|
|
554
|
+
"""
|
|
555
|
+
Get the states of the profile at given instants.
|
|
556
|
+
|
|
557
|
+
Args:
|
|
558
|
+
instants (list): The instants.
|
|
559
|
+
|
|
560
|
+
Returns:
|
|
561
|
+
list: The states of the profile at the given instants.
|
|
562
|
+
"""
|
|
563
|
+
def is_defined(self) -> bool:
|
|
564
|
+
"""
|
|
565
|
+
Check if the profile is defined.
|
|
566
|
+
|
|
567
|
+
Returns:
|
|
568
|
+
bool: True if the profile is defined, False otherwise.
|
|
569
|
+
"""
|
|
570
|
+
class System:
|
|
571
|
+
"""
|
|
572
|
+
|
|
573
|
+
A flight system.
|
|
574
|
+
|
|
575
|
+
Provides the interface for flight systems.
|
|
576
|
+
|
|
577
|
+
.. warning:: This class is an abstract class and cannot be instantiated.
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
"""
|
|
581
|
+
__hash__: typing.ClassVar[None] = None
|
|
582
|
+
@staticmethod
|
|
583
|
+
def undefined() -> System:
|
|
584
|
+
"""
|
|
585
|
+
Create an undefined system.
|
|
586
|
+
|
|
587
|
+
Returns:
|
|
588
|
+
System: The undefined system.
|
|
589
|
+
"""
|
|
590
|
+
def __eq__(self, arg0: System) -> bool:
|
|
591
|
+
...
|
|
592
|
+
def __init__(self, mass: ostk.physics.unit.Mass, geometry: ostk.mathematics.geometry.d3.object.Composite) -> None:
|
|
593
|
+
"""
|
|
594
|
+
Constructor.
|
|
595
|
+
|
|
596
|
+
Args:
|
|
597
|
+
mass (Mass): The mass of the system.
|
|
598
|
+
geometry (Composite): The geometry of the system.
|
|
599
|
+
"""
|
|
600
|
+
def __ne__(self, arg0: System) -> bool:
|
|
601
|
+
...
|
|
602
|
+
def __repr__(self) -> str:
|
|
603
|
+
...
|
|
604
|
+
def __str__(self) -> str:
|
|
605
|
+
...
|
|
606
|
+
def get_geometry(self) -> ostk.mathematics.geometry.d3.object.Composite:
|
|
607
|
+
"""
|
|
608
|
+
Get the geometry of the system.
|
|
609
|
+
|
|
610
|
+
Returns:
|
|
611
|
+
Composite: The geometry of the system.
|
|
612
|
+
"""
|
|
613
|
+
def get_mass(self) -> ostk.physics.unit.Mass:
|
|
614
|
+
"""
|
|
615
|
+
Get the mass of the system.
|
|
616
|
+
|
|
617
|
+
Returns:
|
|
618
|
+
Mass: The mass of the system.
|
|
619
|
+
"""
|
|
620
|
+
def is_defined(self) -> bool:
|
|
621
|
+
"""
|
|
622
|
+
Check if the system is defined.
|
|
623
|
+
|
|
624
|
+
Returns:
|
|
625
|
+
bool: True if the system is defined, False otherwise.
|
|
626
|
+
"""
|