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

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

HL-20 модель

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

open_system('csthl20_trim')

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

Обрезка партии

Обрезка состоит из вычисления отклонений элерона, лифта и руля направления, которые обнуляют силы и моменты на планере или, эквивалентно, сохраняют скорости тела ub, vb, wb и угловые скорости p, q, r устойчивы. Поскольку тяга не используется во время спуска, одна степень свободы теряется, и условие обрезки должно быть расслаблено, чтобы позволить ub изменяться. Значения обрезки отклонений da, de, dr зависят от ориентации планера относительно ветра. Эта ориентация характеризуется углом атаки (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)
 Operating point specification for the Model csthl20_trim.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: -0.199
	 spec:  dx = 0,  initial guess: 0
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: 0
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
	 spec:  dx = 0,  initial guess: 203
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: 23.3
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
	 spec:  dx = 0,  initial guess: -1.21e+04
	 spec:  dx = 0,  initial guess: 0
	 spec:  dx = 0,  initial guess: -3.05e+03

Inputs: 
----------
(1.) csthl20_trim/da
	 initial guess: 0            
(2.) csthl20_trim/de
	 initial guess: 0            
(3.) csthl20_trim/dr
	 initial guess: 0            

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


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

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

  • Задайте скорость планера путем фиксации выхода Mach на 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, альфа, бета), чтобы выровнять системы координат ветра и земли.

  • Укажите положение планера (Xe, Ye, Ze) как (0,0, -Altitude).

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)
 Operating point for the Model csthl20_trim.
 (Time-Varying Components Evaluated at time t=0)

States: 
----------
(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
      x: 0            
      x: -0.175       
      x: -0.175       
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 
      x: 0            
      x: -0.158       
      x: 0.008        
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
      x: 191          
      x: -34.2        
      x: -33.7        
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
      x: 0            
      x: 0            
      x: -3.05e+03    

Inputs: 
----------
(1.) csthl20_trim/da
      u: -24          
(2.) csthl20_trim/de
      u: -6.49        
(3.) csthl20_trim/dr
      u: 4.09         
rps(1).TerminationString
ans =

    'Operating point specifications were successfully met.'

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

Усиления системы управления рейсом обычно планируются как функция альфа и бета, см. Часть 2 (Управление угловой скоростью в HL-20 Autopilot) для получения дополнительной информации. Чтобы настроить эти усиления, вам нужны линеаризированные модели планера 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)'     }

Некоторые состояния не находятся под властью автопилота roll/pitch/yaw, а другие состояния мало способствуют проекту этого автопилота. В целях управления наиболее важными состояниями являются угол крена 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 Autopilot для Части 2 этого примера.

Похожие темы