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

В этом примере показано, как использовать Robust Control Toolbox™ для разработки устойчивого контроллера для активной системы подвески. Пример описывает модель четырехвагонной подвески. Затем он вычисляет H контроллер для номинальной системы, использующий hinfsyn команда. Наконец, в примере показано, как использовать ü- синтез для разработки устойчивого контроллера для полной неопределенной системы.

Модель четырехвагонной подвески

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

В этом примере используется модель системы активной подвески с четвертью автомобиля (см. фигуру 1). Масса mb (в килограммах) представляет собой автомобильное шасси (кузов) и массу mw (в килограммах) представляет колесный узел. Пружина ks и демпфер bs представляют пассивную пружину и амортизатор, размещенные между кузовом автомобиля и колесным узлом. Пружина kt моделирует сжимаемость пневматической шины. Переменные xb, xw, и r (все в метрах) являются перемещением кузова, перемещением колеса и нарушением порядка, соответственно. Сила fs (в кНьютонах), приложенный между корпусом и колесным узлом, управляется с помощью обратной связи и представляет собой активный компонент системы подвески.

Фигура 1: Квартальная модель активной подвески.

С обозначением (x1,x2,x3,x4):=(xb,xb˙,xw,x˙w), линеаризованные уравнения пространства состояний для модели с четвертью машины:

x1˙=x2x2˙=-(1/mb)[ks(x1-x3)+bs(x2-x4)-103fs]x3˙=x4x4˙=(1/mw)[ks(x1-x3)+bs(x2-x4)-kt(x3-r)-103fs].

Создайте модель пространства состояний qcar представление этих уравнений.

% Physical parameters
mb = 300;    % kg
mw = 60;     % kg
bs = 1000;   % N/m/s
ks = 16000 ; % N/m
kt = 190000; % N/m

% State matrices
A = [ 0 1 0 0; [-ks -bs ks bs]/mb ; ...
      0 0 0 1; [ks bs -ks-kt -bs]/mw];
B = [ 0 0; 0 1e3/mb ; 0 0 ; [kt -1e3]/mw];
C = [1 0 0 0; 1 0 -1 0; A(2,:)];
D = [0 0; 0 0; B(2,:)];

qcar = ss(A,B,C,D);
qcar.StateName = {'body travel (m)';'body vel (m/s)';...
          'wheel travel (m)';'wheel vel (m/s)'};
qcar.InputName = {'r';'fs'};
qcar.OutputName = {'xb';'sd';'ab'};

Передаточная функция от привода к движению и ускорению корпуса имеет мнимый осевой нуль с естественной частотой 56,27 рад/с. Это называется частотой шинного скачка.

tzero(qcar({'xb','ab'},'fs'))
ans = 2×1 complex

  -0.0000 +56.2731i
  -0.0000 -56.2731i

Точно так же передаточная функция от привода к отклонению подвеса имеет мнимую ось, нуль с собственной частотой 22,97 рад/с. Это называется частотой пространства трения.

zero(qcar('sd','fs'))
ans = 2×1 complex

   0.0000 +22.9734i
   0.0000 -22.9734i

Дорожные нарушения порядка влияют на движение автомобиля и подвеску. Комфорт пассажиров связан с небольшим ускорением тела. Допустимый ход подвески ограничивается пределами на перемещение привода. Постройте график усиления разомкнутого контура от нарушения порядка дороги и силы привода до ускорения корпуса и перемещения подвески.

bodemag(qcar({'ab','sd'},'r'),'b',qcar({'ab','sd'},'fs'),'r',{1 100});
legend('Road disturbance (r)','Actuator force (fs)','location','SouthWest')
title({'Gain from road dist (r) and actuator force (fs) ';
       'to body accel (ab) and suspension travel (sd)'})

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Road disturbance (r), Actuator force (fs). Axes 2 contains 2 objects of type line. These objects represent Road disturbance (r), Actuator force (fs).

Из-за мнимых нулей осей управление с обратной связью не может улучшить ответ от нарушения порядка дороги r в ускорение тела ab на частоте tire-hop, и от r к отклонению подвески sd на частоте пространства гремучих волн. Более того, из-за отношений xw=xb-sd и тот факт, что положение колеса xw примерно следуют r при низкой частоте (менее 5 рад/с) происходит неотъемлемый компромисс между комфортом пассажиров и отклонением подвески: любое уменьшение хода кузова на низкой частоте приведет к увеличению отклонения подвески.

Модель неопределенного привода

