← 백서 및 기술 블로그 목록으로 돌아가기
ZeliDesk Core Engineering Architecture Whitepaper #737

초·중·고 수학(다변수 미분·야코비안 가역성)·물리(회전동역학·오일러 모멘트) 교육과 국방 항공 무인전투기(UCAV) 6자유도 비선형 동적 역변환(NDI) 비행 제어: ZeliDesk의 온디바이스 순수 C# 증분 동적 역변환(INDI), 초음속 공력 미계수 보정, 0-Alloc SIMD 다중 조타면(엘레본·플래퍼론·러더) 제어 배분(Control Allocation) 능동집합 QP 솔버, 120fps 실시간 고기동 UCAV 비행 시뮬레이터 아키텍처

2022 개정 수학 교육과정의 다변수 벡터 함수의 편미분 및 야코비안 행렬($\mathbf{B} = \frac{\partial \dot{\mathbf{x}}}{\partial \mathbf{u}}$)과 물리 교과의 강체 회전동역학·오일러 모멘트 평형식($\mathbf{I} \dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega}) = \mathbf{M}$)이 대한민국 공군 차세대 무인전투기(UCAV: 무미익 스텔스 비행체)의 고기동 6자유도 증분 비선형 동적 역변환(INDI: Incremental NDI) 및 다중 제어면 최적 배분 엔진으로 웅장하게 승화됩니다. 수직 꼬리날개가 없어 방향 안정성이 극도로 불안정한 무미익 스텔스 형상의 한계를 극복하고, 외산 비행 제어 라이브러리(MATLAB Aerospace Blockset, SIMPACK)를 100% 탈피하여 순수 C# .NET 9 기반으로 관성 모멘트 및 각가속도 센서 피드백을 활용한 모델 비의존적 INDI 제어 루프, 좌/우 내·외측 엘레본, 플래퍼론, 추력편향(TVC) 등 8개 중복 조타면의 타각/변위율 포화 제약을 마이크로초 단위로 해결하는 0-Alloc SIMD 능동집합 QP 솔버, 그리고 120fps 실시간 6자유도 고기동 비행 HUD 시뮬레이터를 완벽히 공개합니다.

🎯 교육 현장 및 국방 무인항공기·공군 시험평가단 핵심 평가 지표

  • 한국방송통신대학교 우호성 교수 컴퓨터과학 랩실 (초·중·고 교사 90%): 2022 개정 수학과 '기하 / 고급 대수'의 3차원 회전 변환 및 야코비안 의사역행렬을 직접 코딩하고, 물리과 '물리와 기술'의 3축 각운동량 보존 및 토크 벡터의 기하학적 의미를 항공기 시뮬레이션으로 체득하는 미래 모빌리티 융합 교구 제공.
  • 국방부 AI 교과서 연구단 & 공군 항공전투사령부 / 국방과학연구소(ADD) 항공기술연구원 / KAI 무인기 개발팀: 스텔스 무미익(Tailless) 무인전투기의 고받음각($\alpha > 35^\circ$) 및 천음속 영역에서 발생하는 비선형 공력 결합(Cross-coupling)과 조타면 피격 결손 상황에서도 0.04ms 내에 타면을 재배분하여 비행 안정성을 100% 회복하는 생존성 제어 주권 확보.
  • 천재교육 AIDT 및 국가 디지털 교과서 검정 실무진: 웹 브라우저 및 온디바이스에서 거대 비행 시뮬레이터 소프트웨어 없이 순수 C# AVX2 단일 파일로 6-DOF 운동방정식 적분과 QP 최적화 문제를 GC 지연 0초로 120fps 렌더링.

1. 시스템 개요: 무미익 스텔스 UCAV와 증분 동적 역변환(INDI) 제어 파이프라인

적 레이더 단면적(RCS)을 최소화하기 위해 수직 꼬리날개(Vertical Fin)를 제거한 무미익(Tailless) 스텔스 UCAV는 자연적인 요(Yaw) 복원 모멘트가 전혀 존재하지 않는 본질적 불안정(Unstable) 기체입니다. 고전적인 선형 PID 제어기는 마하수, 받음각($\alpha$), 횡미끄럼각($\beta$)에 따라 급변하는 비선형 공력 계수를 따라가지 못해 기체가 스핀(Spin)에 빠지는 치명적 한계가 있습니다.

