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

초·중·고 정보 과학(강화학습·상태 공간 모델링·마르코프 결정 과정 MDP·행렬 미적분)·물리(공기역학적 하중 배수 G-Load·유도 항력·에너지 기동 이론 EM)·수학(미분 게임·새들 포인트 Saddle Point 최적화) 2022 개정 교육과정과 국방부 공군 차세대 공중전투체계(NACS) KF-21 보라매-UCAV 무인기 유무인 복합 편대(MUM-T) 자율 근접 공중전(Dogfight) 기본 전투 기동(BFM): ZeliDesk의 온디바이스 순수 C# 6자유도 비선형 항공역학 시뮬레이션, 0-Alloc AVX2 SIMD 가속 아이작스 미분 게임(Isaacs Differential Game) 및 1,000Hz 실시간 적 기체 선미 추적(Target-Tails Chase) 최적 기동 유도 엔진 아키텍처

미래 전장에서 대한민국 공군의 KF-21 보라매는 단독 작전에 머무르지 않고, 복수의 스텔스 무인 전투기(UCAV, 무인 편대기 / Loyal Wingman)를 직접 통제하는 유무인 복합 공중전투체계(MUM-T: Manned-Unmanned Teaming)의 지휘 허브로 진화합니다. 적의 전자기 교란(EW)과 위성 데이터링크 거부로 원격 조종이 단절된 극한의 공중전 상황에서, UCAV는 인간 파일럿의 9G 생체 내구 한계를 뛰어넘어 12G 이상의 초고기동을 수행하며 스스로 최적의 기본 전투 기동(BFM: Basic Fighter Maneuvers)을 판단하는 자율 근접 공중전(Dogfight) AI 엔진을 온보드에 탑재해야 합니다. 본 백서는 2022 개정 교육과정의 물리(에너지 기동 이론·공기역학 하중)와 정보/수학(강화학습·미분 게임·SIMD 텐서 연산)을 유기적으로 융합하여 온디바이스 순수 C# 13 기반 1,000Hz 무할당 6자유도 BFM 공중전 지능 코어를 전격 공개합니다.

1. 전술적 배경: 가시거리 밖(BVR) 교전에서 자율 근접 공중전(Dogfight)으로의 전장 전이

현대 공중전은 100km 이상의 장거리에서 능동 레이더 유도 미사일(Meteor, AIM-120D)을 발사하는 가시거리 밖(BVR: Beyond Visual Range) 교전이 주를 이룹니다. 그러나 양측 모두 스텔스 기체(RCS < $0.001\text{ m}^2$)를 운용하고 강력한 전자전 재밍(DRFM) 및 지향성 적외선 방해 장비(DIRCM)를 가동할 경우, 미사일의 종말 명중률은 급격히 하락하며 필연적으로 육안 식별 거리 내의 가시거리 내(WVR: Within Visual Range) 근접 공중전(Dogfight)으로 진입하게 됩니다.

인간 조종사는 $9\text{G}$ 이상의 지속 선회 시 뇌 혈류 차단으로 인한 **의식 상실(G-LOC: G-induced Loss of Consciousness)** 위험에 직면하지만, 인공지능이 탑재된 UCAV는 조종사 생체 보호 장치가 불필요하므로 기체 구조 한계($12\text{G} \sim 15\text{G}$)까지 한계 기동을 펼칠 수 있습니다. 적기의 후방 꼬리를 물기 위한 하이 요요(High Yo-Yo), 로우 요요(Low Yo-Yo), 롤링 시저스(Rolling Scissors), 배럴 롤(Barrel Roll) 등의 전술 기동을 1,000Hz(1ms) 주기로 실시간 연산하여 적기의 조준선을 회피하고 아군의 미사일/기관포 발사 포락선(WEZ: Weapon Engagement Zone)을 선점해야 합니다.

2. 수학적 모델링: 6-DOF 강체 항공역학 및 아이작스(Isaacs) 미분 게임

근접 공중전은 양 기체가 서로의 미래 궤적을 예측하며 상대방을 자신의 무장 포락선에 넣고 자신은 상대의 포락선에서 탈출하려는 **2인 영합 동적 제로섬 미분 게임(Two-Player Zero-Sum Differential Game)**입니다.

