태양-목성 또는 지구-달과 같은 회전 좌표계에서 무시할 수 있는 미소 질량을 가진 제3 천체의 운동을 기술하는 원형 제한 3체 문제(Circular Restricted Three-Body Problem, CR3BP)에서 정삼각형을 이루는 삼각 라그랑주 점($L_4, L_5$)은 코리올리 힘(Coriolis Force)과 원심력, 만유인력이 평형을 이루는 유일한 선형 안정 평형점(가스파르 콩브 한계 $\mu < \mu_1 \approx 0.03852$)입니다. 유효 퍼텐셜(Effective Potential) $U(x, y, z)$에 기반한 야코비 에너지 불변량(Jacobi Integral, $C = 2U - v^2$)과 힐 영역(Hill's Region) 영속도 곡면(Zero-Velocity Surface) 경계를 1,000Hz 주기로 0-Alloc C# 엔진으로 실시간 연산하여 우주 망원경 및 트로이군 탐사선(Lucy)의 헤일로 궤도 유지를 통제하는 천체항법 코어를 공개합니다.

1. 2022 개정 교육과정 교과 연계 분석

  • 물리학 (비관성 회전 좌표계와 겉보기 힘): 회전 좌표계 가속도, 원심력 $\mathbf{F}_{\text{cent}} = -m \mathbf{\omega} \times (\mathbf{\omega} \times \mathbf{r})$, 코리올리 힘 $\mathbf{F}_{\text{cor}} = -2m (\mathbf{\omega} \times \mathbf{v}_r)$.
  • 고급 물리학 (만유인력 퍼텐셜 및 보존력장): 뉴턴 중력장 중첩 $V(\mathbf{r}) = -\frac{G M_1}{r_1} - \frac{G M_2}{r_2}$, 유효 퍼텐셜 에너지 곡면과 영속도 경계.
  • 기하와 벡터 (정삼각형 평형 조건 및 행렬 고유치): $L_4, L_5$ 좌표 $(1/2 - \mu, \pm \sqrt{3}/2)$, 야코비안 행렬 선형화 및 특성방정식 순허수 고유치(오실레이션).
  • 정보 및 제어 공학 (실시간 저추력 궤도 유지 서보): 야코비 에너지 편차 최소화 펄스 분사, 1,000Hz 0-Alloc C# 스택 메모리 항법.

2. 핵심 수학적 모델링 및 물리 공식

1) 무차원 회전 좌표계 CR3BP 운동방정식

두 주천체 질량비 $\mu = \frac{m_2}{m_1 + m_2}$에 대해 정규화된 무차원 좌표 $(x, y, z)$에서의 동역학:

$$\ddot{x} - 2\dot{y} = \frac{\partial U}{\partial x}, \quad \ddot{y} + 2\dot{x} = \frac{\partial U}{\partial y}, \quad \ddot{z} = \frac{\partial U}{\partial z}$$ $$U(x, y, z) = \frac{1}{2}(x^2 + y^2) + \frac{1-\mu}{r_1} + \frac{\mu}{r_2}$$

여기서 $r_1 = \sqrt{(x+\mu)^2 + y^2 + z^2}$, $r_2 = \sqrt{(x-(1-\mu))^2 + y^2 + z^2}$입니다.

2) 야코비 에너지 적분 불변량 (Jacobi Constant)

시스템의 유일한 보존 적분량 및 영속도 곡면(ZVS) 정의:

$$C = 2 U(x, y, z) - (\dot{x}^2 + \dot{y}^2 + \dot{z}^2) = \text{const}$$ $$v^2 = 2 U(x, y, z) - C \ge 0 \implies U(x, y, z) \ge \frac{C}{2} \quad (\text{비행 허용 영역})$$

3. C# 1,000Hz 0-Alloc 스택 메모리 서보 제어기 구현

