Настройка самолетов с дополнительными состояниями самолетов

В этом примере показано, как создать и определить пользовательское состояние для самолета.

Этот пример описывает:

  • Определение пользовательских состояний и возможность их использования.

  • Создание базового пользовательского состояния.

  • Создание расширенного пользовательского состояния.

  • Использование пользовательского состояния в анализе самолета.

Что такое пользовательские состояния?

По умолчанию объект состояния фиксированного крыла имеет фиксированный набор значений состояния. Сюда входят угол атаки, воздушная скорость, высота и другие.

Эти состояния используются в объекте с фиксированным крылом, чтобы размерить немерные коэффициенты или предоставить данные для точек останова интерполяционной таблицы.

Однако существуют случаи, когда этот набор состояний по умолчанию не захватывает все желаемые состояния самолета. Это происходит при использовании пользовательских состояний.

Путем определения пользовательского состояния можно создать новые значения состояний, которые могут использоваться в любом компоненте самолета.

Определение пользовательского состояния

Создание пользовательских состояний с Aero.FixedWing.State класс:

  1. Определите новый класс. Этот класс должен унаследовать от Aero.FixedWing.State.

  2. Задайте пользовательские состояния путем добавления новых зависимых свойств к классу.

  3. Определите get. Метод состояния в классе пользовательского состояния.

Ниже приведен простой пример состояния, в котором пользовательский класс состояния, MyState, определяется пользовательским значением состояния, MyValue.

The get методы зависимых свойств могут получить доступ к любому другому свойству от состояния. В этом случае MyValue использует наземную прямую скорость, U.

classdef MyState < Aero.FixedWing.State
    
    properties (Dependent)
        MyValue
    end
    
    methods
        function value = get.MyValue(obj)
            value = obj.U * 10;
        end
    end
end

Более продвинутым примером пользовательского состояния является модель самолета De Havilland Beaver [1], которая использует ряд пользовательских состояний для размеризации своих коэффициентов. Это пользовательское состояние можно рассматривать как «astDehavillandBeaverState» ниже.

classdef astDehavillandBeaverState < Aero.FixedWing.State
    
    properties (Dependent)
        Alpha2
        Alpha3
        Beta2
        Beta3
        
        b2V
        cV
        qcV
        pb2V
        rb2V
        betab2V
        
        AileronAlpha
        FlapAlpha
        ElevatorBeta2
        RudderAlpha
    end
    
    methods
        function value = get.Alpha2(obj)
            value = obj.Alpha ^ 2;
        end
        function value = get.Alpha3(obj)
            value = obj.Alpha ^ 3;
        end
        function value = get.Beta2(obj)
            value = obj.Beta ^ 2;
        end
        function value = get.Beta3(obj)
            value = obj.Beta ^ 3;
        end
        
        function value = get.b2V(obj)
           value = 14.6300 / (2*obj.Airspeed);
        end
        function value = get.cV(obj)
           value = 1.5875 / (obj.Airspeed);
        end
        
        function value = get.qcV(obj)
           value = obj.Q * obj.cV;
        end
        function value = get.pb2V(obj)
           value = obj.P * obj.b2V;
        end
        function value = get.rb2V(obj)
           value = obj.R * obj.b2V;
        end
        function value = get.betab2V(obj)
           value = obj.Beta * obj.b2V;
        end
        
        function value = get.AileronAlpha(obj)
            value = obj.getState("Aileron") * obj.Alpha;
        end
        function value = get.FlapAlpha(obj)
            value = obj.getState("Flap") * obj.Alpha;
        end
        function value = get.ElevatorBeta2(obj)
            value = obj.getState("Elevator") * obj.Beta2;
        end
        function value = get.RudderAlpha(obj)
            value = obj.getState("Rudder") * obj.Alpha;
        end
    end
end

Это пользовательское состояние не только непосредственно использует предопределенные свойства состояний из состояния фиксированного крыла, но и использует метод getState, чтобы извлечь углы отклонения поверхности управления. Любая комбинация состояний или методов может использоваться в методах get для пользовательских состояний.

Использование пользовательского состояния

С заданным пользовательским состоянием используйте пользовательское состояние в методах анализа.

[beaver, cruise] = astDehavillandBeaver()
beaver = 
  FixedWing with properties:

        ReferenceArea: 23.2300
        ReferenceSpan: 14.6300
      ReferenceLength: 1.5875
         Coefficients: [1x1 Aero.FixedWing.Coefficient]
     DegreesOfFreedom: "6DOF"
             Surfaces: [1x3 Aero.FixedWing.Surface]
              Thrusts: [1x1 Aero.FixedWing.Thrust]
          AspectRatio: 9.2138
           UnitSystem: "Metric"
          AngleSystem: "Radians"
    TemperatureSystem: "Kelvin"
           Properties: [1x1 Aero.Aircraft.Properties]

