AIDT 온디바이스 국방 MUM-T 틸트로터 무인기(Tiltrotor UAV) 동적 유입류(Dynamic Inflow) 및 천이 비행 나셀 틸트 서보 엔진

헬리콥터 수직이착륙에서 고속 터보프롭 수평비행 간 피트-피터스(Pitt-Peters) 유입류 비대칭성 실시간 보상, 10,000Hz C# 엔진

1. 개요

활주로가 없는 상륙함 및 좁은 야전 기지에서 수직 이착륙(VTOL)한 후 고속(450km/h 이상)으로 장거리 침투 비행하는 틸트로터(Tiltrotor) 무인기는 회전익 헬리콥터 모드와 고정익 비행기 모드의 장점을 결합한 현대 공중 다영역 작전의 핵심 자산입니다. 그러나 주익 양 끝단의 로터 나셀 각도가 수직(90°)에서 수평(0°)으로 회전 변환되는 천이 비행 구간(Transition/Conversion Corridor)에서는 로터의 강력한 다운워시가 주익 상면과 충돌하여 극심한 하향력(Download)과 와류 박리를 유발합니다. 또한 전진 비행 속도와 틸트 각도 변화에 따라 로터 회전면 상의 3차원 유입류 속도 분포가 전후·좌우로 극심하게 왜곡되는 피트-피터스(Pitt-Peters) 동적 유입류(Dynamic Inflow) 비대칭성이 발생합니다. 이 비대칭 유입류는 로터 블레이드의 주기적 플래핑(Flapping)과 이상 진동, 기체 피치 트림 급변을 초래하여 비행 제어 상실을 유발합니다. 본 고에서는 10,000Hz 고속 루프로 피트-피터스 동적 유입류를 실시간 보상하고 나셀 회전각, 스와시플레이트 주기 피치 및 주익 플래퍼론을 다변수 연동 제어하는 0-Alloc C# 비행제어 엔진을 구현합니다.

2. 수학적 모델링 및 지배 방정식

로터 회전면 유입류 \(\lambda(r, \psi) = \lambda_0 + \lambda_{1s} \frac{r}{R} \sin\psi + \lambda_{1c} \frac{r}{R} \cos\psi\)에 대한 피트-피터스(Pitt-Peters) 동적 유입류 미분방정식은 다음과 같습니다:

\[ \mathbf{M}_{inflow} \begin{bmatrix} \dot{\lambda}_0 \\ \dot{\lambda}_{1s} \\ \dot{\lambda}_{1c} \end{bmatrix} + \mathbf{L}_{inflow}^{-1} \begin{bmatrix} \lambda_0 \\ \lambda_{1s} \\ \lambda_{1c} \end{bmatrix} = \begin{bmatrix} C_T \\ C_{Mx} \\ C_{My} \end{bmatrix}_{aero} \]

여기서 \(\mathbf{L}_{inflow}\)는 전진비 \(\mu = \frac{V_\infty \cos\beta_n}{\Omega R}\)와 유입비의 비선형 함수 행렬입니다.

나셀 틸트 각도 \(\beta_n \in [0^\circ, 90^\circ]\)에 따른 주익 공력 양력 \(L_{wing}\)과 로터 추력 \(T_{rotor}\)의 합성 수직력 및 전진 추진력 관계식은 다음과 같습니다:

\[ F_z = 2 T_{rotor} \sin\beta_n + \frac{1}{2} \rho V_\infty^2 S_w C_L(\alpha_w, \delta_{flap}) - F_{download}(\beta_n) \]
\[ F_x = 2 T_{rotor} \cos\beta_n - \frac{1}{2} \rho V_\infty^2 S_w C_D(\alpha_w, \delta_{flap}) \]

천이 안전 회랑(Conversion Corridor) 내 비행을 유지하기 위한 나셀 각속도 \(\dot{\beta}_n\) 및 다변수 조타 할당 서보 법칙은 다음과 같습니다:

\[ \begin{bmatrix} \theta_{col} \\ \theta_{1s} \\ \theta_{1c} \\ \delta_{flaperon} \end{bmatrix} = \mathbf{B}^\dagger(\beta_n, V_\infty) \begin{bmatrix} \Delta F_z \\ \Delta M_{roll} \\ \Delta M_{pitch} \\ \Delta M_{yaw} \end{bmatrix} \]

3. C# 고성능 온디바이스 서보 엔진 구현

