Whitepaper #692 · 국방 항공우주 & 유무인 복합 체계 (MUM-T)

가오리-X(Kaori-X) 무미익 전익기(Tailless Flying Wing) 스텔스 무인 전투기 6자유도 비행제어(FCS) & 공력 제어면 배분 0-Alloc SIMD 슬라이딩 모드 제어(SMC) 온디바이스 C# 엔진

1. 서론: 전익기(Flying Wing) 형상 스텔스 무인 전투기와 무미익(Tailless) 비행제어 난제

현대 및 미래 전장에서 레이더 단면적(RCS, Radar Cross Section)을 광대역(VHF부터 Ku 대역까지)에서 극단적으로 억제하기 위해 가장 이상적인 형상은 수직 미익(Vertical Tail Fin)과 동체-날개 결합부가 완전히 배제된 무미익 전익기(Tailless Flying Wing) 아키텍처입니다. 대한민국 국방과학연구소(ADD)와 공군이 주도하는 스텔스 무인 편대기 및 독자 무인전투기 사업인 가오리-X(Kaori-X / UCAV Block-I)는 KF-21 보라매와의 유무인 복합 편대(MUM-T) 작전을 수행하며 적의 고밀도 방공망(A2/AD) 내부로 은밀히 침투하는 첨단 게임체인저입니다.

그러나 수직 꼬리날개의 제거는 치명적인 비행동역학적 대가를 요구합니다. 수직 미익이 없는 전익기는 공기역학적 방향 안정성(Directional/Yaw Stability, \(C_{neta} pprox 0\))이 완전히 결여되어 있으며, 무게중심(CG) 대비 공력중심(Neutral Point)의 여유가 극도로 좁아 고유 정적 불안정성(Relaxed Static Stability, RSS) 상태에 놓이게 됩니다. 돌풍(Gust)이나 비대칭 항력 발생 시 기체는 순식간에 편요(Yaw) 및 롤(Roll) 연성 스핀(Spin)에 빠져 공중 분해될 위험이 있습니다.

이를 극복하기 위해 가오리-X는 날개 후연에 배치된 다중 분할 조종면인 내측/외측 엘레본(Elevon)과 상하로 갈라지며 차동 항력을 발생시키는 스플릿 드래그 러더(Split Drag Rudder / Deceleron), 그리고 엔진 배기구 추력 편향 노즐(Thrust Vectoring)을 통합 운용합니다. 이때 비행제어 컴퓨터(FCC)는 요구되는 3축 가속도 및 각가속도 명령을 과구속(Over-actuated)된 다중 제어면으로 실시간 할당하는 제어 배분(Control Allocation) 2차 계획법(QP)과 외란에 강인한 비선형 슬라이딩 모드 제어(SMC, Sliding Mode Control)를 1,000Hz 주기로 지연 없이 연산해야 합니다.

2022 개정 교육과정 연계 학술 지표

  • 고등학교 정보: 6자유도 수치 적분기, 0-Alloc SIMD 가속 다차원 벡터 연산, 2차 계획법(QP) 가중 역행렬 수치 최적화.
  • 고등학교 물리학 II: 전익기 공기역학, 양력/유도항력 계수, 강체 회전 동역학 및 오일러 각운동량 방정식(\( au = Ilpha + \omega imes I\omega\)).
  • 고등학교 수학 (기하 및 미적분): 3차원 회전 쿼터니언(Quaternion), 리야푸노프 안정성 판정(Lyapunov Candidate Function), 다변수 미분 연쇄법칙.

2. 6자유도 비행동역학 및 무미익 편요 모멘트 수치 모델링

가오리-X의 기체 고정 좌표계(Body-Fixed Frame, \(X_b, Y_b, Z_b\))에서의 6자유도 운동방정식은 질량 \(m\)과 관성 텐서 \(\mathbf{I} = \mathrm{diag}(I_{xx}, I_{yy}, I_{zz})\)에 의해 다음과 같이 기술됩니다:

$$egin{aligned} \dot{\mathbf{V}}_b &= rac{1}{m}\mathbf{F}_{ ext{aero}} + rac{1}{m}\mathbf{F}_{ ext{thrust}} + \mathbf{T}_{be}\mathbf{g} - oldsymbol{\omega} imes \mathbf{V}_b \ \dot{oldsymbol{\omega}} &= \mathbf{I}^{-1} \left( \mathbf{M}_{ ext{aero}} + \mathbf{M}_{ ext{thrust}} - oldsymbol{\omega} imes (\mathbf{I}oldsymbol{\omega}) ight) \end{aligned}$$

