太陽同期準回帰軌道をわかりやすく解説

太陽同期準回帰軌道とは、太陽同期軌道と準回帰軌道を組み合わせた軌道で、地球観測衛星(EOS, Earth Observation Satellite)のほぼ全てがこの軌道上に存在しています。

太陽同期準回帰軌道の特徴としては、衛星と太陽の相対的な位置が常に同じであること、また、周回するごとに少し位置がずれた場所に衛星が移動し、数日から数十日後に同じ場所に戻ってくるような軌道となっています。地球のあらゆる場所を、タイミングをずらして何回も撮影することが求められる地球観測衛星にとっては、大変都合の良い軌道です。

本記事の内容

  • 地球周回衛星の基本概念
  • 太陽同期軌道の原理と条件
  • 準回帰軌道の仕組み
  • 太陽同期準回帰軌道の設計とPython実装

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

地球周回衛星の概要

まず、太陽同期準回帰軌道を理解するために、地球を周回する衛星の基本的な概念を押さえましょう。

地球を周回する衛星の軌道は、赤道面と軌道面のなす角度である軌道傾斜角 $i$ によって特徴づけられます。軌道傾斜角が90度の場合、衛星は北極と南極を通る極軌道となり、地球の自転により地球上のあらゆる地点の上空を通過できます。

ケプラーの第三法則

円軌道の場合、軌道周期 $T$ は軌道半径 $a$ から求まります。

$$ T = 2\pi \sqrt{\frac{a^3}{\mu}} $$

ここで $\mu = GM_E = 3.986 \times 10^{14} \, \text{m}^3/\text{s}^2$ は地球の重力定数です。

太陽同期軌道とは

太陽同期軌道(SSO, Sun-Synchronous Orbit)は、衛星の軌道面と太陽の位置関係が常に一定に保たれる軌道です。

J2摂動による昇交点赤経の変化

地球は完全な球体ではなく、赤道方向に膨らんだ扁平楕円体です。この扁平率(J2項)による摂動で、軌道面の昇交点赤経 $\Omega$ が時間とともに変化します。

$$ \dot{\Omega} = -\frac{3}{2} n J_2 \left(\frac{R_E}{a}\right)^2 \frac{\cos i}{(1-e^2)^2} $$

ここで、 * $n = \sqrt{\mu / a^3}$ は平均運動(角速度) * $J_2 = 1.08263 \times 10^{-3}$ は地球のJ2係数 * $R_E = 6378.137 \, \text{km}$ は地球の赤道半径 * $e$ は離心率 * $i$ は軌道傾斜角

太陽同期条件

地球は太陽の周りを1年(約365.25日)で公転するため、軌道面も同じ角速度で歳差運動すれば太陽との相対位置が保たれます。必要な歳差率は、

$$ \dot{\Omega}_{\text{SSO}} = \frac{2\pi}{365.25 \times 86400} \approx 1.991 \times 10^{-7} \, \text{rad/s} $$

つまり、1日あたり約 $0.9856°$ だけ昇交点赤経が東へ移動すればよいのです。太陽同期条件は次の式で表されます。

$$ -\frac{3}{2} n J_2 \left(\frac{R_E}{a}\right)^2 \frac{\cos i}{(1-e^2)^2} = \dot{\Omega}_{\text{SSO}} $$

この式から、軌道高度 $h$($a = R_E + h$)と軌道傾斜角 $i$ の関係が得られます。例えば高度600kmの円軌道では $i \approx 97.8°$ となります。

準回帰軌道とは

準回帰軌道(Repeat Ground Track Orbit)とは、一定日数後に衛星の地上軌跡が完全に繰り返される軌道です。

準回帰条件

$D$ 日で $N$ 周回した後、同じ地上軌跡に戻るためには、次の条件を満たす必要があります。

$$ N \cdot T = D \cdot T_E $$

ここで $T_E$ は地球の自転周期(恒星日 $\approx 86164.1$ 秒)です。整理すると、

$$ \frac{N}{D} = \frac{T_E}{T} $$

$N$ と $D$ は互いに素な正整数です。例えば、Landsat衛星は $D = 16$ 日で $N = 233$ 周回の準回帰軌道を採用しています。

地上軌跡の間隔

1日の周回数を $k = N/D$ とすると、赤道上での隣接する地上軌跡の間隔 $\Delta \lambda$ は、

$$ \Delta \lambda = \frac{2\pi}{N} \approx \frac{360°}{N} $$