10,000Hz 주기로 나셀 각도, 대기속도 및 자이로 각속도를 피드백받아 블레이드 피치와 조타면을 통합 제어하는 0-Alloc C# 엔진입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Defense.MumT.TiltrotorUav
{
    /// <summary>
    /// 틸트로터 무인기 비행 상태 및 나셀 지향각
    /// </summary>
    public readonly ref struct TiltrotorFlightTelemetryState
    {
        public readonly double NacelleAngleDeg;       // 나셀 각도 (90도=수직, 0도=수평) [deg]
        public readonly double AirspeedMps;           // 대기속도 [m/s]
        public readonly double PitchRateRadPerSec;    // 피치 각속도 q [rad/s]
        public readonly double RollRateRadPerSec;     // 롤 각속도 p [rad/s]
        public readonly double RotorRpm;              // 로터 회전수 [RPM]

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public TiltrotorFlightTelemetryState(double nacelleDeg, double vAir, double q, double p, double rpm)
        {
            NacelleAngleDeg = nacelleDeg;
            AirspeedMps = vAir;
            PitchRateRadPerSec = q;
            RollRateRadPerSec = p;
            RotorRpm = rpm;
        }
    }

    /// <summary>
    /// 로터 스와시플레이트 피치 및 조타면 구동 출력
    /// </summary>
    public readonly ref struct TiltrotorActuatorOutput
    {
        public readonly double CollectivePitchDeg;     // 로터 콜렉티브 피치 [deg]
        public readonly double LongitudinalCyclicDeg;  // 종방향 사이클릭 피치 [deg]
        public readonly double WingFlaperonDeg;        // 주익 플래퍼론 타각 [deg]
        public readonly double CommandedNacelleRateDps;// 나셀 틸트 각속도 지령 [deg/s]
        public readonly bool IsWithinSafeCorridor;     // 천이 비행 안전 회랑 내 유지 여부

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public TiltrotorActuatorOutput(double col, double cyc, double flap, double nacRate, bool safe)
        {
            CollectivePitchDeg = col;
            LongitudinalCyclicDeg = cyc;
            WingFlaperonDeg = flap;
            CommandedNacelleRateDps = nacRate;
            IsWithinSafeCorridor = safe;
        }
    }

    /// <summary>
    /// 10,000Hz 틸트로터 동적 유입류 보상 및 천이 비행 서보 엔진
    /// </summary>
    public ref struct TiltrotorTransitionServoEngine
    {
        private readonly double _kpPitch;
        private readonly double _kdPitch;
        private readonly double _kpRoll;
        private readonly double _kdRoll;
        private readonly double _maxNacelleRateDps;

        private double _inflowLambda1c; // 종방향 유입류 상태 변수
        private double _prevPitchRate;

        public TiltrotorTransitionServoEngine(
            double kpPitch,
            double kdPitch,
            double kpRoll,
            double kdRoll,
            double maxNacelleRateDps)
        {
            _kpPitch = kpPitch;
            _kdPitch = kdPitch;
            _kpRoll = kpRoll;
            _kdRoll = kdRoll;
            _maxNacelleRateDps = maxNacelleRateDps;
            _inflowLambda1c = 0.0;
            _prevPitchRate = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public TiltrotorActuatorOutput ComputeCycle(
            in TiltrotorFlightTelemetryState state,
            double targetNacelleDeg,
            double dtSeconds)
        {
            // 1. 피트-피터스 종방향 비대칭 동적 유입류 간이 추정 (전진비에 비례)
            double tipSpeed = (state.RotorRpm * 2.0 * Math.PI / 60.0) * 1.5; // 반경 1.5m 로터
            double advanceRatio = (state.AirspeedMps * Math.Cos(state.NacelleAngleDeg * Math.PI / 180.0)) / Math.Max(10.0, tipSpeed);
            double targetLambda1c = 0.15 * advanceRatio;
            _inflowLambda1c += (targetLambda1c - _inflowLambda1c) * (dtSeconds / 0.02); // 시정수 20ms 일차 필터

            // 2. 나셀 각도에 따른 천이 안전 속도 회랑(Conversion Corridor) 검증
            // 수직모드(90도)에서는 0~30m/s, 수평모드(0도)에서는 50~120m/s 허용
            double minCorridorSpeed = (90.0 - state.NacelleAngleDeg) * 0.55;
            double maxCorridorSpeed = 30.0 + (90.0 - state.NacelleAngleDeg) * 1.0;
            bool isCorridorSafe = state.AirspeedMps >= (minCorridorSpeed - 5.0) && state.AirspeedMps <= (maxCorridorSpeed + 10.0);

            // 3. 나셀 틸트 지령 슬루레이트 제어
            double nacelleErr = targetNacelleDeg - state.NacelleAngleDeg;
            double nacelleRateCmd = Math.Clamp(nacelleErr * 2.0, -_maxNacelleRateDps, _maxNacelleRateDps);

            // 4. 로터 콜렉티브 & 주익 플래퍼론 분배 (나셀 각도 가중 블렌딩)
            double nacelleRad = state.NacelleAngleDeg * Math.PI / 180.0;
            double rotorWeight = Math.Sin(nacelleRad); // 90도일 때 1.0
            double wingWeight = Math.Cos(nacelleRad);  // 0도일 때 1.0

            double baseCollective = 8.0 * rotorWeight + 16.0 * wingWeight; // 비행기 모드에서 큰 피치

            // 5. 종방향 사이클릭 피치 = 피치 댐핑 + 비대칭 유입류 보상
            double dPitchRate = (state.PitchRateRadPerSec - _prevPitchRate) / dtSeconds;
            _prevPitchRate = state.PitchRateRadPerSec;

            double cyclicComp = -(_kpPitch * state.PitchRateRadPerSec + _kdPitch * dPitchRate) + (_inflowLambda1c * 12.0);
            double longitudinalCyclic = Math.Clamp(cyclicComp, -10.0, 10.0);

            // 주익 플래퍼론은 고정익 모드 비율에 맞춰 증가
            double flaperon = Math.Clamp(wingWeight * 15.0 - (state.PitchRateRadPerSec * 8.0), 0.0, 25.0);

            return new TiltrotorActuatorOutput(
                baseCollective,
                longitudinalCyclic,
                flaperon,
                nacelleRateCmd,
                isCorridorSafe);
        }
    }
}

4. 국방 및 교육 적용 방안

  • 국방부 AI 교과서 & 공군사관학교/해군항공사령부: 수직이착륙-고속순항 틸트로터 천이 비행 회랑 모델링, 피트-피터스 유입류 가상실험 교구.
  • 한국항공우주연구원(KARI) / KAI: 차세대 수직이착륙 무인기(TR-60급) 천이 비행 자동제어기 및 비행제어컴퓨터(FCC) 실장.