cruise = 
  astDehavillandBeaverState with properties:

                  Alpha2: 0.0209
                  Alpha3: 0.0030
                   Beta2: 2.1609e-04
                   Beta3: -3.1765e-06
                     b2V: 0.1642
                      cV: 0.0356
                     qcV: 1.0159e-22
                    pb2V: -1.3994e-20
                    rb2V: 4.9110e-20
                 betab2V: -0.0024
            AileronAlpha: 0.0013
               FlapAlpha: 0
           ElevatorBeta2: -9.1838e-06
             RudderAlpha: -0.0066
                   Alpha: 0.1444
                    Beta: -0.0147
                AlphaDot: 0
                 BetaDot: 0
                    Mass: 2.2882e+03
                 Inertia: [3x3 table]
         CenterOfGravity: [0 0 0]
        CenterOfPressure: [0 0 0]
             AltitudeMSL: 2202
            GroundHeight: 0
                      XN: 0
                      XE: 0
                      XD: -2202
                       U: 45
                       V: 0
                       W: 0
                     Phi: 0
                   Theta: 0.1444
                     Psi: 0
                       P: -8.5200e-20
                       Q: 2.8500e-21
                       R: 2.9900e-19
                  Weight: 2.2448e+04
             AltitudeAGL: 2202
                Airspeed: 44.5365
             GroundSpeed: 45
              MachNumber: 0.1339
            BodyVelocity: [44.0682 -0.6547 6.4080]
          GroundVelocity: [45 0 0]
                      Ur: 44.0682
                      Vr: -0.6547
                      Wr: 6.4080
         FlightPathAngle: 0
             CourseAngle: 0
    InertialToBodyMatrix: [3x3 double]
    BodyToInertialMatrix: [3x3 double]
        BodyToWindMatrix: [3x3 double]
        WindToBodyMatrix: [3x3 double]
         DynamicPressure: 998.1851
             Environment: [1x1 Aero.Aircraft.Environment]
              UnitSystem: "Metric"
             AngleSystem: "Radians"
       TemperatureSystem: "Kelvin"
           ControlStates: [1x5 Aero.Aircraft.ControlState]
        OutOfRangeAction: "Limit"
        DiagnosticAction: "Warning"
              Properties: [1x1 Aero.Aircraft.Properties]

cruise.Alpha2
ans = 0.0209
[F, M] = forcesAndMoments(beaver, cruise)
F = 3×1
103 ×

    0.7116
   -0.2185
    2.8976

M = 3×1
103 ×

    0.0579
    1.6427
    0.1933

dydt = nonlinearDynamics(beaver, cruise)
dydt = 12×1

   44.5317
         0
   -6.4754
    0.3110
   -0.0955
    1.2663
    0.0104
    0.2371
    0.0174
   -0.0000
      ⋮

[stability, derivatives] = staticStability(beaver, cruise)
stability=6×8 table
             U           V           W         Alpha        Beta         P           Q           R    
          ________    ________    ________    ________    ________    ________    ________    ________

    FX    "Stable"    ""          ""          ""          ""          ""          ""          ""      
    FY    ""          "Stable"    ""          ""          ""          ""          ""          ""      
    FZ    ""          ""          "Stable"    ""          ""          ""          ""          ""      
    L     ""          ""          ""          ""          "Stable"    "Stable"    ""          ""      
    M     "Stable"    ""          ""          "Stable"    ""          ""          "Stable"    ""      
    N     ""          ""          ""          ""          "Stable"    ""          ""          "Stable"

derivatives=6×8 table
             U          V           W          Alpha        Beta         P          Q          R   
          _______    ________    _______    ___________    _______    _______    _______    _______

    FX    -30.646    -0.94341     656.72          29138    -42.007          0    -557.74          0
    FY    -9.8123     -65.493    -14.105        -558.71    -2917.1    -472.26          0     1396.2
    FZ    -456.65      2.3887    -2888.1    -1.2435e+05     106.36          0    -2469.7          0
    L     -3.4499     -470.72     -6.295         -255.3     -20967     -28110          0     9444.4
    M      217.97       -17.9    -988.08         -44940    -797.04          0     -20417    -1885.2
    N      9.3412      51.579     1.3583       0.002102     2297.4    -8831.5     1928.7      -6196

Ссылки

  1. Rauw, M.O.: «A Simulink Environment for Flight Dynamics and Control analysis - Application to the DHC-2 'Beaver'». Часть I: «Реализация библиотеки моделей в Simulink». Часть II: «Нелинейный анализ автопилота 'Beaver'». Магистерская диссертация, Делфтский технологический университет, профессорско-преподавательский состав аэрокосмической техники. Делфт, Нидерланды, 1993.