AIDT 온디바이스 국방 MUM-T 차세대 수륙양용장갑차(AAAV) 워터제트 추력 편향 서보 엔진

쇄파대(Surf Zone) 섭동 속 쌍동 워터제트 디플렉터·리버서 3D 벡터링, 10,000Hz C# 엔진

1. 개요

해병대 상륙 작전의 핵심 기동 타격 자산인 차세대 상륙돌격장갑차(AAAV / KAAV-II)는 원거리 상륙함에서 해안선까지 20노트 이상의 고속 수상 활주(Planing)로 신속히 돌파해야 합니다. 그러나 30톤 이상의 중장갑 차체가 바다에 진입하면 거대한 조파 저항과 해안 근처 쇄파대(Surf Zone)의 격렬한 부서지는 파도가 차체를 측면으로 전복시키려는 강력한 전도 모멘트를 가합니다. 스크루 프로펠러 대신 차체 후방에 장착된 듀얼 워터제트(Twin Waterjet) 추진기는 고압의 해수 분류(Water Jet Plume)를 뿜어내며, 디플렉터(Deflector, 방향타)와 리버서(Reverser, 역추진 버킷)를 복합 제어하여 3차원 추력 편향(Thrust Vectoring)을 수행해야 합니다. 파도 주기에 맞춰 1밀리초 이내에 좌우 워터제트의 차동 추력과 트림 탭(Trim Tab) 각도를 능동 보정하지 못하면 차체가 파도에 휩쓸려 좌초할 수 있습니다. 본 고에서는 6자유도 해상 동역학 기반으로 추력 벡터를 10,000Hz 주기로 합성하는 0-Alloc C# 엔진을 구현합니다.

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

워터제트 펌프 임펠러 회전수 \(N_{rpm}\), 흡입구 유속 \(V_{in}\), 노즐 분사 단면적 \(A_{noz}\)에 따른 단위 시간당 질량 유량 \(\dot{m}_w\) 및 분사 추력 \(T_{jet}\) 방정식은 다음과 같습니다:

\[ \dot{m}_w = \rho_{sea} A_{noz} V_{jet}, \quad T_{jet} = \dot{m}_w (V_{jet} - V_{in}) = \rho_{sea} A_{noz} V_{jet}^2 \left(1 - \frac{V_0}{V_{jet}}\right) \]

좌측(\(L\)) 및 우측(\(R\)) 노즐의 조향 디플렉터 각도 \(\delta_y\)와 리버서 각도 \(\delta_z\)에 따른 종합 유효 추진력 벡터 \(\mathbf{F}_{prop}\) 및 요(Yaw)/롤(Roll) 제어 모멘트 \(\mathbf{M}_{prop}\)는 다음과 같습니다:

\[ \mathbf{F}_{prop} = \begin{bmatrix} (T_L \cos \delta_{yL} + T_R \cos \delta_{yR}) \cos \delta_z \\ (T_L \sin \delta_{yL} + T_R \sin \delta_{yR}) \\ (T_L + T_R) \sin \delta_z \end{bmatrix}, \quad N_{yaw} = \frac{d_{jets}}{2} (T_R \cos \delta_{yR} - T_L \cos \delta_{yL}) + L_{arm} (T_L \sin \delta_{yL} + T_R \sin \delta_{yR}) \]

쇄파대 횡파에 의한 전복 모멘트 \(M_{wave}(t)\)를 상쇄하고 차체 롤 각도 \(\phi_{roll}\)를 0으로 유지하기 위한 비선형 슬라이딩 모드(SMC) 차동 추력 제어 법칙은 다음과 같습니다:

\[ s_{roll} = \dot{\phi} + \lambda_\phi \phi, \quad \Delta T_{diff} = T_L - T_R = -K_{smc} \text{sat}\left(\frac{s_{roll}}{\epsilon_\phi}\right) - J_{xx} \ddot{\phi}_{des} \]

선체 활주면의 동적 트림 각도 \(\theta_{trim}\)를 최적화하여 조파 저항을 최소화하는 적응형 트림 탭 각도 \(\delta_{tab}\) 구속 조건은 다음과 같습니다:

\[ \theta_{trim}^* = \arg\min_{\theta} R_{hydro}(\theta, V_0) \approx 3.5^\circ \sim 4.5^\circ \quad (\text{고속 활주 영역}) \]

3. 실시간 C# 서보 제어기 구현