Гидравлический привод, используемый для активного управления подвеской, соединяется между массой корпуса mb и масса колесного узла mw. Номинальная динамика привода представлена передаточной функцией первого порядка 1/(1+s/60) с максимальным водоизмещением 0,05 м.

ActNom = tf(1,[1/60 1]);

Эта номинальная модель только аппроксимирует динамику физического привода. Мы можем использовать семейство моделей привода, чтобы учесть ошибки моделирования и изменчивость в моделях привода и квартала автомобиля. Это семейство состоит из номинальной модели с частотно-зависимым количеством неопределенности. На низкой частоте, ниже 3 рад/с, модель может варьироваться до 40% от своего номинального значения. Около 3 рад/с, процентное изменение начинает увеличиваться. Неопределенность пересекает 100% при 15 рад/с и достигает 2000% при приблизительно 1000 рад/с. Функция взвешивания Wunc используется для моделирования величины неопределенности с частотой.

Wunc = makeweight(0.40,15,3);
unc = ultidyn('unc',[1 1],'SampleStateDim',5);
Act = ActNom*(1 + Wunc*unc);
Act.InputName = 'u';
Act.OutputName = 'fs';

Результат Act - модель привода с неопределенным пространством состояний. Постройте график характеристики Бода 20 выборочных значений Act и сравните с номинальным значением.

rng('default')
bode(Act,'b',Act.NominalValue,'r+',logspace(-1,3,120))

Figure contains 2 axes. Axes 1 with title From: u To: fs contains 22 objects of type line. These objects represent Act, untitled1. Axes 2 contains 22 objects of type line. These objects represent Act, untitled1.

Проектирование Setup

Основные цели управления сформулированы с точки зрения комфорта пассажиров и обработки дорог, которые относятся к ускорению кузова ab и перемещение подвески sd. Другие факторы, которые влияют на систему управления, включают характеристики нарушения порядка дороги, качество измерений датчика для обратной связи и пределы доступной силы управления. Использовать H алгоритмы синтеза, мы должны выразить эти цели как одну функцию затрат, которая должна быть минимизирована. Это может быть сделано, как показано фигура.

Фигура 2: Рецептура подавления помех.

Контроллер обратной связи использует измерения y1,y2 хода подвески sd и ускорение тела ab для вычисления управляющего сигнала u привода гидропривода. Существует три внешних источника нарушения порядка:

  • Дорожное нарушение порядка r, смоделированный как нормированный сигнал d1 формируется функцией взвешивания Wroad. Чтобы смоделировать отклонения широкополосной дороги амплитудой семь сантиметров, мы используем постоянный вес Wroad=0.07

  • Шум датчика на обоих измерениях, смоделированный как нормализованные сигналы d2 и d3 формируется функциями взвешивания Wd2 и Wd3. Мы используем Wd2=0.01 и Wd3=0.5 для моделирования шума широкополосного датчика интенсивностью 0,01 и 0,5 соответственно. В более реалистичном проекте эти веса были бы зависящими от частоты для моделирования шумового спектра датчиков смещения и ускорения.

Цели управления могут быть переосмыслены как цель подавления помех: Минимизируйте влияние нарушений порядка d1,d2,d3 на взвешенной комбинации усилий по управлению u, перемещение подвески sd, и ускорение тела ab. При использовании H norm (пиковое усиление) для измерения « влияния», это эквивалентно разработке контроллера, который минимизирует H норма от входов нарушения порядка d1,d2,d3 к сигналам ошибки e1,e2,e3.

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

Wroad = ss(0.07);  Wroad.u = 'd1';   Wroad.y = 'r';
Wact = 0.8*tf([1 50],[1 500]);  Wact.u = 'u';  Wact.y = 'e1';
Wd2 = ss(0.01);  Wd2.u = 'd2';   Wd2.y = 'Wd2';
Wd3 = ss(0.5);   Wd3.u = 'd3';   Wd3.y = 'Wd3';

Задайте цели с обратной связью для усиления от нарушения порядка дороги r к отклонению подвески sd (обработка) и ускорение тела ab (комфорт). Из-за неопределенности привода и мнимых нулей осей, только стремиться ослабить нарушения порядка ниже 10 рад/с.

HandlingTarget = 0.04 * tf([1/8 1],[1/80 1]);
ComfortTarget = 0.4 * tf([1/0.45 1],[1/150 1]);

