Осуществите ограничения для ПИД-регуляторов

В этом примере показано, как осуществить известные ограничения для приложения ПИД-регулятора с помощью блока Constraint Enforcement.

Обзор

В данном примере движущие силы объекта описаны следующими уравнениями [1].

x˙1=-x1+(x12+1)u1x˙2=-x2+(x22+1)u2

Цель для объекта состоит в том, чтобы отследить желаемые траектории, заданные как:

θ˙=0.1πx˙1d=-rcos(θ)x˙2d=rsin(θ)

Для примера, который изучает и применяет неизвестную ограничительную функцию для того же приложения управления ПИДа, смотрите, Изучают и Применяют Ограничения для ПИД-регуляторов.

Сконфигурируйте параметры модели и начальные условия.

r = 1.5;            % radius for desired trajectory
Ts = 0.1;           % sample time
Tf = 22;            % duration
x0_1 = -r;          % initial condition for x1
x0_2 = 0;           % initial condition for x2

Спроектируйте ПИД-регуляторы

Прежде, чем применить ограничения, спроектируйте ПИД-регуляторы для отслеживания ссылочных траекторий. trackingWithPIDs модель содержит два ПИД-регулятора с усилениями, настроенными с помощью приложения PID Tuner. Для получения дополнительной информации о настраивающихся ПИД-регуляторах в моделях Simulink смотрите Введение в Основанный на модели ПИД, Настраивающий Simulink.

mdl = 'trackingWithPIDs';
open_system(mdl)

Симулируйте ПИД-регуляторы и постройте их эффективность отслеживания.

% Simulate the model.
out = sim(mdl);

% Extract trajectories.
logData = out.logsout;
x1_traj = logData{3}.Values.Data;
x2_traj = logData{4}.Values.Data;
x1_des = logData{1}.Values.Data;
x2_des = logData{2}.Values.Data;

% Plot trajectories.
figure('Name','Tracking')
xlim([-2,2])
ylim([-2,2])
plot(x1_des,x2_des,'r')
xlabel('x1')
ylabel('x2')
hold on
plot(x1_traj,x2_traj,'b:','LineWidth',2)
hold on
plot(x1_traj(1),x2_traj(1),'g*')
hold on
plot(x1_traj(end),x2_traj(end),'go')
legend('desired','traj','start','end')

Ограничительная функция

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

В этом примере выполнимой областью для объекта дают {x:x11,xx1}. Поэтому условие следующего состояния объекта xk+1=[x1(k+1)x2(k+1)]должен удовлетворить xk+1[11].

Можно аппроксимировать динамику объекта следующим уравнением.

xk+1[(1-Ts)00(1-Ts)]xk+[Ts(1+x12(k))00Ts(1+x22(k))]uk

Применение ограничений к этому уравнению производит следующую ограничительную функцию.

[(1-Ts)00(1-Ts)]xk+[Ts(1+x12(k))00Ts(1+x22(k))]uk[11].

Блок Constraint Enforcement принимает ограничения формы fx+gxuc. Для этого приложения коэффициенты этой ограничительной функции следующие.

fx=[(1-Ts)00(1-Ts)]xk,gx=[Ts(1+x12(k))00Ts(1+x22(k))],c=[11]

Симулируйте ПИД-регулятор с ограничительным осуществлением

trackingWithConstraintPID модель содержит ПИД-регуляторы, динамику объекта и ограничительную реализацию.

mdl = 'trackingWithKnownConstraintPID';
open_system(mdl)

Чтобы просмотреть ограничительную реализацию, откройте Ограничительную подсистему. Здесь, известная ограничительная функция реализована с помощью блока MATLAB function, и блок Constraint Enforcement осуществляет ограничительную функцию.

Запустите модель и постройте результаты симуляции. Показано в графике, что состояния объекта меньше того.

% Simulate the model.
out = sim(mdl);

% Extract trajectories.
logData = out.logsout;
x1_traj = zeros(size(out.tout));
x2_traj = zeros(size(out.tout));
for ct = 1:size(out.tout,1)
    x1_traj(ct) = logData{4}.Values.Data(:,:,ct);
    x2_traj(ct) = logData{5}.Values.Data(:,:,ct);
end

x1_des = logData{2}.Values.Data;
x2_des = logData{3}.Values.Data;

% Plot trajectories.
figure('Name','Tracking with Constraint');
plot(x1_des,x2_des,'r')
xlabel('x1')
ylabel('x2')
hold on
plot(x1_traj,x2_traj,'b:','LineWidth',2)
hold on
plot(x1_traj(1),x2_traj(1),'g*')
hold on
plot(x1_traj(end),x2_traj(end),'go')
legend('desired','traj','start','end','Location','best')

Блок Constraint Enforcement успешно ограничивает действия управления, таким образом, что состояния объекта остаются меньше чем один.

bdclose('trackingWithPIDs')
bdclose('trackingWithKnownConstraintPID')

Ссылки

[1] Robey, Александр, Хайминь Ху, Ларс Линдеманн, Ханьвэнь Чжан, Димос В. Димэрогонас, Стивен Ту и Николай Матни. "Узнавая о Барьерных функциях Управления из Опытных Демонстраций". Предварительно распечатайте, представленный 7 апреля 2020. https://arxiv.org/abs/2004.03315

Смотрите также

Блоки

Приложения

Похожие темы