基於多個MPC的的排程控制器
1引言
本文J將對MATLAB自帶的MPC例子進行詳細剖析
MPC:Model Predictive Control Toolbox
開始設計工具:通過輸入MATLAB命令:‘mpctool’開始設計工具。
下圖1中的圖形中左側的三個欄目分別為受控物件模型(plant model)、模型預測控制器(Controllers)、模擬器(Scenarios)。
模型預測控制工具箱是一個圖形使用者介面的設計。這個GUI是控制和評估工具管理器GUI的一部分。見下圖
Mo(measured output):當前可測量的輸出訊號
Ref(Reference signa):參考訊號
Md(optional measured disturbance signa):可選的測量干擾訊號
Mv(optimal manipulated variables ):最優操縱變數
MPC一般通過求解一個二次規劃(這裡我們使用ord45)來計算最優操縱變數
一個簡單的例子如下圖所示:
2.多個MPC排程控制器解決方案
2.1系統描述
如果你的物件模型是非線性,設計一個控制器操作在一個特定的目標地區表現優異,但可能在其他地區表現不佳。補償的常用方法是設計多個控制器,每個面向一個特定的操作條件的組合。他們之間切換實時隨著情況的變化。獲得這項技術的排程是一個傳統的例子。下面的例子顯示瞭如何協調多個模型預測控制器
該系統是由兩個物體M1和M2分別連線到兩個獨立的彈簧k1和k2組成。假定當M1和M2碰撞的時候是完全非彈性碰撞。力F對於M1來說是拉力,這是可操縱變數( manipulated variable MV)。目標是使M1的位置y1跟蹤給定參考位置r(Reference signa)。
當M1和M2分離時,M1自由地移動。發生碰撞的時候,由於是完全非彈性碰撞,所以M1 + M2一起移動。我們假設只有M1的位置和接觸感測器提供反饋。後者是用來觸發開關MPC控制器來選擇MPC1還是MPC2。在這裡,我們認為,M2的位置和速度的不可控。這這裡,我們認為右方向為正方向。如下圖
2.2模型引數
clear all
clc
M1=1; % M1的質量
M2=5; % M2的質量
k1=1; % 彈簧k1常數k
k2=0.1; % 彈簧k2常數k
b1=0.3; % 與空氣的摩擦係數,與速度成正比
b2=0.8; % 摩擦係數
yeq1=10; % 剛性壁1的位置
yeq2=-10; % 剛性壁2的位置
2.3狀態空間模型
states:M1的位置和速度
MV:推力F
MD:物體1由彈簧的需求的力F和實際給出的F之間的常量誤差,用來彌補彈簧彈力,使M在初始位置0上時,彈簧對其作用力為零。
MO:M1的位置
2.3.1當M1和M2沒有接觸時候的模型MPC1
%% 狀態空間模型
% 當M1和M2不接觸時候的狀態模型.
A1=[0 1;-k1/M1 -b1/M1];
B1=[0 0;-1/M1 k1*yeq1/M1];
C1=[1 0];
D1=[0 0];
sys1=ss(A1,B1,C1,D1); %建立狀態空間表示式
sys1=setmpcsignals(sys1,'MD',2); %第二個輸入是可測量擾動
【注】:
1.Sys = ss(a,b,c,d):用來描述連續性的狀態空間模型
2.Setmpcsignals:設定MPC受控物件的的I/0訊號模型。這個系統必須是線性時不變系統,’MD’:可測量的輸入擾動,,第二個輸入是可測量的輸入擾動。如果沒有指定的輸入變數是MV
最後得出的結果:
2.3.2當M1和M2連線在一起時候的模型MPC2
% 當M1和M2接觸時候的狀態模型.
A2=[0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2=[0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];
C2=[1 0];
D2=[0 0];
sys2=ss(A2,B2,C2,D2);
sys2=setmpcsignals(sys2,'MD',2);
2.4 Multi-MPC控制設定
%% MPC模擬引數設定
Ts=0.2; % 取樣時間
p=20; % 預測時域長度
m=1; % 控制時域長度
%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m); % 定義M1和M2分離的MPC模型
% 設定限制,F的大小不能為0,F斜率絕對值最大1000
MPC1.MV=struct('Min',0,'Max',Inf,'RateMin',-1e3,'RateMax',1e3);
MPC2=mpc(sys2,Ts,p,m); %定義M1和M2連線的MPC2模型
MPC2.MV=MPC1.MV; %系統1和系統2的控制限制一樣
2.5模擬引數設定
%% 模擬引數設定
Tstop=100; % 模擬時間
y1initial=0; % 物體1的初始位置
y2initial=10; % 物體2的初始位置
open_system('wc1'); % 呼叫wc1.MDL
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%設定系統和模型的引數值
sim('wc1',Tstop);%開始動態系統模擬
3.Simulatink實現
Simulation框圖如下圖所示:
The total simulation diagram上面的部分模擬兩個物體的運動,並且這種移動會在在示波器中以訊號的方式顯示出來。並且當M1的位置和加速度均大於M2的位置和加速度時,model輸出布林量true或者false;下半部分包含以下要素:
1.多個MPC控制器,。這有四個輸入:可測量輸出(mo), 參考(ref),可測量干擾(md)輸入和獨特的多個MPC控制器的功能塊switch輸入。
2.一脈衝發生器改變M1需要到達的位置 (控制器參考訊號)。此脈衝發生器的輸出是一個幅值為5的方波,頻率是0.015每秒。
3.模擬感測器的接觸。當switch輸入1時,啟用第一個控制器MPC1,這個時候M1和M2是分離的。當兩個物體有相同的位置時,Compare to Constant的計算結果為1,通過Add1加法器的輸出值為2,Multiple MPC Controllers的switch埠被輸入2,自動啟動第二個控制器MPC2。
4.解決方案評價
下圖展示了模擬的過程:
4.1 MPC1與MPC2協同工作
下圖展示了對於這個例子多個MPC控制器的模擬:
在圖上面上,青色的線(就是我們M1需要的到達的位置,由reference產生)它從-5開始。的M1位置(黃色)從0開始出發。 在MPC1的控制下, M1移動迅速向所需的位置。M2(紅色)從10開始開始朝著同一個方向移動
大約在t = 13秒,M2與M1發生完全非彈性碰撞。M1與M2連在一起。第三幅圖顯示了開關訊號的變化,在這個瞬間從1到2,所以MPC2開始起作用。。
在M1+M2超過了從其所期望的位置時候,M2和M1仍連在一起。控制器MPC2調整作用力F(中間的圖片)使M1+M2快速返回到所需的位置。當r突變到5時,效果一樣是非常不錯的
4.2 單個MPC1一直工作
假設我們的控制器MPC1執行在所有條件下
%再進行一次無論在什麼情況下只用MPC1系統的實驗
disp('Now repeat simulation by using only MPC1 ...');
MPC2save=MPC2; %先將MPC2儲存起來
MPC2=MPC1; %用MPC2來代替MPC21
sim('wc1',Tstop); %動態系統模擬
下圖顯示了MPC1單獨工作的影象
如果一直是MPC1的系統,力F不夠,當M1和M2鏈連線在一起的時候,移動緩慢,當下一個轉變發生時還不能到達所需的位置
4.3單個MPC2一直工作
%再進行一次無論在什麼情況下只用MPC2系統的實驗
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);
假設我們的控制器MPC2執行在所有條件下
下圖顯示了MPC1單獨工作的影象
當M1和M2分開的時候,MPC2也依然使用,過度使用F,過度補償,導致振盪產生。當M2和M1連線在一起的時候,移動更平穩,和預期一樣。最後過渡造成特別嚴重的振盪。 M1和M2頻繁的碰撞,M1不能到達所需的位置。
5.參考文獻
[1] A. Bemporad, S. Di Cairano, I. V. Kolmanovsky, and D. Hrovat, “Hybrid
modeling and control of a multibody magnetic actuator for automotive applications,” in Proc. 46th IEEE(R) Conf. on Decision and Control, New Orleans, LA, 2007.
[2]http://cn.mathworks.com/help/mpc/gs/coordination-of-multiple-model-predictive-controllers.html#bs670e3-8
[3]李國勇,智慧預測控制及其MATLAB實現.北京:電子工業出版社,2010.
6.附錄
%% 多個MPC的的排程控制器
% clc
% clear all
%% 系統引數
clear all
clc
M1=1; % M1的質量
M2=5; % M2的質量
k1=1; % 彈簧k1常數k
k2=0.1; % 彈簧k2常數k
b1=0.3; % 與空氣的摩擦係數,與速度成正比
b2=0.8; % 摩擦係數
yeq1=10; % 剛性壁1的位置
yeq2=-10; % 剛性壁2的位置
%% 狀態空間模型
% 狀態: M的速度和位置
% 被控變數:F
% 可測量的擾動:彈簧1的常熟;
% 測量輸出: M1的位置
% 當M1和M2不接觸時候的狀態模型.
A1=[0 1;-k1/M1 -b1/M1];
B1=[0 0;-1/M1 k1*yeq1/M1];
C1=[1 0];
D1=[0 0];
sys1=ss(A1,B1,C1,D1); %建立狀態空間表示式
sys1=setmpcsignals(sys1,'MD',2) ;%第二個輸入是可測量擾動
% 當M1和M2接觸時候的狀態模型.
A2=[0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2=[0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];
C2=[1 0];
D2=[0 0];
sys2=ss(A2,B2,C2,D2);
sys2=setmpcsignals(sys2,'MD',2);
%% MPC模擬引數設定
Ts=0.2; % 取樣時間
p=20; % 預測時域長度
m=1; % 控制時域長度
%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m); % 定義M1和M2分離的MPC模型
MPC1.MV=struct('Min',0,'Max',Inf,'RateMin',-1e3,'RateMax',1e3); % 設定限制,F的大小不能為0
MPC2=mpc(sys2,Ts,p,m); %定義M1和M2連線時候的MPC模型
MPC2.MV=MPC1.MV; %系統1和系統2的控制限制一樣
%% 模擬引數設定
Tstop=100; % 模擬時間
y1initial=0; % 物體1的初始位置
y2initial=10; % 物體2的初始位置
open_system('WC1'); % 呼叫WC1.MDL
%% 開始三次模擬
%雙系統MPC1和MPC2模擬實驗
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%設定系統和模型的引數值
sim('WC1',Tstop);%動態系統模擬
%再進行一次無論在什麼情況下只用MPC1系統的實驗
disp('Now repeat simulation by using only MPC1 ...');
MPC2save=MPC2; %先將MPC2儲存起來
MPC2=MPC1; %用MPC2來代替MPC21
sim('WC1',Tstop);
%再進行一次無論在什麼情況下只用MPC2系統的實驗
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);
%% 關閉模擬視窗
% bdclose('WC1')
% close(findobj('Tag','WC1_demo'))
%% reference
%[1] A. Bemporad, S. Di Cairano, I. V. Kolmanovsky, and D. Hrovat, "Hybrid
% modeling and control of a multibody magnetic actuator for automotive
% applications," in Proc. 46th IEEE(R) Conf. on Decision and Control, New
% Orleans, LA, 2007.
%[2]http://cn.mathworks.com/help/mpc/gs/coordination-of-multiple-model-predictive-controllers.html#bs670e3-8
%[3]李國勇,智慧預測控制及其MATLAB實現.北京:電子工業出版社,2010.