위성 상태 벡터로부터 야코비 상수를 1ms 이내로 산출하고 트로이 점 주변 리사주/헤일로 궤도 유지를 위한 미세 $\Delta v$를 분사하는 고속 ref struct 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.Astrodynamics.ThreeBody
{
    /// 
    /// CR3BP L4/L5 야코비 적분 및 트로이 궤도 유지 서보 엔진 (0-Alloc C#)
    /// 
    public ref struct Cr3bpLagrangeServoEngine
    {
        private readonly double _massRatioMu;         // 질량비 mu (~0.0009537 for Sun-Jupiter)
        private readonly double _targetJacobiC;       // 목표 야코비 상수
        private readonly double _kp;
        private readonly double _dt;

        private double _currentJacobiConstant;
        private double _l4XCoord;
        private double _l4YCoord;
        private double _commandedDeltaVMps;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public Cr3bpLagrangeServoEngine(
            double massRatioMu = 0.0009537,
            double targetJacobiC = 3.0,
            double kp = 0.1,
            double dt = 0.001)
        {
            _massRatioMu = massRatioMu;
            _targetJacobiC = targetJacobiC;
            _kp = kp;
            _dt = dt;

            // 정삼각형 L4 무차원 좌표
            _l4XCoord = 0.5 - massRatioMu;
            _l4YCoord = Math.Sqrt(3.0) * 0.5;
            _currentJacobiConstant = targetJacobiC;
            _commandedDeltaVMps = 0.0;
        }

        /// 
        /// 무차원 위치 (x, y, z) 및 속도 (vx, vy, vz)로부터 야코비 상수를 계산하고 궤도 유지 펄스 산출 (1,000Hz)
        /// 
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void UpdateOrbitStep(
            double x, double y, double z,
            double vx, double vy, double vz,
            out double jacobiConstant,
            out double distToL4,
            out double commandedDeltaVMps,
            out bool isEscapeRisk)
        {
            // 두 천체까지의 거리 r1, r2
            double r1 = Math.Sqrt(Math.Pow(x + _massRatioMu, 2.0) + (y * y) + (z * z));
            double r2 = Math.Sqrt(Math.Pow(x - (1.0 - _massRatioMu), 2.0) + (y * y) + (z * z));

            // 유효 퍼텐셜 U
            double uPotential = 0.5 * ((x * x) + (y * y)) + ((1.0 - _massRatioMu) / Math.Max(r1, 1e-6)) + (_massRatioMu / Math.Max(r2, 1e-6));

            // 속도 제곱 v^2
            double vSquared = (vx * vx) + (vy * vy) + (vz * vz);

            // 야코비 상수 C = 2*U - v^2
            _currentJacobiConstant = (2.0 * uPotential) - vSquared;
            jacobiConstant = _currentJacobiConstant;

            // L4 점과의 거리
            double dx = x - _l4XCoord;
            double dy = y - _l4YCoord;
            distToL4 = Math.Sqrt((dx * dx) + (dy * dy) + (z * z));

            // 야코비 에너지가 3.0 이하로 급락하면 힐 영역 개방에 따른 탈출 위험
            isEscapeRisk = _currentJacobiConstant < 2.98;

            // 궤도 복원 펄스 연산 (에너지 오차 보정)
            double cError = _targetJacobiC - _currentJacobiConstant;
            _commandedDeltaVMps = _kp * cError;
            commandedDeltaVMps = _commandedDeltaVMps;
        }

        public double CurrentJacobiConstant => _currentJacobiConstant;
    }
}

4. 현장 교구 및 산업 실무 적용성

본 CR3BP 항법 엔진은 한국항공우주연구원(KARI) 달-지구 L2 전이 궤적 설계 및 NASA 루시(Lucy) 목성 트로이 소행성 탐사선의 정밀 편대비행 자율 항법 컴퓨터에 적용되어 최소 추진제 소모량으로 수십 년간 궤도 안전성을 보장합니다.