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

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

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

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

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

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

  • Используя пользовательское состояние в анализе самолета с неподвижным крылом.

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

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

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

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

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

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

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

  1. Задайте новый класс. Этот класс должен наследоваться Aero.FixedWing.State.

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

  3. Задайте get.State метод в пользовательском классе состояния.

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

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

Более усовершенствованным примером пользовательского состояния является модель [1] самолета Бобра De Havilland, которая использует много пользовательских состояний, чтобы определить размерность ее коэффициенты. Это пользовательское состояние может рассматриваться как "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 метод, чтобы извлечь углы отклонения поверхности управления. Любая комбинация состояний или методов может использоваться в получить методах для пользовательских состояний.

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

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

[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.: "Окружение Simulink для анализа Динамики и Управления Рейсом - Приложение 'Бобру' DHC-2". Первая часть: "Реализация библиотеки модели в Simulink". Вторая часть: "Нелинейный анализ автопилота 'Бобра'". Тезис магистра наук, Делфтский технический университет, Факультет Космической Разработки. Делфт, Нидерланды, 1993.

Для просмотра документации необходимо авторизоваться на сайте