Frozen Orbits

Due to the Earth's gravitational perturbation, the orbit of a satellite will experience secular changes in the argument of perigee. Hence, the satellite mean altitude per latitude will differ during the mission. This effect can be problematic, especially if we must compare images by a camera onboard the satellite in different periods. The altitude variation will change the resolution, leading to some problems when comparing the data.

We can avoid this problem if we compute an eccentricity $e$ and the argument of perigee $\omega$ that yields theoretically:

\[\begin{equation*} \frac{de}{dt} = 0,\ \frac{d\omega}{dt} = 0\ . \end{equation*}\]

This orbit is called frozen. Refer to [1] for more information.

We can compute the eccentricity and the argument of perigee of a frozen orbit using the function frozen_orbit:

SatelliteAnalysis.frozen_orbitFunction
frozen_orbit(a::Number, i::Number; kwargs...) -> Float64, Float64

Compute the eccentricity [ ] and argument of perigee [rad] to obtain a frozen orbit when the orbit has semi-major axis a [m] and inclination i [rad]. This function uses the theory in [1].

Note

This function uses BigFloat internally to perform all computations, allowing very high degrees. However, the user must ensure that the default precision is enough for the required degree. Refer to the function setprecision for more information.

Keywords

  • gravity_model::Union{Nothing, AbstractGravityModel}: Gravity model used to compute the frozen eccentricity. Refer to the object AbstractGravityModel of the package SatelliteToolboxGravityModels.jl for more information. If it is nothing, the system will automatically fetch and load the EGM96 gravity model at the first call, keeping it in memory for the next ones. (Default: nothing)
  • max_degree::Int: Maximum gravity model degree used to compute the frozen eccentricity. If it is equal to or lower than 0, the maximum degree in gravity_model will be used. Otherwise, if it is lower than 3 or higher than the gravity_model maximum degree, it will be clamped accordingly. (Default: 53)

References

  • [1] Rosborough, G. W.; Ocampo, C. A (1991). Influence of higher degree zonals on the frozen orbit geometry. Proceedings of the AAS/AIAA Astrodynamics Conference, Durango, CO.

Extended Help

Due to the Earth's gravitational perturbation, the orbit of a satellite will experience secular changes in the argument of perigee. Hence, the satellite mean altitude per latitude will differ during the mission. This effect can be problematic, especially if we must compare images by a camera onboard the satellite in different periods. The altitude variation will change the resolution, leading to some problems when comparing the data.

We can avoid this problem if we compute an eccentricity and the argument of perigee that yields theoretically:

de      dω
── = 0, ── = 0
dt      dt

This orbit is called frozen. Refer to [1] for more information.

Throws

  • ArgumentError: If the inclination i is not within the interval (0, π) [rad] because the frozen orbit is not defined for equatorial orbits.

Examples

julia> using SatelliteAnalysis

julia> frozen_orbit(7130.982e3, 98.410 |> deg2rad)
(0.0011641853028456078, 1.5707963267948966)

julia> jgm3 = GravityModels.load(IcgemFile, fetch_icgem_file(:JGM3))
[ Info: Downloading the ICGEM file 'JGM3.gfc' from 'http://icgem.gfz-potsdam.de/getmodel/gfc/a3375e01a717ac162962138a5e94f10
466b71aa4a130d7f7d5b18ab3d5f90c3d/JGM3.gfc'...
IcgemFile{Float64}:
      Product type : gravity_field
       Model name  : JGM3
  Gravity constant : 3.986004415e14
            Radius : 6.3781363e6
    Maximum degree : 70
            Errors : formal
       Tide system : unknown
              Norm : fully_normalized
         Data type : Float64

julia> frozen_orbit(7130.982e3, 98.410 |> deg2rad; gravity_model = jgm3)
(0.001163484769069545, 1.5707963267948966)
source

Examples

We will compute the eccentricity and argument of perigee that yields a frozen orbit using the data from Amazonia-1 mission. First, we will use only up to degree 5, and the default gravity model (EGM96):

julia> frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 5)(0.0011108978494835141, 1.5707963267948966)
julia> e, ω = frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 5)(0.0011108978494835141, 1.5707963267948966)
julia> e0.0011108978494835141
julia> ω |> rad2deg90.0

If we want to use all the 360 degrees in EGM96, which is selected by max_degree = 0, we need to increase the precision of BigFloat to keep the accuracy:

julia> setprecision(1024)1024
julia> e, ω = frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 0)(0.0011642017617998492, 1.5707963267948966)
julia> e0.0011642017617998492
julia> ω |> rad2deg90.0

We can use a different gravity model as follows:

julia> jgm3 = GravityModels.load(IcgemFile, fetch_icgem_file(:JGM3))IcgemFile{Float64, Val{:full}}:
  Product Type               : gravity_field
  Model Name                 : JGM3
  Gravity Constant           : 3.986004415e14 m³/s²
  Radius                     : 6.3781363e6 m
  Angular Speed              : 7.292115147e-5 rad/s
  Maximum Degree             : 70
  Errors                     : formal
  Tide System                : unknown
  Normalization              : full
  Time-Variable Coefficients : none
julia> e, ω = frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 70, gravity_model = jgm3)(0.001163504566870769, 1.5707963267948966)
julia> e0.001163504566870769
julia> ω |> rad2deg90.0

References

  • [1] Rosborough, G. W.; Ocampo, C. A (1991). Influence of higher degree zonals on the frozen orbit geometry. Proceedings of the AAS/AIAA Astrodynamics Conference, Durango, CO.