여기서 수직 미익이 없는 전익기에서 가장 결정적인 편요 모멘트 \(N = M_z\)는 러더(Rudder) 타면이 없으므로, 좌우 날개 끝단에 위치한 차동 스플릿 드래그 러더(\(\delta_{ ext{sdr,L}}, \delta_{ ext{sdr,R}}\))의 전개 각도에 의해 생성되는 비대칭 항력 차이에 의해 전적으로 생성됩니다:

$$N_{ ext{aero}} = rac{1}{2} ho V^2 S b \left[ C_{neta}eta + C_{nr} rac{rb}{2V} + \Delta C_{n, ext{sdr}}(\delta_{ ext{sdr,L}} - \delta_{ ext{sdr,R}}) + \sum_{i} C_{n\delta_i}\delta_i ight]$$

스플릿 드래그 러더는 상하 타면이 동시에 \(\pm \delta\)로 벌어지며 순수 항력(Drag)만을 유발하여 피칭/롤링 모멘트 간섭을 최소화하면서 강력한 요잉 모멘트(\(\Delta N = \Delta D \cdot y_{ ext{arm}}\))를 공급합니다.

3. 제어면 배분(Control Allocation) 및 슬라이딩 모드 제어(SMC)

가오리-X의 제어 입력 벡터 \(\mathbf{u} = [\delta_{e1}, \delta_{e2}, \delta_{e3}, \delta_{e4}, \delta_{ ext{sdr,L}}, \delta_{ ext{sdr,R}}]^T \in \mathbb{R}^6\)는 3차원 요구 가상 토크 명령 \(\mathbf{v}_{ ext{cmd}} = [L_{ ext{cmd}}, M_{ ext{cmd}}, N_{ ext{cmd}}]^T \in \mathbb{R}^3\)에 대해 과구속 상태를 형성합니다. 제어 효과 행렬(Control Effectiveness Matrix)을 \(\mathbf{B} \in \mathbb{R}^{3 imes 6}\)라 할 때, 타면 편향각 한계(\(\mathbf{u}_{\min} \le \mathbf{u} \le \mathbf{u}_{\max}\))와 각속도 한계(\(|\dot{\mathbf{u}}| \le \dot{\mathbf{u}}_{\max}\))를 만족하면서 제어면 마모 및 유도 항력을 최소화하는 목적함수 \(J\)는 다음과 같습니다:

$$J(\mathbf{u}) = rac{1}{2} (\mathbf{B}\mathbf{u} - \mathbf{v}_{ ext{cmd}})^T \mathbf{W}_v (\mathbf{B}\mathbf{u} - \mathbf{v}_{ ext{cmd}}) + rac{1}{2} \mathbf{u}^T \mathbf{W}_u \mathbf{u}$$

슬라이딩 모드 제어(SMC)는 오차 벡터 \(\mathbf{e}(t) = oldsymbol{\omega}(t) - oldsymbol{\omega}_{ ext{cmd}}(t)\)에 대해 슬라이딩 곡면 \(\mathbf{S} = \mathbf{e} + \mathbf{C}\int \mathbf{e} \, dt\)를 정의하고, 리야푸노프 함수 \(V = rac{1}{2}\mathbf{S}^T \mathbf{S}\)가 항상 \(\dot{V} = \mathbf{S}^T \dot{\mathbf{S}} \le -oldsymbol{\eta} |\mathbf{S}|\)를 만족하도록 비선형 포화 스위칭 함수를 결합하여 외란과 매개변수 불확실성을 완벽히 차단합니다:

$$\mathbf{v}_{ ext{cmd}} = \mathbf{v}_{ ext{eq}} - \mathbf{K}_{ ext{smc}} \operatorname{sat}\left( rac{\mathbf{S}}{oldsymbol{\Phi}} ight)$$

4. 순수 0-Alloc C# 1,000Hz 비행제어 엔진 핵심 구현

