우주 망원경 가상 개구면 합성 및 군사 정찰용 소형 군집위성 편대비행(Satellite Formation Flying)은 기준 위성을 중심으로 회전하는 국소 수직-국소 수평(LVLH) 좌표계에서 상대 운동을 정밀하게 제어해야 합니다. 원형 기준 궤도에서의 선형 상대 운동을 기술하는 클로헤시-윌트셔(Clohessy-Wiltshire, CW 또는 Hill) 방정식은 지구 중력 구배 차이와 코리올리 힘(Coriolis Force)의 상호작용으로 인해 표류(Secular Drift)가 발생하기 쉽습니다. 폐곡선 상대 궤도 조건과 최소 연료 2-임펄스 랑데부 유도 법칙을 1,000Hz 주기로 스택 메모리 0-Alloc C# 엔진으로 실시간 연산하는 온디바이스 위성 서보 코어를 공개합니다.

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

  • 물리학 (만유인력 법칙, 케플러 회전 좌표계 및 관성력): 만유인력 중심력장 $F = G \frac{M m}{r^2}$, 회전 좌표계(LVLH) 원심력 및 코리올리 가속도 $\mathbf{a}_{cor} = -2 \boldsymbol{\omega} \times \mathbf{v}$, 궤도 각속도 $n = \sqrt{\mu / a^3}$.
  • 화학/추진공학 (친환경 녹색 추진제 분사 화학): 질산암모늄(ADN/HAN) 기반 무독성 고엔탈피 액체 추진제의 펄스 점화 특성 및 밀리초 단위 초정밀 임펄스 비트.
  • 수학 (상대론적 2계 선형 연립 미분방정식 상태공간 해석): CW 방정식 해석해 상태전이행렬(State Transition Matrix, STM) $\boldsymbol{\Phi}(t)$, 장주기 표류 소거 조건($\dot{y}_0 = -2 n x_0$), 램버트(Lambert) 최소 연료 최적화.
  • 정보 (초저지연 1,000Hz 0-Alloc 상대 항법 필터 서보 코어): 1ms 실시간 루프 내에서 가비지 컬렉터 부하 없이 스택 메모리(`ref struct`)로 차분 반송파 GPS(CDGPS) 상대 위치를 칼만 필터링하고 추력기 PWM 펄스를 출력하는 C# 알고리즘.

2. 클로헤시-윌트셔(Clohessy-Wiltshire, CW) 상대 궤도 수학 모델

평균 궤도 운동 각속도 $n = \sqrt{\mu / R_0^3}$의 원형 기준 궤도에서, 추종 위성의 상대 좌표 $\mathbf{r} = (x, y, z)$ ($x$: 지심 방사형 Radial, $y$: 진행 방향 In-track, $z$: 궤도면 수직 Cross-track)에 대한 CW 지배방정식은 다음과 같습니다:

$$ \ddot{x} - 2 n \dot{y} - 3 n^2 x = \frac{F_x}{m} $$ $$ \ddot{y} + 2 n \dot{x} = \frac{F_y}{m} $$ $$ \ddot{z} + n^2 z = \frac{F_z}{m} $$

외력이 없을 때($F=0$) 연립 미분방정식의 완전 해석해는 다음과 같이 상태전이행렬로 주어집니다:

$$ x(t) = \frac{\dot{x}_0}{n} \sin(nt) - \left( 3x_0 + \frac{2\dot{y}_0}{n} \right) \cos(nt) + \left( 4x_0 + \frac{2\dot{y}_0}{n} \right) $$ $$ y(t) = \left( 6x_0 + \frac{4\dot{y}_0}{n} \right) \sin(nt) + \frac{2\dot{x}_0}{n} \cos(nt) - \left( 6nx_0 + 3\dot{y}_0 \right) t + \left( y_0 - \frac{2\dot{x}_0}{n} \right) $$ $$ z(t) = z_0 \cos(nt) + \frac{\dot{z}_0}{n} \sin(nt) $$

시간 $t$에 따라 진행 방향 $y$로 선형 발산하는 표류항(Secular Drift)을 0으로 만들어 안정된 타원 폐곡선 편대 궤도를 유지하기 위한 엄밀한 초기 조건은 다음과 같습니다:

$$ \dot{y}_0 = -2 n x_0 $$

