低軌道(LEO)の特性と応用 — 高度200〜2000kmの軌道環境を理解する

国際宇宙ステーション(ISS)、Starlinkの通信衛星群、だいち2号のような地球観測衛星 — これらの人工衛星に共通するのは、いずれも低軌道(Low Earth Orbit, LEO)を周回しているということです。高度200〜2000 kmのこの軌道帯は、人類の宇宙利用において最もアクセスしやすく、最も多くの衛星が集中する領域です。

では、なぜこの高度帯がこれほど重要なのでしょうか? 高度が低いほど打ち上げに必要なエネルギーが少なく、地表との通信遅延が短く、観測分解能が高いからです。一方で、大気の残存成分による抵抗で軌道が徐々に低下する、バンアレン帯の内帯に近い、といった課題もあります。

LEOを理解すると、以下のような応用が見えてきます。

  • コンステレーション設計: Starlinkのような大規模衛星群の軌道配置を決定する
  • ミッション寿命の予測: 大気抵抗による軌道減衰率からミッション寿命を見積もる
  • 地球観測: 衛星の地上軌跡(グラウンドトラック)から観測可能領域を計算する

本記事の内容

  • LEOの定義と軌道パラメータの計算
  • 軌道周期、周回速度、地上軌跡の計算
  • 大気抵抗による軌道減衰のメカニズム
  • バンアレン帯と放射線環境
  • 太陽同期軌道との関係
  • Pythonによるシミュレーション

前提知識

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

LEOの定義と基本パラメータ

高度範囲

LEO(Low Earth Orbit)は一般的に、地表からの高度200 km〜2000 km の範囲と定義されます。下限の200 kmは、これより低いと大気抵抗が大きすぎて実用的な軌道寿命が得られないためです。上限の2000 kmは、これより高いとバンアレン帯の内帯に本格的に入り、放射線環境が厳しくなるためです。

ただし、正確な定義は機関によって若干異なります。NASA や ESA では慣例的に2000 km を上限としていますが、ITU(国際電気通信連合)は一部の定義で異なる値を使うこともあります。本記事では高度200〜2000 kmをLEOとします。

軌道半径

地球の赤道半径を $R_{\oplus} = 6{,}378 \, \text{km}$ とすると、LEOの軌道半径は

$$ r = R_{\oplus} + h $$

で計算できます。ここで $h$ は高度です。

LEOの軌道半径の範囲は

$$ 6{,}578 \, \text{km} \leq r \leq 8{,}378 \, \text{km} $$

地球半径の約1.03倍〜1.31倍という比較的狭い範囲です。

代表的なLEO衛星

衛星/システム 高度 [km] 傾斜角 [°] 用途
ISS 408 51.6 有人宇宙ステーション
Starlink 550 53.0 通信コンステレーション
Hubble宇宙望遠鏡 540 28.5 天文観測
だいち2号(ALOS-2) 628 97.9 地球観測(太陽同期)
Iridium NEXT 780 86.4 通信

これらの衛星がどのような速度で地球を周回し、何分で1周するのかを計算してみましょう。

軌道周期と速度の計算

円軌道の周期

LEOの衛星の多くは、離心率がほぼゼロの円軌道(近円軌道)にあります。ケプラーの第3法則から、円軌道の周期は

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

で計算できます。ここで $\mu = GM_{\oplus} = 3.986 \times 10^{14} \, \text{m}^3/\text{s}^2$ は地球の重力パラメータです。

高度200 kmの場合

$$ r = 6{,}578 \, \text{km} = 6.578 \times 10^6 \, \text{m} $$

$$ T = 2\pi\sqrt{\frac{(6.578 \times 10^6)^3}{3.986 \times 10^{14}}} \approx 5{,}309 \, \text{s} \approx 88.5 \, \text{分} $$

高度2000 kmの場合

$$ r = 8{,}378 \, \text{km} $$

$$ T \approx 7{,}627 \, \text{s} \approx 127.1 \, \text{分} $$

LEOの軌道周期は約88分〜127分、つまり地球を1日に約11〜16周します。ISSは約90分で地球を1周し、1日に約16回の日の出と日の入りを経験します。

円軌道速度

円軌道速度は万有引力と遠心力の釣り合いから導かれます。

