Open Source Solutions to the Multi-Satellite Orbit Propagation Challenge
The OpenSatCom initiative, implemented by Libre Space Foundation and Inno3 for the European Space Agency recently released the results of the work they performed to evaluate available Python libraries for multi-satellite propagation.
Two-line Element Sets (TLEs), the most popular exchange format for orbital information are typically propagated with SGP4, one of the Simplified General Perturbations models published by the United States Department of Defense. SGP4 is the most widely used analytical propagation algorithm; its source code has been publicly available for a very long time, and it offers a good trade-off between running time and accuracy.
As simulating and operating large satellite fleets have become more common, the need to make satellite propagation as fast as possible while retaining the accuracy of SGP4 has become more important, but also challenging, because orbit propagation comprises sequential tasks and constellations require the propagation of multiple satellites in parallel. Simpler models which, for example, consider the oblateness of the Earth spheroid, but not atmospheric drag are enough to retain some perturbation effects.
Speed test results for the "Multiple Satellites, Multiple Dates" case
Benchmarking Open Source SGP4 implementations
The OpenSatCom team selected several free/open source implementations of SGP4, mostly focused on the Python programming language, and benchmarked them in terms of running time, on a personal laptop and on a dedicated cloud server, evaluating three typical use cases:
- One satellite, one date
- One satellite, many dates
- Many satellites, many dates
Four SGP4 implementations were evaluated:
- python-sgp4 (pure Python & C++ wrapper of Vallado’s code)
- python-sgp4 (NumPy vectorization)
- python-sgp4 (Numba JIT)
- cysgp4 (Cython wrapper of sgp4lib)
Performance linked to problem size and processing capabilities
The results differed depending on the architecture and the nature of the problem.
For the simplest case of single satellite and single date, there was a very clear advantage of cysgp4 (Cython) and the Vallado C++ wrapper, with numba offering a speedup over the pure Python version at the cost of very large compilation times.
At the other extreme, for the multiple satellite multiple dates case, numba was the fastest option, and more so in machines with a large number of CPUs.
For the intermediate case of single satellite, many dates, the results were more heterogeneous, and in particular was observed that the NumPy vectorized version performs much better the larger the problem is.
The full report can be downloaded here.
Have you used open source propagators? Which do you prefer to use, and why? Let us know in the comments below.
www.opensourcesatellite.org exists to create an environment that supports and enables entrepreneurial and innovative thinking, with the aim of taking the next step in small satellite capabilities.
Join our Community, Register to collaborate and Follow us to be part of the journey!