で与えられます。Landsatの場合、$\Delta \lambda = 360°/233 \approx 1.545°$ となり、赤道上で約172kmの間隔になります。

Pythonで太陽同期準回帰軌道を計算する

import numpy as np
import matplotlib.pyplot as plt

# 定数
mu = 3.986004418e14    # 地球の重力定数 [m^3/s^2]
Re = 6378137.0         # 地球の赤道半径 [m]
J2 = 1.08263e-3        # J2係数
Te = 86164.1           # 恒星日 [s]
omega_sun = 2 * np.pi / (365.25 * 86400)  # 地球の公転角速度 [rad/s]

def sso_inclination(h, e=0.0):
    """太陽同期軌道に必要な軌道傾斜角を計算"""
    a = Re + h
    n = np.sqrt(mu / a**3)
    cos_i = -omega_sun * 2 * (1 - e**2)**2 * a**2 / (3 * n * J2 * Re**2)
    return np.degrees(np.arccos(cos_i))

def repeat_orbit_period(N, D):
    """準回帰軌道の軌道周期を計算"""
    T = D * Te / N
    return T

def period_to_altitude(T):
    """軌道周期から軌道高度を計算"""
    a = (mu * (T / (2 * np.pi))**2)**(1/3)
    return a - Re

# 太陽同期軌道: 高度 vs 軌道傾斜角
altitudes = np.linspace(200e3, 1500e3, 500)
inclinations = []
for h in altitudes:
    inc = sso_inclination(h)
    inclinations.append(inc)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 高度 vs 軌道傾斜角
axes[0].plot(altitudes / 1e3, inclinations, 'b-', linewidth=2)
axes[0].set_xlabel('Altitude [km]')
axes[0].set_ylabel('Inclination [deg]')
axes[0].set_title('Sun-Synchronous Orbit: Altitude vs Inclination')
axes[0].grid(True)
axes[0].axhline(y=98, color='r', linestyle='--', alpha=0.5, label='98 deg')
axes[0].legend()

# 代表的な準回帰軌道の計算
examples = [
    ("Landsat", 233, 16),
    ("ALOS", 671, 46),
    ("Sentinel-2", 143, 10),
]

print("=== 太陽同期準回帰軌道の設計例 ===")
for name, N, D in examples:
    T = repeat_orbit_period(N, D)
    h = period_to_altitude(T)
    inc = sso_inclination(h)
    print(f"{name}: N={N}, D={D}日, 高度={h/1e3:.1f}km, "
          f"傾斜角={inc:.2f}deg, 周期={T/60:.2f}min")

# 地上軌跡の可視化(簡易版)
N, D = 233, 16
T = repeat_orbit_period(N, D)
h = period_to_altitude(T)
inc_rad = np.radians(sso_inclination(h))

t = np.linspace(0, D * Te, 10000)
omega_orb = 2 * np.pi / T
omega_earth = 2 * np.pi / Te

lat = np.degrees(np.arcsin(np.sin(inc_rad) * np.sin(omega_orb * t)))
lon = np.degrees(np.mod(np.arctan2(
    np.sin(omega_orb * t) * np.cos(inc_rad),
    np.cos(omega_orb * t)
) - omega_earth * t + np.pi, 2 * np.pi) - np.pi)

axes[1].scatter(lon, lat, s=0.1, c='blue', alpha=0.3)
axes[1].set_xlabel('Longitude [deg]')
axes[1].set_ylabel('Latitude [deg]')
axes[1].set_title(f'Ground Track (N={N}, D={D} days)')
axes[1].set_xlim(-180, 180)
axes[1].set_ylim(-90, 90)
axes[1].grid(True)

plt.tight_layout()
plt.show()

このコードでは、太陽同期軌道の高度と軌道傾斜角の関係、および代表的な準回帰軌道の設計パラメータを計算しています。Landsatの場合、高度約705km、軌道傾斜角約98.2度という結果が得られます。

まとめ

本記事では、太陽同期準回帰軌道について解説しました。

  • 太陽同期軌道は、J2摂動を利用して軌道面の歳差運動を地球の公転角速度に一致させる軌道である
  • 準回帰軌道は、$D$ 日で $N$ 周回して地上軌跡が繰り返される軌道である
  • 太陽同期準回帰軌道はこの2つの条件を同時に満たし、地球観測衛星に最適な軌道となる
  • 軌道高度が決まれば、太陽同期条件から軌道傾斜角が一意に決まる

次のステップとして、以下の記事も参考にしてください。