$$ v_c = \sqrt{\frac{\mu}{r}} $$

高度200 kmでは $v_c \approx 7.78 \, \text{km/s}$、高度2000 kmでは $v_c \approx 6.90 \, \text{km/s}$ です。LEOの衛星は秒速約7〜8 kmという驚異的な速度で飛行しています。東京から大阪まで約1分で到達する計算です。

脱出速度

各高度での脱出速度も確認しておきましょう。

$$ v_{\text{esc}} = \sqrt{\frac{2\mu}{r}} = \sqrt{2} \, v_c \approx 1.414 \, v_c $$

高度200 kmでは $v_{\text{esc}} \approx 11.0 \, \text{km/s}$ です。LEOにいる衛星が地球重力圏を脱出するには、現在の速度に加えて約3.2 km/sのデルタVが必要ということになります。

軌道周期と速度がわかったところで、次に衛星が地上のどの領域の上空を通過するか、つまり地上軌跡を計算してみましょう。

地上軌跡(グラウンドトラック)

地上軌跡とは

地上軌跡(Ground Track)とは、衛星の直下点が地球表面上に描く軌跡です。地球が自転しているため、衛星が1周回するたびに地上軌跡は西にずれていきます。このずれ量は地球の自転角速度 $\omega_{\oplus}$ と軌道周期 $T$ から計算できます。

1周回あたりの経度ずれは

$$ \Delta\lambda = \omega_{\oplus} \cdot T = \frac{2\pi}{T_{\text{sid}}} \cdot T $$

ここで $T_{\text{sid}} = 86{,}164.1 \, \text{s}$ は地球の恒星日です。

高度400 km(ISS)の場合、$T \approx 92.4 \, \text{min}}$(5,544 s)なので

$$ \Delta\lambda = \frac{2\pi}{86{,}164} \times 5{,}544 \approx 0.404 \, \text{rad} \approx 23.2° $$

ISSの地上軌跡は1周回ごとに西に約23°ずれます。

回帰軌道

特別な場合として、軌道周期が恒星日の整数分の1であるとき、衛星は毎日同じ地上軌跡を描きます。これを回帰軌道(Repeat Ground Track Orbit)と呼びます。

$N$ 日で $M$ 周する回帰軌道の条件は

$$ M \cdot T = N \cdot T_{\text{sid}} $$

$$ T = \frac{N}{M}T_{\text{sid}} $$

たとえば、1日15周する衛星の周期は $T = 86{,}164/15 \approx 5{,}744 \, \text{s} \approx 95.7 \, \text{min}$ で、対応する高度は約567 kmです。

地上軌跡の計算は衛星の観測計画に不可欠ですが、実際には軌道は理想的な二体問題の予測からずれていきます。その最も大きな原因が大気抵抗です。

大気抵抗による軌道減衰

希薄大気の効果

高度200 km以上になると大気は極めて希薄ですが、秒速7〜8 kmで飛行する衛星にとっては無視できない抵抗力となります。大気抵抗の加速度は次の式で近似されます。

$$ a_{\text{drag}} = -\frac{1}{2}\rho v^2 \frac{C_D A}{m} $$

ここで

  • $\rho$: 大気密度 [kg/m$^3$]
  • $v$: 衛星の速度 [m/s]
  • $C_D$: 抗力係数(通常 $\approx 2.2$)
  • $A$: 衛星の断面積 [m$^2$]
  • $m$: 衛星の質量 [kg]

$C_D A/m$ を弾道係数の逆数($B = m/(C_D A)$)と呼びます。弾道係数が大きい(重くてコンパクトな)衛星ほど大気抵抗の影響を受けにくくなります。

大気密度の高度依存性

超高層大気の密度は高度とともに指数関数的に減少します。

$$ \rho(h) \approx \rho_0 \exp\left(-\frac{h – h_0}{H}\right) $$

ここで $H$ はスケールハイト(密度が $1/e$ に減少する高度差)です。LEOの範囲では

高度 [km] 密度 [kg/m$^3$] スケールハイト $H$ [km]
200 $\sim 3 \times 10^{-10}$ $\sim 30$
400 $\sim 5 \times 10^{-12}$ $\sim 55$
600 $\sim 2 \times 10^{-13}$ $\sim 65$
800 $\sim 1 \times 10^{-14}$ $\sim 80$

