系列文章目錄
目錄
系列文章目錄
前言
一、四分車懸架模型
二、道路干擾剖面
三、設計模型預測控制器
四、設置優化求解器
五、輔助函數
前言
????????本例展示了如何為四分之一汽車懸架系統設計模型預測控制器 (MPC),采用乘法交替方向法 (ADMM) 求解器來控制主動懸架的動態。MPC 控制器利用預測模型來預測和減輕路面不規則性和負載偏移的影響,從而確保最佳的車輛穩定性和乘客舒適性。
一、四分車懸架模型
????????四分之一汽車懸架系統模型是一個雙自由度系統,通過關注一個車輪和四分之一車身質量的垂直動態來簡化汽車懸架系統。該模型包括兩個質量:彈簧質量 ms(對應車身)和非彈簧質量 mu(代表車輪組件)。懸架的彈簧和阻尼器(分別具有常數 ks 和 bs)將兩個質量連接起來,而輪胎則被模擬為具有常數 kt 的彈簧。主動懸架力通過控制輸入 u(t) 引入,路面效應通過激勵 v(t) 模擬。系統動力學方程為
,
????????將狀態向量定義為
,
,
????????四分之一汽車懸架系統模型是通過線性狀態空間系統實現的。
% Physical parameters
ms = 300; % kg
mu = 60; % kg
bs = 1000; % N/m/s
ks = 16000; % N/m
kt = 190000; % N/m% Define the mass matrix M.
M = [ms 0; 0 mu];
% Define the stiffness matrix F.
F = [-ks ks; ks -(ks + kt)];
% Define the damping matrix B.
B = [-bs bs; bs -bs];
% Define the input matrix q.
q = [1; -1];
% Define the disturbance matrix d.
d = [0; kt];% Define the state space matrices.
A = [zeros(2,2), eye(2,2); M\F, M\B];
B = [zeros(2,2); M\q M\d];
C = [1 -1 0 0];
D = 0;
plant = ss(A,B,C,D);
二、道路干擾剖面
????????在本例中,道路干擾被模擬為頻率為 f Hz 的正弦波顛簸。擾動僅在 2/f 秒和 3/f 秒之間有效,以仿真車輛遇到的單次顛簸。擾動的振幅按系數(本例中為 0.025)縮放,以表示顛簸的嚴重程度。
% Define the frequency of the road disturbance.
f = 4; % Hz
Tstop = 2;% Define the sampling time.
Ts = 0.01;% Create a time vector from 0 to Tstop.
% with increments of Ts.
T = (0:Ts:Tstop)';% Define the road disturbance profile.
v = 0.025*(1 - cos(2*pi*f*T));% Activate the disturbance only between 2/f and 3/f seconds.
v(T < 2*1/f) = 0;
v(T > 3*1/f) = 0;
????????用列向量 [0 v] 表示道路干擾剖面,進行仿真。
Unn = zeros(length(T),2);
Unn(:,2) = v;
????????在沒有主動控制輸入的情況下仿真懸架系統,以提供系統在受到規定路面干擾時的基準響應。
% Use lsim to simulate the uncontrolled system response.
[Yuc,Tuc,Xuc] = lsim(plant,Unn,T);
????????繪制路面擾動對四分之一汽車懸架系統的影響以及懸架撓度隨時間變化的曲線。
figure
title("Response of Uncontrolled Suspension to Road Disturbance")
plot(T, v, "DisplayName", "Road Disturbance");
hold on
plot(Tuc, Yuc, "DisplayName", "Suspension Deflection");
hold off
legend
ylabel("Meters")
xlabel("Time (seconds)")
三、設計模型預測控制器
????????默認情況下,被控對象狀態空間模型的所有輸入信號均為可控輸入變量,所有輸出均為可觀測輸出。將模型的第二個輸入信號定義為與道路效應相對應的測量擾動。
plant = setmpcsignals(plant,"MD",2);
-->Assuming unspecified input signals are manipulated variables.
????????創建一個預測范圍為 40 步、控制范圍為 4 步、采樣時間為 0.01 秒的 MPC 控制器。
Ts = 1e-2;
p = 40;
m = 4;
mpcobj = mpc(plant,Ts,p,m);
-->"Weights.ManipulatedVariables" is empty. Assuming default 0.00000.
-->"Weights.ManipulatedVariablesRate" is empty. Assuming default 0.10000.
-->"Weights.OutputVariables" is empty. Assuming default 1.00000.
????????將輸出變量限制在 [-0.05, 0.05] 范圍內。
mpcobj.OutputVariables(1).Min = -0.05;
mpcobj.OutputVariables(1).Max = 0.05;
????????設置 MPC 控制參數,以定義比例系數和權重。比例系數對輸出變量進行歸一化處理,權重則指定每個變量在成本函數中的相對重要性。在這種情況下,通過為可控變量的速率設置更高的權重,對控制輸入變量的變化給予更多的重視(即更多的成本)。
mpcobj.OutputVariables(1).ScaleFactor = 1e-5;
mpcobj.Weights.ManipulatedVariables = 1;
mpcobj.Weights.ManipulatedVariablesRate = 10;
mpcobj.Weights.OutputVariables = 5;
????????審查 MPC 控制器設計,確保其按預期配置。審查功能可生成 MPC 控制器的設計審查。
review(mpcobj)
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output #1 is integrated white noise.
-->"Model.Noise" is empty. Assuming white noise on each measured output.
Test report has been saved to:/tmp/Bdoc24b_2855429_3392907/index.html
????????將參考信號 r 定義為零向量,代表無懸架偏轉的理想輸出。為仿真定義路面擾動 v,其比例代表顛簸的嚴重程度,且僅在 2/f 至 3/f 秒的窗口內有效。然后設置 MPC 控制器的仿真選項,指定控制器不預測未來的可觀測干擾。
% Define the reference signal as a vector of zeros.
r = zeros(length(T),1);% Define the road disturbance "v" for the simulation.
v = 0.025 * (1 - cos(2*pi*f*T));
v(T < 2*1/f) = 0;
v(T > 3*1/f) = 0;% Set simulation options for the MPC controller.
params = mpcsimopt;
params.MDLookAhead = "off";
四、設置優化求解器
????????對于只包含連續可控輸入變量的 MPC 問題,“active-set ”算法是默認的優化方法。mpc 對象的優化器屬性通常具有這種結構。
mpcobj.Optimizer
ans = struct with fields:OptimizationType: 'QP'Solver: 'active-set'SolverOptions: [1x1 mpc.solver.options.qp.ActiveSet]MinOutputECR: 0UseSuboptimalSolution: 0CustomSolver: 0CustomSolverCodeGen: 0
????????因為可控輸入變量是連續的,所以優化問題是一個二次規劃(QP)問題。如果有有限(離散)控制集,問題就變成了混合整數二次規劃?(MIQP) 問題。更多信息,請參閱有限控制集 MPC。
????????在本例中,請指定 ADMM 求解器,它非常適合大規模和分布式優化問題。
mpcobj.Optimizer.Solver = "admm";
????????要修改求解器參數并使優化過程符合特定要求,可以通過 MPC 對象中優化器屬性的 SolverOptions 屬性訪問和調整設置。通過 SolverOptions 屬性,可以微調求解器行為的各個方面,如收斂公差和迭代限制選項。
mpcobj.Optimizer.SolverOptions
ans = ADMM with properties:AbsoluteTolerance: 1.0000e-04RelativeTolerance: 1.0000e-04MaxIterations: 1000RelaxationParameter: 1PenaltyParameter: 1.6000StepSize: 1.0000e-06
????????使用 “admm ”求解器仿真閉環系統。
[Yad, Tad, Uad, XPad, XCad] = sim(mpcobj,Tstop/Ts + 1,r,v,params);
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output #1 is integrated white noise.
-->"Model.Noise" is empty. Assuming white noise on each measured output.
????????然后使用 “主動集 ”求解器仿真系統。該算法是在每個控制區間求解 QP 問題的默認選項。
mpcobj.Optimizer.Solver = "active-set";
[Yas, Tas, Uas, XPas, XCas] = sim(mpcobj,Tstop/Ts + 1,r,v,params);
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output #1 is integrated white noise.
-->"Model.Noise" is empty. Assuming white noise on each measured output.
????????最后,使用 “內點 ”求解器仿真系統。這種算法是求解 QP 問題的另一種選擇,與 “主動集 ”算法相比,可能具有不同的性能特點。
mpcobj.Optimizer.Solver = "interior-point";
[Yip, Tip, Uip, XPip, XCip] = sim(mpcobj,Tstop/Ts + 1,r,v,params);
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output #1 is integrated white noise.
-->"Model.Noise" is empty. Assuming white noise on each measured output.
????????繪制三次仿真的結果。有關 plotResults 輔助函數的代碼,請參閱輔助函數。
TT = {Tas, Tip, Tad, Tuc};
XX = {Yas, Yip, Yad, Yuc};
UU = {Uas, Uip, Uad, Tuc*0};plotResults(TT,XX,UU)
subplot(211);
legend("active-set","interior-point","admm","uncontrolled")
五、輔助函數
????????這段代碼定義了 plotResults 輔助函數。該函數繪制仿真結果,以比較它們的性能。圖中顯示了隨時間變化的系統輸出(懸掛偏轉)和控制輸入(主動懸掛力)。
function plotResults(TT,XX,UU)subplot(211);
for i = 1:length(TT)plot(TT{i}, XX{i})hold on;
end
ylabel("Meters")
xlabel("Time, s")subplot(212);
for i = 1:length(TT)plot(TT{i}, UU{i})hold on;
end
ylabel("N")
xlabel("Time, s")
end