- We dropped support for Julia 1.6. This version only supports the current Julia version and v1.10 (LTS).
- This version does not have breaking changes. We bump the version to 1.0.0 because we now consider the API stable.
- We updated the dependency compatibility bounds.
- We now reexport SatelliteToolboxLegendre.jl.
- We exported the function
equation_of_time
.
- We can now modify the constants in the functions related to the orbits.
- We improved the algorithm to compute the orbital angular velocity and period.
- We improved the algorithm to convert the angular velocity to semi-major axis.
- We improved the algorithm to compute the RAAN time-derivative.
- We update the functions to comply with the new API of the packages.
- This version split the SatelliteToolbox.jl ecosystem into smaller packages. All previous functionalities are available, but we perform drastically modifications in the API, leading to breaking changes. Those modifications were necessary to stabilize the API into a more consistent state.
- The support for Julia 1.0 was dropped.
- The function
satellite_position_i
was removed. - All the functions with analysis were removed because they will be implemented in SatelliteAnalysis.jl.
- The keyword argument
vJD
was renamed tovjd
inrv_to_mean_elements_sgp4
. - The keyword argument
max_it
was renamed tomax_iterations
inrv_to_mean_elements_sgp4
. - The function
compute_RAAN_lt
was renamed toltan_to_raan
. - The epoch was not being correctly obtained by
get_epoch
in the J2 osculating propagator. - The maximum degree used when computing the
IGRF can now be selected using the keyword argument
max_degree
. - Many functions now supports other type of floats, including the orbit propagators.
- The keyword argument
print_debug
was added torv_to_mean_elements_sgp4
to print debugging information. - The function
data_to_jd
now supports milliseconds. (PR #71) - The EOP remote files are now updated every week.
- Many performance improvements in the functions.
- The conversion from RV to Keplerian elements had a bug for Equatorial and elliptical orbits. (Issue #72)
- The conversion between ECEF or geocentric variables to geodetic variables can now support different ellipsoids. (PR #61)
- The computation of Legendre associated functions were having accuracy problems for angles very close to 0. This problem caused incorrect geomagnetic field calculations at regions close the geographic poles.
- The TLE file is now closed after parsing in
read_tle
function, avoiding possible errors when opening many files. (PR #60)
- The interpolation type returned by Interpolations.jl 0.13.3 changed. The code inside SatelliteToolbox.jl was updated to be compatible with the new API. (Issue #58)
- The compat bounds were updated.
- Update the files from which the IERS data is parsed. We now use the CSV. Old code that relies on local copies of IERS data needs to be updated.
- A type instability in IERS parsing has been removed. However, this modification required a new function API. The old API is now deprecated.
- Avoid error when receiving duplicated information in
fluxtable
file. (Issue #53) - The compat bounds of PrettyTables.jl were updated.
- This version contains improvements to the algorithm that converts position and velocity to mean elements using SGP4 algorithm. However, those modifications changed the returned vectors.
- The definition of
_space_indices_itp_constants
changed due to an update in Interpolation.jl - The compat bounds were updated.
- The source code was updated to be compatible with PrettyTables.jl v0.10.
- A type-instability related to EOP data was removed, leading to a performance gain.
- The function
DatetoJD
was failing in 32-bit platforms when calling with aDateTime
object. (PR #43) - Remove a deprecated function in
eclipse_time
. - It is now possible to call the IGRF
functions
igrf
andigrfd
passing a pre-allocated matrix for the computation of the Legendre associated functions. Hence, in this case, no allocation will be performed, leading to a huge performance gain. - This version support Julia 1.0 and 1.5. The support for Julia 1.3 has been dropped.
- Some functions related to space indices were deprecated. They were replaced by the correct versions.
- All the deprecated functions in v0.4 and v0.5 were removed.
- The IGRF can be computed passing the latitude and
longitude in degrees by using the function
igrfd
. - IGRF v13 is now available using the functions
igrf13syn
origrf
. The old v12 is still available for compatibility reasons in the functionigrf12syn
. - Following the Julia documentation, all
functions that uses
Val
for multiple-dispatch now needs a valueVal(:symbol)
instead of a typeVal{:symbol}
. All the old signatures still work but have been marked as deprecated. - All functions that uses
Val{:symbol}
for multiple-dispatch are now marked as deprecated in favor ofVal(:symbol)
.
- The FTP address of WDC files was changed. (Issue #38)
- A test related to an error thrown by the TLE submodule was fixed. (Issue #35)
- It is now possible to compute the gaps between accesses to the ground stations.
- Initial version of the algorithm to convert a osculating state vectors (position and velocity) to TLE. This is still in alpha stage and should be used with caution.
- The function
tle_to_str
can be used to convert an object of typeTLE
to a string. - Improvements in the documentation of functions and macros.
- The minimum required version of OptionalData was updated. (PR #36)
- The download path of the file
fluxtable.txt
was changed. (Issue #34) - The submodule SatelliteToolboxSGP4 was created, which contains all the low-level functions related to the SGP4 orbit propagator. (PR #33)
- The submodule SatelliteToolboxTLE was created, which contains all functions related to TLE handling.
- The TLE parsing algorithm was improved. If the epoch year in TLE is higher than 75, then it will be considered in the past.
- This version support Julia 1.0 and 1.3. The support for Julia 1.2 has been dropped.
- A bug in eclipse time computation was fixed.
- The function
ground_station_visible
now acceptsSVector
. (Issue #28) - The eccentricity was not being printed in TLEs.
- The function that checks if a satellite is
inside the visibility circle of a ground station has been renamed to
ground_station_visible
. The old one is now marked as deprecated. - The function that computes the beta angle
has been renamed to
beta_angle
. The old one is now marked as deprecated. - The function that computes the eclipse times
has been renamed to
eclipse_time_summary
. The old one is now marked as deprecated. - The orbit propagator API now has the function
epoch
that returns the current epoch of a propagator. - The accesses to ground stations can now be computed
using the function
ground_station_accesses
. - It is now possible to select what kind of
perturbations are desired when computing the beta angle in function
beta_angle
. - Add the simplified dipole model to compute the geomagnetic field.
- The function
propagate_to_epoch!
can now be used withOrbitPropagatorJ4
. (PR #31) - The function
JDtoDate
now uses the native functionjulian2datetime
to convert between Date to Julian date represented inDateTime
format. - The eclipse time computation algorithm was drastically improved by adding an edge find mechanism, leading to an algorithm 3x faster.
- This version support Julia 1.0 and 1.2. The support for Julia 1.1 has been dropped.
- Colors in printing functions were not working.
- A bug in the conversion
JDtoDate
when seconds are 0 was fixed. (Issue #30)
- The EGM-08 coefficients in J2 and J4 orbit propagator algorithm were slightly wrong.
- It was added an algorithm to compute the Moon
position:
moon_position_i
. - The performance of Sun position algorithm was increased by 15%.
- The J2 and J4 orbit propagator algorithms now have more built-in coefficients: EGM96, JGM02, and JGM03.
- The
Project.toml
file was added, theREQUIRE
file was removed, and the registration process is now handled by Registrator.jl.
- The API initialization functions of all orbit propagators have changed! Please, see the documentation for more details. The analytical propagators Two Body, J2, and J4 are now initialized using the mean orbit elements or TLEs, whereas the analytical orbit propagator SGP4 can now only be initialized with TLEs.
- Some API
functions of
[d]legendre
were removed to simplify the code. - All the orbital elements in the
Orbit
structure must be of the same type now. This does not affect the initialization functionOrbit
, which automatically handles the conversion. - The user can now select the maximum order that will be used in gravitational models. However, this is a breaking change because selecting the maximum degree as 0 will make the methods use only the first term, leading to the same result as selecting it as 1. To use all the terms, the maximum degree must be set to -1. Notice that this is still the default behavior if the maximum degree is omitted.
- All deprecations related to the reference frame transformations were removed.
- The
Orbit
structure created when SPG4 were being initialized was not converting the semi-major axis from km to m. Notice that this was not affecting the propagation. - When using the API to initialize the J2 orbit
propagator, the parameter
n_0
is the mean motion, i.e. the mean angular velocity between two consecutive passages to the perigee. The algorithm obtained from Vallado's book, on the other hand, seems to consider thatn_0
is the rate of change of the mean anomaly. Hence, we must subtract the time-derivative of the perigee in order to make the algorithms compatible. - Treat special cases when converting orbital elements to state vector (position and velocity). (Issue #25)
- The package now supports the entire IAU-2006/2010 theory (CIO approach).
- It is now possible to compute the satellite ground
trace using the function
ground_trace
. - J4 orbit propagator. This new propagator considers the perturbation terms J2, J2², and J4.
- Many general orbit analysis functions now support perturbation terms up to J4.
- The function
angvel_to_a
can be used to convert the orbit mean motion into the semi-major axis. - The satellite state vector can now be represented by
the structure
SatelliteStateVector
, which can be initialized by the functionsatsv
. - The satellite state vector can be convert between
all the supported reference frames using
svECItoECI
,svECItoECEF
,svECEFtoECI
, andsvECEFtoECEF
. Notice that this conversion take into account the Earth rotation rate when applicable. - The user can now select the maximum order that will be used when computing the Legendre associated functions or they derivatives.
- The function
kepler_to_rv
can now receive an instance ofOrbit
as input. - All colors are now handled by Crayons.jl.
- Many conversion of reference frames using the API can now be called without the EOP data, leading to the default IAU-76/FK5 theory. (Issue #12)
- Improve printing functions of
Orbit
andTLE
. (Issue #21)
- The gravity model computations were neglecting the
input variable
n_max
and were using always the maximum available degree. (Issue #22) -
dlegendre
function was accessing unallocated data if the maximum degree is 1. - New function in the orbit propagators API:
propagate_to_epoch!
. (Issue #20)
- The NRLMSISE-00
configuration is not handle by a
Dict
anymore. The configuration is now based on a new structure calledNRLMSISE00_Flags
. This reduced the execution time of the algorithm by 50%. - The macro
@check_orbit
that verifies whether an orbit is valid now returns a boolean instead of throwing an exception. This provided a huge performance gain in the functions that use it. - The function
GeodetictoECEF
now returns anSVector
. This yielded a performance gain of 27%. - The
igrf12
function now always returns anSVector
. - All the functions related to the Sun
(
sun_position_i
andsun_velocity_i
) now returns anSVector
. - All deprecated functions that were defined prior to this version were removed.
- The frame transformations API were simplified by removing the variable that specified the model. The IAU2000A theory will be initially implemented using the CIO approach. Hence, the model that must be used can be inferred only by looking the selected frames and the EOP data. The old style functions are now deprecated. (Issue #18)
- The function
satellite_orbit_compute_f
is now deprecated in favor ofM_to_f
. (Issue #16) - The
Orbit
structure returned bypropagate!
function was not being copied before the assignment. Hence, if an array of instants was passed, then all the returned values would have the sameOrbit
structure. - The low level functions related to the J2 orbit propagator were not being exported.
- The conversion from ECEF to Geodetic had an bug due to the singularity in the poles.
- The conversion from Julian Day to
DateTime
by the functionJDtoDate
was fixed. - The function
JDtoDate
was not allowing the month to be 12. Hence, when the month was December, then it was returning 0. (Issue #19). - The IAU2000A EOP data was not being parsed correctly.
- The Sun position algorithm was computing a slightly wrong value.
- The initial version of the package documentation is now available.
- The EOP data is now downloaded by the package RemoteFiles.jl. This modification was required because the HTTP.jl package was failing to download EOP data for some reason, since the request was returning the 403 error code. This is a temporary workaround until the issue #2 is fixed.
- A new generic parser to ICGEM files was added. Hence, the user can now load any ICGEM file to compute the gravitational force. (Issue #17)
- It was added an algorithm to compute the Sun velocity vector.
- The exponential atmospheric model was added.
- The Jacchia-Roberts 1971 atmospheric model was added.
- The Jacchia-Bowman 2008 atmospheric model was added.
- It was added the support to automatically fetch the necessary files to compute many space indices, like F10.7, Kp, Ap, etc.
- The macro
@evalpoly
is now used every time a polynomial must be evaluated, which provides a small performance gain and also uses a more stable algorithm. - Huge performance increase. In the following,
it is presented the reduction of the computational time in some functions:
legendre (conv)
: 40.6% faster.dlegendre (conv)
: 42.6% faster.rECEFtoECI (ITRF -> GCRF)
: 99.5% faster.rECItoECEF (GCRF -> ITRF)
: 99.5% faster.rECEFtoECEF (ITRF -> PEF)
: 99.8% faster.rECItoECI (MOD -> GCRF)
: 99.8% faster.GeodetictoECEF
: 71.6% faster.Two body orbit propagator
: 99.8% faster.J2 orbit propagator
: 99.8% faster.SGP4 orbit propagator
: 8.2% faster.compute_g (full EGM96)
: 18.3% faster.nrlmsise00
: 76.3% faster.igrf12 (geocentric)
: 11.2% faster.igrf12 (geodetic)
: 98.6% faster.sun_position_i
: 20.2% faster.angvel
: 59.3% faster.compute_ss_orbit_by_ang_vel
: 90.8% faster.list_ss_orbits_by_rep_period
: 79.4% faster.
- The space indices required by the atmospheric models can now be automatically fetched.
- Improvements in the function documentation.
- Fix warnings due to new syntax of the package Interpolations.jl.
- Fix remaining compatibilities issues with Julia v1.0.
- Changes in orbit propagators:
propagate!
can now receive one single epoch.- All functions related to the orbit propagators uses
SVector
. This led to a huge performance gain in API functionpropagate!
. However, this can break existing code, because the array returned bypropagate!
is now an array ofSVector{3,T}
instead of an array ofVector{T}
.
- Fix compatibility issues with Parameters.jl v0.10.
- Improve performance of
propagate!
functions by fixing type-stability issues. ECEFtoGeodetic
now acceptsAbstractVector
as input.
- Fix bug when using the function
igrf12
for dates after 2020. - Add option
shown_warns
to suppress warning in IGRF.
- Full support for
Julia 0.7
andJulia 1.0
.- The support for
Julia <= 0.6
is dropped in this version. Hence, SatelliteToolbox.jl will not work with those versions anymore. If it is necessary to useJulia <= 0.6
, then you must stick withSatelliteToolbox.jl <= 0.2.0
.
- The support for
-
New model:
- NRLMSISE-00 Atmosphere Model.
-
Earth gravity model:
- New algorithm to compute the gravity model.
- Add EGM96, JGM2, and JGM3 to the package.
- Remove the partial EGM2008 from the package.
- Increase the performance of the function
compute_U
. - Increase the performance of the function
compute_g
. - Add tests.
-
Reference frame transformations:
- Improvements in IAU76/FK5 conversion.
- Add support for TEME reference frame.
- Add more tests to increase the code coverage.
- Add the function
rECItoECI
. - Add the function
rECEFtoECEF
.
-
Orbit functions:
- Add more tests to increase the code coverage.
- Add function
change_oe_frame
. - Add function to read TLE from strings.
- Add macros
@tle_str
and@tlenc_str
to parse a TLE from a string.
-
Orbit propagators:
- General performance improvements in SGP4.
- The epoch of all propagators are now assumed to be the Julian Day.
- Add Deep Space computations to the SGP4.
- Add the tests available in the literature that cover all SGP4/SDP4.
-
Fix some deprecations warnings in julia v0.7.
-
Bug fixes:
- Fix IGRF function
igrf12
when date is between 1995 and 2000.
- Fix IGRF function
-
Tests:
- Add tests related to IGRF functions.
- Fix minor problem in IAU-76/FK5 tests.
- Fix tests in julia v0.7.
- Initial version.
- This version was based on the old package SatToolbox.jl v0.3.7 that was renamed to SatelliteToolbox to be submitted to julia METADATA repo.