大気密度は太陽活動に強く依存します。太陽活動が極大のとき(太陽フレアやCMEが頻発)、上層大気は膨張して密度が増加し、衛星への抵抗が増大します。2022年2月には、太陽活動の影響でStarlink衛星40基のうち38基が投入直後に再突入するという事故が発生しました。

軌道減衰率

大気抵抗により、円軌道の半長軸(≈高度)は次のように減少します。

$$ \frac{da}{dt} = -\rho \frac{C_D A}{m} a v $$

近似的に、円軌道では $v = \sqrt{\mu/a}$ なので

$$ \frac{da}{dt} \approx -\rho \frac{C_D A}{m} \sqrt{\mu a} $$

この式から、大気密度が高い低高度ほど減衰が速いことがわかります。高度400 km付近では1日あたり数十m〜数百mの高度低下が一般的ですが、高度800 km以上では大気抵抗はほぼ無視できるレベルになります。

大気抵抗はLEO衛星にとって最大の摂動要因ですが、もう一つ考慮すべき環境要因があります。それがバンアレン帯による放射線環境です。

バンアレン帯と放射線環境

バンアレン帯の構造

地球の磁場は、太陽風から飛来する荷電粒子(プロトン、電子)を捕獲し、特定の領域に閉じ込めています。この領域がバンアレン帯(Van Allen Radiation Belt)です。バンアレン帯は主に2つの帯から構成されます。

  • 内帯: 高度600〜6,000 km。高エネルギープロトンが支配的。地球磁場に強く束縛された安定した帯。
  • 外帯: 高度15,000〜25,000 km。高エネルギー電子が支配的。太陽活動により変動が大きい。

LEOの上限(2000 km)は内帯の下端にかかります。高度が上がるほど放射線環境が厳しくなるため、LEO衛星の高度設計では放射線防護も考慮する必要があります。

南大西洋異常(SAA)

バンアレン帯の内帯が地表に最も近づく領域が南大西洋異常(South Atlantic Anomaly, SAA)です。地球の磁気双極子軸が地理的な軸から約11°傾いていることに加え、磁場の中心が地球の中心からずれているため、南大西洋上空で磁場が局所的に弱くなり、放射線帯が低高度まで降りてきます。

ISSはSAA上空を通過する際に通常より高い放射線量を受けます。宇宙飛行士はSAA通過中に閃光(宇宙線が網膜に当たって発生)を報告しています。電子機器にとってもSAAは問題であり、半導体のシングルイベントアップセット(SEU)の発生率が高くなります。

放射線環境の議論を踏まえると、地球観測衛星によく使われる特殊なLEOである太陽同期軌道の重要性が見えてきます。次に、太陽同期軌道の原理と特徴を解説します。

太陽同期軌道

太陽同期軌道の概念

太陽同期軌道(Sun-Synchronous Orbit, SSO)は、軌道面が太陽に対して常に同じ角度を保つ特殊な軌道です。具体的には、軌道面の昇交点赤経 $\Omega$ が地球の公転に合わせて1年で360°(1日あたり約0.9856°)歳差運動する軌道です。

太陽同期軌道の最大の利点は、衛星が地上の同じ地点を毎回同じ太陽照射条件(同じ時刻の太陽高度角)で観測できることです。これにより、異なる時期の画像を比較する際に太陽光の角度差による影響を排除でき、長期的な地表変化(森林伐採、氷河後退、都市化など)のモニタリングに適しています。

太陽同期条件の導出

軌道面の歳差運動は、地球の扁平性($J_2$ 項)によって引き起こされます。地球は完全な球ではなく、赤道方向にわずかに膨らんでいます(赤道半径が極半径より約21 km大きい)。この扁平性により、衛星の軌道面が歳差運動を起こします。

昇交点赤経の変化率は次の式で近似されます。

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

ここで

  • $n = \sqrt{\mu/a^3}$: 平均運動(角速度)
  • $J_2 = 1.0826 \times 10^{-3}$: 地球の第2帯状調和項
  • $a$: 軌道半長軸
  • $e$: 離心率
  • $i$: 軌道傾斜角

