exponenta event banner

Определение нелинейной динамики и статической устойчивости самолетов

В этом примере показан процесс создания и анализа самолета в MATLAB с использованием геометрии Cessna C182 и данных коэффициентов.

Данные, используемые для создания самолета, взяты из Airplane Flight Dynamics and Controls Яна Роскама [1].

В этом примере описывается следующее:

  • Настройка аэродинамических и управляющих поверхностей крыла путем создания и вложения поверхности управления лифтом с последующим созданием элерона, руля направления, крыла и киля.

  • Создание моделей движения на моделях самолетов, аналогичных управляющим поверхностям.

  • Определение полного самолета.

  • Определение коэффициентов на самолете.

  • Подготовка самолета к численному анализу.

  • Выполнение численного анализа.

Настройка аэродинамических и управляющих поверхностей крыла

Aero.FixedWing.Surface класс может служить как аэродинамической, так и управляющей поверхностью.

Это поведение контролируется Controllable свойство класса.

Настройка Controllable кому on создает управляющую поверхность и ControlState переменная.

Вложение поверхности управления в аэродинамическую поверхность имитирует действительную конструкцию самолета.

Ниже приведен пример создания поверхности управления лифтом и размещения ее на стабилизаторе.

elevator = Aero.FixedWing.Surface()
elevator = 
  Surface with properties:

            Surfaces: [1x0 Aero.FixedWing.Surface]
        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: Inf
        MinimumValue: -Inf
        Controllable: off
            Symmetry: "Symmetric"
    ControlVariables: [0x0 string]
          Properties: [1x1 Aero.Aircraft.Properties]

elevator.MaximumValue = deg2rad(20);
elevator.MinimumValue = deg2rad(-20);
elevator.Properties = Aero.Aircraft.Properties("Name", "Elevator");
elevator.Controllable = "on";
elevator.Coefficients = Aero.FixedWing.Coefficient("StateVariables", "Elevator")
elevator = 
  Surface with properties:

            Surfaces: [1x0 Aero.FixedWing.Surface]
        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: 0.3491
        MinimumValue: -0.3491
        Controllable: on
            Symmetry: "Symmetric"
    ControlVariables: "Elevator"
          Properties: [1x1 Aero.Aircraft.Properties]

horizontalStabilizer = Aero.FixedWing.Surface()
horizontalStabilizer = 
  Surface with properties:

            Surfaces: [1x0 Aero.FixedWing.Surface]
        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: Inf
        MinimumValue: -Inf
        Controllable: off
            Symmetry: "Symmetric"
    ControlVariables: [0x0 string]
          Properties: [1x1 Aero.Aircraft.Properties]

horizontalStabilizer.Surfaces = elevator
horizontalStabilizer = 
  Surface with properties:

            Surfaces: [1x1 Aero.FixedWing.Surface]
        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: Inf
        MinimumValue: -Inf
        Controllable: off
            Symmetry: "Symmetric"
    ControlVariables: [0x0 string]
          Properties: [1x1 Aero.Aircraft.Properties]

horizontalStabilizer.Properties = Aero.Aircraft.Properties("Name", "HorizontalStabilizer")
horizontalStabilizer = 
  Surface with properties:

            Surfaces: [1x1 Aero.FixedWing.Surface]
        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: Inf
        MinimumValue: -Inf
        Controllable: off
            Symmetry: "Symmetric"
    ControlVariables: [0x0 string]
          Properties: [1x1 Aero.Aircraft.Properties]

Каждое свойство фиксированных объектов также можно задать с помощью аргументов «Имя» и «Значение» при построении. Этот метод создания будет использоваться в остальном примере.

Далее выполните построение элеронов, руля направления, крыла и киля.

aileron = Aero.FixedWing.Surface(...
    "MaximumValue", deg2rad(20), ...
    "MinimumValue", deg2rad(-20), ...
    "Properties"  , Aero.Aircraft.Properties(1, "Name", "Aileron"), ...
    "Controllable", "on", ...
    "Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Aileron"));

rudder = Aero.FixedWing.Surface(...
    "MaximumValue", deg2rad(20), ...
    "MinimumValue", deg2rad(-20), ...
    "Properties"  , Aero.Aircraft.Properties("Name", "Rudder"), ...
    "Controllable", "on", ...
	"Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Rudder"));

wing = Aero.FixedWing.Surface(...
    "Surfaces"  , aileron, ...
    "Properties", Aero.Aircraft.Properties("Name", "Wing"));