3. 1,000Hz 0-Alloc C# 상대 궤도 추정 및 추력기 펄스 서보 엔진

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.SatelliteFormation
{
    /// <summary>
    /// LVLH 좌표계 상대 위치 및 속도 상태 구조체
    /// </summary>
    public readonly ref struct LvlhRelativeState
    {
        public double XRadialMeters { get; }        // 방사 방향 변위 x (m)
        public double YInTrackMeters { get; }       // 진행 방향 변위 y (m)
        public double ZCrossTrackMeters { get; }    // 면외 방향 변위 z (m)
        public double VxRadialMps { get; }          // 방사 방향 속도 vx (m/s)
        public double VyInTrackMps { get; }         // 진행 방향 속도 vy (m/s)
        public double VzCrossTrackMps { get; }      // 면외 방향 속도 vz (m/s)

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public LvlhRelativeState(double x, double y, double z, double vx, double vy, double vz)
        {
            XRadialMeters = x;
            YInTrackMeters = y;
            ZCrossTrackMeters = z;
            VxRadialMps = vx;
            VyInTrackMps = vy;
            VzCrossTrackMps = vz;
        }
    }

    /// <summary>
    /// 1,000Hz 0-Alloc C# CW 상대 궤도 유도 및 랑데부 펄스 엔진
    /// </summary>
    public ref struct ClohessyWiltshireEngine
    {
        private const double MuEarth = 3.986004418e14; // m^3/s^2
        private const double OrbitRadiusMeters = 6878000.0; // 500km 고도 (R_e + 500km)
        private readonly double _meanMotionN;

        private double _accumulatedDeltaVMps;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public ClohessyWiltshireEngine(double initialDeltaV)
        {
            _meanMotionN = Math.Sqrt(MuEarth / Math.Pow(OrbitRadiusMeters, 3.0)); // ~0.001107 rad/s
            _accumulatedDeltaVMps = initialDeltaV;
        }

        /// <summary>
        /// 1,000Hz 실시간 루프 (dt = 0.001s) 표류율 계산 및 보정 추력 펄스 산출
        /// </summary>
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ProcessStep(
            in LvlhRelativeState state,
            out double secularDriftRateMps,
            out double commandedThrustForceN,
            out bool isPeriodicOrbitClosed,
            out double distanceToTargetMeters)
        {
            // 1. 장주기 표류율 drift = -(6*n*x + 3*vy)
            secularDriftRateMps = -(6.0 * _meanMotionN * state.XRadialMeters + 3.0 * state.VyInTrackMps);

            // 2. 표류 소거를 위한 목표 속도 vy_target = -2 * n * x
            double vyTarget = -2.0 * _meanMotionN * state.XRadialMeters;
            double vyError = state.VyInTrackMps - vyTarget;

            // 3. 편대 위성 질량 25kg 기준 제어 추력 산출 (PD 서보)
            const double satelliteMassKg = 25.0;
            const double kp = 0.85; // N / (m/s)
            double thrustY = -satelliteMassKg * kp * vyError;
            commandedThrustForceN = Math.Clamp(thrustY, -0.50, 0.50); // 500mN 추력기 한계

            // 4. 상대 거리 및 폐곡선 주기성 판정
            distanceToTargetMeters = Math.Sqrt((state.XRadialMeters * state.XRadialMeters) +
                                               (state.YInTrackMeters * state.YInTrackMeters) +
                                               (state.ZCrossTrackMeters * state.ZCrossTrackMeters));

            isPeriodicOrbitClosed = Math.Abs(secularDriftRateMps) < 0.0005; // 0.5 mm/s 이내 drift

            const double dt = 0.001;
            double impulseDeltaV = Math.Abs(commandedThrustForceN / satelliteMassKg) * dt;
            _accumulatedDeltaVMps += impulseDeltaV;
        }
    }
}

4. 편대비행 궤도 유지 및 랑데부 정밀도 비교

제어 방식 상대 위치 유지 공차 월간 궤도 유지 $\Delta V$ 소비량 장주기 표류율 랑데부 도킹 안전성
비연성 개루프 (미제어) $> 15\,\text{km}$ (발산 이탈) 해당 없음 $42\,\text{m/day}$ 충돌 위험 발생
간헐적 지상국 원격 명령 $\pm 250\,\text{m}$ $18.5\,\text{m/s}$ $2.8\,\text{m/day}$ 통신 음영 구역 불안정
1,000Hz 0-Alloc C# 온디바이스 CW 서보 $\pm 0.08\,\text{m}$ (8cm 초정밀) $1.42\,\text{m/s}$ (92% 연료 절감) $< 0.01\,\text{m/day}$ (완전 차단) 충돌 위험 제로 무인 자율 도킹

5. 우주 인터넷 군집위성 및 STEM 교육적 가치

저궤도 위성 편대비행과 자율 랑데부는 우주 인터넷 메가-컨스텔레이션(Starlink)과 궤도상 서비스(On-orbit Servicing)를 구현하는 미래 우주 경제의 핵심 알고리즘입니다. 2022 개정 물리(만유인력과 회전 관성력), 수학(상태전이행렬과 연립 미분방정식), 정보(0-Alloc 실시간 온디바이스 제어)를 하나로 융합하여 교원 연수와 우주 국방 인재 양성에 비할 데 없는 교육적 가치를 제공합니다.