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

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

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

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

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

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

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

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

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

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

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

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

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

Создать пользовательские состояния с 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
           Properties: [1x1 Aero.Aircraft.Properties]
           UnitSystem: "Metric"
          AngleSystem: "Radians"
    TemperatureSystem: "Kelvin"

cruise = 
  astDehavillandBeaverState with properties:

                  Alpha2: 0.0170
                  Alpha3: 0.0022
                   Beta2: 0.0036
                   Beta3: 2.1974e-04
                     b2V: 0.1625
                      cV: 0.0353
                     qcV: 0
                    pb2V: 0
                    rb2V: 0
            AileronAlpha: 0.0012
               FlapAlpha: 0
           ElevatorBeta2: -1.5476e-04
             RudderAlpha: -0.0060
                   Alpha: 0.1303
                    Beta: 0.0603
                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: 44.5400
                       V: 2.7140
                       W: 5.8360
                     Phi: 0
                   Theta: 0.1309
                     Psi: 0
                       P: 0
                       Q: 0
                       R: 0
                  Weight: 2.2448e+04
             AltitudeAGL: 2202
                Airspeed: 45.0026
             GroundSpeed: 45.0026
              MachNumber: 0.1357
            BodyVelocity: [44.5400 2.7140 5.8360]
          GroundVelocity: [44.5400 2.7140 5.8360]
                      Ur: 44.5400
                      Vr: 2.7140
                      Wr: 5.8360
         FlightPathAngle: 0.1303
             CourseAngle: 0.0609
    InertialToBodyMatrix: [3x3 double]
    BodyToInertialMatrix: [3x3 double]
        BodyToWindMatrix: [3x3 double]
        WindToBodyMatrix: [3x3 double]
         DynamicPressure: 998.6513
             Environment: [1x1 Aero.Aircraft.Environment]
           ControlStates: [1x5 Aero.Aircraft.ControlState]
        OutOfRangeAction: "Limit"
        DiagnosticAction: "Warning"
              Properties: [1x1 Aero.Aircraft.Properties]
              UnitSystem: "Metric"
             AngleSystem: "Radians"
       TemperatureSystem: "Kelvin"

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

    0.4037
   -1.3285
    4.7465

M = 3×1
103 ×

   -1.5125
    2.3497
    0.3744

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

   44.9207
    2.7140
   -0.0276
    0.1764
   -0.5806
    2.0743
   -0.2619
    0.3391
    0.0297
         0
      ⋮

[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    -32.531     2.7704     601.22          26968     124.91          0    -552.22          0
    FY    -33.152    -398.64    -16.894        -558.01     -17973    -467.59          0     1382.4
    FZ    -410.16    -4.8834    -2867.8    -1.2531e+05    -220.18          0    -2445.2          0
    L     -37.919    -469.28    -10.703        -254.35     -21158     -27832          0     9350.9
    M      222.86     74.529     -930.3         -42740     3360.4          0     -20214    -1866.5
    N      12.771     62.732     1.6733       -0.35231     2828.4    -8744.1     1909.6    -6134.6

Состояния могут также быть созданы с помощью функции fixedWingStateCustom.

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

state = fixedWingStateCustom("astDehavillandBeaverState",beaver)
state = 
  astDehavillandBeaverState with properties:

                  Alpha2: 0
                  Alpha3: 0
                   Beta2: 0
                   Beta3: 0
                     b2V: 0.1463
                      cV: 0.0318
                     qcV: 0
                    pb2V: 0
                    rb2V: 0
            AileronAlpha: 0
               FlapAlpha: 0
           ElevatorBeta2: 0
             RudderAlpha: 0
                   Alpha: 0
                    Beta: 0
                AlphaDot: 0
                 BetaDot: 0
                    Mass: 0
                 Inertia: [3x3 table]
         CenterOfGravity: [0 0 0]
        CenterOfPressure: [0 0 0]
             AltitudeMSL: 0
            GroundHeight: 0
                      XN: 0
                      XE: 0
                      XD: 0
                       U: 50
                       V: 0
                       W: 0
                     Phi: 0
                   Theta: 0
                     Psi: 0
                       P: 0
                       Q: 0
                       R: 0
                  Weight: 0
             AltitudeAGL: 0
                Airspeed: 50
             GroundSpeed: 50
              MachNumber: 0.1469
            BodyVelocity: [50 0 0]
          GroundVelocity: [50 0 0]
                      Ur: 50
                      Vr: 0
                      Wr: 0
         FlightPathAngle: 0
             CourseAngle: 0
    InertialToBodyMatrix: [3x3 double]
    BodyToInertialMatrix: [3x3 double]
        BodyToWindMatrix: [3x3 double]
        WindToBodyMatrix: [3x3 double]
         DynamicPressure: 1.5312e+03
             Environment: [1x1 Aero.Aircraft.Environment]
           ControlStates: [1x5 Aero.Aircraft.ControlState]
        OutOfRangeAction: "Limit"
        DiagnosticAction: "Warning"
              Properties: [1x1 Aero.Aircraft.Properties]
              UnitSystem: "Metric"
             AngleSystem: "Radians"
       TemperatureSystem: "Kelvin"

state2 = fixedWingStateCustom("astDehavillandBeaverState",beaver,aircraftEnvironment(beaver,"COESA",1000))
state2 = 
  astDehavillandBeaverState with properties:

                  Alpha2: 0
                  Alpha3: 0
                   Beta2: 0
                   Beta3: 0
                     b2V: 0.1463
                      cV: 0.0318
                     qcV: 0
                    pb2V: 0
                    rb2V: 0
            AileronAlpha: 0
               FlapAlpha: 0
           ElevatorBeta2: 0
             RudderAlpha: 0
                   Alpha: 0
                    Beta: 0
                AlphaDot: 0
                 BetaDot: 0
                    Mass: 0
                 Inertia: [3x3 table]
         CenterOfGravity: [0 0 0]
        CenterOfPressure: [0 0 0]
             AltitudeMSL: 0
            GroundHeight: 0
                      XN: 0
                      XE: 0
                      XD: 0
                       U: 50
                       V: 0
                       W: 0
                     Phi: 0
                   Theta: 0
                     Psi: 0
                       P: 0
                       Q: 0
                       R: 0
                  Weight: 0
             AltitudeAGL: 0
                Airspeed: 50
             GroundSpeed: 50
              MachNumber: 0.1486
            BodyVelocity: [50 0 0]
          GroundVelocity: [50 0 0]
                      Ur: 50
                      Vr: 0
                      Wr: 0
         FlightPathAngle: 0
             CourseAngle: 0
    InertialToBodyMatrix: [3x3 double]
    BodyToInertialMatrix: [3x3 double]
        BodyToWindMatrix: [3x3 double]
        WindToBodyMatrix: [3x3 double]
         DynamicPressure: 1.3896e+03
             Environment: [1x1 Aero.Aircraft.Environment]
           ControlStates: [1x5 Aero.Aircraft.ControlState]
        OutOfRangeAction: "Limit"
        DiagnosticAction: "Warning"
              Properties: [1x1 Aero.Aircraft.Properties]
              UnitSystem: "Metric"
             AngleSystem: "Radians"
       TemperatureSystem: "Kelvin"

Ссылки

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

Похожие темы