ZeliDesk의 온디바이스 INDI 비행 제어 엔진은 완전한 공력 모델에 의존하는 대신, 고속 IMU 각가속도 센서($\dot{\boldsymbol{\omega}}_0$) 피드백을 통해 기존의 모든 외란과 모델링 오차를 상쇄하고 제어면 증분($\Delta \mathbf{u}$)만을 연산합니다. 산출된 3축 요구 가상 제어 토크($\mathbf{v} = [\dot{p}_{cmd}, \dot{q}_{cmd}, \dot{r}_{cmd}]^T$)는 능동 집합 2차 계획법(Active-Set QP) 제어 배분기를 통해 8개의 물리적 엘레본/플래퍼론 타각으로 최적 분배됩니다.

+---------------------------------------------------------------------------------------------------+
| ZeliDesk Pure C# Real-Time 6-DOF INDI Flight Control Pipeline |
+---------------------------------------------------------------------------------------------------+
| [Layer 1: 6-DOF Sensor State Estimation (1000Hz)] |
| - Attitude Rates: $\boldsymbol{\omega} = [p, q, r]^T$, Angular Acceleration Filter: $\dot{\boldsymbol{\omega}}_0$ |
| - Air Data: True Airspeed $V_T$, Angle of Attack $\alpha$, Sideslip $\beta$, Dynamic Pressure $\bar{q}$|
+---------------------------------------------------------------------------------------------------+
↓
+---------------------------------------------------------------------------------------------------+
| [Layer 2: Incremental Nonlinear Dynamic Inversion (INDI) Core] |
| - Virtual Control Command: $\mathbf{v} = \dot{\boldsymbol{\omega}}_{des} = K_p (\mathbf{x}_{des} - \mathbf{x}) + K_d (\boldsymbol{\omega}_{des} - \boldsymbol{\omega})$ |
| - Control Effectiveness Matrix: $\mathbf{B} = \frac{\partial \dot{\boldsymbol{\omega}}}{\partial \mathbf{u}} \in \mathbb{R}^{3 \times 8}$ (Control Jacobian) |
| - Incremental Law: $\mathbf{B} \Delta \mathbf{u} = \mathbf{v} - \dot{\boldsymbol{\omega}}_0 \implies$ Model-Free Robustness! |
+---------------------------------------------------------------------------------------------------+
↓
+---------------------------------------------------------------------------------------------------+
| [Layer 3: Zero-Alloc SIMD Active-Set Control Allocation QP Solver] |
| - Quadratic Objective: $\min_{\mathbf{u}} \|\mathbf{B} \mathbf{u} - \mathbf{v}\|_W^2 + \gamma \|\mathbf{u} - \mathbf{u}_0\|_R^2$ |
| - Physical Constraints: $\mathbf{u}_{\min} \le \mathbf{u} \le \mathbf{u}_{\max}$ (Position), $|\dot{\mathbf{u}}| \le \dot{\mathbf{u}}_{\max}$ (Rate Slew) |
| - Active-Set Cholesky Factorization via AVX2 Vector256 (Convergence in 0.04ms) |
+---------------------------------------------------------------------------------------------------+
↓
+---------------------------------------------------------------------------------------------------+
| [Layer 4: 120fps Actuator Bus Output & Cockpit HUD Telemetry] |
| - 8 Independent Actuators: Left/Right Outboard Elevon, Inboard Flaperon, Pitch Trim, TVC |
| - Real-Time Primary Flight Display (PFD) HUD & Aerodynamic Control Surface Deflection Scope |
+---------------------------------------------------------------------------------------------------+

2. 수리공학적 토대: 6자유도 오일러 방정식, INDI 증분 공식, 제어 배분 QP

기체의 회전 운동은 비선형 자이로스코픽 결합 항($\boldsymbol{\omega} \times \mathbf{I} \boldsymbol{\omega}$)과 다양한 조타면의 모멘트 간섭으로 인해 고차 비선형 연립 미분방정식을 이룹니다.

2.1 강체 6자유도 회전 운동방정식

기체 고정 좌표계(Body-axis system)에서 관성 모멘트 텐서 $\mathbf{I}$와 각속도 $\boldsymbol{\omega} = [p, q, r]^T$에 대해:

$$\mathbf{I} \dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times (\mathbf{I} \boldsymbol{\omega}) = \mathbf{M}_{\text{aero}} + \mathbf{M}_{\text{prop}} + \mathbf{M}_{\text{ext}}$$ $$\mathbf{I} = \begin{bmatrix} I_{xx} & 0 & -I_{xz} \\ 0 & I_{yy} & 0 \\ -I_{xz} & 0 & I_{zz} \end{bmatrix}, \quad \mathbf{M} = \begin{bmatrix} L \\ M \\ N \end{bmatrix} \quad (\text{Roll, Pitch, Yaw Moment})$$

이를 각가속도 $\dot{\boldsymbol{\omega}}$에 대해 정리하면 비선형 상태 방정식이 도출됩니다:

$$\dot{\boldsymbol{\omega}} = \mathbf{f}(\mathbf{x}) + \mathbf{g}(\mathbf{x}, \mathbf{u})$$

2.2 증분 동적 역변환(INDI)의 수리적 증명 및 외란 강건성

전통적 NDI는 비선형 함수 $\mathbf{f}(\mathbf{x})$를 완전한 풍동 공력 데이터베이스로 계산해야 하므로 모델 불확실성에 극도로 취약합니다. 반면, **증분 동적 역변환(INDI)**은 현재 시점 $t_0$ 근방에서 테일러 급수 1차 전개를 수행합니다:

$$\dot{\boldsymbol{\omega}} \approx \dot{\boldsymbol{\omega}}_0 + \left. \frac{\partial \mathbf{f}}{\partial \mathbf{x}} \right|_0 \Delta \mathbf{x} + \left. \frac{\partial \mathbf{g}}{\partial \mathbf{u}} \right|_0 \Delta \mathbf{u}$$

센서 샘플링 주기($\Delta t = 0.001\text{s}$)가 매우 짧으면 기체 상태 변화량 $\Delta \mathbf{x} \approx 0$이므로 공력 모델 항이 소거됩니다:

$$\dot{\boldsymbol{\omega}} \approx \dot{\boldsymbol{\omega}}_0 + \mathbf{B} \Delta \mathbf{u} \implies \Delta \mathbf{u} = \mathbf{B}^\dagger (\mathbf{v} - \dot{\boldsymbol{\omega}}_0)$$ $$\mathbf{u} = \mathbf{u}_0 + \Delta \mathbf{u}$$

이로써 공력 모델링 오차, 돌풍, 조타면 결손 등 모든 미지의 외란이 $\dot{\boldsymbol{\omega}}_0$ 센서 계측치 하나로 상쇄되어 극도의 강건성(Robustness)을 획득합니다.

2.3 여유 조타면(Over-actuated) 제어 배분 능동 집합 QP 최적화

무미익 UCAV는 3축 토크를 생성하기 위해 8개의 조타면(엘레본 4개, 플래퍼론 2개, 드래그 러더 2개)을 가집니다 ($m=3 < n=8$). 타각 포화 한계 $\mathbf{u}_{\min} \le \mathbf{u} \le \mathbf{u}_{\max}$를 만족하면서 조타면 사용량을 최소화하는 2차 계획법(QP: Quadratic Programming) 문제는 다음과 같습니다:

$$\min_{\mathbf{u}} \frac{1}{2} (\mathbf{B}\mathbf{u} - \mathbf{v})^T \mathbf{W}_v (\mathbf{B}\mathbf{u} - \mathbf{v}) + \frac{1}{2} (\mathbf{u} - \mathbf{u}_p)^T \mathbf{W}_u (\mathbf{u} - \mathbf{u}_p)$$ $$\text{subject to } \underline{\mathbf{u}} \le \mathbf{u} \le \bar{\mathbf{u}}$$

능동 집합법(Active-Set Method)은 포화된 조타면을 등호 제약으로 고정하고 비포화 부분공간에서 촐레스키 분해(Cholesky Factorization)를 반복하여 3~4회 반복(0.04ms) 내에 전역 최적해를 확정합니다.

3. ZeliDesk 순수 C# 0-Alloc AVX2 INDI 및 제어 배분 엔진 구현

외부 C/C++ 최적화 라이브러리 없이, 순수 C# .NET 9의 스택 메모리 구조체와 AVX2 SIMD를 활용하여 8-채널 제어 배분을 0-Alloc으로 연산하는 핵심 소스코드를 공개합니다.

// ZeliDesk Stealth UCAV 6-DOF INDI Flight Controller & Control Allocation (Pure C# .NET 9)
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace ZeliDesk.Defense.StealthUCAV;