verticalStabilizer = Aero.FixedWing.Surface(...
    "Surfaces"  , rudder, ...
    "Properties", Aero.Aircraft.Properties("Name", "VerticalStabilizer"));

Определение движущей силы

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

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

propeller = Aero.FixedWing.Thrust(...
    "Properties"  , Aero.Aircraft.Properties("Name","Propeller"), ...
    "Coefficients", Aero.FixedWing.Coefficient("StateVariables", "Propeller"))
propeller = 
  Thrust with properties:

        Coefficients: [1x1 Aero.FixedWing.Coefficient]
        MaximumValue: 1
        MinimumValue: 0
        Controllable: on
            Symmetry: "Symmetric"
    ControlVariables: "Propeller"
          Properties: [1x1 Aero.Aircraft.Properties]

Строительство летательного аппарата

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

Сначала определите отдельный Aero.Aircraft.Properties класс для самолета. Этот класс используется для отслеживания версий компонентов и компонентов, используемых данным самолетом.

Все Aero.FixedWing и Aero.Aircraft классы содержат это свойство.

C182Properties = Aero.Aircraft.Properties(...
    "Name"       , "Cessna C182", ...
    "Type"       , "General Aviation", ...
    "Version"    , "1.0", ...
    "Description", "Cessna 182 Example")
C182Properties = 
  Properties with properties:

           Name: "Cessna C182"
    Description: "Cessna 182 Example"
           Type: "General Aviation"
        Version: "1.0"

C182 = Aero.FixedWing(...
    "Properties"       , C182Properties, ...
    "UnitSystem"       , "English (ft/s)", ...
    "AngleSystem"      , "Radians", ...
    "TemperatureSystem", "Fahrenheit", ...
    "ReferenceArea"    , 174, ...
    "ReferenceSpan"    , 36, ...
    "ReferenceLength"  , 4.9, ...
    "Surfaces"         , [wing, horizontalStabilizer, verticalStabilizer], ...
    "Thrusts"          , propeller)
C182 = 
  FixedWing with properties:

        ReferenceArea: 174
        ReferenceSpan: 36
      ReferenceLength: 4.9000
         Coefficients: [1x1 Aero.FixedWing.Coefficient]
     DegreesOfFreedom: "6DOF"
             Surfaces: [1x3 Aero.FixedWing.Surface]
              Thrusts: [1x1 Aero.FixedWing.Thrust]
          AspectRatio: 7.4483
           UnitSystem: "English (ft/s)"
          AngleSystem: "Radians"
    TemperatureSystem: "Fahrenheit"
           Properties: [1x1 Aero.Aircraft.Properties]

Установка коэффициентов самолета

Затем определите коэффициенты на самолете.

Эти коэффициенты описывают динамическое поведение самолета. В этом примере определяются коэффициенты скалярных констант, которые определяют линейное поведение самолета.

Определение нелинейного динамического поведения самолета Simulink.LookupTable коэффициенты. Simulink.LookupTables в этом примере не используются. Для просмотра примера использования Simulink.LookupTables откройте пример «Выполнение анализа управления и статической устойчивости с помощью линеаризованных самолетов».

По умолчанию все коэффициенты равны 0.

BodyCoefficients = {
    'CD', 'Zero', 0.027;
    'CL', 'Zero', 0.307;
    'Cm', 'Zero', 0.04;
    'CD', 'Alpha', 0.121;
    'CL', 'Alpha', 4.41;
    'Cm', 'Alpha', -0.613;
    'CD', 'AlphaDot', 0
    'CL', 'AlphaDot',  1.7;
    'Cm', 'AlphaDot', -7.27;
    'CD', 'Q', 0;
    'CL', 'Q', 3.9;
    'Cm', 'Q', -12.4;
    'CY', 'Beta', -0.393;
    'Cl', 'Beta', -0.0923;
    'Cn', 'Beta', 0.0587;
    'CY', 'P', -0.075;
    'Cl', 'P', -0.484;
    'Cn', 'P', -0.0278;
    'CY', 'R', 0.214;
    'Cl', 'R', 0.0798;
    'Cn', 'R', -0.0937;
    };
 
C182 = setCoefficient(C182, BodyCoefficients(:, 1), BodyCoefficients(:, 2), BodyCoefficients(:, 3));

Коэффициенты могут быть определены для любого компонента самолета. Эти компоненты могут включать любые Aero.FixedWing.Surface или Aero.FixedWing.Thrust.

