대한민국 독자 우주 발사체 누리호(KSLV-II)의 3단은 주 엔진(7톤급 액체엔진) 연소 종료 후 위성을 고도 700km 태양동기궤도에 초속 7.5km로 정확히 투입하기 위해 미세한 롤(Roll) 및 3축 자세 제어를 완수해야 합니다. 진공 우주 공간에서 온/오프 밸브로만 동작하는 반작용 제어 시스템(RCS: Reaction Control System) 추력기를 PWPF(Pulse Width Pulse Frequency) 변조기로 선형화하여 1,000Hz 주기로 제어하는 0-Alloc C# 우주비행체 수리공학 백서를 공개합니다.

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차원 비선형 열전도 편미분방정식 엔진을 심층 분석합니다.