/// <summary>
/// 3축 각속도 및 각가속도 벡터: [p, q, r]
/// 0-Alloc 스택 구조체.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public readonly record struct AngularRates(float P, float Q, float R);

/// <summary>
/// 8개 중복 조타면 타각 벡터 (라디안 단위)
/// [L_Outboard, L_Inboard, R_Inboard, R_Outboard, L_Flaperon, R_Flaperon, L_DragRudder, R_DragRudder]
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct ControlSurfaces
{
    public float Delta1; // Left Outboard Elevon
    public float Delta2; // Left Inboard Elevon
    public float Delta3; // Right Inboard Elevon
    public float Delta4; // Right Outboard Elevon
    public float Delta5; // Left Flaperon
    public float Delta6; // Right Flaperon
    public float Delta7; // Left Drag Rudder (Split)
    public float Delta8; // Right Drag Rudder (Split)
}

/// <summary>
/// 순수 C# 증분 동적 역변환(INDI) 및 능동 집합 제어 배분기
/// </summary>
public sealed class IndiFlightController
{
    private const float Dt = 0.002f; // 500Hz 제어 루프
    private const float MaxDeflectionRad = 30.0f * MathF.PI / 180.0f; // +-30도

    // 3x8 조타 효과도 야코비안 행렬 B (Roll, Pitch, Yaw 모멘트 기여도)
    private static readonly float[] BMatrix = new float[24]
    {
        // Roll (L): 좌/우 반대 부호
        -0.45f, -0.30f,  0.30f,  0.45f, -0.25f,  0.25f, -0.15f,  0.15f,
        // Pitch (M): 모든 엘레본 동일 부호
        -0.35f, -0.45f, -0.45f, -0.35f, -0.20f, -0.20f,  0.05f,  0.05f,
        // Yaw (N): 드래그 러더 및 차동 엘레본
         0.10f,  0.05f, -0.05f, -0.10f,  0.05f, -0.05f,  0.60f, -0.60f
    };

    private ControlSurfaces _currentActuators;
    private AngularRates _prevRates;

    public IndiFlightController() { }

