1. 2022 개정 교육과정 교과 연계 분석
- 물리학 (로렌츠 힘과 하전입자 정전가속, 치올콥스키 로켓 방정식): 방전 챔버 내 전기장 $\mathbf{E}$와 자기장 $\mathbf{B}$에 의한 로렌츠 힘 $\mathbf{F} = q(\mathbf{E} + \mathbf{v} \times \mathbf{B})$ 및 이온 방출 속도 $v_e = \sqrt{2 q V / m_{ion}}$, 유효 배기속도와 비추력 $c = I_{sp} g_0$.
- 화학 (크세논 1차 이온화 에너지 및 플라즈마 상태): 비활성 기체 크세논($\text{Xe}$)의 1차 이온화 반응 $\text{Xe} + e^- \to \text{Xe}^+ + 2e^-$ 및 플라즈마 중성화를 위한 중화기(Neutralizer) 음극 전자 방출.
- 지구과학/우주과학 (케플러 궤도 섭동 및 저추력 나선형 탈출 궤적): 순간적인 임펄스 추진(호만 전이)과 달리, 수개월에 걸쳐 고도를 서서히 높여 지구 중력장을 탈출하는 저추력 나선형(Low-thrust Spiral) 궤도 천체역학.
- 수학 (4차 룬게-쿠타(RK4) 연립 상미분방정식 수치해석): 위성 위치 $\mathbf{r}(t)$와 속도 $\mathbf{v}(t)$, 질량 감소 $\dot{m}(t) = -T / (I_{sp} g_0)$를 4단계 오차 보정으로 적분하는 6자유도 천체역학 수치 적분.
- 정보 (무할당 실시간 1,000Hz 궤도 전파기): 1ms 실시간 루프 내에서 가비지 컬렉터 부담 없이 스택 메모리와 SIMD 벡터 가속을 통해 행성 간 항법 궤적을 0-Alloc으로 시뮬레이션하는 C# 코어.
2. 홀 추력기 정전가속 및 저추력 궤도 미분방정식
홀 추력기에서 전압 강하 $V_{acc}$를 통과한 크세논 이온($q = 1.602 \times 10^{-19}\,\text{C}$, $m_{ion} = 2.18 \times 10^{-25}\,\text{kg}$)의 분사 속도 $v_e$와 발생 추력 $T$, 비추력 $I_{sp}$는 다음과 같습니다.
$$v_e = \sqrt{\frac{2 q V_{acc}}{m_{ion}}}, \quad T = \dot{m}_{xe} v_e \eta_{div}, \quad I_{sp} = \frac{v_e}{g_0}$$중심 천체(지구/태양)의 중력상수 $\mu = G M$와 추력 벡터 $\mathbf{T}(t)$를 받는 위성의 6차원 상태 공간 운동방정식은 다음과 같습니다.
$$\frac{d\mathbf{r}}{dt} = \mathbf{v}, \quad \frac{d\mathbf{v}}{dt} = -\frac{\mu}{\|\mathbf{r}\|^3}\mathbf{r} + \frac{\mathbf{T}(t)}{m(t)}, \quad \frac{dm}{dt} = -\frac{\|\mathbf{T}(t)\|}{I_{sp} g_0}$$이 비선형 연립방정식을 4차 룬게-쿠타(RK4) 방식으로 수치 적분하여, 탐사선의 매 초 궤도 위치와 잔여 연료량을 오차 $O(\Delta t^4)$ 이내로 정밀 추적합니다.
3. 1,000Hz 0-Alloc C# 저추력 궤도 적분 코어
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Education.StemSpace.IonThruster
{
public readonly record struct SpacecraftState(
Vector3 PositionMeters, // 지심/태양 중심 관성좌표계 위치 (m)
Vector3 VelocityMps, // 속도 (m/s)
float MassKg, // 현재 탐사선 총 질량 (kg)
float IspSeconds // 추력기 비추력 (초)
);
public ref struct ThrusterOutput
{
public Vector3 ThrustNewton;
public float MassFlowKgPerSec;
public float AccelerationMps2;
}
public static class LowThrustRk4Integrator
{
private const float MuEarth = 3.986004418e14f; // 지구 중력상수 (m^3/s^2)
private const float StandardGravityG0 = 9.80665f;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static SpacecraftState StepRk4(
in SpacecraftState state,
Vector3 thrustUnitVector,
float thrustMagnitudeN,
float dtSec)
{
// k1 평가
EvaluateDerivatives(state, thrustUnitVector, thrustMagnitudeN, out Vector3 dr1, out Vector3 dv1, out float dm1);
// k2 평가
var s2 = new SpacecraftState(
state.PositionMeters + dr1 * (0.5f * dtSec),
state.VelocityMps + dv1 * (0.5f * dtSec),
state.MassKg + dm1 * (0.5f * dtSec),
state.IspSeconds
);
EvaluateDerivatives(s2, thrustUnitVector, thrustMagnitudeN, out Vector3 dr2, out Vector3 dv2, out float dm2);
// k3 평가
var s3 = new SpacecraftState(
state.PositionMeters + dr2 * (0.5f * dtSec),
state.VelocityMps + dv2 * (0.5f * dtSec),
state.MassKg + dm2 * (0.5f * dtSec),
state.IspSeconds
);
EvaluateDerivatives(s3, thrustUnitVector, thrustMagnitudeN, out Vector3 dr3, out Vector3 dv3, out float dm3);
// k4 평가
var s4 = new SpacecraftState(
state.PositionMeters + dr3 * dtSec,
state.VelocityMps + dv3 * dtSec,
state.MassKg + dm3 * dtSec,
state.IspSeconds
);
EvaluateDerivatives(s4, thrustUnitVector, thrustMagnitudeN, out Vector3 dr4, out Vector3 dv4, out float dm4);
// RK4 가중 평균 합성 (0-Alloc 스택 연산)
Vector3 newPos = state.PositionMeters + (dr1 + 2f * dr2 + 2f * dr3 + dr4) * (dtSec / 6f);
Vector3 newVel = state.VelocityMps + (dv1 + 2f * dv2 + 2f * dv3 + dv4) * (dtSec / 6f);
float newMass = state.MassKg + (dm1 + 2f * dm2 + 2f * dm3 + dm4) * (dtSec / 6f);
return new SpacecraftState(newPos, newVel, Math.Max(newMass, 1.0f), state.IspSeconds);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void EvaluateDerivatives(
in SpacecraftState s,
Vector3 thrustDir,
float thrustN,
out Vector3 dr,
out Vector3 dv,
out float dm)
{
dr = s.VelocityMps;
float rLength = s.PositionMeters.Length();
float rCube = rLength * rLength * rLength;
Vector3 gravityAcc = (rCube > 1e-6f) ? -MuEarth / rCube * s.PositionMeters : Vector3.Zero;
Vector3 thrustAcc = (s.MassKg > 0.1f) ? (thrustDir * thrustN) / s.MassKg : Vector3.Zero;
dv = gravityAcc + thrustAcc;
dm = -(thrustN / (s.IspSeconds * StandardGravityG0));
}
}
}
4. 교육적 가치 및 미래 우주탐사 응용
본 시뮬레이터는 한국 최초의 달 궤도선 다누리호의 항법 제어는 물론, 향후 화성 및 소행성 탐사선에 적용될 전기추진 시스템의 핵심 원리를 고스란히 담고 있습니다. 학생들은 본 교구를 통해 단순한 수식 암기가 아니라, 왜 크세논 가스가 이온 엔진의 최적 연료인지(원자 질량이 크고 이온화 에너지가 낮음), 왜 화학 로켓보다 수개월간 연속 가속하는 저추력 엔진이 행성 간 전이에서 탑재 연료 중량을 80% 이상 절감하는지를 3D 실시간 궤적 렌더링과 함께 체득하게 됩니다.