1. 2022 개정 교육과정 교과 연계 분석
- 물리학 (치올콥스키 로켓 방정식, 각운동량 보존 법칙, 작용-반작용 토크): 가스 분출 속도 $v_e = I_{sp} g_0$에 의한 추력 $F = \dot{m} v_e$ 및 기체 관성모멘트 주축 회전 토크 $\boldsymbol{\tau} = \mathbf{r} \times \mathbf{F} = \mathbf{I} \dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega})$.
- 수학 (PWPF 슈미트 트리거 비선형 펄스 변조 및 쿼터니언 자세 오차): 연속 제어 명령 $u(t)$를 가변 주기 펄스 폭 신호로 변환하는 히스테리시스 루프와 쿼터니언 구면 선형 보간(SLERP).
- 지구과학 (고도 700km 저궤도 우주 환경과 지구 중력 비대칭성 J2 섭동): 지구 타원체 편평도에 따른 중력장 섭동 토크와 우주 공간 잔류 대기 저항 해석.
- 정보 (무할당 실시간 1,000Hz 4채널 솔레노이드 밸브 듀티 제어기): 1ms 실시간 루프 내에서 가비지 컬렉터 없이 쿼터니언 오차를 스택 메모리로 0-Alloc 연산하는 C# 우주 탑재 소프트웨어 코어.
2. RCS PWPF 펄스 변조 및 롤 회전 수식 모델
3단 로켓의 롤 축 관성모멘트 $I_{xx}$, 요구 롤 제어 토크 $\tau_{cmd}$에 대해 기체 외벽에 접선 방향으로 배치된 RCS 노즐(추력 $F_{rcs}$, 모멘트 암 $R_{arm}$)의 회전 가속도 $\dot{\omega}_x$는 다음과 같습니다.
$$I_{xx} \dot{\omega}_x = \tau_{rcs} = \sum_{k=1}^N s_k(t) \cdot F_{rcs} \cdot R_{arm}, \quad s_k(t) \in \{0, 1\}$$불연속 온/오프 액추에이터를 연속 제어기처럼 구동하는 PWPF 변조기는 1차 지연 필터($\tau_f$)와 슈미트 트리거(임계값 $U_{on}, U_{off}$)로 구성됩니다.
$$\dot{y}(t) = \frac{1}{\tau_f} (K_m e(t) - y(t)), \quad s(t) = \begin{cases} 1, & |y(t)| \ge U_{on} \\ 0, & |y(t)| \le U_{off} \end{cases}$$이를 통해 최소 펄스 폭(Minimum Impulse Bit) $t_{min} \approx 10\text{ms}$을 보장하면서도 1,000Hz 주기로 추진제 소모량을 최소화하는 최적 자세 댐핑을 구현합니다.
3. 1,000Hz 0-Alloc C# 누리호 3단 RCS 제어 코어
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
namespace ZeliDesk.Education.StemSpace.RocketRcs
{
public readonly record struct RocketAttitudeTelemetry(
Quaternion CurrentOrientation,
Quaternion TargetOrientation,
Vector3 AngularVelocityRadPerSec,
float PropellantTankPressureBar
);
public ref struct RcsValveCommand
{
public bool PositiveRollValveOpen;
public bool NegativeRollValveOpen;
public float DutyCyclePercent;
public bool AttitudeLocked;
}
public static class NuriRcsControlCore
{
private const float PwpfThresholdOn = 0.35f;
private const float PwpfThresholdOff = 0.12f;
private const float RollGainKp = 6.5f;
private const float RollGainKd = 3.2f;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void ModulateRcsThrusters(
ref readonly RocketAttitudeTelemetry tel,
ref float pwpfFilterState, // 1차 필터 상태 변수 (스택 관리)
float dtSec,
ref RcsValveCommand cmd)
{
// 1. 쿼터니언 오차로부터 롤 각도 오차 역산
Quaternion qErr = Quaternion.Inverse(tel.CurrentOrientation) * tel.TargetOrientation;
float rollErrorRad = 2.0f * (float)Math.Atan2(qErr.X, qErr.W);
// 2. PD 제어 입력 산출
float controlDemand = (rollErrorRad * RollGainKp) - (tel.AngularVelocityRadPerSec.X * RollGainKd);
// 3. PWPF 1차 지연 필터 적분
float filterTimeConstant = 0.05f;
pwpfFilterState += (dtSec / filterTimeConstant) * (controlDemand - pwpfFilterState);
// 4. 슈미트 트리거 이중 임계값 판정
bool firePos = false;
bool fireNeg = false;
if (pwpfFilterState > PwpfThresholdOn)
{
firePos = true;
}
else if (pwpfFilterState < -PwpfThresholdOn)
{
fireNeg = true;
}
cmd.PositiveRollValveOpen = firePos;
cmd.NegativeRollValveOpen = fireNeg;
cmd.DutyCyclePercent = Math.Clamp(Math.Abs(pwpfFilterState) * 100.0f, 0.0f, 100.0f);
cmd.AttitudeLocked = Math.Abs(rollErrorRad) < 0.005f; // 0.3도 이내 안정
}
}
}
4. 방통대 우호성 교수 랩실 교구 및 국방 AIDT 현장 적용 가이드
초·중·고 과학교육 및 우주 발사체 공학 탐구
본 백서는 중·고등학교 물리학 및 지구과학의 "작용-반작용 법칙, 인공위성의 궤도 진입, 디지털 온/오프 제어와 펄스 변조" 단원에서 학생들의 우주 과학 호기심을 자극하는 실전 교육 교구입니다. 진공 우주에서는 날개가 통하지 않기 때문에 가스를 뿜어서 자세를 잡아야 한다는 사실과, 모터처럼 세기를 조절할 수 없는 밸브를 켰다 껐다 하는 시간 비율(PWM)로 정밀하게 제어하는 소프트웨어의 위력을 C# 0-Alloc 코드로 체득할 수 있습니다.
5. 결론 및 제385호 예고
누리호 3단의 초정밀 롤 제어는 대한민국 우주 수송 능력의 신뢰성을 담보하는 핵심 기반입니다. 이어지는 제385호 백서에서는 대기권 재진입 캡슐 세라믹 복합소재(TPS) 삭마(Ablation) 열화학 반응 및 1,000Hz 0-Alloc C# 1차원 비선형 열전도 편미분방정식 엔진을 심층 분석합니다.