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_orbit — Function
frozen_orbit(a::Number, i::Number; kwargs...) -> Float64, Float64Compute 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].
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 objectAbstractGravityModelof the packageSatelliteToolboxGravityModels.jlfor more information. If it isnothing, 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 ingravity_modelwill be used. Otherwise, if it is lower than 3 or higher than thegravity_modelmaximum 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 dtThis orbit is called frozen. Refer to [1] for more information.
Throws
ArgumentError: If the inclinationiis 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)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.0011108978494835141julia> ω |> 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)1024julia> e, ω = frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 0)(0.0011642017617998492, 1.5707963267948966)julia> e0.0011642017617998492julia> ω |> 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 : nonejulia> e, ω = frozen_orbit(7130.982e3, 98.410 |> deg2rad; max_degree = 70, gravity_model = jgm3)(0.001163504566870769, 1.5707963267948966)julia> e0.001163504566870769julia> ω |> 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.