太陽同期条件は $\dot{\Omega} = 2\pi / T_{\text{year}}$(1年で1回転)なので

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

この値は正(東向き歳差)なので、$\cos i < 0$ すなわち $i > 90°$ でなければなりません。つまり太陽同期軌道は必ず逆行軌道(傾斜角が90°超)になります。

円軌道($e = 0$)の場合の太陽同期条件は

$$ \cos i = -\frac{2\dot{\Omega}_{\text{SS}}}{3J_2}\frac{a^{7/2}}{R_{\oplus}^2 \sqrt{\mu}} $$

高度600 kmの場合、この式から $i \approx 97.8°$ が得られます。

太陽同期軌道の条件を理解したところで、次にPythonを使ってLEOの基本パラメータと地上軌跡のシミュレーションを行いましょう。

Pythonによるシミュレーション

高度と軌道パラメータの関係

まず、高度200〜2000 kmの範囲で軌道速度、周期、地上軌跡のずれを計算して可視化します。

import numpy as np
import matplotlib.pyplot as plt

# 地球の物理パラメータ
mu = 3.986e14      # 重力パラメータ [m^3/s^2]
R_earth = 6378e3   # 赤道半径 [m]
T_sid = 86164.1    # 恒星日 [s]

# 高度範囲
h = np.linspace(200, 2000, 500) * 1e3  # [m]
r = R_earth + h  # 軌道半径 [m]

# 軌道速度
v_circ = np.sqrt(mu / r) / 1000  # [km/s]
v_esc = np.sqrt(2 * mu / r) / 1000  # [km/s]

# 軌道周期
T = 2 * np.pi * np.sqrt(r**3 / mu) / 60  # [min]

# 1日の周回数
orbits_per_day = T_sid / (T * 60)

# 1周回あたりの経度ずれ
delta_lon = 360 * T * 60 / T_sid  # [deg]

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# 軌道速度
axes[0, 0].plot(h / 1e3, v_circ, linewidth=2, color='#2196F3',
                label='円軌道速度 $v_c$')
axes[0, 0].plot(h / 1e3, v_esc, linewidth=2, color='#F44336',
                label='脱出速度 $v_{esc}$')
axes[0, 0].set_xlabel('高度 [km]', fontsize=11)
axes[0, 0].set_ylabel('速度 [km/s]', fontsize=11)
axes[0, 0].set_title('高度 vs 軌道速度', fontsize=13)
axes[0, 0].legend(fontsize=10)
axes[0, 0].grid(True, alpha=0.3)

# 軌道周期
axes[0, 1].plot(h / 1e3, T, linewidth=2, color='#4CAF50')
axes[0, 1].set_xlabel('高度 [km]', fontsize=11)
axes[0, 1].set_ylabel('軌道周期 [分]', fontsize=11)
axes[0, 1].set_title('高度 vs 軌道周期', fontsize=13)
axes[0, 1].grid(True, alpha=0.3)
# ISSの高度をマーク
axes[0, 1].axvline(x=408, color='gray', linestyle='--', alpha=0.5)
axes[0, 1].annotate('ISS (408 km)', xy=(408, 93), fontsize=9,
                    textcoords="offset points", xytext=(10, 5))

# 1日の周回数
axes[1, 0].plot(h / 1e3, orbits_per_day, linewidth=2, color='#9C27B0')
axes[1, 0].set_xlabel('高度 [km]', fontsize=11)
axes[1, 0].set_ylabel('1日あたり周回数', fontsize=11)
axes[1, 0].set_title('高度 vs 1日の周回数', fontsize=13)
axes[1, 0].grid(True, alpha=0.3)

# 経度ずれ
axes[1, 1].plot(h / 1e3, delta_lon, linewidth=2, color='#FF9800')
axes[1, 1].set_xlabel('高度 [km]', fontsize=11)
axes[1, 1].set_ylabel('経度ずれ [deg/周]', fontsize=11)
axes[1, 1].set_title('高度 vs 地上軌跡の経度ずれ', fontsize=13)
axes[1, 1].grid(True, alpha=0.3)

plt.suptitle('LEOの基本軌道パラメータ(高度200〜2000 km)',
             fontsize=15, y=1.02)
