Обрезка и линеаризация корпуса HL-20

Это - Часть 1 ряда в качестве примера с пятью частями на проекте и настройке системы управления полетом для транспортного средства HL-20. Это расстается соглашения с обрезкой и линеаризацией корпуса.

Модель HL-20

Модель HL 20 адаптируется из модели, описанной в Корпусе Несущего тела (Aerospace Blockset) NASA HL-20. Это - модель 6-DOF транспортного средства во время итогового спуска и приземляющейся фазы рейса. Никакая тяга не используется во время этой фазы, и корпус скользит к взлетно-посадочной полосе.

open_system('csthl20_trim')

Эта версия модели включает уравнения движения (EOM), силу и вычисление момента из аэродинамических таблиц, модели среды и блока "Controls Selector", который сопоставляет элерон, лифт, и руководящий принцип требует на отклонения шести поверхностей управления.

Пакетная обрезка

Обрезка состоит из вычисления элерона, лифт и отклонения руководящего принципа, которые обнуляют силы и моменты на корпусе, или эквивалентно, сохраняют скорости тела ub, vb, wb и угловые уровни p, q, r устойчивыми. Поскольку втиснутый не используется во время спуска, одна степень свободы потеряна, и условие для обрезки должно быть ослаблено, чтобы позволить ub, чтобы варьироваться. Значения для обрезки отклонений da, de, доктор зависит от ориентации корпуса относительно ветра. Эта ориентация характеризуется альфой угла нападения (AoA) и углом заноса (AoS) бета.

С operspec и findop функции, можно эффективно вычислить отклонения для обрезки по сетке (альфа, бета) значения, покрывающие рабочий диапазон транспортного средства. Здесь мы обрезаем модель для 8 значений альфы в пределах от-10 до 25 градусов и 5 значений беты в пределах от-10 до +10 градусов. Номинальная высота и скорость установлены в 10 000 футов и Мах 0.6.

d2r = pi/180;            % degrees to radians
m2ft = 3.28084;          % meter to feet
Altitude = 10000/m2ft;   % Nominal altitude
Mach = 0.6;              % Nominal Mach
alpha_vec = -10:5:25;	 % Alpha Range
beta_vec = -10:5:10;     % Beta Range
[alpha,beta] = ndgrid(alpha_vec,beta_vec);   % (Alpha,Beta) grid

Используйте operspec создать массив технических требований рабочей точки.

opspec = operspec('csthl20_trim',size(alpha));

opspec(1)
ans = 


 Operating point specification for the Model csthl20_trim.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
       <strong>x</strong>        <strong>Known</strong>    <strong>SteadyState</strong>    <strong>Min</strong>     <strong>Max</strong>    <strong>dxMin</strong>    <strong>dxMax</strong>
    <strong>________</strong>    <strong>_____</strong>    <strong>___________</strong>    <strong>____</strong>    <strong>___</strong>    <strong>_____</strong>    <strong>_____</strong>