setCoefficient метод обеспечивает Component Name,Value аргумент, который принимает коэффициенты для требуемого имени компонента, устраняя необходимость точно знать, где находится компонент на самолете.

Допустимые имена компонентов зависят от Name свойства компонента.

AileronCoefficients = {
    'CY', 'Aileron', 0;
    'Cl', 'Aileron', 0.229;
    'Cn', 'Aileron', -0.0504;
    };
ElevatorCoefficients = {
    'CY', 'Elevator', 0.187;
    'Cl', 'Elevator', 0.0147;
    'Cn', 'Elevator', -0.0805;
    };
RudderCoefficients = {
    'CD', 'Rudder', 0;
    'CL', 'Rudder', 0.43;
    'Cm', 'Rudder', -1.369;
    };
PropellerCoefficients = {
    'CD', 'Propeller', -21.1200;
    };

C182 = setCoefficient(C182, AileronCoefficients(:, 1), AileronCoefficients(:, 2), AileronCoefficients(:, 3), "Component", "Aileron");
C182 = setCoefficient(C182, ElevatorCoefficients(:, 1), ElevatorCoefficients(:, 2), ElevatorCoefficients(:, 3), "Component", "Elevator");
C182 = setCoefficient(C182, RudderCoefficients(:, 1), RudderCoefficients(:, 2), RudderCoefficients(:, 3), "Component", "Rudder");
C182 = setCoefficient(C182, PropellerCoefficients(:, 1), PropellerCoefficients(:, 2), PropellerCoefficients(:, 3), "Component", "Propeller");

Определение текущего состояния

Самолет полностью построен и готов для проведения численного анализа.

Для выполнения численного анализа на самолете определите Aero.FixedWing.State объект.

Aero.FixedWing.State объект определяет текущее состояние Aero.FixedWing объект в экземпляре по времени. Aero.FixedWing.State Также здесь определяются динамические физические свойства самолета, включая массу и инерцию.

В этом примере мы анализируем состояние круиза.

CruiseState = Aero.FixedWing.State(...
    "UnitSystem","English (ft/s)",...
    "AngleSystem","Radians", ...
    "TemperatureSystem","Fahrenheit", ...
    "Mass",82.2981, ...
    "U", 220.1, ...
    "AltitudeMSL",5000);

CruiseState.Inertia.Variables = [
    948, 0,    0   ;
    0  , 1346, 0   ;
    0  , 0   , 1967;
    ];

CruiseState.CenterOfGravity = [0.264, 0 , 0] .* C182.ReferenceLength;
CruiseState.CenterOfPressure = [0.25, 0, 0] .* C182.ReferenceLength;
CruiseState.Environment = Aero.Aircraft.Environment(...
    "Temperature", 500.839, ...
    "Density", 0.00204834, ...
    "SpeedOfSound", 1097.09, ...
    "Pressure", 84307.3, ...
    "Gravity", 32.2);

Настройка состояний управления

В дополнение к среде и динамическим физическим свойствам, Aero.FixedWing.State класс также содержит текущие отклонения поверхности регулирования и положения осевого напора. Эти должности находятся в ControlStates собственность. Используйте этот класс для настройки управляющих состояний.

По умолчанию это свойство пустое. Инициализируйте свойство с поверхности управления и информацию о тяге на самолете.

Для настройки этих управляющих состояний используйте setupControlStates способ ниже.

CruiseState = setupControlStates(CruiseState, C182)
CruiseState = 
  State with properties:

                   Alpha: 0
                    Beta: 0
                AlphaDot: 0
                 BetaDot: 0
                    Mass: 82.2981
                 Inertia: [3x3 table]
         CenterOfGravity: [1.2936 0 0]
        CenterOfPressure: [1.2250 0 0]
             AltitudeMSL: 5000
            GroundHeight: 0
                      XN: 0
                      XE: 0
                      XD: -5000
                       U: 220.1000
                       V: 0
                       W: 0
                     Phi: 0
                   Theta: 0
                     Psi: 0
                       P: 0
                       Q: 0
                       R: 0
                  Weight: 2.6500e+03
             AltitudeAGL: 5000
                Airspeed: 220.1000
             GroundSpeed: 220.1000
              MachNumber: 0.2006
            BodyVelocity: [220.1000 0 0]
          GroundVelocity: [220.1000 0 0]
                      Ur: 220.1000
                      Vr: 0
                      Wr: 0
         FlightPathAngle: 0
             CourseAngle: 0
    InertialToBodyMatrix: [3x3 double]
    BodyToInertialMatrix: [3x3 double]
        BodyToWindMatrix: [3x3 double]
        WindToBodyMatrix: [3x3 double]
         DynamicPressure: 49.6149
             Environment: [1x1 Aero.Aircraft.Environment]
              UnitSystem: "English (ft/s)"
             AngleSystem: "Radians"
       TemperatureSystem: "Fahrenheit"
           ControlStates: [1x4 Aero.Aircraft.ControlState]
        OutOfRangeAction: "Limit"
        DiagnosticAction: "Warning"
              Properties: [1x1 Aero.Aircraft.Properties]