plt.tight_layout()
plt.show()

これらのグラフから、LEOの軌道環境について以下の特徴が読み取れます。

  1. 軌道速度は高度200 kmで約7.8 km/s、2000 kmで約6.9 km/sと、LEOの範囲内では約12%の変化にとどまります。脱出速度は常に円軌道速度の $\sqrt{2}$ 倍であることも確認できます。
  2. 軌道周期は約88分〜127分で、1日の周回数は約11〜16回です。ISS(高度408 km)は約93分で1周し、1日に約15.5周します。
  3. 地上軌跡の経度ずれは1周あたり約22〜30°であり、数日の間に地球全体をほぼカバーできます。これが地球観測衛星にとってLEOが有利な理由の一つです。

地上軌跡のシミュレーション

ISS相当の軌道(高度408 km、傾斜角51.6°)の地上軌跡をシミュレーションします。

import numpy as np
import matplotlib.pyplot as plt

mu = 3.986e14      # m^3/s^2
R_earth = 6378e3   # m
T_sid = 86164.1    # s
omega_earth = 2 * np.pi / T_sid  # 地球自転角速度 [rad/s]

# ISS軌道パラメータ
h_iss = 408e3  # 高度 [m]
r_iss = R_earth + h_iss
i_iss = np.radians(51.6)  # 傾斜角 [rad]
T_iss = 2 * np.pi * np.sqrt(r_iss**3 / mu)  # 周期 [s]
n_iss = 2 * np.pi / T_iss  # 平均運動 [rad/s]

# 3周回分のシミュレーション
t_total = 3 * T_iss
t = np.linspace(0, t_total, 5000)

# 軌道面内での角度(平均近点角 ≈ 真近点角、円軌道なので)
theta = n_iss * t

# 慣性系での位置(軌道面が赤道面と傾斜角iで交差)
# 簡略化: 昇交点赤経 = 0(初期値)、J2歳差は無視
x_inertial = r_iss * (np.cos(theta))
y_inertial = r_iss * (np.cos(i_iss) * np.sin(theta))
z_inertial = r_iss * (np.sin(i_iss) * np.sin(theta))

# 地理緯度
lat = np.degrees(np.arcsin(z_inertial / r_iss))

# 地理経度(地球自転を考慮)
lon_inertial = np.degrees(np.arctan2(y_inertial, x_inertial))
lon = lon_inertial - np.degrees(omega_earth * t)
# 経度を-180〜180に正規化
lon = ((lon + 180) % 360) - 180

fig, ax = plt.subplots(figsize=(14, 7))

# 簡易的な海岸線(矩形近似、可視化のため)
ax.set_facecolor('#E3F2FD')

# 地上軌跡をプロット(不連続点を分割)
# 経度のジャンプを検出
dlon = np.diff(lon)
breaks = np.where(np.abs(dlon) > 100)[0]

segments = np.split(np.arange(len(t)), breaks + 1)