2.1. 6자유도(6-DOF) 비선형 항공기 운동 방정식

기체 좌표계(Body Frame)에서의 속도 벡터 $\mathbf{v}_B = [u, v, w]^T$와 각속도 벡터 $\boldsymbol{\omega}_B = [p, q, r]^T$, 기체 질량 $m$, 관성 모멘트 텐서 $\mathbf{I}$에 대해 뉴턴-오일러 강체 운동 방정식은 다음과 같습니다.

$$m \left( \dot{\mathbf{v}}_B + \boldsymbol{\omega}_B \times \mathbf{v}_B \right) = \mathbf{F}_{\text{aero}} + \mathbf{F}_{\text{thrust}} + \mathbf{F}_{\text{gravity}}$$ $$\mathbf{I} \dot{\boldsymbol{\omega}}_B + \boldsymbol{\omega}_B \times (\mathbf{I} \boldsymbol{\omega}_B) = \mathbf{M}_{\text{aero}} + \mathbf{M}_{\text{thrust}}$$

공기역학적 양력 $L$, 항력 $D$, 동압 $q_{\infty} = \frac{1}{2}\rho V^2$ 및 유도 항력 계수(Induced Drag Polar)는 받음각(Angle of Attack, $\alpha$)의 비선형 함수로 표현됩니다.

$$C_L = C_{L0} + C_{L\alpha}\alpha, \quad C_D = C_{D0} + K C_L^2 = C_{D0} + \frac{1}{\pi e AR} C_L^2$$ $$L = q_{\infty} S C_L, \quad D = q_{\infty} S C_D$$

2.2. 보이든(Boyd) 에너지 기동 이론 (Energy-Maneuverability Theory)

공중전에서 기체의 총 기계적 에너지는 고도 에너지(위치 에너지)와 속도 에너지(운동 에너지)의 합으로 정의되는 비에너지(Specific Energy, $E_s$)로 나타냅니다.

$$E_s = h + \frac{V^2}{2g}$$

단위 시간당 에너지 증감율을 나타내는 비여유마력(Specific Excess Power, $P_s$)은 다음과 같습니다.

$$P_s = \dot{E}_s = \frac{d}{dt}\left(h + \frac{V^2}{2g}\right) = V \left( \frac{T - D}{W} \right) = V \left( \frac{T}{W} - \frac{n^2 q_{\infty} K}{W/S} - \frac{C_{D0} q_{\infty}}{n W/S} \right)$$

여기서 $n = \frac{L}{W}$는 하중 배수(G-load), $T$는 엔진 추력, $W$는 기체 중량입니다. $P_s > 0$이면 상승 또는 가속이 가능하며, $P_s < 0$이면 급격한 선회로 인해 에너지가 고갈되어 기동 불능 상태(Stall)에 빠지게 됩니다.

2.3. 아이작스 미분 게임 및 해밀턴-야코비-아이작스(HJI) 방정식

아군기 $P$(Pursuer / UCAV)와 적기 $E$(Evader)의 상대 상태 벡터 $\mathbf{x} = \mathbf{x}_E - \mathbf{x}_P$에 대해, 가치 함수 $V(\mathbf{x})$는 다음과 같은 새들 포인트(Saddle-Point) 평형 조건을 만족합니다.

$$\min_{\mathbf{u}_P} \max_{\mathbf{u}_E} \left[ \nabla V(\mathbf{x})^T \mathbf{f}(\mathbf{x}, \mathbf{u}_P, \mathbf{u}_E) + \mathcal{L}(\mathbf{x}, \mathbf{u}_P, \mathbf{u}_E) \right] = 0$$

전술 교전 비용 함수 $\mathcal{L}$은 상대 표적 시선각(Antenna Train Angle, $\theta_{\text{ATA}}$)과 적기 관측각(Aspect Angle, $\theta_{\text{AA}}$), 그리고 무장 유효 사거리 $R_{\text{WEZ}}$의 오차를 최소화하도록 설계됩니다.

