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

Этот пример показывает процесс создания и анализа самолета с неподвижным крылом в использовании MATLAB геометрия Cessna C182 и содействующие данные.

Данные, используемые, чтобы создать самолет, взяты из Динамики Рейса Самолета и Средств управления Яном Роскамом [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]

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

Затем создайте элероны, руководящий принцип, крыло и вертикальный стабилизатор.

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. Roskam, J., "Динамика рейса самолета и автоматический рейс управляют (часть 1)", корпорация DAR, 2003.

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