Targets = [HandlingTarget ; ComfortTarget];
bodemag(qcar({'sd','ab'},'r')*Wroad,'b',Targets,'r--',{1,1000}), grid
title('Response to road disturbance')
legend('Open-loop','Closed-loop target')

Figure contains 2 axes. Axes 1 with title From: d1 contains 2 objects of type line. These objects represent Open-loop, Closed-loop target. Axes 2 contains 2 objects of type line. These objects represent Open-loop, Closed-loop target.

Соответствующие веса эффективность Wsd,Wab являются взаимностью этих целей комфорта и обработки. Чтобы исследовать компромисс между комфортом пассажиров и обработкой дорог, создайте три набора весов (βWsd,(1-β)Wab) соответствующий трем различным компромиссам: комфорт (β=0.01), сбалансированный (β=0.5), и обработка (β=0.99).

% Three design points
beta = reshape([0.01 0.5 0.99],[1 1 3]);
Wsd = beta / HandlingTarget;
Wsd.u = 'sd';  Wsd.y = 'e3';
Wab = (1-beta) / ComfortTarget;
Wab.u = 'ab';  Wab.y = 'e2';

Наконец, используйте connect для создания модели qcaric на блок схеме Фигуры 2. Обратите внимание, что qcaric массив из трех моделей, по одной для каждого проекта β. Кроме того, qcaric является неопределенной моделью, поскольку она содержит неопределенную модель привода Act.

sdmeas  = sumblk('y1 = sd+Wd2');
abmeas = sumblk('y2 = ab+Wd3');
ICinputs = {'d1';'d2';'d3';'u'};
ICoutputs = {'e1';'e2';'e3';'y1';'y2'};
qcaric = connect(qcar(2:3,:),Act,Wroad,Wact,Wab,Wsd,Wd2,Wd3,...
                 sdmeas,abmeas,ICinputs,ICoutputs)
qcaric =

  3x1 array of uncertain continuous-time state-space models.
  Each model has 5 outputs, 4 inputs, 9 states, and the following uncertain blocks:
    unc: Uncertain 1x1 LTI, peak gain = 1, 1 occurrences

Type "qcaric.NominalValue" to see the nominal value, "get(qcaric)" to see all properties, and "qcaric.Uncertainty" to interact with the uncertain elements.

Номинальный проект H-бесконечности

Использование hinfsyn для вычисления H контроллер для каждого значения коэффициента смешения β.

ncont = 1; % one control signal, u
nmeas = 2; % two measurement signals, sd and ab
K = ss(zeros(ncont,nmeas,3));
gamma = zeros(3,1);
for i=1:3
   [K(:,:,i),~,gamma(i)] = hinfsyn(qcaric(:,:,i),nmeas,ncont);
end

gamma
gamma = 3×1

    0.9405
    0.6727
    0.8892

Три контроллера достигают системы с обратной связью H нормы 0,94, 0,67 и 0,89 соответственно. Создайте соответствующие модели с обратной связью и сравните усиления от нарушения порядка дороги с xb,sd,ab для пассивных и активных суспензий. Обратите внимание, что все три контроллера уменьшают отклонение подвески и ускорение тела ниже частоты пространства трения (23 рад/с).

% Closed-loop models
K.u = {'sd','ab'};  K.y = 'u';
CL = connect(qcar,Act.Nominal,K,'r',{'xb';'sd';'ab'});

bodemag(qcar(:,'r'),'b', CL(:,:,1),'r-.', ...
   CL(:,:,2),'m-.', CL(:,:,3),'k-.',{1,140}), grid
legend('Open-loop','Comfort','Balanced','Handling','location','SouthEast')
title('Body travel, suspension deflection, and body acceleration due to road')

Figure contains 3 axes. Axes 1 with title From: r contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling. Axes 2 contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling. Axes 3 contains 4 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling.

Оценка временной области

Чтобы дополнительно оценить три проекта, выполните симуляции во временной области с использованием сигнала нарушения порядка дороги r(t) представляет собой дорожный отбойник высотой 5 см.

% Road disturbance
t = 0:0.0025:1;
roaddist = zeros(size(t));
roaddist(1:101) = 0.025*(1-cos(8*pi*t(1:101)));

% Closed-loop model
SIMK = connect(qcar,Act.Nominal,K,'r',{'xb';'sd';'ab';'fs'});

% Simulate
p1 = lsim(qcar(:,1),roaddist,t);
y1 = lsim(SIMK(1:4,1,1),roaddist,t);
y2 = lsim(SIMK(1:4,1,2),roaddist,t);
y3 = lsim(SIMK(1:4,1,3),roaddist,t);