(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
           0    false       true        -Inf    Inf    -Inf      Inf 
    -0.19945    false       true        -Inf    Inf    -Inf      Inf 
           0    false       true        -Inf    Inf    -Inf      Inf 
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 
           0    false       true        -Inf    Inf    -Inf      Inf 
           0    false       true        -Inf    Inf    -Inf      Inf 
           0    false       true        -Inf    Inf    -Inf      Inf 
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
      202.67    false       true        -Inf    Inf    -Inf      Inf 
           0    false       true        -Inf    Inf    -Inf      Inf 
      23.257    false       true        -Inf    Inf    -Inf      Inf 
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
      -12072    false       true        -Inf    Inf    -Inf      Inf 
           0    false       true        -Inf    Inf    -Inf      Inf 
       -3048    false       true        -Inf    Inf    -Inf      Inf 

Inputs: 
----------
    <strong>u</strong>    <strong>Known</strong>    <strong>Min</strong>     <strong>Max</strong>
    <strong>_</strong>    <strong>_____</strong>    <strong>____</strong>    <strong>___</strong>

(1.) csthl20_trim/da
    0    false    -Inf    Inf
(2.) csthl20_trim/de
    0    false    -Inf    Inf
(3.) csthl20_trim/dr
    0    false    -Inf    Inf

Outputs: 
----------
    <strong>y</strong>    <strong>Known</strong>    <strong>Min</strong>     <strong>Max</strong>
    <strong>_</strong>    <strong>_____</strong>    <strong>____</strong>    <strong>___</strong>

(1.) csthl20_trim/p;q;r (1-3)
    0    false    -Inf    Inf
    0    false    -Inf    Inf
    0    false    -Inf    Inf
(2.) csthl20_trim/phi;theta;psi (4-6)
    0    false    -Inf    Inf
    0    false    -Inf    Inf
    0    false    -Inf    Inf
(3.) csthl20_trim/alpha (7)
    0    false    -Inf    Inf
(4.) csthl20_trim/beta (8)
    0    false    -Inf    Inf
(5.) csthl20_trim/Mach (9)
    0    false    -Inf    Inf
(6.) csthl20_trim/Ax,Ay,Az (10-12)
    0    false    -Inf    Inf
    0    false    -Inf    Inf
    0    false    -Inf    Inf

Задайте условия равновесия для каждой ориентации корпуса. Для этого:

  • Задайте ориентацию путем фиксации выходной альфы и беты к их требуемым значениям.

  • Задайте скорость корпуса путем фиксации выхода Маха к 0,6.

  • Отметьте угловые уровни p, q, r как устойчивые.

  • Отметьте скорости vb и wb как устойчивые.

for ct=1:40
   % Specify alpha angle
   opspec(ct).Outputs(3).y = alpha(ct);
   opspec(ct).Outputs(3).Known = true;
   % Specify beta angle
   opspec(ct).Outputs(4).y = beta(ct);
   opspec(ct).Outputs(4).Known = true;
   % Specify Mach speed
   opspec(ct).Outputs(5).y = Mach;
   opspec(ct).Outputs(5).Known = true;
   % Mark p,q,r as steady
   opspec(ct).States(2).SteadyState = true(3,1);
   % Mark vb,wb as steady
   opspec(ct).States(3).SteadyState = [false;true;true];
   % (phi,theta,psi) and (Xe,Ye,Ze) are not steady
   opspec(ct).States(1).SteadyState = false(3,1);
   opspec(ct).States(4).SteadyState = false(3,1);
end

Полностью охарактеризовать условие для обрезки, также

  • Установите p=0 предотвращать прокрутку.

  • Установите углы крена/тангажа/рыскания (phi, theta, psi) к (0, альфа, бета) выравнивать наземные системы координат и ветер.

  • Задайте положение корпуса (Ксенон, Вы, Зе) как (0,0, - Высота).

for ct=1:40
   % Set (phi,theta,psi) to (0,alpha,beta)
   opspec(ct).States(1).x = [0 ; alpha(ct)*d2r ; beta(ct)*d2r];
   opspec(ct).States(1).Known = true(3,1);
   % Set p=0 (no rolling)
   opspec(ct).States(2).x(1) = 0;
   opspec(ct).States(2).Known(1) = true;
   % Set (Xe,Ye,Ze) to (0,0,-Altitude)
   opspec(ct).States(4).x = [0 ; 0 ; -Altitude];
   opspec(ct).States(4).Known = true(3,1);
end

Теперь используйте findop вычислить условия для обрезки для всех 40 (альфа, бета) комбинации сразу. Этот подход пакетного режима включает одну компиляцию модели. FINDOP использует оптимизацию, чтобы решить нелинейные уравнения, характеризующие каждое равновесие. Здесь мы используем алгоритм "SQP" для этой задачи.

% Set options for FINDOP solver
TrimOptions = findopOptions;
TrimOptions.OptimizationOptions.Algorithm = 'sqp';
TrimOptions.DisplayReport = 'off';

% Trim model
[ops,rps] = findop('csthl20_trim',opspec,TrimOptions);

Это возвращает 8 5 OPS массивов (условия работы) и RPS (отчеты оптимизации). Можно использовать RPS, чтобы проверить, что каждое условие для обрезки было успешно вычислено. Результаты для первого (альфа, бета) пара показаны ниже.

[alpha(1) beta(1)]
ans =

   -10   -10

ops(1)
ans = 


 Operating point for the Model csthl20_trim.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
       <strong>x</strong>    
    <strong>________</strong>

(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
           0
    -0.17453
    -0.17453
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 
           0
    -0.15825
    0.008004
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
      191.09
     -34.214
     -33.695
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
           0
           0
       -3048

Inputs: 
----------
       <strong>u</strong>   
    <strong>_______</strong>

(1.) csthl20_trim/da
    -23.984
(2.) csthl20_trim/de
    -6.4896
(3.) csthl20_trim/dr
     4.0858
rps(1).TerminationString
ans =

    'Operating point specifications were successfully met.'

Пакетная линеаризация

Усиления системы управления полетом обычно планируются в зависимости от альфы и беты, видят Часть 2 (Угловое Управление Уровнем в автопилоте HL-20) для получения дополнительной информации. Чтобы настроить эти усиления, вам нужны линеаризовавшие модели корпуса HL-20 при 40 условиях для обрезки. Используйте linearize вычислить эти модели из условий работы для обрезки ops.

% Linearize airframe dynamics at each trim condition
G = linearize('csthl20_trim','csthl20_trim/HL20 Airframe',ops);

size(G)
8x5 array of state-space models.
Each model has 34 outputs, 9 inputs, and 12 states.

Линейный эквивалент блока "Controls Selector" зависит от суммы отклонения лифта и должен быть вычислен для qbar_inv=1 (номинальное динамическое давление в Mach=0.6). Для удобства также линеаризуйте этот блок при 40 условиях для обрезки.

CS = linearize('csthl20_trim','csthl20_trim/Controls Selector',ops);

% Zero out a/b and qbar_inv channels
CS = [CS(:,1:3) zeros(6,2)];

Линейное упрощение модели

Линеаризовавшие модели корпуса имеют 12 состояний:

xG = G.StateName
xG =

  12x1 cell array

    {'phi theta psi(1)'}
    {'phi theta psi(2)'}
    {'phi theta psi(3)'}
    {'p,q,r (1)'       }
    {'p,q,r (2)'       }
    {'p,q,r (3)'       }
    {'ub,vb,wb(1)'     }
    {'ub,vb,wb(2)'     }
    {'ub,vb,wb(3)'     }
    {'xe,ye,ze(1)'     }
    {'xe,ye,ze(2)'     }
    {'xe,ye,ze(3)'     }

Некоторые состояния не находятся под полномочиями автопилота крена/тангажа/рыскания, и другие состояния способствуют мало проекту этого автопилота. В целях управления самые важные состояния являются креном phi, скорости тела ub, vb, wb, и угловые уровни p, q, r. Соответственно, используйте modred получить модель 7-го порядка, которая только сохраняет эти состояния.

G7 = G;
xKeep = {...
   'phi theta psi(1)'
   'ub,vb,wb(1)'
   'ub,vb,wb(2)'
   'ub,vb,wb(3)'
   'p,q,r(1)'
   'p,q,r(2)'
   'p,q,r(3)'};
[~,xElim] = setdiff(xG,xKeep);
for ct=1:40
   G7(:,:,ct) = modred(G(:,:,ct),xElim,'truncate');
end

С этими линеаризовавшими моделями в руке можно переместиться в задачу настройки и планирования системных усилений управления полетом. Смотрите Угловое Управление Уровнем в автопилоте HL-20 для Части 2 этого примера.

Похожие темы