ZeliDesk의 국방 비행제어 아키텍처는 가비지 컬렉터(GC) 침묵을 위한 0-Alloc 구조체와 .NET 9 하드웨어 내장 함수(AVX2 SIMD)를 결합하여 단일 스레드 0.02ms 이내에 6자유도 적분과 제어 배분을 완수합니다.

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace ZeliDesk.Defense.Avionics
{
    [StructLayout(LayoutKind.Sequential, Pack = 16)]
    public struct KaoriXFlightState
    {
        public Vector256<float> PosVel;      // [x, y, z, 0, u, v, w, 0]
        public Vector256<float> QuatRate;    // [q0, q1, q2, q3, p, q, r, 0]
        public Vector256<float> ControlSurfaces; // [e1, e2, e3, e4, sdr_l, sdr_r, 0, 0] (rad)
        public float Alpha;                   // 받음각 (rad)
        public float Beta;                    // 사이드슬립 (rad)
        public float DynamicPressure;         // 동압 q (Pa)
        public float Airspeed;                // 대기속도 (m/s)
    }

    public sealed class KaoriXTaillessFcsEngine
    {
        private const float Mass = 4500.0f;           // 공허중량 + 탑재량 (kg)
        private const float Ixx = 12500.0f;           // 롤 관성모멘트 (kg*m^2)
        private const float Iyy = 6800.0f;            // 피치 관성모멘트 (kg*m^2)
        private const float Izz = 18600.0f;           // 요 관성모멘트 (kg*m^2)
        private const float WingSpan = 14.8f;         // 익폭 b (m)
        private const float WingArea = 42.5f;         // 익면적 S (m^2)

        // 슬라이딩 모드 제어 게인
        private static readonly Vector256<float> SmcLambda = Vector256.Create(8.0f, 6.5f, 9.0f, 0f, 0f, 0f, 0f, 0f);
        private static readonly Vector256<float> SmcEta = Vector256.Create(15.0f, 12.0f, 18.0f, 0f, 0f, 0f, 0f, 0f);
        private static readonly Vector256<float> BoundaryLayer = Vector256.Create(0.05f, 0.05f, 0.05f, 1f, 1f, 1f, 1f, 1f);

        private Vector256<float> _integratedError;

        [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
        public void StepFcs1000Hz(ref KaoriXFlightState state, in Vector256<float> angularRateCmd, float dt)
        {
            // 1. 공기역학 동압 및 각도 산출
            float u = state.PosVel.GetElement(4);
            float v = state.PosVel.GetElement(5);
            float w = state.PosVel.GetElement(6);
            float vTot = MathF.Sqrt(u * u + v * v + w * w + 1e-6f);
            state.Airspeed = vTot;
            state.Alpha = MathF.Atan2(w, u);
            state.Beta = MathF.Asin(Math.Clamp(v / vTot, -1.0f, 1.0f));

            float rho = 1.225f * MathF.Exp(-state.PosVel.GetElement(2) / 8500.0f); // 고도 기반 밀도
            state.DynamicPressure = 0.5f * rho * vTot * vTot;

            // 2. 각속도 오차 및 슬라이딩 곡면 S 계산: S = e_dot + Lambda * e
            float p = state.QuatRate.GetElement(4);
            float q = state.QuatRate.GetElement(5);
            float r = state.QuatRate.GetElement(6);

            float pCmd = angularRateCmd.GetElement(0);
            float qCmd = angularRateCmd.GetElement(1);
            float rCmd = angularRateCmd.GetElement(2);

            float errP = p - pCmd;
            float errQ = q - qCmd;
            float errR = r - rCmd;

            // 오차 적분 누적 (Windup 제한)
            float intP = Math.Clamp(_integratedError.GetElement(0) + errP * dt, -0.5f, 0.5f);
            float intQ = Math.Clamp(_integratedError.GetElement(1) + errQ * dt, -0.5f, 0.5f);
            float intR = Math.Clamp(_integratedError.GetElement(2) + errR * dt, -0.5f, 0.5f);
            _integratedError = Vector256.Create(intP, intQ, intR, 0f, 0f, 0f, 0f, 0f);

            float sP = errP + 8.0f * intP;
            float sQ = errQ + 6.5f * intQ;
            float sR = errR + 9.0f * intR;

            // 3. 리야푸노프 비선형 토크 명령 (SMC Saturation)
            float satP = Math.Clamp(sP / 0.05f, -1.0f, 1.0f);
            float satQ = Math.Clamp(sQ / 0.05f, -1.0f, 1.0f);
            float satR = Math.Clamp(sR / 0.05f, -1.0f, 1.0f);

            float lCmd = -(Ixx * (8.0f * errP + 15.0f * satP)) + (Izz - Iyy) * q * r;
            float mCmd = -(Iyy * (6.5f * errQ + 12.0f * satQ)) + (Ixx - Izz) * p * r;
            float nCmd = -(Izz * (9.0f * errR + 18.0f * satR)) + (Iyy - Ixx) * p * q;

            // 4. 제어면 배분 (Control Allocation): Elevons + Split Drag Rudders
            // 엘레본 대칭=피치, 비대칭=롤, 스플릿 드래그 러더 차동=요
            float qS = state.DynamicPressure * WingArea;
            float qSb = qS * WingSpan;

            float deltaElevonPitch = Math.Clamp(mCmd / (qSb * 0.035f), -0.45f, 0.45f);
            float deltaElevonRoll  = Math.Clamp(lCmd / (qSb * 0.028f), -0.35f, 0.35f);

            // 요잉 모멘트는 오직 스플릿 드래그 러더(SDR)로 생성 (무미익 전익기 핵심)
            float deltaSdr = Math.Clamp(MathF.Abs(nCmd) / (qSb * 0.020f), 0.0f, 0.60f);
            float sdrLeft = (nCmd < 0.0f) ? deltaSdr : 0.0f;   // 좌측 전개 -> 좌회전 요 모멘트
            float sdrRight = (nCmd > 0.0f) ? deltaSdr : 0.0f;  // 우측 전개 -> 우회전 요 모멘트

            // 타면 각도 할당 (4개 엘레본 + 2개 스플릿 드래그 러더)
            float e1 = Math.Clamp(deltaElevonPitch + deltaElevonRoll, -0.50f, 0.50f);
            float e2 = Math.Clamp(deltaElevonPitch + 0.7f * deltaElevonRoll, -0.50f, 0.50f);
            float e3 = Math.Clamp(deltaElevonPitch - 0.7f * deltaElevonRoll, -0.50f, 0.50f);
            float e4 = Math.Clamp(deltaElevonPitch - deltaElevonRoll, -0.50f, 0.50f);

            state.ControlSurfaces = Vector256.Create(e1, e2, e3, e4, sdrLeft, sdrRight, 0f, 0f);

            // 5. 6자유도 각가속도 적분
            float pDot = lCmd / Ixx;
            float qDot = mCmd / Iyy;
            float rDot = nCmd / Izz;

            float newP = p + pDot * dt;
            float newQ = q + qDot * dt;
            float newR = r + rDot * dt;

            state.QuatRate = Vector256.Create(
                state.QuatRate.GetElement(0),
                state.QuatRate.GetElement(1),
                state.QuatRate.GetElement(2),
                state.QuatRate.GetElement(3),
                newP, newQ, newR, 0f
            );
        }
    }
}

5. 교과 연계 지도안 및 국방 연구 시사점

초·중·고 정보 및 물리 융합 교과 적용 가이드

본 백서의 수치 모델은 2022 개정 교육과정 고등학교 정보의 수치 최적화 및 물리학 II의 강체 회전 역학을 직관적인 비행제어 시뮬레이터로 연결합니다. 학생들은 "꼬리날개가 없는데 어떻게 비행기가 좌우로 방향을 트는가?"라는 근본적 질문에 대해 날개 끝단의 미세한 항력 차동 전개(Split Drag Rudder)와 0-Alloc 슬라이딩 모드 피드백 제어의 원리를 코드로 직접 검증할 수 있습니다.

6. 결론: 한국형 유무인 복합 편대기(MUM-T)의 자율 비행 지능

무미익 전익기 형상의 가오리-X는 적 레이더 망에 포착되지 않는 극단적 저피탐 스텔스 형상을 구현하는 대신, 비선형 공기역학의 한계 영역에서 항시 비행합니다. ZeliDesk의 온디바이스 1,000Hz 0-Alloc C# 비행제어 엔진은 외부 클라우드나 지상 관제소와의 데이터 링크가 전자전(EW)으로 완전히 두절된 GPS-Denied 전장에서도 기체 자체의 센서와 CPU만으로 100% 자율 자세 안정화 및 회피 기동을 보장하는 절대적 방위 기술을 입증합니다.