24時間宇宙デブリ衝突予測(MOID)アルゴリズムの実装とSSA(宇宙状況把握)の数学

📅 2026-08-27 ✍️ prosalmontech #SatViewer3D#宇宙デブリ#MOID#衝突予測#宇宙状況把握#SSA

高度数百〜千キロメートルの地球低軌道(LEO)には、過去半世紀におよぶ宇宙探査の残骸である「スペースデブリ(宇宙ゴミ)」が数万個以上も漂流しています。これらは第一宇宙速度(約7.8km/s、マッハ23以上)という猛烈な猛スピードで周回しており、たとえ1cmの小さなボルトや塗料片であっても、人工衛星や国際宇宙ステーション(ISS)の外壁を貫通・粉砕する運動エネルギー($E = \frac{1}{2}mv^2$)を秘めています。

1つの衝突がさらなる破片を生み、連鎖的に軌道環境が壊滅する「ケスラー・シンドローム(Kessler Syndrome)」が現実の危機となる中、SatViewer3Dでは、軌道上の衝突危機を事前に検知する「24時間デブリ衝突予測レーダー(MOID解析エンジン)」をブラウザ完結型で開発しました。本記事では、その数学的アルゴリズムと軌道力学の実装手法を詳解します。

1. 最小軌道交差距離(MOID: Minimum Orbit Intersection Distance)の幾何学的定義

2つの人工天体(例えば活動中の通信衛星と、過去のロケット上段デブリ)が将来衝突しうるかを判定する第一歩は、両者の周回軌道が空間的にどれほど近接しているか、すなわち最小軌道交差距離(MOID)を求めることです。

2つのケプラー楕円軌道 $\vec{r}_1(\nu_1)$ と $\vec{r}_2(\nu_2)$($\nu$ は真近点角: True Anomaly)のユークリッド距離の2乗を目的関数 $D^2(\nu_1, \nu_2)$ と定義します:

$$D^2(\nu_1, \nu_2) = \|\vec{r}_1(\nu_1) - \vec{r}_2(\nu_2)\|^2$$

MOIDを求めることは、この2変数関数 $D^2$ の極小値(Local Minima)を探索する非線形最適化問題に帰着されます。極値の必要条件は、各偏微分がゼロになることです:

$$\frac{\partial D^2}{\partial \nu_1} = 0, \quad \frac{\partial D^2}{\partial \nu_2} = 0$$

幾何学的には、「両軌道の接線ベクトル $\vec{t}_1, \vec{t}_2$ が、交差点を結ぶ相対変位ベクトル $\vec{r}_1 - \vec{r}_2$ と同時に直交する点」を探すことに相当します。

2. ニュートン・ラフソン法による多次元方程式の高速収束

SatViewer3Dでは、この非線形連立方程式を解くために2次元ニュートン・ラフソン法(Newton-Raphson method)を実装しています。ヤコビアン行列(ヘッセ行列 $H$)を構成し、初期推定値から反復計算を行います:

// 2つのケプラー軌道間のMOIDを計算する数値最適化ループ
function calculateMOID(orbitA, orbitB, maxIterations = 20, tolerance = 1e-4) {
    // 粗選定:近地点・遠地点高度による初期フィルタリング
    if (orbitA.perigee > orbitB.apogee + 50 || orbitA.apogee < orbitB.perigee - 50) {
        return Infinity; // 軌道面が交差する余地がないため即座に除外
    }

    let nuA = 0.0; // 軌道Aの真近点角
    let nuB = 0.0; // 軌道Bの真近点角

    for (let iter = 0; iter < maxIterations; iter++) {
        const posA = getKeplerPosition(orbitA, nuA);
        const posB = getKeplerPosition(orbitB, nuB);
        const tanA = getTangentialVelocity(orbitA, nuA).normalize();
        const tanB = getTangentialVelocity(orbitB, nuB).normalize();

        const diff = posA.clone().sub(posB);
        const dist = diff.length();

        // 目的関数の勾配(グラディエント)
        const gA = 2 * diff.dot(tanA);
        const gB = -2 * diff.dot(tanB);

        if (Math.abs(gA) < tolerance && Math.abs(gB) < tolerance) {
            return dist; // 収束成功
        }

        // ニュートンステップ(学習率減衰付き)
        nuA -= 0.1 * (gA / (dist + 1e-5));
        nuB -= 0.1 * (gB / (dist + 1e-5));
    }
    return getKeplerPosition(orbitA, nuA).distanceTo(getKeplerPosition(orbitB, nuB));
}

初期値の選定には、昇交点・降交点の結線(Line of Nodes)を利用し、平均5〜8回の反復ステップ(ミリ秒未満)で高精度なMOID値を算出しています。

3. 時間軸の同期:最接近時刻(TCA: Time of Closest Approach)の算出

MOIDが数キロメートル未満であっても、それだけで衝突するわけではありません。両者が「同時にその近接ポイントに居合わせる(Conjunction)」かどうかが決定的な要因です。

軌道上の幾何学的位置から時刻を逆算するため、ケプラー方程式(Kepler's Equation)を解きます:

$$M = E - e \sin E$$

$E$: 離心近点角, $e$: 軌道離心率, $M$: 平均近点角

算出した真近点角 $\nu$ から離心近点角 $E$ を求め、平均運動 $n = \sqrt{\mu / a^3}$($\mu$ は地球重力定数、$a$ は軌道長半径)を用いて、各物体が交差点に到達するエポック時刻 $t_A$ および $t_B$ を導出します。今後24時間以内において $|t_A - t_B| < 10\text{秒}$ となる事象を「潜在的衝突リスク(Potential Conjunction)」としてフラグ立てします。

4. ブラウザで数千機を解析する2段階スクリーニング(Two-Tier Filtering)

宇宙空間には数千個の物体が存在するため、素朴な総当たり総当たり比較($O(N^2)$)を行うと、数百万通りのペア計算が発生しブラウザが完全に固まります。そこでSatViewer3Dでは、厳格な2段階パイプラインを採用しました:

5. 危険度HUDと3D警告レーダー表示

解析エンジンがTCA 24時間以内でミスディスタンス(最接近距離)が5km未満の事象を検出すると、SatViewer3Dの画面上に専用の「衝突アラートHUD」がポップアップします。

3D地球儀上には、交差点の座標に赤いパルス発光するワイヤーフレーム球体が表示され、双方の軌道予測ラインが赤くハイライトされます。宇宙飛行士や地上管制官が直面している極限の緊張感を、誰もがブラウザ上でリアルタイムに目撃できるインターフェースを実現しました。

🚀 prosalmontech ポートフォリオ

SatViewer3D、QuakeViewer3D、NihongoChatAI、JPQuizなど、開発中のアプリ・Webサービスを公開中!

トップページでプロダクトを見る