% Plot results
subplot(211)
plot(t,p1(:,1),'b',t,y1(:,1),'r.',t,y2(:,1),'m.',t,y3(:,1),'k.',t,roaddist,'g')
title('Body travel'), ylabel('x_b (m)')
subplot(212)
plot(t,p1(:,3),'b',t,y1(:,3),'r.',t,y2(:,3),'m.',t,y3(:,3),'k.',t,roaddist,'g')
title('Body acceleration'), ylabel('a_b (m/s^2)')

Figure contains 2 axes. Axes 1 with title Body travel contains 5 objects of type line. Axes 2 with title Body acceleration contains 5 objects of type line.

subplot(211)
plot(t,p1(:,2),'b',t,y1(:,2),'r.',t,y2(:,2),'m.',t,y3(:,2),'k.',t,roaddist,'g')
title('Suspension deflection'), xlabel('Time (s)'), ylabel('s_d (m)')
subplot(212)
plot(t,zeros(size(t)),'b',t,y1(:,4),'r.',t,y2(:,4),'m.',t,y3(:,4),'k.',t,roaddist,'g')
title('Control force'), xlabel('Time (s)'), ylabel('f_s (kN)')
legend('Open-loop','Comfort','Balanced','Handling','Road Disturbance','location','SouthEast')

Figure contains 2 axes. Axes 1 with title Suspension deflection contains 5 objects of type line. Axes 2 with title Control force contains 5 objects of type line. These objects represent Open-loop, Comfort, Balanced, Handling, Road Disturbance.

Обратите внимание, что ускорение тела является наименьшим для контроллера, подчеркивая комфорт пассажира и самым большим для контроллера, подчеркивая отклонение подвески. «Сбалансированный » проект достигает хорошего компромисса между ускорением тела и отклонением подвески.

Робастный проект Mu

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

Следующее использование μ-синтез для разработки контроллера, который достигает устойчивой эффективности для всего семейства моделей привода. Устойчивый контроллер синтезируется с помощью функции musyn с помощью неопределенной модели qcaric(:,:,2) соответствующий «сбалансированной» эффективности (β=0.5).

[Krob,rpMU] = musyn(qcaric(:,:,2),nmeas,ncont);
D-K ITERATION SUMMARY:
-----------------------------------------------------------------
                       Robust performance               Fit order
-----------------------------------------------------------------
  Iter         K Step       Peak MU       D Fit             D
    1           1.193        1.125        1.139             4
    2           1.091        1.025        1.033             4
    3          0.9991        0.946       0.9559             4
    4          0.9358        0.932       0.9348             4
    5          0.9096       0.9057       0.9114             8
    6          0.9103        0.907       0.9096             8
    7          0.9091       0.9066       0.9094             6

Best achieved robust performance: 0.906

Симулируйте номинальный ответ на дорожный отбойник с устойчивым контроллером Krob. Ответы аналогичны тем, что получены с «сбалансированным» H контроллер.

% Closed-loop model (nominal)
Krob.u = {'sd','ab'};
Krob.y = 'u';
SIMKrob = connect(qcar,Act.Nominal,Krob,'r',{'xb';'sd';'ab';'fs'});

% Simulate
p1 = lsim(qcar(:,1),roaddist,t);
y1 = lsim(SIMKrob(1:4,1),roaddist,t);

% Plot results
clf, subplot(221)
plot(t,p1(:,1),'b',t,y1(:,1),'r',t,roaddist,'g')
title('Body travel'), ylabel('x_b (m)')
subplot(222)
plot(t,p1(:,3),'b',t,y1(:,3),'r')
title('Body acceleration'), ylabel('a_b (m/s^2)')
subplot(223)
plot(t,p1(:,2),'b',t,y1(:,2),'r')
title('Suspension deflection'), xlabel('Time (s)'), ylabel('s_d (m)')
subplot(224)
plot(t,zeros(size(t)),'b',t,y1(:,4),'r')
title('Control force'), xlabel('Time (s)'), ylabel('f_s (kN)')
legend('Open-loop','Robust design','location','SouthEast')

Figure contains 4 axes. Axes 1 with title Body travel contains 3 objects of type line. Axes 2 with title Body acceleration contains 2 objects of type line. Axes 3 with title Suspension deflection contains 2 objects of type line. Axes 4 with title Control force contains 2 objects of type line. These objects represent Open-loop, Robust design.