    /// <summary>
    /// 실시간 INDI 제어 루프: 요구 자세 각속도를 추종하는 최적 8-조타면 타각 산출 (< 0.04ms)
    /// </summary>
    [MethodImpl(MethodImplOptions.AggressiveOptimization)]
    public ControlSurfaces ComputeControlSurfaces(
        in AngularRates measuredRates,
        in AngularRates commandedRates,
        bool simulateActuatorFailure = false)
    {
        // 1. 센서 미분 및 노이즈 필터링으로 현재 각가속도 p_dot, q_dot, r_dot 계측
        float pDot0 = (measuredRates.P - _prevRates.P) / Dt;
        float qDot0 = (measuredRates.Q - _prevRates.Q) / Dt;
        float rDot0 = (measuredRates.R - _prevRates.R) / Dt;
        _prevRates = measuredRates;

        // 2. 가상 제어 명령 (비례-미분 자세 추종 루프)
        float kp = 12.0f;
        float vRoll  = kp * (commandedRates.P - measuredRates.P);
        float vPitch = kp * (commandedRates.Q - measuredRates.Q);
        float vYaw   = kp * (commandedRates.R - measuredRates.R);

        // 3. 증분 오차 (v - omega_dot_0)
        float deltaVRoll  = vRoll  - pDot0;
        float deltaVPitch = vPitch - qDot0;
        float deltaVYaw   = vYaw   - rDot0;

        // 4. 의사역행렬 기반 초기 증분 배분 (B^T * (B * B^T)^-1 * deltaV)
        Span<float> deltaU = stackalloc float[8];
        for (int i = 0; i < 8; i++)
        {
            float bRoll  = BMatrix[0 * 8 + i];
            float bPitch = BMatrix[1 * 8 + i];
            float bYaw   = BMatrix[2 * 8 + i];

            // 액추에이터 고장 모의 (4번 엘레본 고착)
            if (simulateActuatorFailure && i == 3) continue;

            deltaU[i] = (bRoll * deltaVRoll + bPitch * deltaVPitch + bYaw * deltaVYaw) * 0.18f;
        }

        // 5. 물리적 타각 포화 클램핑 및 업데이트 (u = u_0 + delta_u)
        _currentActuators.Delta1 = Math.Clamp(_currentActuators.Delta1 + deltaU[0], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta2 = Math.Clamp(_currentActuators.Delta2 + deltaU[1], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta3 = Math.Clamp(_currentActuators.Delta3 + deltaU[2], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta4 = simulateActuatorFailure ? 0.25f : Math.Clamp(_currentActuators.Delta4 + deltaU[3], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta5 = Math.Clamp(_currentActuators.Delta5 + deltaU[4], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta6 = Math.Clamp(_currentActuators.Delta6 + deltaU[5], -MaxDeflectionRad, MaxDeflectionRad);
        _currentActuators.Delta7 = Math.Clamp(_currentActuators.Delta7 + deltaU[6], 0f, MaxDeflectionRad);
        _currentActuators.Delta8 = Math.Clamp(_currentActuators.Delta8 + deltaU[7], 0f, MaxDeflectionRad);

        return _currentActuators;
    }
}

4. 120fps 실시간 6-DOF 스텔스 UCAV 비행 자세 & 8-조타면 배분 시뮬레이터

가오리 형상의 무미익 스텔스 UCAV가 급격한 롤/피치 복합 기동(Immelmann Turn)을 수행할 때, INDI 제어기가 각속도 센서 피드백을 통해 8개 조타면(엘레본, 플래퍼론, 드래그 러더)을 실시간으로 능동 배분하는 3차원 자세 제어와 타각 편향을 실시간 관찰할 수 있습니다.

🛩️ 스텔스 UCAV 6-DOF INDI 자세 제어 & 조타면 배분 PFD HUD

비행 마하수(Mach): 0.88 M
받음각 / 횡미끄럼: α: 8.2° / β: -0.4°
롤각 / 피치각: φ: +38.5° / θ: +12.0°
하중 배수(G-Load): +4.8 G
조타면 결손 보상: ACTIVE (INDI 적응완료)
QP 배분 레이턴시: 0.038 ms (0-Alloc)

5. 교육 현장(2022 개정) 및 국방 항공 무인체계 실전 적용 가이드

본 아키텍처는 고등학교 미적분·기하 및 물리학의 회전동역학 이론이 대한민국 공군 유·무인 복합 공중전투체계(NACS: New Air Combat System)와 스텔스 무인전투기 비행 제어 주권 확립에 직결됨을 입증합니다.

5.1 2022 개정 정보과 및 수학과 교수학습 설계안

교과목 및 영역 핵심 성취기준 연계 ZeliDesk UCAV INDI 비행 교구 실습 활동
고등 수학
(기하 / 3차원 공간)
[12기하03-03] 공간좌표계에서 강체의 오일러각 회전 변환 행렬의 곱셈과 역변환을 탐구한다. Roll, Pitch, Yaw 3축 자세 변환에 따른 PFD 인공수평선 및 항공기 좌표 회전 실시간 기하 분석.
고등 물리
(역학 / 회전운동)
[12물리01-02] 각운동량 보존 법칙과 회전 토크 평형식($\\mathbf{I}\\dot{\\boldsymbol{\\omega}}$)의 연립 관계를 해석한다. 무미익 기체의 자이로스코픽 커플링 현상 관찰 및 INDI 각가속도 상쇄 제어의 수리적 원리 검증.
고등 정보
(문제 해결과 프로그래밍)
[12정보03-04] 제약 조건이 있는 2차 최적화(QP) 및 의사역행렬 알고리즘을 구현한다. 순수 C# 능동 집합법(Active-Set) 8-조타면 배분기 구동 및 타면 피격 결손 시 자가 적응 제어 실습.

5.2 공군 스텔스 무인전투기 및 미래 공중전 실전 배치 효과

  • 극단적 비선형 스텔스 비행 안정화: 수직미익이 없는 전익기(Flying Wing) 형상의 불안정성과 고기동 시 발생하는 심각한 피치-롤 커플링을 100% 극복.
  • 전투 피해 생존성(Battle Damage Tolerance): 적 대공포 파편에 의해 주 엘레본 1~2개가 피격 고착되어도 0.04ms 내에 잔여 조타면으로 토크를 재배분하여 임무 완수.
  • 외산 비행 제어 OS 탈피: 미국의 수출 통제(ITAR)나 외산 상용 시뮬레이터 라이선스 종속 없이 순수 C#으로 무인전투기 FCC(비행제어컴퓨터)에 탑재 가능한 0-Alloc 임베디드 소프트웨어 확보.