Repeating Ground Track (space-systems/orbit-mechanics/ground-track-repeat)
Use when the task is repeat ground track orbit design: compute the
nodal period from the mean motion and the J2 nodal regression rate,
count the integer revolutions per sidereal day, and find the repeat
cycle in whole days after which the ground track retraces itself.
Domain quick reference
- Units: altitude in km in, meters internally, mean motion in rad/s,
angles in RADIANS out, days as plain integers.
- Constants: Re = 6371000 m, mu = 3.986004418e14 m^3/s^2, J2 =
1.08262668e-3, sidereal day = 86164.0905 s.
- Semimajor axis: a = Re + altitude_km * 1000 m.
- Mean motion: n = sqrt(mu / a^3) rad/s.
- Nodal regression rate (J2): om_dot = -1.5 * n * J2 * (Re / a)^2 *
cos(i) rad/s, negative for prograde orbits, positive for
retrograde inclinations above 90 degrees.
- Nodal period: T_n = 2 pi / (n + om_dot) s, the time between
successive ascending-node crossings once J2 regression is
included.
- Revolutions per sidereal day: N = 86164.0905 / T_n. The ground
track repeats after m whole days when m * N is within tolerance of
an integer k, giving k revolutions per m days.
- A sun-synchronous orbit at 888.4676 km altitude (i = 97.39 deg)
has N = 14.000000 revolutions per day: a 1-day repeat track with
k = 14.
- A sun-synchronous orbit at 562.2007 km has N = 15.000000
revolutions per day: another 1-day repeat track with k = 15.
- An ISS-like orbit at 400 km, i = 51.6 deg has N = 15.525589: no
whole-day repeat cycle exists within 60 days.
Workflow
- Take the circular orbit altitude in km and the inclination in
radians.
- Compute the semimajor axis and mean motion with semimajor_axis
and mean_motion.
- Evaluate the nodal regression rate with nodal_regression_rate.
- Compute the nodal period with nodal_period.
- Count the revolutions per day with revolutions_per_day.
- Find the repeat cycle with repeat_cycle_days (m days, k
revolutions) and pack the full solution with
ground_track_properties.
- Gate the orbit selection on the repeat cycle for the remote
sensing or constellation mission.
Pitfalls
- Feeding degrees into radian-based functions.
- Using the Keplerian period instead of the nodal period: the J2
regression shifts the ascending node, so the ground track repeat
must be counted against the nodal period, not 2 pi / n.
- Declaring a repeat where none exists: the integer-revolution check
needs a tolerance, and orbits with no integer m * N within the
search range return no cycle.
- Forgetting the sidereal day (86164.0905 s), not the solar day
(86400 s), defines the repeat cadence.
- Misreading the regression sign: prograde orbits regress westward
(negative om_dot), retrograde orbits precess eastward (positive).
Behavior contract (gate 3)
The semimajor axis, mean motion, nodal regression, nodal period,
revolutions per day, and repeat cycle logic is exercised by the gate
3 contract test: scripts/test_ground_track_repeat.py against
scripts/ground_track_repeat_logic.py (stdlib unittest, offline).
Run:
python3 scripts/test_ground_track_repeat.py
Compliance
- Standards referenced, not reproduced: ECSS series text is
copyright ESA; the J2 nodal regression and repeat ground track
condition are common astrodynamics, summary-only per
standards-map.yaml (ecss is a free ESA download).
- compliance: STANDARDS-REF, gated: false.
1---2name: ground-track-repeat3description: Use when you must compute a repeating ground track for a circular Earth orbit: determine the semimajor axis and mean motion from the altitude, evaluate the J2 nodal regression rate, derive the nodal period, count the integer revolutions per sidereal day, and find the repeat cycle in whole days after which the ground track retraces itself. Produces the semimajor axis, mean motion, nodal regression rate, nodal period, revolutions per day, and repeat cycle that gate repeat-ground-track orbit selection for remote sensing and constellation design. Trigger: repeat ground track, ground track repeat, nodal period, revolutions per day, sidereal day, integer revolutions, nodal regression, j2.4license: Apache-2.05---67# Repeating Ground Track (space-systems/orbit-mechanics/ground-track-repeat)89Use when the task is repeat ground track orbit design: compute the10nodal period from the mean motion and the J2 nodal regression rate,11count the integer revolutions per sidereal day, and find the repeat12cycle in whole days after which the ground track retraces itself.1314## Domain quick reference1516- Units: altitude in km in, meters internally, mean motion in rad/s,17 angles in RADIANS out, days as plain integers.18- Constants: Re = 6371000 m, mu = 3.986004418e14 m^3/s^2, J2 =19 1.08262668e-3, sidereal day = 86164.0905 s.20- Semimajor axis: a = Re + altitude_km * 1000 m.21- Mean motion: n = sqrt(mu / a^3) rad/s.22- Nodal regression rate (J2): om_dot = -1.5 * n * J2 * (Re / a)^2 *23 cos(i) rad/s, negative for prograde orbits, positive for24 retrograde inclinations above 90 degrees.25- Nodal period: T_n = 2 pi / (n + om_dot) s, the time between26 successive ascending-node crossings once J2 regression is27 included.28- Revolutions per sidereal day: N = 86164.0905 / T_n. The ground29 track repeats after m whole days when m * N is within tolerance of30 an integer k, giving k revolutions per m days.31- A sun-synchronous orbit at 888.4676 km altitude (i = 97.39 deg)32 has N = 14.000000 revolutions per day: a 1-day repeat track with33 k = 14.34- A sun-synchronous orbit at 562.2007 km has N = 15.00000035 revolutions per day: another 1-day repeat track with k = 15.36- An ISS-like orbit at 400 km, i = 51.6 deg has N = 15.525589: no37 whole-day repeat cycle exists within 60 days.3839## Workflow40411. Take the circular orbit altitude in km and the inclination in42 radians.432. Compute the semimajor axis and mean motion with semimajor_axis44 and mean_motion.453. Evaluate the nodal regression rate with nodal_regression_rate.464. Compute the nodal period with nodal_period.475. Count the revolutions per day with revolutions_per_day.486. Find the repeat cycle with repeat_cycle_days (m days, k49 revolutions) and pack the full solution with50 ground_track_properties.517. Gate the orbit selection on the repeat cycle for the remote52 sensing or constellation mission.5354## Pitfalls5556- Feeding degrees into radian-based functions.57- Using the Keplerian period instead of the nodal period: the J258 regression shifts the ascending node, so the ground track repeat59 must be counted against the nodal period, not 2 pi / n.60- Declaring a repeat where none exists: the integer-revolution check61 needs a tolerance, and orbits with no integer m * N within the62 search range return no cycle.63- Forgetting the sidereal day (86164.0905 s), not the solar day64 (86400 s), defines the repeat cadence.65- Misreading the regression sign: prograde orbits regress westward66 (negative om_dot), retrograde orbits precess eastward (positive).6768## Behavior contract (gate 3)6970The semimajor axis, mean motion, nodal regression, nodal period,71revolutions per day, and repeat cycle logic is exercised by the gate723 contract test: scripts/test_ground_track_repeat.py against73scripts/ground_track_repeat_logic.py (stdlib unittest, offline).74Run:75python3 scripts/test_ground_track_repeat.py7677## Compliance7879- Standards referenced, not reproduced: ECSS series text is80 copyright ESA; the J2 nodal regression and repeat ground track81 condition are common astrodynamics, summary-only per82 standards-map.yaml (ecss is a free ESA download).83- compliance: STANDARDS-REF, gated: false.