colors = ['#F44336', '#4CAF50', '#2196F3']
for idx, seg in enumerate(segments):
    orbit_num = min(idx // 2, 2)  # おおよその周回番号
    ax.plot(lon[seg], lat[seg], '.', markersize=1,
            color=colors[orbit_num % 3])

# 開始点
ax.plot(lon[0], lat[0], '*', markersize=15, color='gold',
        markeredgecolor='black', markeredgewidth=1, label='開始点')

ax.set_xlim(-180, 180)
ax.set_ylim(-90, 90)
ax.set_xlabel('経度 [deg]', fontsize=12)
ax.set_ylabel('緯度 [deg]', fontsize=12)
ax.set_title(f'ISS軌道の地上軌跡(3周回分, h={h_iss/1000:.0f} km, i={np.degrees(i_iss):.1f}°)',
             fontsize=14)

# 緯度範囲の表示
ax.axhline(y=np.degrees(i_iss), color='gray', linestyle='--',
           alpha=0.5, label=f'最大緯度 ±{np.degrees(i_iss):.1f}°')
ax.axhline(y=-np.degrees(i_iss), color='gray', linestyle='--',
           alpha=0.5)

ax.set_xticks(np.arange(-180, 181, 30))
ax.set_yticks(np.arange(-90, 91, 15))
ax.legend(fontsize=10, loc='lower left')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

この地上軌跡図から、以下のことが読み取れます。

  1. 衛星の地上軌跡は正弦波状の曲線を描きます。緯度の振幅は軌道傾斜角 $i = 51.6°$ に等しく、ISSは南緯51.6°から北緯51.6°の範囲を通過します。日本(北緯約35°)はこの範囲内にあるため、ISSの観測が可能です。
  2. 各周回ごとに地上軌跡が西にずれていることがはっきり見えます。これは地球が自転しているためで、約23°の西方向ずれが確認できます。
  3. 3周回で地球の経度の約70°をカバーしており、16周回(約1日)でほぼ全経度をカバーできることがわかります。ただし、高緯度地域ほど軌跡が密に分布し、赤道付近は疎になります。

太陽同期軌道の傾斜角計算

高度に対して太陽同期条件を満たす傾斜角を計算し、プロットします。

import numpy as np
import matplotlib.pyplot as plt

mu = 3.986e14
R_earth = 6378e3
J2 = 1.0826e-3
T_year = 365.25 * 86400  # 1年 [s]
Omega_dot_ss = 2 * np.pi / T_year  # 太陽同期歳差率 [rad/s]

h = np.linspace(200, 1500, 500) * 1e3  # 高度 [m]
a = R_earth + h

# n = sqrt(mu/a^3)
n = np.sqrt(mu / a**3)

# cos(i) = -2 * Omega_dot_ss / (3 * n * J2 * (R_earth/a)^2)
cos_i = -2 * Omega_dot_ss * a**2 / (3 * n * J2 * R_earth**2)

# cos(i) が [-1, 1] の範囲内のもののみ有効
valid = (cos_i >= -1) & (cos_i <= 1)
i_ss = np.degrees(np.arccos(cos_i[valid]))
h_valid = h[valid] / 1e3

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(h_valid, i_ss, linewidth=2.5, color='#FF5722')

# 代表的な衛星をプロット
satellites = {
    'ALOS-2 (628 km)': (628, 97.9),
    'Landsat 8 (705 km)': (705, 98.2),
    'Sentinel-2 (786 km)': (786, 98.6),
}
for name, (alt, inc) in satellites.items():
    ax.plot(alt, inc, 'o', markersize=10, markeredgecolor='black',
            markeredgewidth=1)
    ax.annotate(name, xy=(alt, inc), fontsize=9,
                textcoords="offset points", xytext=(10, 5))

ax.set_xlabel('高度 [km]', fontsize=12)
ax.set_ylabel('傾斜角 [deg]', fontsize=12)
ax.set_title('太陽同期軌道の傾斜角 vs 高度', fontsize=14)
ax.grid(True, alpha=0.3)
ax.set_xlim(200, 1500)
ax.set_ylim(96, 105)
plt.tight_layout()
plt.show()

このグラフから、太陽同期軌道の特性が明確に読み取れます。

  1. 太陽同期軌道の傾斜角は高度とともに増加し、高度200 kmでは約96.4°、高度1500 kmでは約101.8°となります。いずれも90°を超えているため、太陽同期軌道は必ず逆行軌道です。
  2. 実際の地球観測衛星(ALOS-2, Landsat 8, Sentinel-2)が理論曲線上にプロットされており、太陽同期条件を精密に満たしていることが確認できます。
  3. 高度が高くなると傾斜角の変化率が大きくなるため、高すぎる太陽同期軌道は傾斜角の制約(打ち上げ能力との兼ね合い)で実現が難しくなります。多くの太陽同期軌道衛星が600〜800 km付近に集中しているのはこのためです。

大気抵抗による軌道減衰シミュレーション

異なる高度からの軌道減衰を簡易モデルでシミュレーションします。

import numpy as np
import matplotlib.pyplot as plt

mu = 3.986e14
R_earth = 6378e3

def atmosphere_density(h):
    """簡易指数大気モデル(高度hはメートル単位)"""
    # 区間ごとのスケールハイトと基準密度
    if h < 150e3:
        return 2e-9  # ダミー(実際はもっと高密度)
    elif h < 300e3:
        rho0, h0, H = 3.725e-10, 200e3, 29.74e3
    elif h < 500e3:
        rho0, h0, H = 6.967e-12, 400e3, 53.63e3
    elif h < 700e3:
        rho0, h0, H = 1.454e-13, 600e3, 71.84e3
    elif h < 1000e3:
        rho0, h0, H = 3.614e-15, 800e3, 88.67e3
    else:
        rho0, h0, H = 5.245e-17, 1000e3, 120.0e3
    return rho0 * np.exp(-(h - h0) / H)

# シミュレーションパラメータ
CdA_over_m = 0.01  # C_D * A / m [m^2/kg](典型的なLEO衛星)
dt = 86400  # 時間ステップ = 1日

# 異なる初期高度での軌道減衰
initial_altitudes = [300, 400, 500, 600, 800]  # km
colors = ['#F44336', '#FF9800', '#4CAF50', '#2196F3', '#9C27B0']

fig, ax = plt.subplots(figsize=(10, 6))

for h0_km, color in zip(initial_altitudes, colors):
    a = R_earth + h0_km * 1e3
    h_history = [h0_km]
    t_history = [0]

    t = 0
    max_years = 30
    max_steps = int(max_years * 365.25)

    for step in range(max_steps):
        h = a - R_earth
        if h < 120e3:  # 120 km以下で再突入とみなす
            break

        rho = atmosphere_density(h)
        v = np.sqrt(mu / a)

        # 1軌道あたりの半長軸減少量を1日分に換算
        T_orb = 2 * np.pi * np.sqrt(a**3 / mu)
        orbits_per_day = dt / T_orb

        # Δa per orbit ≈ -2π * ρ * (CdA/m) * a^2
        da_per_orbit = -2 * np.pi * rho * CdA_over_m * a**2
        da = da_per_orbit * orbits_per_day

        a += da
        t += dt

        h_history.append((a - R_earth) / 1e3)
        t_history.append(t / (365.25 * 86400))

    ax.plot(t_history, h_history, linewidth=2, color=color,
            label=f'初期高度 {h0_km} km')

ax.set_xlabel('経過時間 [年]', fontsize=12)
ax.set_ylabel('高度 [km]', fontsize=12)
ax.set_title('大気抵抗による軌道減衰($C_D A/m = 0.01$ m²/kg)',
             fontsize=14)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim(0, 30)
ax.set_ylim(100, 850)
plt.tight_layout()
plt.show()

この軌道減衰シミュレーションから、LEOの軌道寿命について重要な知見が得られます。

  1. 高度300 kmの軌道は数年以内に再突入します。推進系を持たない衛星の場合、この高度での軌道寿命は非常に短いです。ISSは定期的にリブースト(軌道上昇)を行うことで高度400 km付近を維持しています。
  2. 高度500〜600 kmの軌道は10年以上の寿命があり、多くのLEOミッションに適した高度帯です。Starlinkが高度550 kmを選んだのは、通信性能と軌道寿命のバランスを取った結果です。
  3. 高度800 km以上では減衰が極めて遅いため、数十年以上の軌道寿命があります。これはミッション終了後のデブリ問題と直結しており、25年以内の再突入を義務付けるガイドラインとの整合性が課題です。
  4. 減衰の終盤は加速度的に進行します。高度が下がると大気密度が急増するため、最後の数ヶ月〜数日で急速に高度が低下する特徴があります。

まとめ

本記事では、低軌道(LEO)の特性と応用について包括的に解説しました。

  • LEOは高度200〜2000 kmの軌道帯であり、軌道速度約7〜8 km/s、周期約88〜127分で地球を周回する
  • 地上軌跡は正弦波状で、1日に約11〜16周して地球全体をほぼカバーする
  • 大気抵抗はLEOの主要な摂動要因であり、特に低高度では軌道寿命を大きく制限する
  • バンアレン帯の内帯がLEOの上端付近にあり、高度設計に影響する
  • 太陽同期軌道は $J_2$ 摂動を利用した特殊軌道で、傾斜角96°〜102°の逆行軌道

LEOは宇宙利用の最前線であり、近年はメガコンステレーション(数千機規模の衛星群)の計画が相次いでいます。LEOの物理的特性を理解することは、これらの新しい宇宙システムを設計・運用するための基盤となります。

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