Orbit determination routines for Python
Project description
Introduction
This is orbdetpy, a library of Python and Java routines for orbit determination. It is a thin Python wrapper for our estimation tools and Orekit, which are both written in Java.
Features
The force model for orbit propagation currently includes:
- 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.
- The NRL MSISE-00 and simple exponential models for atmospheric drag.
- Solar radiation pressure.
- Third body perturbations from the Sun and Moon.
The measurement model supports range, range-rate, angles, and inertial Cartesian coordinates. Filtering is done using Orekit's Extended Kalman Filter or our custom Unscented Kalman Filter. Dynamic Model Compensation (DMC) can be used with either filter to estimate additional perturbing acclerations that result from unmodeled dynamics, maneuvers etc.
Installation
-
Install the Java Development Kit 8 (1.8) from http://openjdk.java.net/install/index.html. Set the JAVA_HOME environment variable to point to your JDK installation. The
java
executable must also be in your system path. -
Install Python 3.6+ and run
pip install orbdetpy
to install orbdetpy and other package dependencies from the Python Package Index (PyPI). If you wish to use thedevelop
or other experimental branches from GitHub,git clone
them and runpip install -e .
from the top levelorbdetpy
folder. -
Update the astrodynamics data in orbdetpy/data periodically by calling the
update_data()
function in theastrodata
module. You may need to run this as the root user on Unix-like systems. -
Source code, example programs and data files can be downloaded from https://github.com/ut-astria/orbdetpy.
-
Apache Maven 3+ is needed if you hack the Java code and need to rebuild the JAR files. Switch to the
orbdetpy/
folder and run the following, whereos_cpu_type
islinux-x86_64
,linux-x86_32
,windows-x86_64
,windows-x86_32
,osx-x86_64
, orosx-x86_32
, depending on your CPU architecture and OS.mvn -e -DskipTests -Dos.detected.classifier=os_cpu_type package
Examples
The following example programs can be found in the examples
folder.
These examples use the Python wrapper interface but calling the
underlying Java implementation directly is straightforward.
run_tests.py
: Run all the use cases underexamples/data
. Simulated measurements, orbit fits, differences between simulated truth versus estimates, and 3-sigma of estimated covariances will be written tooutput/
sub-folders.
orbdetpy uses JSON files to store settings, measurements and estimation
results. The files in examples/data
show how to configure measurement
simulation and orbit determination using radar or telescope data. The
file docs/file_formats.md
documents the structure of the JSON files.
The following are some typical use cases. It is assumed that the current
working directory is examples/data
.
-
Simulate state vectors and radar measurements:
from orbdetpy.simulation import simulate_measurements
simulate_measurements("radar_sim_cfg.json", output_file = "sim_data.json")
This will run the simulation configured in
radar_sim_cfg.json
and write simulated output tosim_data.json
. -
Plot simulation results:
from orbdetpy.plotting.simulation import plot as sim_plot
sim_plot("radar_sim_cfg.json", "sim_data.json", interactive = True)
This will plot the simulated data generated in (1).
-
Run OD on simulated radar data:
from orbdetpy.estimation import determine_orbit
determine_orbit("radar_od_cfg.json", "sim_data.json", output_file = "od_output.json")
This will run OD on the simulated radar data generated in (1) using the OD configuration in
radar_od_cfg.json
and write OD output tood_output.json
. -
Plot OD results:
from orbdetpy.plotting.estimation import plot as od_plot
od_plot("radar_od_cfg.json", "sim_data.json", "od_output.json", interactive = True)
This will plot the OD results from (3).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.