Trajectory tool
Model API name: trajectory
Orbit generator
Version: v1
Input group: trajectory / multiplicity: one
Input | Description | Valid values | Default | Quantity |
---|---|---|---|---|
orbitTitle | Orbit title |
note: text |
orbit_title | text |
mission definition
Input | Description | Valid values | Default | Quantity |
---|---|---|---|---|
missionTitle | Mission title |
note: text |
mission_title | text |
epoch | Mission epoch |
|
startDate | datetime |
startDate | Start date |
min: unbounded max: unbounded note: ISO date format |
NOW | datetime |
stopDate | Stop date |
min: unbounded max: unbounded note: ISO date format |
STARTDATE+DURATION | datetime |
duration | Duration of the representative orbit |
min: 0 max: unbounded |
1 | dt_duration |
orbit definition
Input | Description | Valid values | Default | Quantity |
---|---|---|---|---|
orbitSpecificationCode | Orbit specification |
NEI=Near-Earth interplanetary (SAPRE backwards compatability) HEL=Sun synchronous circular orbit for altitude circularAltitude and local solar time SOLARTIME (only available for Earth, Mars, Jupiter, Saturn, Uranus and Neptune). See code 230. GEO=Body stationary equatorial circular orbit (e.g. geosynchronous) at specified longitude. See code 220. 201=Use osculating elements (A, E, inclination, raan, argumentOfPerigee, trueAnomaly). Circular (E=0), elliptical (E<1), parabolic (E=1) and hyperbolic (E>1) orbits are supported. 202=Use osculating elements (A, E, inclination, raan, argumentOfPerigee, trueAnomaly); not compatible with parabolic and hyperbolic trajectories 205=Use osculating elements (periapsis, apoapsis, inclination, longitudeOfApoapsis, argumentOfPerigee, trueAnomaly). Heights above the mean radius of the central body 210=Same as 201, but RAAN is replaced by longitude of apoapsis (longitudeOfApoapsis); not compatible with parabolic and hyperbolic trajectories 220=Body stationary equatorial circular orbit (e.g. geosynchronous) at specified longitude 230=Sun synchronous circular orbit for altitude circularAltitude and local solar time SOLARTIME (only available for Earth, Mars, Jupiter, Saturn, Uranus and Neptune). See code 230. 300=Read an OEM file (ORBITFILE). Trajectory segments for central body BODY or NAIFBODY will be selected 301=Read an OEM file (ORBITFILE). All trajectory segments are read and converted to EME2000 coordinates wrt the Sun 310=Read a TLE file (ORBITFILE) 330=User defined file (ORBITFILE) |
205 | number |
orbitFile |
Trajectory upload
Used if orbitSpecificationCode==310 |
note: text |
text | |
circularAltitude | Circular altitude. |
min: 0 max: unbounded |
2000 | altitude |
longitude | Longitude |
min: 0 max: unbounded |
0 | planar_angle |
localTimeAscendingNode | Local solar time of the ascending node of a Sun synchronous circular orbit |
min: 0 max: 23 |
0.0 | time |
semiMajorAxis |
Semi-major axis)
Used if orbitSpecificationCode==201 or orbitSpecificationCode==202 or orbitSpecificationCode==203 |
min: 0 max: unbounded |
0 | length |
eccentricity |
Eccentricity
Used if orbitSpecificationCode==201 or orbitSpecificationCode==202 or orbitSpecificationCode==203 |
min: 0 max: 1 |
0 | 1 |
perigeeAltitude |
Perigee altitude.
Used if orbitSpecificationCode==205 or orbitSpecificationCode==206 or orbitSpecificationCode==207 |
min: 0 max: unbounded |
800 | altitude |
apogeeAltitude |
Apogee altitude.
Used if orbitSpecificationCode==205 or orbitSpecificationCode==206 or orbitSpecificationCode==207 |
min: 0 max: unbounded |
36000 | altitude |
inclination |
Orbit inclination
Used if orbitSpecificationCode==201 or orbitSpecificationCode==202 or orbitSpecificationCode==203 or orbitSpecificationCode==205 or orbitSpecificationCode==206 or orbitSpecificationCode==207 or orbitSpecificationCode==210 or orbitSpecificationCode==211 or orbitSpecificationCode==212 |
min: 0 max: 180 |
0.0 | plane_angle |
raan | Right ascension of the ascending node |
min: 0 max: 360 |
208.0109 | number |
argumentOfPerigee | Argument of perigee. |
min: 0 max: 360 |
104.622 | plane_angle |
longitudeOfApoapsis | Longitude of apoapsis |
min: 0 max: 360 |
0.0 | plane_angle |
longitudeOfPeriapsis | Longitude of periapsis |
min: 0 max: 360 |
0.0 | plane_angle |
trueAnomaly | True anomaly |
min: 0 max: 360 |
0.0 | plane_angle |
naifCode | Central body |
values: [0, 10, 199, 299, 399, 301, 499, 401, 402, 599, 501, 502, 503, 504, 699, 601, 602, 603, 604, 605, 606, 799, 899, 999] |
399 | number |
includeSolarRadiationPurtubation | Flag for switching off (0) or on (1) perturbations by solar C radiation pressure. |
min: 0 max: 1 |
0 | number |
solarRadiationCrossSection | Cross section for solar radiation pressure. |
min: 0 max: unbounded |
0.0 | number |
includeAtmosphericFrictionPurtubation | Flag for switching off (0) or on (1) perturbations by atmospheric (Earth) friction. |
min: 0 max: 1 |
0 | number |
atmosphericFrictionCrossSection | Cross section for atmospheric friction. |
min: 0 max: unbounded |
0.0 | number |
F107 | Daily value of the F10.7 solar radiation index (W m^-2). |
min: 0 max: unbounded |
150 | irradiance |
F107A | 90 day running average of the F10.7 solar radiation index. |
min: 0 max: unbounded |
150 | irradiance |
timeSteps | Timestep |
min: 0 max: unbounded |
[60, 240, 3600] | dt_duration |
altitudeSteps | Altitude steps for timestep control |
min: 0 max: unbounded |
[20000, 80000] | altitude |
Input group: mission / multiplicity: one
mission definition
Input | Description | Valid values | Default | Quantity |
---|---|---|---|---|
missionDuration | Duration of the mission segment |
min: 0 max: unbounded |
1 | dt_duration |
missionStartDate | Start date |
min: unbounded max: unbounded note: ISO date format |
NOW | datetime |
missionStopDate | Stop date |
min: unbounded max: unbounded note: ISO date format |
STARTDATE+DURATION | text |
|
None
Model example
# coding=utf-8
from datetime import datetime, timedelta
from nom_client.nom_client import NoMClient
def convert_cmjd_to_datetime(modified_julian_date):
return datetime(1950, 1, 1, 0, 0, 0) + timedelta(days=modified_julian_date)
nom_client = NoMClient(project_name="Saturn trajectory example")
trajectory_model = nom_client.get_model('trajectory')
saturn_radius = 60280 #km
trajectory_model.set_params(orbitSpecificationCode=205,
epoch="2020-01-01 12:00:00",
startDate="2020-01-02 12:00:00",
missionDuration=30,
naifCode=699,
perigeeAltitude=3*saturn_radius,
apogeeAltitude=5*saturn_radius,
raan=0,
inclination=0, trueAnomaly=0,
argumentOfPerigee=0,
altitudeSteps=[3*saturn_radius, 5*saturn_radius],
timeSteps=[60, 240, 3600]
)
trajectory__result = nom_client.run_model(trajectory_model)
print(trajectory__result)
trajectory__result['trajectory'].result_meta_data["spenvis"]
trajectory_data = trajectory__result['trajectory']
mjd_values = trajectory_data['mjd'].values.squeeze().tolist()
# X, Y, Z
position_values = trajectory_data['position'].values.T.tolist()
# Vx, Vy, Vz
velocity_values = trajectory_data['velocity'].values.T.tolist()
for i in range(len(mjd_values)):
print(f"{convert_cmjd_to_datetime(mjd_values[i])} {position_values[i][0]} {position_values[i][1]} {position_values[i][2]}")
Model references
No references