Package orbdetpy
orbdetpy is a Python orbit determination library.
Features
Dynamics in orbdetpy can be configured with:
- EGM96 gravity field up to degree and order 360.
- Earth solid tides due to the influence of the Sun and Moon.
- FES 2004 ocean tide model up to degree and order 100.
- NRL MSISE-00 and exponential atmospheric drag models.
- Solar radiation pressure.
- Third body perturbations from the Sun and Moon.
- Satellite box-wing models and maneuvers.
Range, range-rate, angles, and inertial state measurements are supported. Filtering can be done with an EKF, UKF, or Batch Least Squares. Dynamic Model Compensation (DMC) can be used to estimate unmodeled accelerations.
Installation
If you have docker installed and wish to use a pre-built environment refer to the Docker section in this README.
-
Install Java SE 11 (11.0.10) from https://www.oracle.com/javadownload. Set the
JAVA_HOMEenvironment variable to the Java installation folder. Thejavaexecutable must be added to the system path. -
Install Python 3.8.0 or higher and run
pip install orbdetpyto install orbdetpy and other package dependencies. -
Update the astrodynamics data under
orbdetpy/orekit-dataperiodically by running the following. You will needrootprivileges on some systems.
python -c "from orbdetpy.astro_data import update_data; update_data();"
Development
-
Download and extract https://github.com/ut-astria/orbdetpy/releases/download/2.1.0/orekit-data.tar.gz under the
orbdetpy/sub-folder. -
Developers will need Apache Maven 3+ to build the Java library. Build using the following from the
orbdetpy/sub-folder, whereos_cpu_typeislinux-x86_64,linux-x86_32,windows-x86_64,windows-x86_32,osx-x86_64, orosx-x86_32depending on your CPU and OS:
mvn -e -Dos.detected.classifier=os_cpu_type package
The command-line is simpler on Intel/AMD 64-bit Linux:
mvn -e package
- Run
pip install -e ./from the top-level folder containingsetup.py.
Docker
-
Build the docker image on a machine that has docker installed and go to the root folder of this repository where the
Dockerfileis and run,docker build --build-arg ORBDETPY_VERSION=2.0.7 -t orbdetpy:2.0.7 . -
Run orbdetpy:2.0.7 image in a daemon state:
docker run -it --rm orbdetpy:2.0.7 bash -
Next we will activate the python environment and run a test to determine a successful docker image build
cd && . env_orbdetpy/bin/activate && python orbdetpy/examples/test_estimation.py
- From here, you can either develop in orbdetpy or build scripts and test in this pre-built environment
Examples
-
fit_radec.py: Run OD with real angles measurements. Also demonstrates the Laplace IOD method for estimating an initial state vector. -
interpolate_oem.py: Command-line tool for interpolating state vectors from CCSDS OEM ephemeris files. OEM files are available for download at http://astria.tacc.utexas.edu/AstriaGraph. -
predict_passes.py: Predict satellite passes for ground stations or geographic regions using TLEs. Current elements may be obtained from sites such as http://www.celestrak.com. -
propagate_tle.py: Propagate TLEs given by command-line arguments. -
test_conversion.py: Test reference frame and other conversion functions. -
test_estimation.py: Demonstrates measurement simulation and orbit determination functions. -
test_interpolation.py: Interpolate state vectors.
Known Issues
-
Give orbdetpy network access permissions if you get warnings from the Microsoft Windows Firewall.
-
If you use orbdetpy with Python's
multiprocessingpackage, call the functionmultiprocessing.set_start_method("spawn")before othermultiprocessingcalls.
Sub-modules
orbdetpy.astro_dataorbdetpy.ccsdsorbdetpy.conversionorbdetpy.estimationorbdetpy.plottingorbdetpy.propagationorbdetpy.rpcorbdetpy.utilitiesorbdetpy.version
Functions
def add_facet(cfg: messages_pb2.Settings, normal: Tuple[float, float, float], area: float) ‑> messages_pb2.Facet-
Add a facet to a box-wing spacecraft model.
Parameters
cfg : Settings object. normal : Facet unit outward normal vector in the spacecraft's co-moving LVLH frame. area : Facet area [m^2].
Returns
Added Facet object
def add_maneuver(cfg: messages_pb2.Settings, time: float, trigger_event: int, trigger_params: Optional[List[float]], maneuver_type: int, maneuver_params: Optional[List[float]]) ‑> messages_pb2.Maneuver-
Add maneuver to propagation force models.
Parameters
cfg : Settings object. time : TT offset from J2000 epoch [s]. trigger_event : Constant from ManeuverTrigger. trigger_params : Additional data for trigger event. maneuver_type : Constant from ManeuverType. maneuver_params : Additional maneuver specific data.
Returns
Added Maneuver object.
def add_station(cfg: messages_pb2.Settings, name: str, latitude: float, longitude: float, altitude: float, fov_azimuth: float = None, fov_elevation: float = None, fov_aperture: float = None, bias: Optional[List[float]] = None, bias_estimation: int = None) ‑> messages_pb2.Station-
Add a ground station.
Parameters
cfg : Settings object. name : Station name. latitude : Station WGS-84 latitude [rad]. longitude : Station WGS-84 longitude [rad]. altitude : Station height above WGS-84 reference geoid [m]. fov_azimuth : FOV center azimuth [rad]. fov_elevation : FOV center elevation [rad]. fov_aperture : FOV aperture angle [rad]. bias : Measurement biases. bias_estimation : Constant from EstimationType.
Returns
Added Station object.
def build_measurement(time: float, station_name: str, values: List[float], angle_rates: Optional[List[float]] = None) ‑> messages_pb2.Measurement-
Build Measurement object from observed or simulated data.
Parameters
time : Measurement time; TT offset from J2000 epoch [s]. station_name : Station name. values : Measurement data corresponding to types configured in Settings object. angle_rates : Optional time rates of angle measurements [rad/s].
Returns
Measurement object.
def configure(**kwargs) ‑> messages_pb2.Settings-
Create Settings object with default values.
Parameters
**kwargs : Keyword arguments for non-default parameters.
Returns
Settings object initialized with defaults and given values.
Classes
class AttitudeType-
Orekit attitude providers.
Class variables
var BODY_CENTER_POINTINGvar FIXED_RATEvar NADIR_POINTINGvar UNDEFINED
class Constant-
Miscellaneous constants.
Class variables
var ARC_SECOND_TO_RADvar DEGREE_TO_RADvar MINUS_Ivar MINUS_Jvar MINUS_Kvar PLUS_Ivar PLUS_Jvar PLUS_Kvar ZERO_VECTOR
class DragModel-
Atmospheric drag density models.
Class variables
var EXPONENTIALvar MSISE2000var UNDEFINEDvar WAM
class Epoch-
Orekit AbsoluteDate epochs.
Class variables
var BEIDOU_EPOCHvar CCSDS_EPOCHvar FIFTIES_EPOCHvar GALILEO_EPOCHvar GLONASS_EPOCHvar GPS_EPOCHvar IRNSS_EPOCHvar J2000_EPOCHvar JULIAN_EPOCHvar MODIFIED_JULIAN_EPOCHvar QZSS_EPOCHvar UNIX_EPOCH
class EstimationType-
Parameter estimation types.
Class variables
var CONSIDERvar ESTIMATEvar UNDEFINED
class Facet (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTOR
Instance variables
var area-
Field Facet.area
var normal-
Field Facet.normal
class Filter-
Estimation filters.
Class variables
var BATCH_LEAST_SQUARESvar EXTENDED_KALMANvar UNSCENTED_KALMAN
class Frame-
Orekit reference frames.
Class variables
var CIRF_CONVENTIONS_1996_ACCURATE_EOPvar CIRF_CONVENTIONS_1996_SIMPLE_EOPvar CIRF_CONVENTIONS_2003_ACCURATE_EOPvar CIRF_CONVENTIONS_2003_SIMPLE_EOPvar CIRF_CONVENTIONS_2010_ACCURATE_EOPvar CIRF_CONVENTIONS_2010_SIMPLE_EOPvar ECLIPTIC_CONVENTIONS_1996var ECLIPTIC_CONVENTIONS_2003var ECLIPTIC_CONVENTIONS_2010var EME2000var GCRFvar GTOD_CONVENTIONS_1996_ACCURATE_EOPvar GTOD_CONVENTIONS_1996_SIMPLE_EOPvar GTOD_CONVENTIONS_2003_ACCURATE_EOPvar GTOD_CONVENTIONS_2003_SIMPLE_EOPvar GTOD_CONVENTIONS_2010_ACCURATE_EOPvar GTOD_CONVENTIONS_2010_SIMPLE_EOPvar GTOD_WITHOUT_EOP_CORRECTIONSvar ICRFvar ITRF_CIO_CONV_1996_ACCURATE_EOPvar ITRF_CIO_CONV_1996_SIMPLE_EOPvar ITRF_CIO_CONV_2003_ACCURATE_EOPvar ITRF_CIO_CONV_2003_SIMPLE_EOPvar ITRF_CIO_CONV_2010_ACCURATE_EOPvar ITRF_CIO_CONV_2010_SIMPLE_EOPvar ITRF_EQUINOX_CONV_1996_ACCURATE_EOPvar ITRF_EQUINOX_CONV_1996_SIMPLE_EOPvar ITRF_EQUINOX_CONV_2003_ACCURATE_EOPvar ITRF_EQUINOX_CONV_2003_SIMPLE_EOPvar ITRF_EQUINOX_CONV_2010_ACCURATE_EOPvar ITRF_EQUINOX_CONV_2010_SIMPLE_EOPvar MOD_CONVENTIONS_1996var MOD_CONVENTIONS_2003var MOD_CONVENTIONS_2010var MOD_WITHOUT_EOP_CORRECTIONSvar PZ90_11var TEMEvar TIRF_CONVENTIONS_1996_ACCURATE_EOPvar TIRF_CONVENTIONS_1996_SIMPLE_EOPvar TIRF_CONVENTIONS_2003_ACCURATE_EOPvar TIRF_CONVENTIONS_2003_SIMPLE_EOPvar TIRF_CONVENTIONS_2010_ACCURATE_EOPvar TIRF_CONVENTIONS_2010_SIMPLE_EOPvar TOD_CONVENTIONS_1996_ACCURATE_EOPvar TOD_CONVENTIONS_1996_SIMPLE_EOPvar TOD_CONVENTIONS_2003_ACCURATE_EOPvar TOD_CONVENTIONS_2003_SIMPLE_EOPvar TOD_CONVENTIONS_2010_ACCURATE_EOPvar TOD_CONVENTIONS_2010_SIMPLE_EOPvar TOD_WITHOUT_EOP_CORRECTIONSvar VEIS_1950
class Maneuver (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTOR
Instance variables
var maneuver_params-
Field Maneuver.maneuver_params
var maneuver_type-
Field Maneuver.maneuver_type
var time-
Field Maneuver.time
var trigger_event-
Field Maneuver.trigger_event
var trigger_params-
Field Maneuver.trigger_params
class ManeuverTrigger-
Maneuver trigger events.
Class variables
var APSIDE_CROSSINGvar DATE_TIMEvar LATITUDE_CROSSINGvar LATITUDE_EXTREMUMvar LONGITUDE_CROSSINGvar LONGITUDE_EXTREMUMvar NODE_CROSSINGvar UNDEFINED
class ManeuverType-
Maneuver types.
Class variables
var ARG_PERIGEE_CHANGEvar CONSTANT_THRUSTvar EAST_WEST_STATIONINGvar ECCENTRICITY_CHANGEvar INCLINATION_CHANGEvar NORTH_SOUTH_STATIONINGvar PERIGEE_CHANGEvar RAAN_CHANGEvar SEMI_MAJOR_AXIS_CHANGEvar STOP_PROPAGATIONvar UNDEFINED
class Measurement (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTOR
Instance variables
var angle_rates-
Field Measurement.angle_rates
var station-
Field Measurement.station
var time-
Field Measurement.time
var true_state-
Field Measurement.true_state
var values-
Field Measurement.values
class MeasurementType-
Measurement types.
Class variables
var AZIMUTHvar DECLINATIONvar ELEVATIONvar POSITIONvar POSITION_VELOCITYvar RANGEvar RANGE_RATEvar RIGHT_ASCENSION
class OutputFlag-
Bit flags that control propagation and estimation output.
Class variables
var OUTPUT_DENSITYvar OUTPUT_ECLIPSEvar OUTPUT_ESTM_COVvar OUTPUT_INNO_COVvar OUTPUT_PROP_COVvar OUTPUT_RESIDUALS
class Parameter (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTOR
Instance variables
var estimation-
Field Parameter.estimation
var max-
Field Parameter.max
var min-
Field Parameter.min
var value-
Field Parameter.value
class PositionAngle-
Orekit position angles.
Class variables
var ECCENTRICvar MEANvar TRUE
class Settings (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTORvar MeasurementsEntry-
A ProtocolMessage
var StationsEntry-
A ProtocolMessage
Instance variables
var drag_MSISE_flags-
Field Settings.drag_MSISE_flags
var drag_coefficient-
Field Settings.drag_coefficient
var drag_exp_H0-
Field Settings.drag_exp_H0
var drag_exp_Hscale-
Field Settings.drag_exp_Hscale
var drag_exp_rho0-
Field Settings.drag_exp_rho0
var drag_model-
Field Settings.drag_model
var estm_DMC_acceleration-
Field Settings.estm_DMC_acceleration
var estm_DMC_corr_time-
Field Settings.estm_DMC_corr_time
var estm_DMC_sigma_pert-
Field Settings.estm_DMC_sigma_pert
var estm_covariance-
Field Settings.estm_covariance
var estm_detection_probability-
Field Settings.estm_detection_probability
var estm_filter-
Field Settings.estm_filter
var estm_gating_probability-
Field Settings.estm_gating_probability
var estm_gating_threshold-
Field Settings.estm_gating_threshold
var estm_outlier_sigma-
Field Settings.estm_outlier_sigma
var estm_outlier_warmup-
Field Settings.estm_outlier_warmup
var estm_process_noise-
Field Settings.estm_process_noise
var estm_smoother_iterations-
Field Settings.estm_smoother_iterations
var geo_zone_lat_lon-
Field Settings.geo_zone_lat_lon
var gravity_degree-
Field Settings.gravity_degree
var gravity_order-
Field Settings.gravity_order
var integ_abs_tolerance-
Field Settings.integ_abs_tolerance
var integ_max_time_step-
Field Settings.integ_max_time_step
var integ_min_time_step-
Field Settings.integ_min_time_step
var integ_rel_tolerance-
Field Settings.integ_rel_tolerance
var maneuvers-
Field Settings.maneuvers
var measurements-
Field Settings.measurements
var ocean_tides_degree-
Field Settings.ocean_tides_degree
var ocean_tides_order-
Field Settings.ocean_tides_order
var output_flags-
Field Settings.output_flags
var prop_end-
Field Settings.prop_end
var prop_inertial_frame-
Field Settings.prop_inertial_frame
var prop_initial_TLE-
Field Settings.prop_initial_TLE
var prop_initial_state-
Field Settings.prop_initial_state
var prop_start-
Field Settings.prop_start
var prop_step-
Field Settings.prop_step
var rp_coeff_absorption-
Field Settings.rp_coeff_absorption
var rp_coeff_reflection-
Field Settings.rp_coeff_reflection
var rp_sun-
Field Settings.rp_sun
var rso_area-
Field Settings.rso_area
var rso_attitude_provider-
Field Settings.rso_attitude_provider
var rso_facets-
Field Settings.rso_facets
var rso_mass-
Field Settings.rso_mass
var rso_solar_array_area-
Field Settings.rso_solar_array_area
var rso_solar_array_axis-
Field Settings.rso_solar_array_axis
var rso_spin_acceleration-
Field Settings.rso_spin_acceleration
var rso_spin_velocity-
Field Settings.rso_spin_velocity
var sim_measurements-
Field Settings.sim_measurements
var solid_tides_moon-
Field Settings.solid_tides_moon
var solid_tides_sun-
Field Settings.solid_tides_sun
var stations-
Field Settings.stations
var third_body_moon-
Field Settings.third_body_moon
var third_body_sun-
Field Settings.third_body_sun
class Station (*args, **kwargs)-
A ProtocolMessage
Ancestors
- google.protobuf.pyext._message.CMessage
- google.protobuf.message.Message
Class variables
var DESCRIPTOR
Instance variables
var altitude-
Field Station.altitude
var bias-
Field Station.bias
var bias_estimation-
Field Station.bias_estimation
var fov_aperture-
Field Station.fov_aperture
var fov_azimuth-
Field Station.fov_azimuth
var fov_elevation-
Field Station.fov_elevation
var latitude-
Field Station.latitude
var longitude-
Field Station.longitude
class TDMFileFormat-
CCSDS TDM file formats.
Class variables
var KEYVALUEvar UNKNOWNvar XML