🛰️ Orbital Mechanics Basics

Understanding How Satellites Stay in Space

What You’ll Learn

  1. What is an orbit?
  2. Circular vs elliptical orbits
  3. Calculating orbital velocity
  4. Different types of orbits (LEO, GEO, etc.)

1. What is an Orbit?

An orbit is simply falling around a planet so fast that you keep missing it!

The Cannonball Thought Experiment

Isaac Newton imagined firing a cannon from a very tall mountain: - Fire slowly → the ball falls back to Earth - Fire faster → the ball travels farther before falling - Fire fast enough → the ball falls around the Earth - Fire even faster → escape into space!

This “falling around” is what creates weightlessness - you’re always falling, but always missing!

Code
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('dark_background')

# Physical constants
G = 6.674e-11       # Gravitational constant (m³/kg/s²)
M_EARTH = 5.972e24  # Earth's mass (kg)
R_EARTH = 6.371e6   # Earth's radius (m)
MU_EARTH = G * M_EARTH  # Earth's gravitational parameter

print("✅ Ready to explore orbits!")
✅ Ready to explore orbits!

2. Circular Orbits: The Simplest Case

For a circular orbit, the satellite’s velocity must exactly balance gravity.

Orbital Velocity Formula

\[v = \sqrt{\frac{GM}{r}} = \sqrt{\frac{\mu}{r}}\]

Where: - v = orbital velocity (m/s) - μ = GM = gravitational parameter (3.986 × 10¹⁴ m³/s² for Earth) - r = distance from Earth’s center (not altitude!)

Key Insight 💡

  • Lower orbits → faster velocity
  • Higher orbits → slower velocity

The ISS at 400 km travels at 7.66 km/s (27,600 km/h)!

Code
def orbital_velocity(altitude_km):
    """Calculate circular orbital velocity at a given altitude."""
    r = R_EARTH + (altitude_km * 1000)  # Convert to meters
    v = np.sqrt(MU_EARTH / r)
    return v

def orbital_period(altitude_km):
    """Calculate orbital period at a given altitude."""
    r = R_EARTH + (altitude_km * 1000)
    T = 2 * np.pi * np.sqrt(r**3 / MU_EARTH)
    return T

# Famous orbits
orbits = [
    ("ISS", 400),
    ("Hubble Space Telescope", 547),
    ("Starlink satellites", 550),
    ("GPS satellites", 20200),
    ("Geostationary (GEO)", 35786),
]

print("🛰️ ORBITAL VELOCITIES AND PERIODS")
print("=" * 65)
print(f"{'Satellite/Orbit':<25} {'Altitude':>10} {'Velocity':>12} {'Period':>12}")
print("-" * 65)

for name, alt in orbits:
    v = orbital_velocity(alt)
    T = orbital_period(alt)
    hours = T / 3600
    print(f"{name:<25} {alt:>8} km {v/1000:>8.2f} km/s {hours:>8.1f} hrs")

print("-" * 65)
print("\n💡 Notice: Higher altitude = slower speed, but longer period!")
🛰️ ORBITAL VELOCITIES AND PERIODS
=================================================================
Satellite/Orbit             Altitude     Velocity       Period
-----------------------------------------------------------------
ISS                            400 km     7.67 km/s      1.5 hrs
Hubble Space Telescope         547 km     7.59 km/s      1.6 hrs
Starlink satellites            550 km     7.59 km/s      1.6 hrs
GPS satellites               20200 km     3.87 km/s     12.0 hrs
Geostationary (GEO)          35786 km     3.07 km/s     23.9 hrs
-----------------------------------------------------------------

💡 Notice: Higher altitude = slower speed, but longer period!

3. Types of Orbits

Orbit Type Altitude Use Case
LEO 200-2000 km ISS, Starlink, Earth observation
MEO 2000-35786 km GPS, navigation satellites
GEO 35,786 km TV broadcast, weather satellites
HEO Varies Spy satellites, Molniya orbits

Geostationary Orbit (GEO)

At exactly 35,786 km, a satellite orbits once per day - staying fixed over one spot on Earth!

Code
# Visualize different orbits
fig, ax = plt.subplots(figsize=(10, 10))

# Draw Earth
theta = np.linspace(0, 2*np.pi, 100)
earth_x = R_EARTH * np.cos(theta) / 1e6
earth_y = R_EARTH * np.sin(theta) / 1e6
ax.fill(earth_x, earth_y, color='#4a90e2', alpha=0.8, label='Earth')

# Draw orbits
orbit_data = [
    ("LEO (400 km)", 400, '#00ff00'),
    ("MEO (20,000 km)", 20000, '#ffaa00'),
    ("GEO (35,786 km)", 35786, '#ff4444'),
]

for name, alt, color in orbit_data:
    r = (R_EARTH + alt * 1000) / 1e6  # Convert to thousands of km
    orbit_x = r * np.cos(theta)
    orbit_y = r * np.sin(theta)
    ax.plot(orbit_x, orbit_y, color=color, linewidth=2, label=name)

ax.set_xlim(-50, 50)
ax.set_ylim(-50, 50)
ax.set_aspect('equal')
ax.legend(loc='upper right')
ax.set_xlabel('Distance (thousands of km)')
ax.set_ylabel('Distance (thousands of km)')
ax.set_title('🌍 Earth Orbit Comparison', color='#00d4ff', fontsize=14)
ax.grid(True, alpha=0.2)

plt.tight_layout()
plt.show()

print("Notice how GEO is MUCH farther out than LEO!")

Notice how GEO is MUCH farther out than LEO!

🎓 Key Takeaways

  1. Orbits are controlled falling - Moving sideways fast enough to keep missing Earth

  2. v = √(μ/r) - Orbital velocity depends on altitude

  3. Lower = faster - ISS at 400km: 7.66 km/s, GPS at 20,000km: 3.87 km/s

  4. GEO is special - At 35,786 km, satellites appear stationary in the sky

  5. Period increases with altitude - LEO: ~90 min, GEO: 24 hours


🚀 Try the Projects!

Now that you understand the basics, run the interactive simulators: - Projects/Rocket_Ascent_Simulator/ - Watch a rocket reach orbit - Projects/Conic_Orbit_Visualizer/ - Explore different orbit shapes


“For all its material advantages, the sedentary life has left us edgy, unfulfilled. Even after 400 generations in villages and cities, we haven’t forgotten. The open road still softly calls.” — Carl Sagan