Выполните это только один раз для каждой конфигурации самолета. Если управляющие поверхности или упоры не были добавлены или удалены к самолету, пропустите этот шаг.

Выполнение численного анализа

На данном этапе летательный аппарат и государство в настоящее время полностью построены и определены.

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

Силы и моменты

Чтобы рассчитать силы и моменты на самолете в момент времени, используйте forcesAndMoments способ.

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

[F, M] = forcesAndMoments(C182, CruiseState)
F = 3×1

 -233.0908
         0
   -0.3300

M = 3×1
103 ×

         0
    1.8739
         0

Нелинейная динамика

Для расчета динамического поведения самолета используйте nonlinearDynamics способ.

nonlinearDynamics метод возвращает вектор скоростей изменения выбранных степеней свободы на самолете. Размер вектора зависит от степеней свободы. Чтобы рассчитать динамическое поведение самолета с течением времени, используйте вектор совместно с решателем оды, например ode45.

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

disp(load("astFixedWingDOFtable.mat").DOFtable)
                  PM4    PM6    3DOF    6DOF
                  ___    ___    ____    ____

    dXN /dt       "X"    "X"    "X"     "X" 
    dXE /dt       ""     "X"    ""      "X" 
    dXD /dt       "X"    "X"    "X"     "X" 
    dU /dt        "X"    "X"    "X"     "X" 
    dV /dt        ""     "X"    ""      "X" 
    dW /dt        "X"    "X"    "X"     "X" 
    dP /dt        ""     ""     ""      "X" 
    dQ /dt        ""     ""     "X"     "X" 
    dR /dt        ""     ""     ""      "X" 
    dPhi /dt      ""     ""     ""      "X" 
    dTheta /dt    ""     ""     "X"     "X" 
    dPsi /dt      ""     ""     ""      "X" 
dydt = nonlinearDynamics(C182, CruiseState)
dydt = 12×1

  220.1000
         0
         0
   -2.8323
         0
   -0.0040
         0
    1.3922
         0
         0
      ⋮

Статическая стабильность

Статическая устойчивость - тенденция самолета возвращаться в исходное состояние после небольшого возмущения из исходного состояния. Является важной особенностью самолётов для гражданского использования и уменьшает потребность в сложных контроллерах для поддержания динамической устойчивости. В некоторых условиях самолеты, требующие повышенной маневренности, могут сделать выбор в пользу статической нестабильности.

Aero.FixedWing способ статической устойчивости объекта вычисляют по изменениям сил и моментов вследствие возмущений при текущем состоянии летательного аппарата.

Метод сравнивает возмущения с предопределенным набором критериев как меньше, больше или равно нулю. Можно также задать пользовательские критерии. Затем метод оценивает статическую стабильность как:

  • Если критерии удовлетворяются, то возмущение статически стабильно.

  • Если критерии не удовлетворяются, то возмущение статически нестабильно.

  • Если возмущение равно 0, то возмущение является статически нейтральным.

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

[stability, derivatives] = staticStability(C182, CruiseState)
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     -2.118    -5.4001e-08     7.2955    1606.1    -0.0023309              0              0         0
    FY          0        -15.415          0         0       -3392.8        -647.47              0    1847.5
    FZ    -24.083    -5.9117e-07    -174.03    -38305     -0.026503              0         -33669         0
    L           0        -130.33          0         0        -28686    -1.5042e+05              0     24801
    M      17.028     4.5475e-07    -105.88    -23303      0.018739              0    -5.2223e+05         0
    N           0         83.944          0         0         18476        -8595.5              0    -29248

Ссылки

  1. Роскам, Дж., «Динамика полета самолета и автоматические средства управления полетом (часть 1)», DAR Corporation, 2003.