다음은 해상 파도 자이로 신호로부터 쌍동 워터제트 조향각과 차동 추력을 10,000Hz 주기로 연산하는 0-Alloc C# 엔진 구현체입니다:

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Core.Amphibious
{
    public ref struct AaavWaterjetServo
    {
        private readonly double _dt;
        private readonly double _maxThrustPerJetN; // 150 kN
        private readonly double _jetSeparationDistanceM; // 2.2 m
        private double _cmdThrustLeftN;
        private double _cmdThrustRightN;
        private double _deflectorAngleLeftRad;
        private double _deflectorAngleRightRad;
        private double _trimTabAngleDeg;
        
        // 자세 오차
        private double _currentRollRad;
        private double _currentPitchRad;
        private double _currentYawRateRadS;

        public AaavWaterjetServo(
            double dt,
            double maxThrustPerJetN,
            double jetSeparationDistanceM)
        {
            _dt = dt;
            _maxThrustPerJetN = maxThrustPerJetN;
            _jetSeparationDistanceM = jetSeparationDistanceM;
            _cmdThrustLeftN = 0.0;
            _cmdThrustRightN = 0.0;
            _deflectorAngleLeftRad = 0.0;
            _deflectorAngleRightRad = 0.0;
            _trimTabAngleDeg = 4.0; // 기본 활주 트림 4도
            _currentRollRad = 0.0;
            _currentPitchRad = 0.0;
            _currentYawRateRadS = 0.0;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public void ComputeVectoring(
            double forwardThrustCmdN,
            double steeringYawCmdRad,
            double measuredRollRad,
            double measuredRollRateRadS,
            double vehicleSpeedKnots,
            out double thrustLeftN,
            out double thrustRightN,
            out double deflectorLeftDeg,
            out double deflectorRightDeg,
            out double trimTabDeg)
        {
            _currentRollRad = measuredRollRad;
            _currentYawRateRadS = measuredRollRateRadS;

            // 1. 기본 전진 추력 분배
            double baseThrust = Math.Clamp(forwardThrustCmdN * 0.5, 0.0, _maxThrustPerJetN);

            // 2. 롤 안정화 차동 추력 계산 (SMC 간이 모델)
            double rollSlidingSurface = measuredRollRateRadS + 1.8 * measuredRollRad;
            double diffThrustRollN = Math.Clamp(rollSlidingSurface * 45000.0, -40000.0, 40000.0);

            // 3. 조향 명령에 따른 디플렉터 각도 연산
            double targetDeflectorRad = Math.Clamp(steeringYawCmdRad, -Math.PI / 6.0, Math.PI / 6.0); // ±30도
            _deflectorAngleLeftRad = targetDeflectorRad;
            _deflectorAngleRightRad = targetDeflectorRad;

            // 4. 좌우 워터제트 최종 추력 명령 합성
            _cmdThrustLeftN = Math.Clamp(baseThrust + (diffThrustRollN * 0.5), 0.0, _maxThrustPerJetN);
            _cmdThrustRightN = Math.Clamp(baseThrust - (diffThrustRollN * 0.5), 0.0, _maxThrustPerJetN);

            // 5. 속도에 따른 자동 트림 탭 조절 (고속 시 트림 탭 전개로 선수 하강 억제)
            if (vehicleSpeedKnots > 12.0)
            {
                _trimTabAngleDeg = Math.Clamp(2.0 + (vehicleSpeedKnots - 12.0) * 0.35, 2.0, 10.0);
            }
            else
            {
                _trimTabAngleDeg = 0.0;
            }

            thrustLeftN = _cmdThrustLeftN;
            thrustRightN = _cmdThrustRightN;
            deflectorLeftDeg = _deflectorAngleLeftRad * (180.0 / Math.PI);
            deflectorRightDeg = _deflectorAngleRightRad * (180.0 / Math.PI);
            trimTabDeg = _trimTabAngleDeg;
        }

        public readonly double CurrentLeftThrustKn => _cmdThrustLeftN * 1e-3;
        public readonly double CurrentRightThrustKn => _cmdThrustRightN * 1e-3;
    }
}

4. 교육 및 국방 현장 적용 방안

방통대 및 초중고 유체역학·선박기동 직무연수

워터제트의 운동량 변화율에 따른 뉴턴 작용-반작용 추진 원리와 활주정의 유체 정역학/동역학 부력 전환을 3차원 파도 시뮬레이터로 학습. 가변 노즐 벡터링이 선박의 조종 성능을 획기적으로 개선하는 원리를 체험합니다.

해병대 상륙기동대대 및 차세대 상륙돌격장갑차

파고 3m의 악천후 쇄파대 상륙 돌격 시에도 차체 전복을 완벽히 방어하고, 해안 접안 즉시 무한궤도 주행 모드로 지체 없이 전환하여 상륙 부대의 기습 돌격력과 생존성을 극대화합니다.