Затем моделируйте реакцию на дорожный отбойник для 100 моделей привода, случайным образом выбранных из набора неопределенных моделей Act.

rng('default'), nsamp = 100;  clf

% Uncertain closed-loop model with balanced H-infinity controller
CLU = connect(qcar,Act,K(:,:,2),'r',{'xb','sd','ab'});
lsim(usample(CLU,nsamp),'b',CLU.Nominal,'r',roaddist,t)
title('Nominal "balanced" design')
legend('Perturbed','Nominal','location','SouthEast')

Figure contains 3 axes. Axes 1 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 2 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 3 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal.

% Uncertain closed-loop model with balanced robust controller
CLU = connect(qcar,Act,Krob,'r',{'xb','sd','ab'});
lsim(usample(CLU,nsamp),'b',CLU.Nominal,'r',roaddist,t)
title('Robust "balanced" design')
legend('Perturbed','Nominal','location','SouthEast')

Figure contains 3 axes. Axes 1 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 2 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal. Axes 3 contains 102 objects of type line. These objects represent Driving inputs, Perturbed, Nominal.

Надежный контроллер Krob уменьшает изменчивость из-за неопределенности модели и обеспечивает более последовательную эффективность.

Упрощение контроллера: Сокращение порядка

Надежный контроллер Krob имеет относительно высокий порядок по сравнению с объектом. Можно использовать функции снижения сложности модели, чтобы найти контроллер более низкого порядка, который достигает того же уровня устойчивой эффективности. Использование reduce для генерации приближений различных порядков.

% Create array of reduced-order controllers
NS = order(Krob);
StateOrders = 1:NS;
Kred = reduce(Krob,StateOrders);

Следующее использование robgain вычисление надежного запаса эффективности для каждого приближения пониженного порядка. Цели эффективности достигаются, когда коэффициент усиления в системе с обратной связью меньше, чем γ=1. Устойчивый запас эффективности измеряет, насколько неопределенность может быть сохранена без ухудшения эффективности (превышения γ=1). Запас в 1 или более указывает, что мы можем поддерживать 100% указанной неопределенности.

% Compute robust performance margin for each reduced controller
gamma = 1;
CLP = lft(qcaric(:,:,2),Kred);
for k=1:NS
   PM(k) = robgain(CLP(:,:,k),gamma);
end

% Compare robust performance of reduced- and full-order controllers
PMfull = PM(end).LowerBound;
plot(StateOrders,[PM.LowerBound],'b-o',...
   StateOrders,repmat(PMfull,[1 NS]),'r');
grid
title('Robust performance margin as a function of controller order')
legend('Reduced order','Full order','location','SouthEast')

Figure contains an axes. The axes with title Robust performance margin as a function of controller order contains 2 objects of type line. These objects represent Reduced order, Full order.

Можно использовать наименьший порядок контроллера, для которого устойчивая эффективность выше 1.

Упрощение контроллера: Настройка фиксированного порядка

Также можно использовать musyn для непосредственной настройки контроллеров низкого порядка. Это часто более эффективно, чем a-апостериорное сокращение контроллера полного порядка Krob. Например, настройте контроллер третьего порядка, чтобы оптимизировать его устойчивую эффективность.

% Create tunable 3rd-order controller 
K = tunableSS('K',3,ncont,nmeas);

% Tune robust performance of closed-loop system CL
CL0 = lft(qcaric(:,:,2),K);
[CL,RP] = musyn(CL0);
D-K ITERATION SUMMARY:
-----------------------------------------------------------------
                       Robust performance               Fit order
-----------------------------------------------------------------
  Iter         K Step       Peak MU       D Fit             D
    1           1.189        1.104         1.12            10
    2           1.076        1.062        1.073            10
    3          0.9899       0.9762       0.9913            10
    4          0.9229       0.9228       0.9341            10
    5          0.9197       0.9156        0.925            10
    6            0.92       0.9157       0.9226            10

Best achieved robust performance: 0.916

Настроенный контроллер имеет эффективность RP=0.92, очень близко к тому, что у Krob. Его ответ Bode можно увидеть используя

K3 = getBlockValue(CL,'K');
bode(K3)

Figure contains 4 axes. Axes 1 with title From: In(1) contains an object of type line. This object represents K. Axes 2 contains an object of type line. This object represents K. Axes 3 with title From: In(2) contains an object of type line. This object represents K. Axes 4 contains an object of type line. This object represents K.

См. также

|

Похожие темы