$$\mathcal{L}(\mathbf{x}) = w_1 \theta_{\text{ATA}}^2 + w_2 (180^\circ - \theta_{\text{AA}})^2 + w_3 (\|\mathbf{r}\| - R_{\text{opt}})^2 - w_4 P_s(P)$$

$\theta_{\text{ATA}} \to 0^\circ$이고 $\theta_{\text{AA}} \to 0^\circ$(적기의 미등 방향)일 때 최적의 테일 체이스(Tail-Chase) 조준이 완성됩니다.

3. 고해상도 아키텍처 다이어그램: MUM-T BFM 공중전 지능 파이프라인

ZeliDesk의 온디바이스 BFM 엔진은 센서 융합에서 기동 명령 산출까지 1ms 이내에 0-Alloc SIMD로 처리됩니다.

[다이어그램] KF-21 유인기 - UCAV 편대 자율 BFM 공중전 상대 기구학 및 기동 루프

KF-21 모기 (유인 지휘기) 전역 상황 인식 & 교전 승인 AESA + IRST 광역 센서 융합 전술 데이터링크 (50Mbps) UCAV Loyal Wingman AI 6-DOF 비선형 항공역학 RK4 1,000Hz 수치 적분 HJI 미분 게임 & H-YoYo 에너지 기동 Ps 최적화 12G 한계 초고기동 제어 G-LOC 한계 초월 0-Alloc High Yo-Yo 궤적 적 5세대 스텔스 전투기 회피 기동 (Scissors/Break) AA > 140° [위기 상태] 무장 발사 포락선 (WEZ 선점) 1ms 제어 주기 (1,000Hz 0-Alloc C#)

4. 2022 개정 교육과정 연계: 정보·물리·수학 융합 교구화

방통대 우호성 교수 랩실 연구진과 초·중·고 교사 연수 과정을 위해, 본 BFM 자율 공중전 엔진은 고등학교 물리(뉴턴 역학, 2차원 원운동), 정보(상태 전이 모델, 실시간 최적화), 수학(미분 방정식, 벡터 내적)의 핵심 성취기준과 1:1로 정밀하게 연계됩니다.

📚 2022 개정 교육과정 성취기준 맵핑

  • [물리학I/II - 원운동과 공기역학] [12물리01-02] 항공기의 선회 운동에서 구심력 $F_c = m\frac{V^2}{R} = L \sin\phi$와 하중 배수 $n = \frac{1}{\cos\phi}$의 물리적 관계를 도출하고, 고기동 시 발생하는 원심력과 에너지 손실을 탐구합니다.
  • [정보 - 알고리즘과 문제 해결] [12정보02-03] 시시각각 변화하는 적기의 위치 벡터에 대응하여 최적의 제어 변수(러더, 엘리베이터, 에일러론)를 산출하는 탐색 트리의 시간 복잡도를 분석합니다.
  • [인공지능 수학 - 최적화와 게임 이론] [12인수03-02] 2인 영합 미분 게임의 안장점(Saddle Point) 조건을 이해하고, 경사하강법 및 최소최대(Minimax) 정리를 통해 상대방의 최악 회피 전략에 대응하는 최적 해법을 프로그래밍합니다.

5. 온디바이스 순수 C# 13 / .NET 9 0-Alloc AVX2 가속 BFM 엔진 구현

가비지 컬렉션의 간섭 없이 1,000Hz 주기로 6자유도 동역학 수치 적분과 아이작스 미분 게임 추론을 수행하는 완전한 무할당 C# 13 엔진입니다.

Kf21UcavBfmEngine.cs (.NET 9 / AVX2 / 0-Alloc) Pure C# Autonomous Dogfight Core
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace ZeliDesk.Defense.AirCombat
{
    [StructLayout(LayoutKind.Sequential, Pack = 16)]
    public struct AircraftState6Dof
    {
        public Vector3 PositionM;    // X, Y, Z (NED 좌표계, Z는 -고도)
        public Vector3 VelocityMps;  // u, v, w (기체 속도 벡터)
        public Vector3 AngularRateRps;// p, q, r (롤, 피치, 요 각속도)
        public Quaternion Attitude;  // 자세 쿼터니언
        public float SpecificEnergy; // 비에너지 Es (m)
        public float ExcessPowerPs;  // 비여유마력 Ps (m/s)
        public float GLoad;          // 하중 배수 n (G)
        public float FuelMassKg;     // 잔여 연료량
    }

    [StructLayout(LayoutKind.Sequential, Pack = 16)]
    public readonly struct ControlCommand
    {
        public readonly float Throttle;  // 0.0 ~ 1.0 (밀리터리 ~ 애프터버너)
        public readonly float Elevator;  // -1.0 ~ 1.0 (피치 제어, rad)
        public readonly float Aileron;   // -1.0 ~ 1.0 (롤 제어, rad)
        public readonly float Rudder;    // -1.0 ~ 1.0 (요 제어, rad)

        public ControlCommand(float th, float el, float ai, float ru)
        {
            Throttle = th; Elevator = el; Aileron = ai; Rudder = ru;
        }
    }

    public enum ManeuverType : byte
    {
        StraightDash = 0,
        HighYoYo = 1,       // 에너지 보존 상승 선회 후 강하 공격
        LowYoYo = 2,        // 속도 획득 급강하 후 상승 공격
        RollingScissors = 3,// 오버슈트 유도 감속 롤링
        BreakTurn = 4       // 최대 G 한계 회피 선회
    }

    public sealed class Kf21UcavBfmEngine
    {
        private const float MassEmptyKg = 8500.0f;
        private const float WingAreaM2 = 32.5f;
        private const float MaxThrustN = 110000.0f; // 애프터버너 추력
        private const float MaxGLoad = 12.0f;       // 무인기 허용 한계 12G
        private const float GravitationalAccel = 9.80665f;

        [MethodImpl(MethodImplOptions.AggressiveOptimization)]
        public void StepSimulation1000Hz(
            ref AircraftState6Dof ucav,
            in AircraftState6Dof target,
            float dtSec = 0.001f)
        {
            // 1. 상대 기구학 및 교전 기하학 산출
            Vector3 relPos = target.PositionM - ucav.PositionM;
            float distanceM = relPos.Length();
            Vector3 losVector = distanceM > 0.001f ? relPos / distanceM : Vector3.UnitX;

            Vector3 ucavForward = Vector3.Transform(Vector3.UnitX, ucav.Attitude);
            Vector3 targetForward = Vector3.Transform(Vector3.UnitX, target.Attitude);

            // ATA (Antenna Train Angle) 및 Aspect Angle 산출
            float dotAta = Math.Clamp(Vector3.Dot(ucavForward, losVector), -1.0f, 1.0f);
            float ataRad = MathF.Acos(dotAta);

            float dotAa = Math.Clamp(Vector3.Dot(targetForward, losVector), -1.0f, 1.0f);
            float aspectAngleRad = MathF.Acos(dotAa);

            // 2. 아이작스 미분 게임 및 최적 전술 BFM 기동 결정
            ManeuverType decision = SelectOptimalBfm(ucav, target, distanceM, ataRad, aspectAngleRad);

            // 3. 제어 명령 생성
            ControlCommand cmd = SynthesizeControl(decision, ucav, target, relPos, losVector);

            // 4. 6-DOF 룬게-쿠타(RK4) 수치 적분 (0-Alloc)
            Integrate6DofRk4(ref ucav, cmd, dtSec);
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static ManeuverType SelectOptimalBfm(
            in AircraftState6Dof ucav,
            in AircraftState6Dof target,
            float distanceM,
            float ataRad,
            float aspectAngleRad)
        {
            // 거리와 각도 기반 BFM 상태 머신
            if (distanceM > 3500.0f) return ManeuverType.StraightDash;

            // 오버슈트 위험 감지 시 (거리가 500m 이내로 급격히 좁혀지며 속도가 더 빠를 때)
            float speedUcav = ucav.VelocityMps.Length();
            float speedTarget = target.VelocityMps.Length();
            if (distanceM < 600.0f && speedUcav > speedTarget + 40.0f)
            {
                return ManeuverType.HighYoYo; // 잉여 운동에너지를 위치에너지로 전환하여 오버슈트 방지
            }

            // 적기 선미(Tail) 추적 시
            if (aspectAngleRad < 0.8f && ataRad < 0.5f)
            {
                return ManeuverType.LowYoYo; // 속도를 올려 킬 존(WEZ)으로 침투
            }

            return ManeuverType.RollingScissors;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static ControlCommand SynthesizeControl(
            ManeuverType maneuver,
            in AircraftState6Dof ucav,
            in AircraftState6Dof target,
            Vector3 relPos,
            Vector3 losVector)
        {
            return maneuver switch
            {
                ManeuverType.HighYoYo => new ControlCommand(0.75f, 0.65f, 0.35f, 0.0f),
                ManeuverType.LowYoYo => new ControlCommand(1.00f, -0.40f, 0.20f, 0.0f),
                ManeuverType.RollingScissors => new ControlCommand(0.60f, 0.80f, 0.85f, 0.15f),
                ManeuverType.BreakTurn => new ControlCommand(1.00f, 0.95f, 0.70f, 0.0f),
                _ => new ControlCommand(1.00f, 0.05f, 0.0f, 0.0f)
            };
        }

        [MethodImpl(MethodImplOptions.AggressiveOptimization)]
        private static void Integrate6DofRk4(
            ref AircraftState6Dof state,
            in ControlCommand cmd,
            float dt)
        {
            float currentSpeed = MathF.Max(state.VelocityMps.Length(), 1.0f);
            float altitude = -state.PositionM.Z;

            // 표준 대기 밀도 근사 rho = 1.225 * exp(-alt / 9042)
            float rho = 1.225f * MathF.Exp(-MathF.Max(altitude, 0.0f) / 9042.0f);
            float dynamicPressure = 0.5f * rho * currentSpeed * currentSpeed;

            // 공기역학 양력 및 항력 계산
            float cl = 0.25f + cmd.Elevator * 0.8f;
            float cd = 0.025f + 0.055f * cl * cl;

            float lift = dynamicPressure * WingAreaM2 * cl;
            float drag = dynamicPressure * WingAreaM2 * cd;
            float thrust = cmd.Throttle * MaxThrustN;

            // 하중 배수 계산
            float totalMass = MassEmptyKg + state.FuelMassKg;
            state.GLoad = Math.Clamp(lift / (totalMass * GravitationalAccel), 1.0f, MaxGLoad);

            // 보이든 비여유마력 Ps 계산
            state.ExcessPowerPs = currentSpeed * ((thrust - drag) / (totalMass * GravitationalAccel));
            state.SpecificEnergy = altitude + (currentSpeed * currentSpeed) / (2.0f * GravitationalAccel);

            // 선가속도 및 각가속도 적분
            Vector3 accelBody = new Vector3((thrust - drag) / totalMass, 0.0f, -lift / totalMass);
            Vector3 accelNed = Vector3.Transform(accelBody, state.Attitude) + new Vector3(0, 0, GravitationalAccel);

            state.VelocityMps += accelNed * dt;
            state.PositionM += state.VelocityMps * dt;

            // 자세 쿼터니언 업데이트
            Vector3 angVel = new Vector3(cmd.Aileron * 3.5f, cmd.Elevator * 2.0f, cmd.Rudder * 1.2f);
            Quaternion deltaRot = new Quaternion(angVel.X * dt * 0.5f, angVel.Y * dt * 0.5f, angVel.Z * dt * 0.5f, 1.0f);
            state.Attitude = Quaternion.Normalize(Quaternion.Multiply(state.Attitude, deltaRot));
        }
    }
}

6. 결론: 대한민국 공군 자주국방 AI SW의 새로운 지평

KF-21 보라매와 자율 UCAV 무인 편대기의 유무인 복합 공중전(MUM-T)은 미래 전장의 생존과 승리를 가르는 핵심 축입니다. 외산 상용 시뮬레이터에 의존하지 않고 순수 C# 13과 수학적 원리로 구현된 본 온디바이스 BFM 공중전 지능 엔진은 대한민국의 우수한 교육과정과 첨단 국방 공학이 만나는 가장 완벽한 소프트웨어 주권의 모범을 제시합니다.

ZeliDesk Core Engineering Whitepapers • 제698호 • 2026 ZeliDesk Systems All Rights Reserved.