本文J將對(duì)MATLAB自帶的MPC例子進(jìn)行詳細(xì)剖析
MPC:Model Predictive Control Toolbox
開(kāi)始設(shè)計(jì)工具:通過(guò)輸入MATLAB命令:‘mpctool’開(kāi)始設(shè)計(jì)工具。
下圖1中的圖形中左邊的3個(gè)欄目分別為受控對(duì)象模型(plant model)、模型預(yù)測(cè)控制器(Controllers)、仿真器(Scenarios)。
模型預(yù)測(cè)控制工具箱是1個(gè)圖形用戶(hù)界面的設(shè)計(jì)。這個(gè)GUI是控制和評(píng)估工具管理器GUI的1部份。見(jiàn)下圖
Mo(measured output):當(dāng)前可丈量的輸出信號(hào)
Ref(Reference signa):參考信號(hào)
Md(optional measured disturbance signa):可選的丈量干擾信號(hào)
Mv(optimal manipulated variables ):最優(yōu)操縱變量
MPC1般通過(guò)求解1個(gè)2次計(jì)劃(這里我們使用ord45)來(lái)計(jì)算最優(yōu)操縱變量
1個(gè)簡(jiǎn)單的例子以下圖所示:
2.1系統(tǒng)描寫(xiě)
如果你的對(duì)象模型是非線(xiàn)性,設(shè)計(jì)1個(gè)控制器操作在1個(gè)特定的目標(biāo)地區(qū)表現(xiàn)優(yōu)良,但可能在其他地區(qū)表現(xiàn)不佳。補(bǔ)償?shù)慕?jīng)常使用方法是設(shè)計(jì)多個(gè)控制器,每一個(gè)面向1個(gè)特定的操作條件的組合。他們之間切換實(shí)時(shí)隨著情況的變化。取得這項(xiàng)技術(shù)的調(diào)度是1個(gè)傳統(tǒng)的例子。下面的例子顯示了如何調(diào)和多個(gè)模型預(yù)測(cè)控制器
該系統(tǒng)是由兩個(gè)物體M1和M2分別連接到兩個(gè)獨(dú)立的彈簧k1和k2組成。假定當(dāng)M1和M2碰撞的時(shí)候是完全非彈性碰撞。力F對(duì)M1來(lái)講是拉力,這是可操縱變量( manipulated variable MV)。目標(biāo)是使M1的位置y1跟蹤給定參考位置r(Reference signa)。
當(dāng)M1和M2分離時(shí),M1自由地移動(dòng)。產(chǎn)生碰撞的時(shí)候,由因而完全非彈性碰撞,所以M1 + M21起移動(dòng)。我們假定只有M1的位置和接觸傳感器提供反饋。后者是用來(lái)觸發(fā)開(kāi)關(guān)MPC控制器來(lái)選擇MPC1還是MPC2。在這里,我們認(rèn)為,M2的位置和速度的不可控。這這里,我們認(rèn)為右方向?yàn)檎较?。以下圖所示:
2.2模型參數(shù)
clear all
clc
M1=1; % M1的質(zhì)量
M2=5; % M2的質(zhì)量
k1=1; % 彈簧k1常數(shù)k
k2=0.1; % 彈簧k2常數(shù)k
b1=0.3; % 與空氣的磨擦系數(shù),與速度成正比
b2=0.8; % 磨擦系數(shù)
yeq1=10; % 剛性壁1的位置
yeq2=-10; % 剛性壁2的位置
2.3狀態(tài)空間模型
states:M1的位置和速度
MV:推力F
MD:物體1由彈簧的需求的力F和實(shí)際給出的F之間的常量誤差,用來(lái)彌補(bǔ)彈簧彈力,使M在初始位置0上時(shí),彈簧對(duì)其作用力為零。
MO:M1的位置
2.3.1當(dāng)M1和M2沒(méi)有接觸時(shí)候的模型MPC1
%% 狀態(tài)空間模型
% 當(dāng)M1和M2不接觸時(shí)候的狀態(tài)模型.
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); %建立狀態(tài)空間表達(dá)式
sys1=setmpcsignals(sys1,'MD',2); %第2個(gè)輸入是可丈量擾動(dòng)
【注】:
1.Sys = ss(a,b,c,d):用來(lái)描寫(xiě)連續(xù)性的狀態(tài)空間模型
2.Setmpcsignals:設(shè)置MPC受控對(duì)象的的I/0信號(hào)模型。這個(gè)系統(tǒng)必須是線(xiàn)性時(shí)不變系統(tǒng),’MD’:可丈量的輸入擾動(dòng),,第2個(gè)輸入是可丈量的輸入擾動(dòng)。如果沒(méi)有指定的輸入變量是MV
最后得出的結(jié)果:
2.3.2當(dāng)M1和M2連接在1起時(shí)候的模型MPC2
% 當(dāng)M1和M2接觸時(shí)候的狀態(tài)模型.
A2=[0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];
B2=[0 0;⑴/(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控制設(shè)置
%% MPC仿真參數(shù)設(shè)置
Ts=0.2; % 采樣時(shí)間
p=20; % 預(yù)測(cè)時(shí)域長(zhǎng)度
m=1; % 控制時(shí)域長(zhǎng)度
%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m); % 定義M1和M2分離的MPC模型
% 設(shè)置限制,F的大小不能為0,F斜率絕對(duì)值最大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; %系統(tǒng)1和系統(tǒng)2的控制限制1樣
2.5仿真參數(shù)設(shè)置
%% 仿真參數(shù)設(shè)置
Tstop=100; % 仿真時(shí)間
y1initial=0; % 物體1的初始位置
y2initial=10; % 物體2的初始位置
open_system('wc1'); % 調(diào)用wc1.MDL
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%設(shè)置系統(tǒng)和模型的參數(shù)值
sim('wc1',Tstop);%開(kāi)始動(dòng)態(tài)系統(tǒng)仿真
Simulation框圖以下圖所示:
The total simulation diagram上面的部份摹擬兩個(gè)物體的運(yùn)動(dòng),并且這類(lèi)移動(dòng)會(huì)在在示波器中以信號(hào)的方式顯示出來(lái)。并且當(dāng)M1的位置和加速度均大于M2的位置和加速度時(shí),model輸出布爾量true或false;下半部份包括以下要素:
1.多個(gè)MPC控制器,。這有4個(gè)輸入:可丈量輸出(mo), 參考(ref),可丈量干擾(md)輸入和獨(dú)特的多個(gè)MPC控制器的功能塊switch輸入。
2.1脈沖產(chǎn)生器改變M1需要到達(dá)的位置 (控制器參考信號(hào))。此脈沖產(chǎn)生器的輸出是1個(gè)幅值為5的方波,頻率是0.015每秒。
3.摹擬傳感器的接觸。當(dāng)switch輸入1時(shí),激活第1個(gè)控制器MPC1,這個(gè)時(shí)候M1和M2是分離的。當(dāng)兩個(gè)物體有相同的位置時(shí),Compare to Constant的計(jì)算結(jié)果為1,通過(guò)Add1加法器的輸出值為2,Multiple MPC Controllers的switch端口被輸入2,自動(dòng)啟動(dòng)第2個(gè)控制器MPC2。
下圖展現(xiàn)了仿真的進(jìn)程:
4.1 MPC1與MPC2協(xié)同工作
下圖展現(xiàn)了對(duì)這個(gè)例子多個(gè)MPC控制器的仿真:
?在圖上面上,青色的線(xiàn)(就是我們M1需要的到達(dá)的位置,由reference產(chǎn)生)它從⑸開(kāi)始。的M1位置(黃色)從0開(kāi)始動(dòng)身。 在MPC1的控制下, M1移動(dòng)迅速向所需的位置。M2(紅色)從10開(kāi)始開(kāi)始朝著同1個(gè)方向移動(dòng)
?大約在t = 13秒,M2與M1產(chǎn)生完全非彈性碰撞。M1與M2連在1起。第3幅圖顯示了開(kāi)關(guān)信號(hào)的變化,在這個(gè)瞬間從1到2,所以MPC2開(kāi)始起作用。。
?在M1+M2超過(guò)了從其所期望的位置時(shí)候,M2和M1仍連在1起。控制器MPC2調(diào)劑作用力F(中間的圖片)使M1+M2快速返回到所需的位置。當(dāng)r突變到5時(shí),效果1樣是非常不錯(cuò)的
4.2 單個(gè)MPC11直工作
假定我們的控制器MPC1運(yùn)行在所有條件下
%再進(jìn)行1次不管在甚么情況下只用MPC1系統(tǒng)的實(shí)驗(yàn)
disp('Now repeat simulation by using only MPC1 ...');
MPC2save=MPC2; %先將MPC2保存起來(lái)
MPC2=MPC1; %用MPC2來(lái)代替MPC21
sim('wc1',Tstop); %動(dòng)態(tài)系統(tǒng)仿真
下圖顯示了MPC1單獨(dú)工作的圖象
如果1直是MPC1的系統(tǒng),力F不夠,當(dāng)M1和M2鏈連接在1起的時(shí)候,移動(dòng)緩慢,當(dāng)下1個(gè)轉(zhuǎn)變產(chǎn)生時(shí)還不能到達(dá)所需的位置
4.3單個(gè)MPC21直工作
%再進(jìn)行1次不管在甚么情況下只用MPC2系統(tǒng)的實(shí)驗(yàn)
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);
假定我們的控制器MPC2運(yùn)行在所有條件下
下圖顯示了MPC1單獨(dú)工作的圖象
當(dāng)M1和M2分開(kāi)的時(shí)候,MPC2也仍然使用,過(guò)度使用F,過(guò)度補(bǔ)償,致使振蕩產(chǎn)生。當(dāng)M2和M1連接在1起的時(shí)候,移動(dòng)更安穩(wěn),和預(yù)期1樣。最后過(guò)渡造成特別嚴(yán)重的振蕩。 M1和M2頻繁的碰撞,M1不能到達(dá)所需的位置。
[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⑻
[3]李國(guó)勇,智能預(yù)測(cè)控制及其MATLAB實(shí)現(xiàn).北京:電子工業(yè)出版社,2010.
%% 多個(gè)MPC的的調(diào)度控制器
% clc
% clear all
%% 系統(tǒng)參數(shù)
clear all
clc
M1=1; % M1的質(zhì)量
M2=5; % M2的質(zhì)量
k1=1; % 彈簧k1常數(shù)k
k2=0.1; % 彈簧k2常數(shù)k
b1=0.3; % 與空氣的磨擦系數(shù),與速度成正比
b2=0.8; % 磨擦系數(shù)
yeq1=10; % 剛性壁1的位置
yeq2=-10; % 剛性壁2的位置
%% 狀態(tài)空間模型
% 狀態(tài): M的速度和位置
% 被控變量:F
% 可丈量的擾動(dòng):彈簧1的常熟;
% 丈量輸出: M1的位置
% 當(dāng)M1和M2不接觸時(shí)候的狀態(tài)模型.
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); %建立狀態(tài)空間表達(dá)式
sys1=setmpcsignals(sys1,'MD',2) ;%第2個(gè)輸入是可丈量擾動(dòng)
% 當(dāng)M1和M2接觸時(shí)候的狀態(tài)模型.
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仿真參數(shù)設(shè)置
Ts=0.2; % 采樣時(shí)間
p=20; % 預(yù)測(cè)時(shí)域長(zhǎng)度
m=1; % 控制時(shí)域長(zhǎng)度
%% 建立MPC模型
MPC1=mpc(sys1,Ts,p,m); % 定義M1和M2分離的MPC模型
MPC1.MV=struct('Min',0,'Max',Inf,'RateMin',-1e3,'RateMax',1e3); % 設(shè)置限制,F(xiàn)的大小不能為0
MPC2=mpc(sys2,Ts,p,m); %定義M1和M2連接時(shí)候的MPC模型
MPC2.MV=MPC1.MV; %系統(tǒng)1和系統(tǒng)2的控制限制1樣
%% 仿真參數(shù)設(shè)置
Tstop=100; % 仿真時(shí)間
y1initial=0; % 物體1的初始位置
y2initial=10; % 物體2的初始位置
open_system('WC1'); % 調(diào)用WC1.MDL
%% 開(kāi)始3次仿真
%雙系統(tǒng)MPC1和MPC2仿真實(shí)驗(yàn)
disp('Start simulation by switching control between MPC1 and MPC2 ...');
set_param('wc1/signals','Open','On');%設(shè)置系統(tǒng)和模型的參數(shù)值
sim('WC1',Tstop);%動(dòng)態(tài)系統(tǒng)仿真
%再進(jìn)行1次不管在甚么情況下只用MPC1系統(tǒng)的實(shí)驗(yàn)
disp('Now repeat simulation by using only MPC1 ...');
MPC2save=MPC2; %先將MPC2保存起來(lái)
MPC2=MPC1; %用MPC2來(lái)代替MPC21
sim('WC1',Tstop);
%再進(jìn)行1次不管在甚么情況下只用MPC2系統(tǒng)的實(shí)驗(yàn)
disp('Now repeat simulation by using only MPC2 ...');
MPC1=MPC2save;
MPC2=MPC1;
sim('WC1',Tstop);
%% 關(guān)閉仿真窗口
% 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⑻
%[3]李國(guó)勇,智能預(yù)測(cè)控制及其MATLAB實(shí)現(xiàn).北京:電子工業(yè)出版社,2010.