В этом примере показано, как осуществить известные ограничения для приложения ПИД-регулятора с помощью блока Constraint Enforcement.
В данном примере движущие силы объекта описаны следующими уравнениями [1].
Цель для объекта состоит в том, чтобы отследить желаемые траектории, заданные как:
Для примера, который изучает и применяет неизвестную ограничительную функцию для того же приложения управления ПИДа, смотрите, Изучают и Применяют Ограничения для ПИД-регуляторов.
Сконфигурируйте параметры модели и начальные условия.
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, который настраивает действия управления, чтобы удовлетворить ограничительной функции.
В этом примере выполнимой областью для объекта дают . Поэтому условие следующего состояния объекта должен удовлетворить .
Можно аппроксимировать динамику объекта следующим уравнением.
Применение ограничений к этому уравнению производит следующую ограничительную функцию.
.
Блок Constraint Enforcement принимает ограничения формы . Для этого приложения коэффициенты этой ограничительной функции следующие.
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