open-space-toolkit-astrodynamics 13.1.0__py310-none-manylinux2014_x86_64.whl → 15.0.0__py310-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-13.1.0.dist-info → open_space_toolkit_astrodynamics-15.0.0.dist-info}/METADATA +4 -4
- {open_space_toolkit_astrodynamics-13.1.0.dist-info → open_space_toolkit_astrodynamics-15.0.0.dist-info}/RECORD +59 -28
- {open_space_toolkit_astrodynamics-13.1.0.dist-info → open_space_toolkit_astrodynamics-15.0.0.dist-info}/WHEEL +1 -1
- ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-310-x86_64-linux-gnu.so +0 -0
- ostk/astrodynamics/__init__.pyi +785 -0
- ostk/astrodynamics/access.pyi +588 -0
- ostk/astrodynamics/conjunction/__init__.pyi +3 -0
- ostk/astrodynamics/conjunction/message/__init__.pyi +3 -0
- ostk/astrodynamics/conjunction/message/ccsds.pyi +723 -0
- ostk/astrodynamics/converters.pyi +58 -0
- ostk/astrodynamics/data/__init__.pyi +3 -0
- ostk/astrodynamics/data/provider.pyi +22 -0
- ostk/astrodynamics/dynamics.pyi +329 -0
- ostk/astrodynamics/event_condition.pyi +580 -0
- ostk/astrodynamics/flight/__init__.pyi +547 -0
- ostk/astrodynamics/flight/profile/__init__.pyi +102 -0
- ostk/astrodynamics/flight/profile/model.pyi +176 -0
- ostk/astrodynamics/flight/system.pyi +277 -0
- ostk/astrodynamics/guidance_law.pyi +282 -0
- ostk/astrodynamics/{libopen-space-toolkit-astrodynamics.so.13 → libopen-space-toolkit-astrodynamics.so.15} +0 -0
- ostk/astrodynamics/pytrajectory/__init__.pyi +3 -0
- ostk/astrodynamics/pytrajectory/pystate.py +2 -4
- ostk/astrodynamics/pytrajectory/pystate.pyi +65 -0
- ostk/astrodynamics/solver.pyi +232 -0
- ostk/astrodynamics/test/access/test_generator.py +130 -59
- ostk/astrodynamics/test/access/test_visibility_criterion.py +198 -0
- ostk/astrodynamics/test/data/provider/test_off_nadir.py +58 -0
- ostk/astrodynamics/test/dynamics/test_dynamics.py +1 -1
- ostk/astrodynamics/test/flight/system/test_propulsion_system.py +2 -11
- ostk/astrodynamics/test/flight/system/test_satellite_system.py +6 -14
- ostk/astrodynamics/test/flight/test_maneuver.py +49 -64
- ostk/astrodynamics/test/flight/test_profile.py +4 -2
- ostk/astrodynamics/test/flight/test_system.py +5 -15
- ostk/astrodynamics/test/solvers/test_finite_difference_solver.py +31 -16
- ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +9 -1
- ostk/astrodynamics/test/test_display.py +11 -5
- ostk/astrodynamics/test/test_event_condition.py +4 -2
- ostk/astrodynamics/test/test_utilities.py +1 -1
- ostk/astrodynamics/test/test_viewer.py +70 -1
- ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_acceleration.py +136 -0
- ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +9 -0
- ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +4 -2
- ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +25 -15
- ostk/astrodynamics/test/trajectory/test_propagator.py +21 -27
- ostk/astrodynamics/test/trajectory/test_segment.py +0 -1
- ostk/astrodynamics/test/trajectory/test_state_builder.py +1 -0
- ostk/astrodynamics/trajectory/__init__.pyi +1802 -0
- ostk/astrodynamics/trajectory/orbit/__init__.pyi +361 -0
- ostk/astrodynamics/trajectory/orbit/message/__init__.pyi +3 -0
- ostk/astrodynamics/trajectory/orbit/message/spacex.pyi +273 -0
- ostk/astrodynamics/trajectory/orbit/model/__init__.pyi +517 -0
- ostk/astrodynamics/trajectory/orbit/model/brouwerLyddaneMean.pyi +127 -0
- ostk/astrodynamics/trajectory/orbit/model/kepler.pyi +581 -0
- ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi +333 -0
- ostk/astrodynamics/trajectory/state/__init__.pyi +406 -0
- ostk/astrodynamics/trajectory/state/coordinate_subset.pyi +223 -0
- ostk/astrodynamics/viewer.py +32 -0
- {open_space_toolkit_astrodynamics-13.1.0.dist-info → open_space_toolkit_astrodynamics-15.0.0.dist-info}/top_level.txt +0 -0
- {open_space_toolkit_astrodynamics-13.1.0.dist-info → open_space_toolkit_astrodynamics-15.0.0.dist-info}/zip-safe +0 -0
@@ -0,0 +1,1802 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
import numpy
|
3
|
+
import ostk.astrodynamics
|
4
|
+
import ostk.core.type
|
5
|
+
import ostk.mathematics.curve_fitting
|
6
|
+
import ostk.mathematics.geometry.d3.transformation.rotation
|
7
|
+
import ostk.physics
|
8
|
+
import ostk.physics.coordinate
|
9
|
+
import ostk.physics.environment.object
|
10
|
+
import ostk.physics.time
|
11
|
+
import ostk.physics.unit
|
12
|
+
import typing
|
13
|
+
from . import orbit
|
14
|
+
from . import state
|
15
|
+
__all__ = ['LocalOrbitalFrameDirection', 'LocalOrbitalFrameFactory', 'LocalOrbitalFrameTransformProvider', 'Model', 'Orbit', 'Propagator', 'Segment', 'Sequence', 'State', 'StateBuilder', 'orbit', 'state']
|
16
|
+
class LocalOrbitalFrameDirection:
|
17
|
+
"""
|
18
|
+
|
19
|
+
A local orbital frame direction.
|
20
|
+
|
21
|
+
|
22
|
+
"""
|
23
|
+
__hash__: typing.ClassVar[None] = None
|
24
|
+
@staticmethod
|
25
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
26
|
+
...
|
27
|
+
@staticmethod
|
28
|
+
def undefined() -> LocalOrbitalFrameDirection:
|
29
|
+
"""
|
30
|
+
Get an undefined local orbital frame direction.
|
31
|
+
|
32
|
+
Returns:
|
33
|
+
LocalOrbitalFrameDirection: The undefined local orbital frame direction.
|
34
|
+
"""
|
35
|
+
def __eq__(self, arg0: LocalOrbitalFrameDirection) -> bool:
|
36
|
+
...
|
37
|
+
def __init__(self, vector: numpy.ndarray[numpy.float64[3, 1]], local_orbital_frame_factory: LocalOrbitalFrameFactory) -> None:
|
38
|
+
"""
|
39
|
+
Construct a new `LocalOrbitalFrameDirection` object.
|
40
|
+
|
41
|
+
Args:
|
42
|
+
vector (numpy.ndarray): The vector expressed in the local orbital frame.
|
43
|
+
local_orbital_frame_factory (LocalOrbitalFrameFactory): The local orbital frame factory that defines the frame.
|
44
|
+
|
45
|
+
Returns:
|
46
|
+
LocalOrbitalFrameDirection: The new `LocalOrbitalFrameDirection` object.
|
47
|
+
"""
|
48
|
+
def __ne__(self, arg0: LocalOrbitalFrameDirection) -> bool:
|
49
|
+
...
|
50
|
+
def get_local_orbital_frame_factory(self) -> LocalOrbitalFrameFactory:
|
51
|
+
"""
|
52
|
+
Get the local orbital frame factory that defines the frame.
|
53
|
+
|
54
|
+
Returns:
|
55
|
+
LocalOrbitalFrameFactory: The local orbital frame factory that defines the frame.
|
56
|
+
"""
|
57
|
+
def get_value(self) -> numpy.ndarray[numpy.float64[3, 1]]:
|
58
|
+
"""
|
59
|
+
Get the vector expressed in the local orbital frame.
|
60
|
+
|
61
|
+
Returns:
|
62
|
+
Vector3d: The vector expressed in the local orbital frame.
|
63
|
+
"""
|
64
|
+
def is_defined(self) -> bool:
|
65
|
+
"""
|
66
|
+
Check if the local orbital frame direction is defined.
|
67
|
+
|
68
|
+
Returns:
|
69
|
+
bool: True if the local orbital frame direction is defined, False otherwise.
|
70
|
+
"""
|
71
|
+
class LocalOrbitalFrameFactory:
|
72
|
+
"""
|
73
|
+
|
74
|
+
The local orbital frame factory.
|
75
|
+
|
76
|
+
|
77
|
+
"""
|
78
|
+
@staticmethod
|
79
|
+
def LVLH(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
80
|
+
"""
|
81
|
+
Get a Local Vertical Local Horizontal (LVLH) local orbital frame factory.
|
82
|
+
|
83
|
+
Args:
|
84
|
+
parent_frame (Frame): The parent frame.
|
85
|
+
|
86
|
+
Returns:
|
87
|
+
LocalOrbitalFrameFactory: The LVLH local orbital frame factory.
|
88
|
+
"""
|
89
|
+
@staticmethod
|
90
|
+
def NED(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
91
|
+
"""
|
92
|
+
Get a North-East-Down (NED) local orbital frame factory.
|
93
|
+
|
94
|
+
Args:
|
95
|
+
parent_frame (Frame): The parent frame.
|
96
|
+
|
97
|
+
Returns:
|
98
|
+
LocalOrbitalFrameFactory: The NED local orbital frame factory.
|
99
|
+
"""
|
100
|
+
@staticmethod
|
101
|
+
def QSW(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
102
|
+
"""
|
103
|
+
Get a Quasi-Satellite World (QSW) local orbital frame factory.
|
104
|
+
|
105
|
+
Args:
|
106
|
+
parent_frame (Frame): The parent frame.
|
107
|
+
|
108
|
+
Returns:
|
109
|
+
LocalOrbitalFrameFactory: The QSW local orbital frame factory.
|
110
|
+
"""
|
111
|
+
@staticmethod
|
112
|
+
def TNW(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
113
|
+
"""
|
114
|
+
Get a Tangent-Normal-Wideband (TNW) local orbital frame factory.
|
115
|
+
|
116
|
+
Args:
|
117
|
+
parent_frame (Frame): The parent frame.
|
118
|
+
|
119
|
+
Returns:
|
120
|
+
LocalOrbitalFrameFactory: The TNW local orbital frame factory.
|
121
|
+
"""
|
122
|
+
@staticmethod
|
123
|
+
def VNC(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
124
|
+
"""
|
125
|
+
Get a Velocity-Normal-Co-normal (VNC) local orbital frame factory.
|
126
|
+
|
127
|
+
Args:
|
128
|
+
parent_frame (Frame): The parent frame.
|
129
|
+
|
130
|
+
Returns:
|
131
|
+
LocalOrbitalFrameFactory: The VNC local orbital frame factory.
|
132
|
+
"""
|
133
|
+
@staticmethod
|
134
|
+
def VVLH(parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
135
|
+
"""
|
136
|
+
Get a Velocity Local Vertical Local Horizontal (VVLH) local orbital frame factory.
|
137
|
+
|
138
|
+
Args:
|
139
|
+
parent_frame (Frame): The parent frame.
|
140
|
+
|
141
|
+
Returns:
|
142
|
+
LocalOrbitalFrameFactory: The VVLH local orbital frame factory.
|
143
|
+
"""
|
144
|
+
@staticmethod
|
145
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
146
|
+
...
|
147
|
+
@staticmethod
|
148
|
+
@typing.overload
|
149
|
+
def construct(type: LocalOrbitalFrameTransformProvider.Type, parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
150
|
+
"""
|
151
|
+
Construct a local orbital frame factory for the provided type.
|
152
|
+
|
153
|
+
Args:
|
154
|
+
type (LocalOrbitalFrameTransformProvider.Type): The type of local orbital frame transform provider.
|
155
|
+
parent_frame (Frame): The parent frame.
|
156
|
+
|
157
|
+
Returns:
|
158
|
+
LocalOrbitalFrameFactory: The local orbital frame factory.
|
159
|
+
"""
|
160
|
+
@staticmethod
|
161
|
+
@typing.overload
|
162
|
+
def construct(transform_generator: typing.Callable[[...], ostk.physics.coordinate.Transform], parent_frame: ostk.physics.coordinate.Frame) -> LocalOrbitalFrameFactory:
|
163
|
+
"""
|
164
|
+
Construct a local orbital frame factory for a custom type, using the provided transform generator.
|
165
|
+
|
166
|
+
Args:
|
167
|
+
transform_generator (callable[[State], Transform]): The transform generator.
|
168
|
+
parent_frame (Frame): The parent frame.
|
169
|
+
|
170
|
+
Returns:
|
171
|
+
LocalOrbitalFrameFactory: The local orbital frame factory.
|
172
|
+
"""
|
173
|
+
@staticmethod
|
174
|
+
def undefined() -> LocalOrbitalFrameFactory:
|
175
|
+
"""
|
176
|
+
Get an undefined local orbital frame factory.
|
177
|
+
|
178
|
+
Returns:
|
179
|
+
LocalOrbitalFrameFactory: The undefined local orbital frame factory.
|
180
|
+
"""
|
181
|
+
def access_parent_frame(self) -> ostk.physics.coordinate.Frame:
|
182
|
+
"""
|
183
|
+
Get the parent frame.
|
184
|
+
|
185
|
+
Returns:
|
186
|
+
Frame: The parent frame.
|
187
|
+
"""
|
188
|
+
def generate_frame(self, state: typing.Any) -> ostk.physics.coordinate.Frame:
|
189
|
+
"""
|
190
|
+
Generate a local orbital frame.
|
191
|
+
|
192
|
+
Args:
|
193
|
+
state (State): The state.
|
194
|
+
|
195
|
+
Returns:
|
196
|
+
Frame: The local orbital frame.
|
197
|
+
"""
|
198
|
+
def is_defined(self) -> bool:
|
199
|
+
"""
|
200
|
+
Check if the local orbital frame factory is defined.
|
201
|
+
|
202
|
+
Returns:
|
203
|
+
Frame: True if the local orbital frame factory is defined, False otherwise.
|
204
|
+
"""
|
205
|
+
class LocalOrbitalFrameTransformProvider:
|
206
|
+
"""
|
207
|
+
|
208
|
+
Local orbital frame transform provider, frame provider.
|
209
|
+
Generates a specific transform based on a State (instant, position, velocity) and a LOF type.
|
210
|
+
|
211
|
+
|
212
|
+
"""
|
213
|
+
class Type:
|
214
|
+
"""
|
215
|
+
|
216
|
+
The local orbital frame type.
|
217
|
+
|
218
|
+
|
219
|
+
Members:
|
220
|
+
|
221
|
+
Undefined : Undefined
|
222
|
+
|
223
|
+
NED : North-East-Down
|
224
|
+
|
225
|
+
LVLH : Local Vertical-Local Horizontal
|
226
|
+
|
227
|
+
LVLHGD : Local Vertical-Local Horizontal Geodetic
|
228
|
+
|
229
|
+
VVLH : Vertical-Local Horizontal
|
230
|
+
|
231
|
+
QSW : Quasi-Satellite West
|
232
|
+
|
233
|
+
TNW : Tangent-Normal-Wideband
|
234
|
+
|
235
|
+
VNC : Velocity-Normal-Conormal
|
236
|
+
"""
|
237
|
+
LVLH: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.LVLH: 2>
|
238
|
+
LVLHGD: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.LVLHGD: 4>
|
239
|
+
NED: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.NED: 1>
|
240
|
+
QSW: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.QSW: 5>
|
241
|
+
TNW: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.TNW: 6>
|
242
|
+
Undefined: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.Undefined: 0>
|
243
|
+
VNC: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.VNC: 7>
|
244
|
+
VVLH: typing.ClassVar[LocalOrbitalFrameTransformProvider.Type] # value = <Type.VVLH: 3>
|
245
|
+
__members__: typing.ClassVar[dict[str, LocalOrbitalFrameTransformProvider.Type]] # value = {'Undefined': <Type.Undefined: 0>, 'NED': <Type.NED: 1>, 'LVLH': <Type.LVLH: 2>, 'LVLHGD': <Type.LVLHGD: 4>, 'VVLH': <Type.VVLH: 3>, 'QSW': <Type.QSW: 5>, 'TNW': <Type.TNW: 6>, 'VNC': <Type.VNC: 7>}
|
246
|
+
@staticmethod
|
247
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
248
|
+
...
|
249
|
+
def __eq__(self, other: typing.Any) -> bool:
|
250
|
+
...
|
251
|
+
def __getstate__(self) -> int:
|
252
|
+
...
|
253
|
+
def __hash__(self) -> int:
|
254
|
+
...
|
255
|
+
def __index__(self) -> int:
|
256
|
+
...
|
257
|
+
def __init__(self, value: int) -> None:
|
258
|
+
...
|
259
|
+
def __int__(self) -> int:
|
260
|
+
...
|
261
|
+
def __ne__(self, other: typing.Any) -> bool:
|
262
|
+
...
|
263
|
+
def __repr__(self) -> str:
|
264
|
+
...
|
265
|
+
def __setstate__(self, state: int) -> None:
|
266
|
+
...
|
267
|
+
def __str__(self) -> str:
|
268
|
+
...
|
269
|
+
@property
|
270
|
+
def name(self) -> str:
|
271
|
+
...
|
272
|
+
@property
|
273
|
+
def value(self) -> int:
|
274
|
+
...
|
275
|
+
@staticmethod
|
276
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
277
|
+
...
|
278
|
+
@staticmethod
|
279
|
+
def construct(type: LocalOrbitalFrameTransformProvider.Type, state: typing.Any) -> LocalOrbitalFrameTransformProvider:
|
280
|
+
"""
|
281
|
+
Constructs a local orbital frame transform provider for the provided type.
|
282
|
+
|
283
|
+
Args:
|
284
|
+
type (LocalOrbitalFrameTransformProvider.Type): The local orbital frame provider type.
|
285
|
+
state (State): The state.
|
286
|
+
|
287
|
+
Returns:
|
288
|
+
LocalOrbitalFrameTransformProvider: The provider.
|
289
|
+
"""
|
290
|
+
@staticmethod
|
291
|
+
def get_transform_generator(type: LocalOrbitalFrameTransformProvider.Type) -> typing.Callable[[...], ostk.physics.coordinate.Transform]:
|
292
|
+
"""
|
293
|
+
Returns the transform generator function for a given type.
|
294
|
+
|
295
|
+
Args:
|
296
|
+
type (LocalOrbitalFrameTransformProvider.Type): The local orbital frame provider type.
|
297
|
+
|
298
|
+
Returns:
|
299
|
+
callable[[State], Transform]: The transform generator function.
|
300
|
+
"""
|
301
|
+
def __init__(self, transform: ostk.physics.coordinate.Transform) -> None:
|
302
|
+
"""
|
303
|
+
Constructs a local orbital frame transform provider.
|
304
|
+
|
305
|
+
Args:
|
306
|
+
transform (Transform): The transform.
|
307
|
+
|
308
|
+
Returns:
|
309
|
+
LocalOrbitalFrameTransformProvider: The provider.
|
310
|
+
"""
|
311
|
+
def get_transform_at(self, instant: ostk.physics.time.Instant) -> ostk.physics.coordinate.Transform:
|
312
|
+
"""
|
313
|
+
Returns the transform at a given instant.
|
314
|
+
|
315
|
+
Args:
|
316
|
+
instant (Instant): The instant.
|
317
|
+
|
318
|
+
Returns:
|
319
|
+
Transform: The transform at the given instant.
|
320
|
+
"""
|
321
|
+
def is_defined(self) -> bool:
|
322
|
+
"""
|
323
|
+
Returns true if the provider is defined.
|
324
|
+
|
325
|
+
Returns:
|
326
|
+
bool: True if the provider is defined.
|
327
|
+
"""
|
328
|
+
class Model:
|
329
|
+
"""
|
330
|
+
|
331
|
+
Orbital model.
|
332
|
+
|
333
|
+
|
334
|
+
"""
|
335
|
+
__hash__: typing.ClassVar[None] = None
|
336
|
+
@staticmethod
|
337
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
338
|
+
...
|
339
|
+
def __eq__(self, arg0: Model) -> bool:
|
340
|
+
...
|
341
|
+
def __ne__(self, arg0: Model) -> bool:
|
342
|
+
...
|
343
|
+
def __repr__(self) -> str:
|
344
|
+
...
|
345
|
+
def __str__(self) -> str:
|
346
|
+
...
|
347
|
+
def calculate_state_at(self, instant: ostk.physics.time.Instant) -> State:
|
348
|
+
"""
|
349
|
+
Calculate the state at a given instant.
|
350
|
+
|
351
|
+
Args:
|
352
|
+
instant (Instant): The instant.
|
353
|
+
|
354
|
+
Returns:
|
355
|
+
State: The state at the given instant.
|
356
|
+
"""
|
357
|
+
def calculate_states_at(self, instants: list[ostk.physics.time.Instant]) -> list[State]:
|
358
|
+
"""
|
359
|
+
Calculate the states at given instants. It can be more performant than looping `calculate_state_at` for multiple instants.
|
360
|
+
|
361
|
+
@param instants The instants.
|
362
|
+
|
363
|
+
Returns:
|
364
|
+
Array<State>: The states at the given instants.
|
365
|
+
"""
|
366
|
+
def is_defined(self) -> bool:
|
367
|
+
"""
|
368
|
+
Check if the model is defined.
|
369
|
+
|
370
|
+
Returns:
|
371
|
+
bool: True if the model is defined, False otherwise.
|
372
|
+
"""
|
373
|
+
class Orbit(ostk.astrodynamics.Trajectory):
|
374
|
+
"""
|
375
|
+
|
376
|
+
Gravitationally curved trajectory of an object.
|
377
|
+
|
378
|
+
|
379
|
+
"""
|
380
|
+
class FrameType:
|
381
|
+
"""
|
382
|
+
|
383
|
+
The local orbital frame type.
|
384
|
+
|
385
|
+
|
386
|
+
Members:
|
387
|
+
|
388
|
+
Undefined : Undefined
|
389
|
+
|
390
|
+
NED : North-East-Down
|
391
|
+
|
392
|
+
LVLH : Local Vertical-Local Horizontal
|
393
|
+
|
394
|
+
LVLHGD : Local Vertical-Local Horizontal GeoDetic
|
395
|
+
|
396
|
+
LVLHGDGT : Local Vertical-Local Horizontal GeoDetic Ground Track
|
397
|
+
|
398
|
+
VVLH : Vertical-Local Horizontal
|
399
|
+
|
400
|
+
QSW : Quasi-Satellite West
|
401
|
+
|
402
|
+
TNW : Tangent-Normal-Wideband
|
403
|
+
|
404
|
+
VNC : Velocity-Normal-Conormal
|
405
|
+
"""
|
406
|
+
LVLH: typing.ClassVar[Orbit.FrameType] # value = <FrameType.LVLH: 2>
|
407
|
+
LVLHGD: typing.ClassVar[Orbit.FrameType] # value = <FrameType.LVLHGD: 4>
|
408
|
+
LVLHGDGT: typing.ClassVar[Orbit.FrameType] # value = <FrameType.LVLHGDGT: 5>
|
409
|
+
NED: typing.ClassVar[Orbit.FrameType] # value = <FrameType.NED: 1>
|
410
|
+
QSW: typing.ClassVar[Orbit.FrameType] # value = <FrameType.QSW: 6>
|
411
|
+
TNW: typing.ClassVar[Orbit.FrameType] # value = <FrameType.TNW: 7>
|
412
|
+
Undefined: typing.ClassVar[Orbit.FrameType] # value = <FrameType.Undefined: 0>
|
413
|
+
VNC: typing.ClassVar[Orbit.FrameType] # value = <FrameType.VNC: 8>
|
414
|
+
VVLH: typing.ClassVar[Orbit.FrameType] # value = <FrameType.VVLH: 3>
|
415
|
+
__members__: typing.ClassVar[dict[str, Orbit.FrameType]] # value = {'Undefined': <FrameType.Undefined: 0>, 'NED': <FrameType.NED: 1>, 'LVLH': <FrameType.LVLH: 2>, 'LVLHGD': <FrameType.LVLHGD: 4>, 'LVLHGDGT': <FrameType.LVLHGDGT: 5>, 'VVLH': <FrameType.VVLH: 3>, 'QSW': <FrameType.QSW: 6>, 'TNW': <FrameType.TNW: 7>, 'VNC': <FrameType.VNC: 8>}
|
416
|
+
@staticmethod
|
417
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
418
|
+
...
|
419
|
+
def __eq__(self, other: typing.Any) -> bool:
|
420
|
+
...
|
421
|
+
def __getstate__(self) -> int:
|
422
|
+
...
|
423
|
+
def __hash__(self) -> int:
|
424
|
+
...
|
425
|
+
def __index__(self) -> int:
|
426
|
+
...
|
427
|
+
def __init__(self, value: int) -> None:
|
428
|
+
...
|
429
|
+
def __int__(self) -> int:
|
430
|
+
...
|
431
|
+
def __ne__(self, other: typing.Any) -> bool:
|
432
|
+
...
|
433
|
+
def __repr__(self) -> str:
|
434
|
+
...
|
435
|
+
def __setstate__(self, state: int) -> None:
|
436
|
+
...
|
437
|
+
def __str__(self) -> str:
|
438
|
+
...
|
439
|
+
@property
|
440
|
+
def name(self) -> str:
|
441
|
+
...
|
442
|
+
@property
|
443
|
+
def value(self) -> int:
|
444
|
+
...
|
445
|
+
__hash__: typing.ClassVar[None] = None
|
446
|
+
@staticmethod
|
447
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
448
|
+
...
|
449
|
+
@staticmethod
|
450
|
+
def circular(epoch: ostk.physics.time.Instant, altitude: ostk.physics.unit.Length, inclination: ostk.physics.unit.Angle, celestial_object: ostk.physics.environment.object.Celestial) -> Orbit:
|
451
|
+
"""
|
452
|
+
Create a circular `Orbit` object.
|
453
|
+
|
454
|
+
Args:
|
455
|
+
epoch (Instant): The epoch.
|
456
|
+
altitude (Length): The altitude (wrt. equatorial radius).
|
457
|
+
inclination (Angle): The inclination.
|
458
|
+
celestial_object (Celestial): The celestial object.
|
459
|
+
|
460
|
+
Returns:
|
461
|
+
Orbit: The circular `Orbit` object.
|
462
|
+
"""
|
463
|
+
@staticmethod
|
464
|
+
def circular_equatorial(epoch: ostk.physics.time.Instant, altitude: ostk.physics.unit.Length, celestial_object: ostk.physics.environment.object.Celestial) -> Orbit:
|
465
|
+
"""
|
466
|
+
Create a circular equatorial `Orbit` object.
|
467
|
+
|
468
|
+
Args:
|
469
|
+
epoch (Instant): The epoch.
|
470
|
+
altitude (Length): The altitude (wrt. equatorial radius).
|
471
|
+
celestial_object (Celestial): The celestial object.
|
472
|
+
|
473
|
+
Returns:
|
474
|
+
Orbit: The circular equatorial `Orbit` object.
|
475
|
+
"""
|
476
|
+
@staticmethod
|
477
|
+
def compute_passes(states: list[State], initial_revolution_number: ostk.core.type.Integer) -> list[tuple[int, ...]]:
|
478
|
+
"""
|
479
|
+
Compute passes from a set of states.
|
480
|
+
|
481
|
+
Args:
|
482
|
+
states (Array<State>): The states.
|
483
|
+
initial_revolution_number (Integer): The initial revolution number.
|
484
|
+
|
485
|
+
Returns:
|
486
|
+
list[tuple[int, Pass]]: List of index-pass pairs.
|
487
|
+
"""
|
488
|
+
@staticmethod
|
489
|
+
def compute_passes_with_model(model: typing.Any, start_instant: ostk.physics.time.Instant, end_instant: ostk.physics.time.Instant, initial_revolution_number: ostk.core.type.Integer) -> list[...]:
|
490
|
+
"""
|
491
|
+
Compute passes with the given model for the provided interval.
|
492
|
+
|
493
|
+
Args:
|
494
|
+
model (orbit.Model): The model.
|
495
|
+
start_instant (Instant): The start instant.
|
496
|
+
end_instant (Instant): The end instant.
|
497
|
+
initial_revolution_number (int): The initial revolution number.
|
498
|
+
|
499
|
+
Returns:
|
500
|
+
list[Pass]: List of passes.
|
501
|
+
"""
|
502
|
+
@staticmethod
|
503
|
+
def equatorial(epoch: ostk.physics.time.Instant, apoapsis_altitude: ostk.physics.unit.Length, periapsis_altitude: ostk.physics.unit.Length, celestial_object: ostk.physics.environment.object.Celestial) -> Orbit:
|
504
|
+
"""
|
505
|
+
Create an equatorial `Orbit` object.
|
506
|
+
|
507
|
+
Args:
|
508
|
+
epoch (Instant): The epoch.
|
509
|
+
apoapsis_altitude (Length): The apoapsis altitude (wrt. equatorial radius).
|
510
|
+
periapsis_altitude (Length): The periapsis altitude (wrt. equatorial radius).
|
511
|
+
celestial_object (Celestial): The celestial object.
|
512
|
+
|
513
|
+
Returns:
|
514
|
+
Orbit: The equatorial `Orbit` object.
|
515
|
+
"""
|
516
|
+
@staticmethod
|
517
|
+
def frozen(epoch: ostk.physics.time.Instant, altitude: ostk.physics.unit.Length, celestial_object: ostk.physics.environment.object.Celestial, eccentricity: ostk.core.type.Real = ..., inclination: ostk.physics.unit.Angle = ..., raan: ostk.physics.unit.Angle = ..., aop: ostk.physics.unit.Angle = ..., true_anomaly: ostk.physics.unit.Angle = ...) -> Orbit:
|
518
|
+
"""
|
519
|
+
Create a frozen `Orbit` object.
|
520
|
+
|
521
|
+
The critical angles for inclination are 63.4349 degrees and 116.5651 degrees.
|
522
|
+
The critical angles for AoP are 90.0 degrees and 270.0 degrees.
|
523
|
+
|
524
|
+
At a minimum, an epoch, altitude, and celestial body with a defined J2 and J3 must be provided.
|
525
|
+
In this case, the inclination and AoP are set to critical angles, and the eccentricity is derived
|
526
|
+
from inclination. RAAN and true anomaly default to zero degrees.
|
527
|
+
|
528
|
+
Additionally, the following combinations of inputs are supported:
|
529
|
+
- AoP (inclination set to critical value, eccentricity derived)
|
530
|
+
- AoP and eccentricity (inclination derived)
|
531
|
+
- AoP and inclination, but at least one of them must be a critical value (eccentricity derived)
|
532
|
+
- Inclination (AoP set to critical value, eccentricity derived)
|
533
|
+
- Eccentricity (AoP set to critical value, inclination derived)
|
534
|
+
|
535
|
+
Note that inclination and eccentricity cannot both be provided.
|
536
|
+
|
537
|
+
RAAN and True Anomaly may be provided alongside any of these arguments, and will be passed through
|
538
|
+
to the resulting Orbit as they do not impact the frozen orbit condition.
|
539
|
+
|
540
|
+
Args:
|
541
|
+
epoch (Instant): The epoch.
|
542
|
+
altitude (Length): The altitude (wrt. equatorial radius).
|
543
|
+
celestial_object (Celestial): The celestial object.
|
544
|
+
eccentricity (float): The eccentricity.
|
545
|
+
inclination (Angle): The inclination.
|
546
|
+
raan (Angle): The right ascension of the ascending node.
|
547
|
+
aop (Angle): The argument of periapsis.
|
548
|
+
true_anomaly (Angle): The true anomaly.
|
549
|
+
|
550
|
+
Returns:
|
551
|
+
Orbit: The frozen `Orbit` object.
|
552
|
+
"""
|
553
|
+
@staticmethod
|
554
|
+
def geo_synchronous(epoch: ostk.physics.time.Instant, inclination: ostk.physics.unit.Angle, longitude: ostk.physics.unit.Angle, celestial_object: ostk.physics.environment.object.Celestial) -> Orbit:
|
555
|
+
"""
|
556
|
+
Create a geosynchronous `Orbit` object.
|
557
|
+
|
558
|
+
Args:
|
559
|
+
epoch (Instant): The epoch.
|
560
|
+
inclination (Angle): The inclination.
|
561
|
+
longitude (double): The longitude.
|
562
|
+
celestial_object (Celestial): The celestial object.
|
563
|
+
|
564
|
+
Returns:
|
565
|
+
Orbit: The geosynchronous `Orbit` object.
|
566
|
+
"""
|
567
|
+
@staticmethod
|
568
|
+
def sun_synchronous(epoch: ostk.physics.time.Instant, altitude: ostk.physics.unit.Length, local_time_at_descending_node: ostk.physics.time.Time, celestial_object: ostk.physics.environment.object.Celestial, argument_of_latitude: ostk.physics.unit.Angle = ...) -> Orbit:
|
569
|
+
"""
|
570
|
+
Create a sun-synchronous `Orbit` object.
|
571
|
+
|
572
|
+
Args:
|
573
|
+
epoch (Instant): The epoch.
|
574
|
+
altitude (Length): The altitude (wrt. equatorial radius).
|
575
|
+
local_time_at_descending_node (Time): The local time at descending node.
|
576
|
+
celestial_object (Celestial): The celestial object.
|
577
|
+
argument_of_latitude (Angle): The argument of latitude.
|
578
|
+
|
579
|
+
Returns:
|
580
|
+
Orbit: The sun-synchronous `Orbit` object.
|
581
|
+
"""
|
582
|
+
@staticmethod
|
583
|
+
def undefined() -> Orbit:
|
584
|
+
"""
|
585
|
+
Get an undefined `Orbit` object.
|
586
|
+
|
587
|
+
Returns:
|
588
|
+
Orbit: The undefined `Orbit` object.
|
589
|
+
"""
|
590
|
+
def __eq__(self, arg0: Orbit) -> bool:
|
591
|
+
...
|
592
|
+
@typing.overload
|
593
|
+
def __init__(self, model: typing.Any, celestial_object: ostk.physics.environment.object.Celestial) -> None:
|
594
|
+
"""
|
595
|
+
Constructs an `Orbit` object.
|
596
|
+
|
597
|
+
Args:
|
598
|
+
model (orbit.Model): The orbit model.
|
599
|
+
celestial_object (Celestial): The celestial object.
|
600
|
+
"""
|
601
|
+
@typing.overload
|
602
|
+
def __init__(self, states: list[State], initial_revolution_number: ostk.core.type.Integer, celestial_object: ostk.physics.environment.object.Celestial) -> None:
|
603
|
+
"""
|
604
|
+
Constructs an `Orbit` object.
|
605
|
+
|
606
|
+
Args:
|
607
|
+
states (Array<State>): The states.
|
608
|
+
initial_revolution_number (Integer): The initial revolution number.
|
609
|
+
celestial_object (Celestial): The celestial object.
|
610
|
+
"""
|
611
|
+
def __ne__(self, arg0: Orbit) -> bool:
|
612
|
+
...
|
613
|
+
def __repr__(self) -> str:
|
614
|
+
...
|
615
|
+
def __str__(self) -> str:
|
616
|
+
...
|
617
|
+
def access_kepler_model(self) -> ...:
|
618
|
+
"""
|
619
|
+
Access the Kepler orbit model.
|
620
|
+
|
621
|
+
Returns:
|
622
|
+
Kepler: The Kepler orbit model.
|
623
|
+
"""
|
624
|
+
def access_model(self) -> ...:
|
625
|
+
"""
|
626
|
+
Access the orbit model.
|
627
|
+
|
628
|
+
Returns:
|
629
|
+
orbit.Model: The orbit model.
|
630
|
+
"""
|
631
|
+
def access_propagated_model(self) -> ...:
|
632
|
+
"""
|
633
|
+
Access the propagated orbit model.
|
634
|
+
|
635
|
+
Returns:
|
636
|
+
Propagated: The propagated orbit model.
|
637
|
+
"""
|
638
|
+
def access_sgp4_model(self) -> ...:
|
639
|
+
"""
|
640
|
+
Access the SGP4 orbit model.
|
641
|
+
|
642
|
+
Returns:
|
643
|
+
SGP4: The SGP4 orbit model.
|
644
|
+
"""
|
645
|
+
def access_tabulated_model(self) -> ...:
|
646
|
+
"""
|
647
|
+
Access the tabulated orbit model.
|
648
|
+
|
649
|
+
Returns:
|
650
|
+
Tabulated: The tabulated orbit model.
|
651
|
+
"""
|
652
|
+
def get_orbital_frame(self, frame_type: Orbit.FrameType) -> ostk.physics.coordinate.Frame:
|
653
|
+
"""
|
654
|
+
Get the orbital frame.
|
655
|
+
|
656
|
+
Args:
|
657
|
+
frame_type (Orbit::FrameType): The frame type.
|
658
|
+
|
659
|
+
Returns:
|
660
|
+
Frame: The orbital frame.
|
661
|
+
"""
|
662
|
+
def get_pass_at(self, instant: ostk.physics.time.Instant) -> ...:
|
663
|
+
"""
|
664
|
+
Get the pass at a given instant.
|
665
|
+
|
666
|
+
Args:
|
667
|
+
instant (Instant): The instant.
|
668
|
+
|
669
|
+
Returns:
|
670
|
+
ostk::astrodynamics::trajectory::orbit::Pass: The pass.
|
671
|
+
"""
|
672
|
+
def get_pass_with_revolution_number(self, revolution_number: ostk.core.type.Integer, step_duration: ostk.physics.time.Duration = ...) -> ...:
|
673
|
+
"""
|
674
|
+
Get the pass with a given revolution number.
|
675
|
+
|
676
|
+
Args:
|
677
|
+
revolution_number (int): The revolution number.
|
678
|
+
step_duration (Duration): The initial step duration used for the pass computation algorithm.
|
679
|
+
|
680
|
+
Returns:
|
681
|
+
Pass: The pass.
|
682
|
+
"""
|
683
|
+
def get_passes_within_interval(self, interval: ostk.physics.time.Interval) -> list[...]:
|
684
|
+
"""
|
685
|
+
Get the passes within a given interval.
|
686
|
+
|
687
|
+
Args:
|
688
|
+
interval (Interval): The interval.
|
689
|
+
|
690
|
+
Returns:
|
691
|
+
list[Pass]: The passes.
|
692
|
+
"""
|
693
|
+
def get_revolution_number_at(self, instant: ostk.physics.time.Instant) -> ostk.core.type.Integer:
|
694
|
+
"""
|
695
|
+
Get the revolution number at a given instant.
|
696
|
+
|
697
|
+
Args:
|
698
|
+
instant (Instant): The instant.
|
699
|
+
|
700
|
+
Returns:
|
701
|
+
int: The revolution number.
|
702
|
+
"""
|
703
|
+
def is_defined(self) -> bool:
|
704
|
+
"""
|
705
|
+
Check if the `Orbit` object is defined.
|
706
|
+
|
707
|
+
Returns:
|
708
|
+
bool: True if the `Orbit` object is defined, False otherwise.
|
709
|
+
"""
|
710
|
+
class Propagator:
|
711
|
+
"""
|
712
|
+
|
713
|
+
A `Propagator` that propagates the provided `State` using it's `NumericalSolver` under the set `Dynamics`.
|
714
|
+
|
715
|
+
|
716
|
+
"""
|
717
|
+
__hash__: typing.ClassVar[None] = None
|
718
|
+
@staticmethod
|
719
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
720
|
+
...
|
721
|
+
@staticmethod
|
722
|
+
@typing.overload
|
723
|
+
def default() -> Propagator:
|
724
|
+
"""
|
725
|
+
Get the default propagator.
|
726
|
+
|
727
|
+
Returns:
|
728
|
+
Propagator: The default propagator.
|
729
|
+
"""
|
730
|
+
@staticmethod
|
731
|
+
@typing.overload
|
732
|
+
def default(environment: ostk.physics.Environment) -> Propagator:
|
733
|
+
"""
|
734
|
+
Get the default propagator for a given environment.
|
735
|
+
|
736
|
+
Args:
|
737
|
+
environment (Environment) The environment.
|
738
|
+
|
739
|
+
Returns:
|
740
|
+
Propagator: The default propagator for the given environment.
|
741
|
+
"""
|
742
|
+
@staticmethod
|
743
|
+
def from_environment(numerical_solver: state.NumericalSolver, environment: ostk.physics.Environment) -> Propagator:
|
744
|
+
"""
|
745
|
+
Create a propagator from an environment.
|
746
|
+
|
747
|
+
Args:
|
748
|
+
numerical_solver (NumericalSolver) The numerical solver.
|
749
|
+
environment (Environment) The environment.
|
750
|
+
|
751
|
+
Returns:
|
752
|
+
Propagator: The propagator.
|
753
|
+
"""
|
754
|
+
def __eq__(self, arg0: Propagator) -> bool:
|
755
|
+
...
|
756
|
+
@typing.overload
|
757
|
+
def __init__(self, numerical_solver: state.NumericalSolver, dynamics: list[...] = []) -> None:
|
758
|
+
"""
|
759
|
+
Construct a new `Propagator` object.
|
760
|
+
|
761
|
+
Args:
|
762
|
+
numerical_solver (NumericalSolver) The numerical solver.
|
763
|
+
dynamics (list[Dynamics], optional) The dynamics.
|
764
|
+
|
765
|
+
Returns:
|
766
|
+
Propagator: The new `Propagator` object.
|
767
|
+
"""
|
768
|
+
@typing.overload
|
769
|
+
def __init__(self, numerical_solver: state.NumericalSolver, dynamics: list[...], maneuvers: list[...], interpolation_type: ostk.mathematics.curve_fitting.Interpolator.Type = ...) -> None:
|
770
|
+
"""
|
771
|
+
Construct a new `Propagator` object with maneuvers.
|
772
|
+
|
773
|
+
Args:
|
774
|
+
numerical_solver (NumericalSolver) The numerical solver.
|
775
|
+
dynamics (list[Dynamics]) The dynamics.
|
776
|
+
maneuvers (list[Maneuver]) The maneuvers.
|
777
|
+
interpolation_type (Interpolator.Type, optional) The interpolation type. Defaults to Barycentric Rational.
|
778
|
+
|
779
|
+
Returns:
|
780
|
+
Propagator: The new `Propagator` object.
|
781
|
+
"""
|
782
|
+
def __ne__(self, arg0: Propagator) -> bool:
|
783
|
+
...
|
784
|
+
def __repr__(self) -> str:
|
785
|
+
...
|
786
|
+
def __str__(self) -> str:
|
787
|
+
...
|
788
|
+
def access_numerical_solver(self) -> state.NumericalSolver:
|
789
|
+
"""
|
790
|
+
Access the numerical solver.
|
791
|
+
|
792
|
+
Returns:
|
793
|
+
NumericalSolver&: The numerical solver.
|
794
|
+
"""
|
795
|
+
def add_dynamics(self, dynamics: typing.Any) -> None:
|
796
|
+
"""
|
797
|
+
Add dynamics.
|
798
|
+
|
799
|
+
Args:
|
800
|
+
dynamics (Dynamics) The dynamics.
|
801
|
+
"""
|
802
|
+
def add_maneuver(self, maneuver: typing.Any, interpolation_type: ostk.mathematics.curve_fitting.Interpolator.Type = ...) -> None:
|
803
|
+
"""
|
804
|
+
Add a maneuver.
|
805
|
+
|
806
|
+
Args:
|
807
|
+
maneuver (Maneuver) The maneuver.
|
808
|
+
interpolation_type (Interpolator.Type, optional) The interpolation type. Defaults to Barycentric Rational.
|
809
|
+
"""
|
810
|
+
def calculate_state_at(self, state: State, instant: ostk.physics.time.Instant) -> State:
|
811
|
+
"""
|
812
|
+
Calculate the state at a given instant.
|
813
|
+
|
814
|
+
Args:
|
815
|
+
state (State) The state.
|
816
|
+
instant (Instant) The instant.
|
817
|
+
|
818
|
+
Returns:
|
819
|
+
State: The state at the given instant.
|
820
|
+
"""
|
821
|
+
def calculate_state_to_condition(self, state: State, instant: ostk.physics.time.Instant, event_condition: typing.Any) -> state.NumericalSolver.ConditionSolution:
|
822
|
+
"""
|
823
|
+
Calculate the state up to a given event condition.
|
824
|
+
|
825
|
+
Args:
|
826
|
+
state (State) The state.
|
827
|
+
instant (Instant) The instant.
|
828
|
+
event_condition (EventCondition) The event condition.
|
829
|
+
|
830
|
+
Returns:
|
831
|
+
State: The state up to the given event condition.
|
832
|
+
"""
|
833
|
+
def calculate_states_at(self, state: State, instants: list[ostk.physics.time.Instant]) -> list[State]:
|
834
|
+
"""
|
835
|
+
Calculate the states at given instants. It is more performant than looping `calculate_state_at` for multiple instants.
|
836
|
+
|
837
|
+
Args:
|
838
|
+
state (State) The state.
|
839
|
+
instants (list[Instant]) The instants.
|
840
|
+
|
841
|
+
Returns:
|
842
|
+
list[State]: The states at the given instants.
|
843
|
+
"""
|
844
|
+
def clear_dynamics(self) -> None:
|
845
|
+
"""
|
846
|
+
Clear the dynamics.
|
847
|
+
"""
|
848
|
+
def get_dynamics(self) -> list[...]:
|
849
|
+
"""
|
850
|
+
Get the dynamics.
|
851
|
+
|
852
|
+
Returns:
|
853
|
+
list[Dynamics]: The dynamics.
|
854
|
+
"""
|
855
|
+
def get_number_of_coordinates(self) -> int:
|
856
|
+
"""
|
857
|
+
Get the number of coordinates.
|
858
|
+
|
859
|
+
Returns:
|
860
|
+
int: The number of coordinates.
|
861
|
+
"""
|
862
|
+
def is_defined(self) -> bool:
|
863
|
+
"""
|
864
|
+
Check if the propagator is defined.
|
865
|
+
|
866
|
+
Returns:
|
867
|
+
bool: True if the propagator is defined, False otherwise.
|
868
|
+
"""
|
869
|
+
def set_dynamics(self, dynamics: list[...]) -> None:
|
870
|
+
"""
|
871
|
+
Set the dynamics.
|
872
|
+
|
873
|
+
Args:
|
874
|
+
dynamics (list[Dynamics]) The dynamics.
|
875
|
+
"""
|
876
|
+
class Segment:
|
877
|
+
"""
|
878
|
+
|
879
|
+
A `Segment` that can be solved provided an initial `State` and termination `Event Condition`.
|
880
|
+
|
881
|
+
|
882
|
+
"""
|
883
|
+
class Solution:
|
884
|
+
"""
|
885
|
+
|
886
|
+
The Solution object returned when a `Segment` is solved.
|
887
|
+
|
888
|
+
|
889
|
+
"""
|
890
|
+
@staticmethod
|
891
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
892
|
+
...
|
893
|
+
def __init__(self, name: ostk.core.type.String, dynamics: list[...], states: list[State], condition_is_satisfied: bool, segment_type: typing.Any) -> None:
|
894
|
+
"""
|
895
|
+
Construct a Segment Solution.
|
896
|
+
|
897
|
+
Args:
|
898
|
+
name (str): The name of the segment.
|
899
|
+
dynamics (list[Dynamics]): The dynamics.
|
900
|
+
states (list[State]): The states.
|
901
|
+
condition_is_satisfied (bool): Whether the event condition is satisfied.
|
902
|
+
segment_type (Type): The type of the segment.
|
903
|
+
"""
|
904
|
+
def __repr__(self) -> str:
|
905
|
+
...
|
906
|
+
def __str__(self) -> str:
|
907
|
+
...
|
908
|
+
def access_end_instant(self) -> ostk.physics.time.Instant:
|
909
|
+
"""
|
910
|
+
Get the instant at which the segment ends.
|
911
|
+
|
912
|
+
Returns:
|
913
|
+
Instant: The instant at which the segment ends.
|
914
|
+
"""
|
915
|
+
def access_start_instant(self) -> ostk.physics.time.Instant:
|
916
|
+
"""
|
917
|
+
Get the instant at which the segment starts.
|
918
|
+
|
919
|
+
Returns:
|
920
|
+
Instant: The instant at which the segment starts.
|
921
|
+
"""
|
922
|
+
def calculate_states_at(self, instants: list[ostk.physics.time.Instant], numerical_solver: state.NumericalSolver) -> list[State]:
|
923
|
+
"""
|
924
|
+
Calculate the states in this segment's solution at the given instants.
|
925
|
+
|
926
|
+
Args:
|
927
|
+
instants (list[Instant]): The instants at which the states will be calculated.
|
928
|
+
numerical_solver (NumericalSolver): The numerical solver used to calculate the states.
|
929
|
+
|
930
|
+
Returns:
|
931
|
+
list[State]: The states at the provided instants.
|
932
|
+
"""
|
933
|
+
def compute_delta_mass(self) -> ostk.physics.unit.Mass:
|
934
|
+
"""
|
935
|
+
Compute the delta mass.
|
936
|
+
|
937
|
+
Returns:
|
938
|
+
Mass: The delta mass.
|
939
|
+
"""
|
940
|
+
def compute_delta_v(self, specific_impulse: ostk.core.type.Real) -> ostk.core.type.Real:
|
941
|
+
"""
|
942
|
+
Compute the delta V.
|
943
|
+
|
944
|
+
Args:
|
945
|
+
specific_impulse (float): The specific impulse.
|
946
|
+
|
947
|
+
Returns:
|
948
|
+
float: The delta V (m/s).
|
949
|
+
"""
|
950
|
+
def extract_maneuvers(self, frame: ostk.physics.coordinate.Frame) -> list[...]:
|
951
|
+
"""
|
952
|
+
Extract maneuvers from the (maneuvering) segment.
|
953
|
+
|
954
|
+
Returns:
|
955
|
+
list[Maneuver]: The list of maneuvers.
|
956
|
+
"""
|
957
|
+
def get_all_dynamics_contributions(self, frame: ostk.physics.coordinate.Frame) -> dict[..., numpy.ndarray[numpy.float64[m, n]]]:
|
958
|
+
"""
|
959
|
+
Compute the contributions of all segment's dynamics in the provided frame for all states assocated with the segment.
|
960
|
+
|
961
|
+
Args:
|
962
|
+
frame (Frame): The frame.
|
963
|
+
|
964
|
+
Returns:
|
965
|
+
dict[Dynamics, np.ndarray]: The list of matrices with individual dynamics contributions.
|
966
|
+
"""
|
967
|
+
def get_dynamics_acceleration_contribution(self, dynamics: typing.Any, frame: ostk.physics.coordinate.Frame) -> numpy.ndarray[numpy.float64[m, n]]:
|
968
|
+
"""
|
969
|
+
Compute the contribution of the provided dynamics to the acceleration in the provided frame for all states associated with the segment.
|
970
|
+
|
971
|
+
Args:
|
972
|
+
dynamics (Dynamics): The dynamics.
|
973
|
+
frame (Frame): The frame.
|
974
|
+
|
975
|
+
Returns:
|
976
|
+
np.ndarray: The matrix of dynamics contributions to acceleration.
|
977
|
+
"""
|
978
|
+
def get_dynamics_contribution(self, dynamics: typing.Any, frame: ostk.physics.coordinate.Frame, coordinate_subsets: list[state.CoordinateSubset] = []) -> numpy.ndarray[numpy.float64[m, n]]:
|
979
|
+
"""
|
980
|
+
Compute the contribution of the provided dynamics in the provided frame for all states associated with the segment.
|
981
|
+
|
982
|
+
Args:
|
983
|
+
dynamics (Dynamics): The dynamics.
|
984
|
+
frame (Frame): The frame.
|
985
|
+
coordinate_subsets (list[CoordinateSubset], optional): A subset of the dynamics writing coordinate subsets to consider.
|
986
|
+
|
987
|
+
Returns:
|
988
|
+
MatrixXd: The matrix of dynamics contributions for the selected coordinate subsets of the dynamics.
|
989
|
+
"""
|
990
|
+
def get_final_mass(self) -> ostk.physics.unit.Mass:
|
991
|
+
"""
|
992
|
+
Get the final mass.
|
993
|
+
|
994
|
+
Returns:
|
995
|
+
Mass: The final mass.
|
996
|
+
"""
|
997
|
+
def get_initial_mass(self) -> ostk.physics.unit.Mass:
|
998
|
+
"""
|
999
|
+
Get the initial mass.
|
1000
|
+
|
1001
|
+
Returns:
|
1002
|
+
Mass: The initial mass.
|
1003
|
+
"""
|
1004
|
+
def get_interval(self) -> ostk.physics.time.Interval:
|
1005
|
+
"""
|
1006
|
+
Get the time interval of the solution.
|
1007
|
+
|
1008
|
+
Returns:
|
1009
|
+
Interval: The interval.
|
1010
|
+
"""
|
1011
|
+
def get_propagation_duration(self) -> ostk.physics.time.Duration:
|
1012
|
+
"""
|
1013
|
+
Get the propagation duration.
|
1014
|
+
|
1015
|
+
Returns:
|
1016
|
+
Duration: The propagation duration.
|
1017
|
+
"""
|
1018
|
+
@property
|
1019
|
+
def condition_is_satisfied(self) -> bool:
|
1020
|
+
"""
|
1021
|
+
Whether the event condition is satisfied.
|
1022
|
+
|
1023
|
+
:type: bool
|
1024
|
+
"""
|
1025
|
+
@property
|
1026
|
+
def dynamics(self) -> list[...]:
|
1027
|
+
"""
|
1028
|
+
The dynamics.
|
1029
|
+
|
1030
|
+
:type: Dynamics
|
1031
|
+
"""
|
1032
|
+
@property
|
1033
|
+
def name(self) -> ostk.core.type.String:
|
1034
|
+
"""
|
1035
|
+
The name of the segment.
|
1036
|
+
|
1037
|
+
:type: str
|
1038
|
+
"""
|
1039
|
+
@property
|
1040
|
+
def segment_type(self) -> ...:
|
1041
|
+
"""
|
1042
|
+
The type of the segment.
|
1043
|
+
|
1044
|
+
:type: Type
|
1045
|
+
"""
|
1046
|
+
@property
|
1047
|
+
def states(self) -> list[State]:
|
1048
|
+
"""
|
1049
|
+
The states.
|
1050
|
+
|
1051
|
+
:type: list[State]
|
1052
|
+
"""
|
1053
|
+
class Type:
|
1054
|
+
"""
|
1055
|
+
|
1056
|
+
Segment type.
|
1057
|
+
|
1058
|
+
|
1059
|
+
Members:
|
1060
|
+
|
1061
|
+
Coast : Coast
|
1062
|
+
|
1063
|
+
Maneuver : Maneuver
|
1064
|
+
"""
|
1065
|
+
Coast: typing.ClassVar[Segment.Type] # value = <Type.Coast: 0>
|
1066
|
+
Maneuver: typing.ClassVar[Segment.Type] # value = <Type.Maneuver: 1>
|
1067
|
+
__members__: typing.ClassVar[dict[str, Segment.Type]] # value = {'Coast': <Type.Coast: 0>, 'Maneuver': <Type.Maneuver: 1>}
|
1068
|
+
@staticmethod
|
1069
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1070
|
+
...
|
1071
|
+
def __eq__(self, other: typing.Any) -> bool:
|
1072
|
+
...
|
1073
|
+
def __getstate__(self) -> int:
|
1074
|
+
...
|
1075
|
+
def __hash__(self) -> int:
|
1076
|
+
...
|
1077
|
+
def __index__(self) -> int:
|
1078
|
+
...
|
1079
|
+
def __init__(self, value: int) -> None:
|
1080
|
+
...
|
1081
|
+
def __int__(self) -> int:
|
1082
|
+
...
|
1083
|
+
def __ne__(self, other: typing.Any) -> bool:
|
1084
|
+
...
|
1085
|
+
def __repr__(self) -> str:
|
1086
|
+
...
|
1087
|
+
def __setstate__(self, state: int) -> None:
|
1088
|
+
...
|
1089
|
+
def __str__(self) -> str:
|
1090
|
+
...
|
1091
|
+
@property
|
1092
|
+
def name(self) -> str:
|
1093
|
+
...
|
1094
|
+
@property
|
1095
|
+
def value(self) -> int:
|
1096
|
+
...
|
1097
|
+
@staticmethod
|
1098
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1099
|
+
...
|
1100
|
+
@staticmethod
|
1101
|
+
def coast(name: ostk.core.type.String, event_condition: typing.Any, dynamics: list[...], numerical_solver: state.NumericalSolver) -> Segment:
|
1102
|
+
"""
|
1103
|
+
Create a coast segment.
|
1104
|
+
|
1105
|
+
Args:
|
1106
|
+
name (str): The name of the segment.
|
1107
|
+
event_condition (EventCondition): The event condition.
|
1108
|
+
dynamics (Dynamics): The dynamics.
|
1109
|
+
numerical_solver (NumericalSolver): The numerical solver.
|
1110
|
+
|
1111
|
+
Returns:
|
1112
|
+
Segment: The coast segment.
|
1113
|
+
"""
|
1114
|
+
@staticmethod
|
1115
|
+
def maneuver(name: ostk.core.type.String, event_condition: typing.Any, thruster_dynamics: typing.Any, dynamics: list[...], numerical_solver: state.NumericalSolver) -> Segment:
|
1116
|
+
"""
|
1117
|
+
Create a maneuver segment.
|
1118
|
+
|
1119
|
+
Args:
|
1120
|
+
name (str): The name of the segment.
|
1121
|
+
event_condition (EventCondition): The event condition.
|
1122
|
+
thruster_dynamics (ThrusterDynamics): The thruster dynamics.
|
1123
|
+
dynamics (Dynamics): The dynamics.
|
1124
|
+
numerical_solver (NumericalSolver): The numerical solver.
|
1125
|
+
|
1126
|
+
Returns:
|
1127
|
+
Segment: The maneuver segment.
|
1128
|
+
"""
|
1129
|
+
def __repr__(self) -> str:
|
1130
|
+
...
|
1131
|
+
def __str__(self) -> str:
|
1132
|
+
...
|
1133
|
+
def get_dynamics(self) -> list[...]:
|
1134
|
+
"""
|
1135
|
+
Get the dynamics.
|
1136
|
+
|
1137
|
+
Returns:
|
1138
|
+
Dynamics: The dynamics.
|
1139
|
+
"""
|
1140
|
+
def get_event_condition(self) -> ...:
|
1141
|
+
"""
|
1142
|
+
Get the event condition.
|
1143
|
+
|
1144
|
+
Returns:
|
1145
|
+
EventCondition: The event condition.
|
1146
|
+
"""
|
1147
|
+
def get_name(self) -> ostk.core.type.String:
|
1148
|
+
"""
|
1149
|
+
Get the name of the segment.
|
1150
|
+
|
1151
|
+
Returns:
|
1152
|
+
str: The name of the segment.
|
1153
|
+
"""
|
1154
|
+
def get_numerical_solver(self) -> state.NumericalSolver:
|
1155
|
+
"""
|
1156
|
+
Get the numerical solver.
|
1157
|
+
|
1158
|
+
Returns:
|
1159
|
+
NumericalSolver: The numerical solver.
|
1160
|
+
"""
|
1161
|
+
def get_type(self) -> Segment.Type:
|
1162
|
+
"""
|
1163
|
+
Get the type of the segment.
|
1164
|
+
|
1165
|
+
Returns:
|
1166
|
+
Type: The type of the segment.
|
1167
|
+
"""
|
1168
|
+
def solve(self, state: State, maximum_propagation_duration: ostk.physics.time.Duration = ...) -> Segment.Solution:
|
1169
|
+
"""
|
1170
|
+
Solve the segment.
|
1171
|
+
|
1172
|
+
Args:
|
1173
|
+
state (State): The state.
|
1174
|
+
maximum_propagation_duration (Duration, optional): The maximum propagation duration.
|
1175
|
+
|
1176
|
+
Returns:
|
1177
|
+
SegmentSolution: The segment solution.
|
1178
|
+
"""
|
1179
|
+
class Sequence:
|
1180
|
+
"""
|
1181
|
+
|
1182
|
+
A mission `Sequence`. Consists of a list of `Segment` objects and various configuration parameters.
|
1183
|
+
|
1184
|
+
|
1185
|
+
"""
|
1186
|
+
class Solution:
|
1187
|
+
"""
|
1188
|
+
|
1189
|
+
The Solution object that is returned when a `Sequence` is solved.
|
1190
|
+
|
1191
|
+
|
1192
|
+
"""
|
1193
|
+
@staticmethod
|
1194
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1195
|
+
...
|
1196
|
+
def __init__(self, segment_solutions: list[Segment.Solution], execution_is_complete: bool) -> None:
|
1197
|
+
"""
|
1198
|
+
Construct a new `Sequence.Solution` object.
|
1199
|
+
|
1200
|
+
Args:
|
1201
|
+
segment_solutions (list[Segment.Solution]): The segment solutions.
|
1202
|
+
execution_is_complete (bool): Whether the execution is complete.
|
1203
|
+
|
1204
|
+
Returns:
|
1205
|
+
Sequence: The new `Sequence.Solution` object.
|
1206
|
+
"""
|
1207
|
+
def __repr__(self) -> str:
|
1208
|
+
...
|
1209
|
+
def __str__(self) -> str:
|
1210
|
+
...
|
1211
|
+
def access_end_instant(self) -> ostk.physics.time.Instant:
|
1212
|
+
"""
|
1213
|
+
Get the instant at which the access ends.
|
1214
|
+
|
1215
|
+
Returns:
|
1216
|
+
Instant: The instant at which the access ends.
|
1217
|
+
"""
|
1218
|
+
def access_start_instant(self) -> ostk.physics.time.Instant:
|
1219
|
+
"""
|
1220
|
+
Get the instant at which the access starts.
|
1221
|
+
|
1222
|
+
Returns:
|
1223
|
+
Instant: The instant at which the access starts.
|
1224
|
+
"""
|
1225
|
+
def calculate_states_at(self, instants: list[ostk.physics.time.Instant], numerical_solver: state.NumericalSolver) -> list[State]:
|
1226
|
+
"""
|
1227
|
+
Calculate states in this sequence's solution at provided instants.
|
1228
|
+
|
1229
|
+
Args:
|
1230
|
+
instants (list[Instant]): The instants at which the states will be calculated.
|
1231
|
+
numerical_solver (NumericalSolver): The numerical solver used to calculate the states.
|
1232
|
+
|
1233
|
+
Returns:
|
1234
|
+
list[State]: The states at the provided instants.
|
1235
|
+
"""
|
1236
|
+
def compute_delta_mass(self) -> ostk.physics.unit.Mass:
|
1237
|
+
"""
|
1238
|
+
Compute the delta mass.
|
1239
|
+
|
1240
|
+
Returns:
|
1241
|
+
float: The delta mass.
|
1242
|
+
"""
|
1243
|
+
def compute_delta_v(self, specific_impulse: ostk.core.type.Real) -> ostk.core.type.Real:
|
1244
|
+
"""
|
1245
|
+
Compute the delta V.
|
1246
|
+
|
1247
|
+
Args:
|
1248
|
+
specific_impulse (float): The specific impulse.
|
1249
|
+
|
1250
|
+
Returns:
|
1251
|
+
float: The delta V (m/s).
|
1252
|
+
"""
|
1253
|
+
def get_final_mass(self) -> ostk.physics.unit.Mass:
|
1254
|
+
"""
|
1255
|
+
Get the final mass.
|
1256
|
+
|
1257
|
+
Returns:
|
1258
|
+
float: The final mass.
|
1259
|
+
"""
|
1260
|
+
def get_initial_mass(self) -> ostk.physics.unit.Mass:
|
1261
|
+
"""
|
1262
|
+
Get the initial mass.
|
1263
|
+
|
1264
|
+
Returns:
|
1265
|
+
float: The initial mass.
|
1266
|
+
"""
|
1267
|
+
def get_interval(self) -> ostk.physics.time.Interval:
|
1268
|
+
"""
|
1269
|
+
Get the interval.
|
1270
|
+
|
1271
|
+
Returns:
|
1272
|
+
Interval: The interval.
|
1273
|
+
"""
|
1274
|
+
def get_propagation_duration(self) -> ostk.physics.time.Duration:
|
1275
|
+
"""
|
1276
|
+
Get the propagation duration.
|
1277
|
+
|
1278
|
+
Returns:
|
1279
|
+
Duration: The propagation duration.
|
1280
|
+
"""
|
1281
|
+
def get_states(self) -> list[State]:
|
1282
|
+
"""
|
1283
|
+
Get the states.
|
1284
|
+
|
1285
|
+
Returns:
|
1286
|
+
list[State]: The states.
|
1287
|
+
"""
|
1288
|
+
@property
|
1289
|
+
def execution_is_complete(self) -> bool:
|
1290
|
+
"""
|
1291
|
+
Whether the execution is complete.
|
1292
|
+
|
1293
|
+
:type: bool
|
1294
|
+
"""
|
1295
|
+
@property
|
1296
|
+
def segment_solutions(self) -> list[Segment.Solution]:
|
1297
|
+
"""
|
1298
|
+
The solutions for each segment.
|
1299
|
+
|
1300
|
+
:type: list[SegmentSolution]
|
1301
|
+
"""
|
1302
|
+
@staticmethod
|
1303
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1304
|
+
...
|
1305
|
+
def __init__(self: typing.Sequence, segments: list[Segment] = [], numerical_solver: state.NumericalSolver = ..., dynamics: list[...] = [], maximum_propagation_duration: ostk.physics.time.Duration = ..., verbosity: int = 1) -> None:
|
1306
|
+
"""
|
1307
|
+
Construct a new `Sequence` object.
|
1308
|
+
|
1309
|
+
Args:
|
1310
|
+
segments (list[Segment], optional): The segments.
|
1311
|
+
numerical_solver (NumericalSolver, optional): The numerical solver.
|
1312
|
+
dynamics (list[Dynamics], optional): The dynamics.
|
1313
|
+
maximum_propagation_duration (Duration, optional): The maximum propagation duration.
|
1314
|
+
verbosity (int, optional): The verbosity level.
|
1315
|
+
|
1316
|
+
Returns:
|
1317
|
+
Sequence: The new `Sequence` object.
|
1318
|
+
"""
|
1319
|
+
def __repr__(self: typing.Sequence) -> str:
|
1320
|
+
...
|
1321
|
+
def __str__(self: typing.Sequence) -> str:
|
1322
|
+
...
|
1323
|
+
def add_coast_segment(self: typing.Sequence, event_condition: typing.Any) -> None:
|
1324
|
+
"""
|
1325
|
+
Add a coast segment.
|
1326
|
+
|
1327
|
+
Args:
|
1328
|
+
event_condition (EventCondition): The event condition.
|
1329
|
+
"""
|
1330
|
+
def add_maneuver_segment(self: typing.Sequence, event_condition: typing.Any, thruster_dynamics: typing.Any) -> None:
|
1331
|
+
"""
|
1332
|
+
Add a maneuver segment.
|
1333
|
+
|
1334
|
+
Args:
|
1335
|
+
event_condition (EventCondition): The event condition.
|
1336
|
+
thruster_dynamics (Thruster): The thruster dynamics.
|
1337
|
+
"""
|
1338
|
+
def add_segment(self: typing.Sequence, segment: Segment) -> None:
|
1339
|
+
"""
|
1340
|
+
Add a segment.
|
1341
|
+
|
1342
|
+
Args:
|
1343
|
+
segment (Segment): The segment.
|
1344
|
+
"""
|
1345
|
+
def add_segments(self: typing.Sequence, segments: list[Segment]) -> None:
|
1346
|
+
"""
|
1347
|
+
Add segments.
|
1348
|
+
|
1349
|
+
Args:
|
1350
|
+
segments (list[Segment]): The segments.
|
1351
|
+
"""
|
1352
|
+
def get_dynamics(self: typing.Sequence) -> list[...]:
|
1353
|
+
"""
|
1354
|
+
Get the dynamics.
|
1355
|
+
|
1356
|
+
Returns:
|
1357
|
+
list[Dynamics]: The dynamics.
|
1358
|
+
"""
|
1359
|
+
def get_maximum_propagation_duration(self: typing.Sequence) -> ostk.physics.time.Duration:
|
1360
|
+
"""
|
1361
|
+
Get the maximum propagation duration.
|
1362
|
+
|
1363
|
+
Returns:
|
1364
|
+
Duration: The maximum propagation duration.
|
1365
|
+
"""
|
1366
|
+
def get_numerical_solver(self: typing.Sequence) -> state.NumericalSolver:
|
1367
|
+
"""
|
1368
|
+
Get the numerical solver.
|
1369
|
+
|
1370
|
+
Returns:
|
1371
|
+
NumericalSolver: The numerical solver.
|
1372
|
+
"""
|
1373
|
+
def get_segments(self: typing.Sequence) -> list[Segment]:
|
1374
|
+
"""
|
1375
|
+
Get the segments.
|
1376
|
+
|
1377
|
+
Returns:
|
1378
|
+
list[Segment]: The segments.
|
1379
|
+
"""
|
1380
|
+
def solve(self: typing.Sequence, state: State, repetition_count: int = 1) -> Sequence.Solution:
|
1381
|
+
"""
|
1382
|
+
Solve the sequence.
|
1383
|
+
|
1384
|
+
Args:
|
1385
|
+
state (State): The state.
|
1386
|
+
repetition_count (int, optional): The repetition count. Defaults to 1.
|
1387
|
+
|
1388
|
+
Returns:
|
1389
|
+
SequenceSolution: The sequence solution.
|
1390
|
+
"""
|
1391
|
+
def solve_to_condition(self: typing.Sequence, state: State, event_condition: typing.Any, maximum_propagation_duration_limit: ostk.physics.time.Duration = ...) -> Sequence.Solution:
|
1392
|
+
"""
|
1393
|
+
Solve the sequence until the event condition is met.
|
1394
|
+
|
1395
|
+
In the case that the event condition is not met due to maximum propagation duration limit,
|
1396
|
+
it will return the `SequenceSolution` with `executionIsComplete` set to `False`.
|
1397
|
+
|
1398
|
+
Args:
|
1399
|
+
state (State): The state.
|
1400
|
+
event_condition (EventCondition): The event condition.
|
1401
|
+
maximum_propagation_duration_limit (Duration, optional): The maximum propagation duration limit for the sequence. Defaults to 30 days.
|
1402
|
+
|
1403
|
+
Returns:
|
1404
|
+
SequenceSolution: The sequence solution.
|
1405
|
+
"""
|
1406
|
+
class State:
|
1407
|
+
"""
|
1408
|
+
|
1409
|
+
This class represents the physical state of an object.
|
1410
|
+
|
1411
|
+
|
1412
|
+
"""
|
1413
|
+
__hash__: typing.ClassVar[None] = None
|
1414
|
+
@staticmethod
|
1415
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1416
|
+
...
|
1417
|
+
@staticmethod
|
1418
|
+
def from_dict(data: dict) -> State:
|
1419
|
+
"""
|
1420
|
+
|
1421
|
+
Create a State from a dictionary.
|
1422
|
+
|
1423
|
+
Note: Implicit assumption that ECEF = ITRF, and ECI = GCRF.
|
1424
|
+
|
1425
|
+
The dictionary must contain the following:
|
1426
|
+
- 'timestamp': The timestamp of the state.
|
1427
|
+
- 'r_ITRF_x'/'rx'/'rx_eci'/'rx_ecef': The x-coordinate of the position.
|
1428
|
+
- 'r_ITRF_y'/'ry'/'ry_eci'/'ry_ecef': The y-coordinate of the position.
|
1429
|
+
- 'r_ITRF_z'/'rz'/'rz_eci'/'rz_ecef': The z-coordinate of the position.
|
1430
|
+
- 'v_ITRF_x'/'vx'/'vx_eci'/'vx_ecef': The x-coordinate of the velocity.
|
1431
|
+
- 'v_ITRF_y'/'vy'/'vy_eci'/'vy_ecef': The y-coordinate of the velocity.
|
1432
|
+
- 'v_ITRF_z'/'vz'/'vz_eci'/'vz_ecef': The z-coordinate of the velocity.
|
1433
|
+
- 'frame': The frame of the state. Required if 'rx', 'ry', 'rz', 'vx', 'vy', 'vz' are provided.
|
1434
|
+
- 'q_B_ECI_x': The x-coordinate of the quaternion. Optional.
|
1435
|
+
- 'q_B_ECI_y': The y-coordinate of the quaternion. Optional.
|
1436
|
+
- 'q_B_ECI_z': The z-coordinate of the quaternion. Optional.
|
1437
|
+
- 'q_B_ECI_s': The s-coordinate of the quaternion. Optional.
|
1438
|
+
- 'w_B_ECI_in_B_x': The x-coordinate of the angular velocity. Optional.
|
1439
|
+
- 'w_B_ECI_in_B_y': The y-coordinate of the angular velocity. Optional.
|
1440
|
+
- 'w_B_ECI_in_B_z': The z-coordinate of the angular velocity. Optional.
|
1441
|
+
- 'drag_coefficient'/'cd': The drag coefficient. Optional.
|
1442
|
+
- 'cross_sectional_area'/'surface_area': The cross-sectional area. Optional.
|
1443
|
+
- 'mass': The mass. Optional.
|
1444
|
+
|
1445
|
+
Args:
|
1446
|
+
data (dict): The dictionary.
|
1447
|
+
|
1448
|
+
Returns:
|
1449
|
+
State: The State.
|
1450
|
+
|
1451
|
+
"""
|
1452
|
+
@staticmethod
|
1453
|
+
def template(frame: ostk.physics.coordinate.Frame, coordinate_subsets: list) -> type:
|
1454
|
+
"""
|
1455
|
+
|
1456
|
+
Emit a custom class type for States. This is meta-programming syntactic sugar on top of the StateBuilder class.
|
1457
|
+
|
1458
|
+
StateType = State.template(frame, coordinate_subsets)
|
1459
|
+
state = StateType(instant, coordinates)
|
1460
|
+
|
1461
|
+
is equivalent to
|
1462
|
+
|
1463
|
+
state_builder = StateBuilder(frame, coordinate_subsets)
|
1464
|
+
state = state_builder.build(instant, coordinates)
|
1465
|
+
|
1466
|
+
"""
|
1467
|
+
@staticmethod
|
1468
|
+
def undefined() -> State:
|
1469
|
+
"""
|
1470
|
+
Get an undefined state.
|
1471
|
+
|
1472
|
+
Returns:
|
1473
|
+
State: An undefined state.
|
1474
|
+
"""
|
1475
|
+
def __add__(self, arg0: State) -> State:
|
1476
|
+
...
|
1477
|
+
def __eq__(self, arg0: State) -> bool:
|
1478
|
+
...
|
1479
|
+
@typing.overload
|
1480
|
+
def __init__(self, instant: ostk.physics.time.Instant, position: ostk.physics.coordinate.Position, velocity: ostk.physics.coordinate.Velocity) -> None:
|
1481
|
+
"""
|
1482
|
+
Utility constructor for Position/Velocity only.
|
1483
|
+
|
1484
|
+
Args:
|
1485
|
+
instant (Instant): An instant
|
1486
|
+
position (Position): The cartesian position at the instant
|
1487
|
+
velocity (Velocity): The cartesian velocity at the instant
|
1488
|
+
"""
|
1489
|
+
@typing.overload
|
1490
|
+
def __init__(self, instant: ostk.physics.time.Instant, position: ostk.physics.coordinate.Position, velocity: ostk.physics.coordinate.Velocity, attitude: ostk.mathematics.geometry.d3.transformation.rotation.Quaternion, angular_velocity: numpy.ndarray[numpy.float64[3, 1]], attitude_frame: ostk.physics.coordinate.Frame) -> None:
|
1491
|
+
"""
|
1492
|
+
Utility constructor for Position/Velocity/Attitude/Angular velocity.
|
1493
|
+
|
1494
|
+
Args:
|
1495
|
+
instant (Instant): An instant
|
1496
|
+
position (Position): The cartesian position at the instant
|
1497
|
+
velocity (Velocity): The cartesian velocity at the instant
|
1498
|
+
attitude (Quaternion): The attitude at the instant, representing the rotation required to go from the attitude reference frame to the satellite body frame
|
1499
|
+
angular_velocity (numpy.ndarray): The angular velocity at the instant, representing the angular velocity of the satellite body frame with respect ot teh attitude frame, expressed in body frame
|
1500
|
+
attitude_frame (Frame): The attitude reference frame
|
1501
|
+
"""
|
1502
|
+
@typing.overload
|
1503
|
+
def __init__(self, instant: ostk.physics.time.Instant, coordinates: numpy.ndarray[numpy.float64[m, 1]], frame: ostk.physics.coordinate.Frame, coordinate_broker: typing.Any) -> None:
|
1504
|
+
"""
|
1505
|
+
Constructor with a pre-defined Coordinates Broker.
|
1506
|
+
|
1507
|
+
Args:
|
1508
|
+
instant (Instant): An instant
|
1509
|
+
coordinates (numpy.ndarray): The coordinates at the instant in International System of Units
|
1510
|
+
frame (Frame): The reference frame in which the coordinates are referenced to and resolved in
|
1511
|
+
coordinate_broker (CoordinateBroker): The coordinate broker associated to the coordinates
|
1512
|
+
"""
|
1513
|
+
@typing.overload
|
1514
|
+
def __init__(self, instant: ostk.physics.time.Instant, coordinates: numpy.ndarray[numpy.float64[m, 1]], frame: ostk.physics.coordinate.Frame, coordinate_subsets: list[...]) -> None:
|
1515
|
+
"""
|
1516
|
+
Constructor with coordinate subsets.
|
1517
|
+
|
1518
|
+
Args:
|
1519
|
+
instant (Instant): An instant
|
1520
|
+
coordinates (numpy.ndarray): The coordinates at the instant in International System of Units
|
1521
|
+
frame (Frame): The reference frame in which the coordinates are referenced to and resolved in
|
1522
|
+
coordinate_subsets (CoordinateBroker): The coordinate subsets associated to the coordinates
|
1523
|
+
"""
|
1524
|
+
@typing.overload
|
1525
|
+
def __init__(self, state: State) -> None:
|
1526
|
+
...
|
1527
|
+
def __ne__(self, arg0: State) -> bool:
|
1528
|
+
...
|
1529
|
+
def __repr__(self) -> str:
|
1530
|
+
...
|
1531
|
+
def __str__(self) -> str:
|
1532
|
+
...
|
1533
|
+
def __sub__(self, arg0: State) -> State:
|
1534
|
+
...
|
1535
|
+
def extract_coordinate(self, coordinate_subset: typing.Any) -> numpy.ndarray[numpy.float64[m, 1]]:
|
1536
|
+
"""
|
1537
|
+
Extract the coordinates associated to a subset of the state.
|
1538
|
+
|
1539
|
+
Args:
|
1540
|
+
coordinate_subset (CoordinateSubset): The coordinate subset to extract.
|
1541
|
+
|
1542
|
+
Returns:
|
1543
|
+
np.array: The coordinates associated to the subset.
|
1544
|
+
"""
|
1545
|
+
def extract_coordinates(self, coordinate_subsets: list[...]) -> numpy.ndarray[numpy.float64[m, 1]]:
|
1546
|
+
"""
|
1547
|
+
Extract the coordinates associated to a set of subsets of the state.
|
1548
|
+
|
1549
|
+
Args:
|
1550
|
+
coordinate_subsets (list[CoordinateSubset]): The coordinate subsets to extract.
|
1551
|
+
|
1552
|
+
Returns:
|
1553
|
+
np.array: The coordinates associated to the subsets.
|
1554
|
+
"""
|
1555
|
+
def get_angular_velocity(self) -> numpy.ndarray[numpy.float64[3, 1]]:
|
1556
|
+
"""
|
1557
|
+
Get the angular velocity of the state.
|
1558
|
+
|
1559
|
+
Returns:
|
1560
|
+
np.array: The angular velocity of the state.
|
1561
|
+
"""
|
1562
|
+
def get_attitude(self) -> ostk.mathematics.geometry.d3.transformation.rotation.Quaternion:
|
1563
|
+
"""
|
1564
|
+
Get the attitude of the state.
|
1565
|
+
|
1566
|
+
Returns:
|
1567
|
+
Quaternion: The attitude of the state.
|
1568
|
+
"""
|
1569
|
+
def get_coordinate_subsets(self) -> list[...]:
|
1570
|
+
"""
|
1571
|
+
Get the coordinate subsets associated to the state.
|
1572
|
+
|
1573
|
+
Returns:
|
1574
|
+
list[CoordinateSubset]: The coordinate subsets associated to the state.
|
1575
|
+
"""
|
1576
|
+
def get_coordinates(self) -> numpy.ndarray[numpy.float64[m, 1]]:
|
1577
|
+
"""
|
1578
|
+
Get the coordinates of the state.
|
1579
|
+
|
1580
|
+
Returns:
|
1581
|
+
np.array: The coordinates of the state.
|
1582
|
+
"""
|
1583
|
+
def get_frame(self) -> ostk.physics.coordinate.Frame:
|
1584
|
+
"""
|
1585
|
+
Get the reference frame of the state.
|
1586
|
+
|
1587
|
+
Returns:
|
1588
|
+
Frame: The reference frame of the state.
|
1589
|
+
"""
|
1590
|
+
def get_instant(self) -> ostk.physics.time.Instant:
|
1591
|
+
"""
|
1592
|
+
Get the instant of the state.
|
1593
|
+
|
1594
|
+
Returns:
|
1595
|
+
Instant: The instant of the state.
|
1596
|
+
"""
|
1597
|
+
def get_position(self) -> ostk.physics.coordinate.Position:
|
1598
|
+
"""
|
1599
|
+
Get the position of the state.
|
1600
|
+
|
1601
|
+
Returns:
|
1602
|
+
Position: The position of the state.
|
1603
|
+
"""
|
1604
|
+
def get_size(self) -> int:
|
1605
|
+
"""
|
1606
|
+
Get the size of the state.
|
1607
|
+
|
1608
|
+
Returns:
|
1609
|
+
int: The size of the state.
|
1610
|
+
"""
|
1611
|
+
def get_velocity(self) -> ostk.physics.coordinate.Velocity:
|
1612
|
+
"""
|
1613
|
+
Get the velocity of the state.
|
1614
|
+
|
1615
|
+
Returns:
|
1616
|
+
Velocity: The velocity of the state.
|
1617
|
+
"""
|
1618
|
+
def has_subset(self, subset: typing.Any) -> bool:
|
1619
|
+
"""
|
1620
|
+
Check if the state has a given subset.
|
1621
|
+
|
1622
|
+
Args:
|
1623
|
+
subset (CoordinateSubset): The subset to check.
|
1624
|
+
|
1625
|
+
Returns:
|
1626
|
+
bool: True if the state has the subset, False otherwise.
|
1627
|
+
"""
|
1628
|
+
def in_frame(self, frame: ostk.physics.coordinate.Frame) -> State:
|
1629
|
+
"""
|
1630
|
+
Transform the state to the provided reference frame.
|
1631
|
+
|
1632
|
+
Args:
|
1633
|
+
frame (Frame): The reference frame to transform to.
|
1634
|
+
|
1635
|
+
Returns:
|
1636
|
+
State: The transformed state.
|
1637
|
+
"""
|
1638
|
+
def is_defined(self) -> bool:
|
1639
|
+
"""
|
1640
|
+
Check if the state is defined.
|
1641
|
+
|
1642
|
+
Returns:
|
1643
|
+
bool: True if the state is defined, False otherwise.
|
1644
|
+
"""
|
1645
|
+
class StateBuilder:
|
1646
|
+
"""
|
1647
|
+
|
1648
|
+
This class makes it convenient to build a `State` object.
|
1649
|
+
|
1650
|
+
"""
|
1651
|
+
__hash__: typing.ClassVar[None] = None
|
1652
|
+
@staticmethod
|
1653
|
+
def _pybind11_conduit_v1_(*args, **kwargs):
|
1654
|
+
...
|
1655
|
+
@staticmethod
|
1656
|
+
def undefined() -> StateBuilder:
|
1657
|
+
"""
|
1658
|
+
Get an undefined `StateBuilder`.
|
1659
|
+
|
1660
|
+
Returns:
|
1661
|
+
StateBuilder: The undefined `StateBuilder`.
|
1662
|
+
"""
|
1663
|
+
def __add__(self, arg0: state.CoordinateSubset) -> StateBuilder:
|
1664
|
+
"""
|
1665
|
+
Add a coordinate subset to the `StateBuilder`.
|
1666
|
+
|
1667
|
+
Arguments:
|
1668
|
+
coordinate_subsets (CoordinateSubset): The coordinate subset to add.
|
1669
|
+
|
1670
|
+
Returns:
|
1671
|
+
StateBuilder: The `StateBuilder` with the added coordinate subset.
|
1672
|
+
"""
|
1673
|
+
def __eq__(self, arg0: StateBuilder) -> bool:
|
1674
|
+
"""
|
1675
|
+
Check if two `StateBuilder` objects are equal.
|
1676
|
+
|
1677
|
+
Returns:
|
1678
|
+
bool: True if the two `StateBuilder` objects are equal, False otherwise.
|
1679
|
+
"""
|
1680
|
+
@typing.overload
|
1681
|
+
def __init__(self, frame: ostk.physics.coordinate.Frame, coordinate_subsets: list[state.CoordinateSubset]) -> None:
|
1682
|
+
"""
|
1683
|
+
Construct a new `StateBuilder` object.
|
1684
|
+
|
1685
|
+
Arguments:
|
1686
|
+
frame (Frame): The reference frame.
|
1687
|
+
coordinate_subsets list[CoordinateSubset]: The coordinate subsets.
|
1688
|
+
|
1689
|
+
Returns:
|
1690
|
+
StateBuilder
|
1691
|
+
"""
|
1692
|
+
@typing.overload
|
1693
|
+
def __init__(self, frame: ostk.physics.coordinate.Frame, coordinate_broker: state.CoordinateBroker) -> None:
|
1694
|
+
"""
|
1695
|
+
Construct a new `StateBuilder` object.
|
1696
|
+
|
1697
|
+
Arguments:
|
1698
|
+
frame (Frame): The reference frame.
|
1699
|
+
coordinate_broker (CoordinateBroker): The coordinate broker.
|
1700
|
+
|
1701
|
+
Returns:
|
1702
|
+
StateBuilder: The new `StateBuilder` object.
|
1703
|
+
"""
|
1704
|
+
@typing.overload
|
1705
|
+
def __init__(self, state: State) -> None:
|
1706
|
+
"""
|
1707
|
+
Construct a new `StateBuilder` object.
|
1708
|
+
|
1709
|
+
Arguments:
|
1710
|
+
state (State): The state.
|
1711
|
+
|
1712
|
+
Returns:
|
1713
|
+
StateBuilder: The new `StateBuilder` object.
|
1714
|
+
"""
|
1715
|
+
def __ne__(self, arg0: StateBuilder) -> bool:
|
1716
|
+
"""
|
1717
|
+
Check if two `StateBuilder` objects are not equal.
|
1718
|
+
|
1719
|
+
Returns:
|
1720
|
+
bool: True if the two `StateBuilder` objects are not equal, False otherwise.
|
1721
|
+
"""
|
1722
|
+
def __repr__(self) -> str:
|
1723
|
+
...
|
1724
|
+
def __str__(self) -> str:
|
1725
|
+
...
|
1726
|
+
def __sub__(self, arg0: state.CoordinateSubset) -> StateBuilder:
|
1727
|
+
"""
|
1728
|
+
Remove a coordinate subset from the `StateBuilder`.
|
1729
|
+
|
1730
|
+
Arguments:
|
1731
|
+
coordinate_subset (CoordinateSubset): The coordinate subset to remove.
|
1732
|
+
|
1733
|
+
Returns:
|
1734
|
+
StateBuilder: The `StateBuilder` with the removed coordinate subset.
|
1735
|
+
"""
|
1736
|
+
def access_coordinate_broker(self) -> state.CoordinateBroker:
|
1737
|
+
"""
|
1738
|
+
Access the coordinate broker of the `StateBuilder`.
|
1739
|
+
|
1740
|
+
Returns:
|
1741
|
+
CoordinateBroker: The coordinate broker of the `StateBuilder`.
|
1742
|
+
"""
|
1743
|
+
def build(self, instant: ostk.physics.time.Instant, coordinates: numpy.ndarray[numpy.float64[m, 1]]) -> State:
|
1744
|
+
"""
|
1745
|
+
Build a `State` object from the `StateBuilder`.
|
1746
|
+
|
1747
|
+
Arguments:
|
1748
|
+
instant (Instant): The instant of the state.
|
1749
|
+
coordinates (VectorXd): The coordinates of the state.
|
1750
|
+
|
1751
|
+
Returns:
|
1752
|
+
State: The `State` object built from the `StateBuilder`.
|
1753
|
+
"""
|
1754
|
+
def expand(self, state: State, default_state: State) -> State:
|
1755
|
+
"""
|
1756
|
+
Expand a `State` object to the `StateBuilder`.
|
1757
|
+
|
1758
|
+
Arguments:
|
1759
|
+
state (State): The `State` object to expand.
|
1760
|
+
default_state (State): The default `State` object.
|
1761
|
+
|
1762
|
+
Returns:
|
1763
|
+
StateBuilder: The `StateBuilder` object expanded from the `State`.
|
1764
|
+
"""
|
1765
|
+
def get_coordinate_subsets(self) -> list[state.CoordinateSubset]:
|
1766
|
+
"""
|
1767
|
+
Get the coordinate subsets of the `StateBuilder`.
|
1768
|
+
|
1769
|
+
Returns:
|
1770
|
+
Array<Shared<const CoordinateSubset>>: The coordinate subsets of the `StateBuilder`.
|
1771
|
+
"""
|
1772
|
+
def get_frame(self) -> ostk.physics.coordinate.Frame:
|
1773
|
+
"""
|
1774
|
+
Get the reference frame of the `StateBuilder`.
|
1775
|
+
|
1776
|
+
Returns:
|
1777
|
+
Frame: The reference frame of the `StateBuilder`.
|
1778
|
+
"""
|
1779
|
+
def get_size(self) -> int:
|
1780
|
+
"""
|
1781
|
+
Get the total size of all coordinates from all subsets.
|
1782
|
+
|
1783
|
+
Returns:
|
1784
|
+
Size: The total size of all coordinates from all subsets.
|
1785
|
+
"""
|
1786
|
+
def is_defined(self) -> bool:
|
1787
|
+
"""
|
1788
|
+
Check if the `StateBuilder` is defined.
|
1789
|
+
|
1790
|
+
Returns:
|
1791
|
+
bool: True if the `StateBuilder` is defined, False otherwise.
|
1792
|
+
"""
|
1793
|
+
def reduce(self, state: State) -> State:
|
1794
|
+
"""
|
1795
|
+
Reduce a `State` object to the `StateBuilder`.
|
1796
|
+
|
1797
|
+
Arguments:
|
1798
|
+
state (State): The `State` object to reduce.
|
1799
|
+
|
1800
|
+
Returns:
|
1801
|
+
StateBuilder: The `StateBuilder` object reduced from the `State`.
|
1802
|
+
"""
|