MATLAB - 模型預測控制(MPC)使用 ADMM 求解器四分之一汽車懸架懸掛系統動力學控制

系列文章目錄

目錄

系列文章目錄

前言

一、四分車懸架模型

二、道路干擾剖面

三、設計模型預測控制器

四、設置優化求解器

五、輔助函數


前言

????????本例展示了如何為四分之一汽車懸架系統設計模型預測控制器 (MPC),采用乘法交替方向法 (ADMM) 求解器來控制主動懸架的動態。MPC 控制器利用預測模型來預測和減輕路面不規則性和負載偏移的影響,從而確保最佳的車輛穩定性和乘客舒適性。


一、四分車懸架模型

????????四分之一汽車懸架系統模型是一個雙自由度系統,通過關注一個車輪和四分之一車身質量的垂直動態來簡化汽車懸架系統。該模型包括兩個質量:彈簧質量 ms(對應車身)和非彈簧質量 mu(代表車輪組件)。懸架的彈簧和阻尼器(分別具有常數 ks 和 bs)將兩個質量連接起來,而輪胎則被模擬為具有常數 kt 的彈簧。主動懸架力通過控制輸入 u(t) 引入,路面效應通過激勵 v(t) 模擬。系統動力學方程為

$\begin{cases}m_s\ddot{x}_s=F\\m_u\ddot{x}_u=-F-k_t(z_u-\nu(t))&\end{cases}$$F=-k_{s}(z_{s}-z_{u})-b_{s}\left(\dot{z}_{s}-\dot{z}_{u}\right)+u.$

????????將狀態向量定義為

$z(t)=\begin{bmatrix}\mathbf{x}\\\dot{\mathbf{x}}\end{bmatrix}$$\mathbf{x}=\begin{bmatrix}x_s\\\\x_u\end{bmatrix}$$\dot{\mathbf{x}}=\begin{bmatrix}\dot{x}_s\\\\\dot{x}_u\end{bmatrix}$

????????四分之一汽車懸架系統模型是通過線性狀態空間系統實現的。

% 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902386.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于多模態融合算法的航空武器毀傷評估技術方案

基于多模態融合算法的航空武器毀傷評估技術方案 1. 引言 航空武器毀傷評估(Damage Assessment, DA)是現代戰爭中的關鍵環節,直接影響后續作戰決策。傳統的人工評估方式效率低、主觀性強,且在高強度戰場環境下難以實時完成。因此,本研究提出一種基于多模態融合算法的自動…

LeetCode算法題(Go語言實現)_49

題目 給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 k 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 一、代碼實現&#xff08;快速選擇…

【HCIA】簡易的兩個VLAN分別使用DHCP分配IP

前言 之前我們通過 靜態ip地址實現了Vlan間通信 &#xff0c;現在我們添加一個常用的DHCP功能。 文章目錄 前言1. 配置交換機2. 接口模式3. 全局模式后記修改記錄 1. 配置交換機 首先&#xff0c;使用DHCP&#xff0c;需要先啟動DHCP服務&#xff1a; [Huawei]dhcp enable I…

【技術派后端篇】技術派通用敏感詞替換:原理、實現與應用

在當今互聯網環境下&#xff0c;數據脫敏對于國內的互聯網企業而言已經成為一項標配。這不僅是為了滿足合規性要求&#xff0c;更是保障用戶信息安全和企業聲譽的重要舉措。本文將深入探討技術派中實現數據脫敏的關鍵技術——通用敏感詞替換&#xff0c;從算法原理到具體實現&a…

Android RK356X TVSettings USB調試開關

Android RK356X TVSettings USB調試開關 平臺概述操作-打開USB調試實現源碼補充說明 平臺 RK3568 Android 11 概述 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能處理器&#xff0c;支持 USB OTG&#xff08;On-The-Go&#xff09;和 USB Host 功能。US…

Microsoft Edge for linux debian

下載地址 https://www.microsoft.com/en-us/edge/download?formMA13FJ 安裝 # 下載安裝包 wget https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_135.0.3179.85-1_amd64.deb?brandM102 # 安裝 sudo dpkg -i microsoft…

typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

查找 MVS_API 定義 我們沒有在 List.h 文件中找到 MVS_API 的定義。MVS_API 很可能在 MVS 庫的其他地方定義。一般來說&#xff0c;MVS_API 是控制 OpenMVS 庫導入導出的宏&#xff0c;通常會出現在 MVS 的頭文件中。為了回答這個問題&#xff0c;我可以提供 MVS 代碼中常見的…

5.4/Q1,GBD數據庫最新文章解讀

文章題目&#xff1a;The global burden of high BMI among adolescents between 1990 and 2021 DOI&#xff1a;10.1038/s43856-025-00838-2 中文標題&#xff1a;1990 年至 2021 年青少年高 BMI 的全球負擔 發表雜志&#xff1a;Commun Med 影響因子&#xff1a;1區&#xff…

【形式化驗證基礎】活躍屬性Liveness Property和安全性質(Safety Property)介紹

文章目錄 一、Liveness Property1、概念介紹2、形式化定義二、Safety Property1. 定義回顧2. 核心概念解析3. 為什么強調“有限前綴”4. 示例說明4.1 示例1:交通信號燈系統4.2 示例2:銀行賬戶管理系統5. 實際應用的意義三. 總結一、Liveness Property 1、概念介紹 在系統的…

Redis面試——常用命令

一、String &#xff08;1&#xff09;設置值相關命令 1.1.1 SET 功能&#xff1a;設置一個鍵值對&#xff0c;如果鍵已存在則覆蓋舊值語法&#xff1a; SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds&#xff1a;設置鍵的過期時間為 seconds 秒 PX milli…

【Unity】使用Cinemachine+CharacterController實現第三人稱視角下的角色視角、移動和跳躍控制

1.初始配置 安裝Cinemachine插件給角色添加CharacterConroller創建Cinemachine-->Free Look Camera在Free Look Camera中調整參數&#xff0c;Y Axis勾選Inver&#xff0c;X Axis取消勾選InverFree Look Camera要看向角色 跟隨角色&#xff08;自行設置&#xff0c;我就不…

深入理解 DML 和 DQL:SQL 數據操作與查詢全解析

深入理解 DML 和 DQL&#xff1a;SQL 數據操作與查詢全解析 在數據庫管理中&#xff0c;SQL&#xff08;結構化查詢語言&#xff09;是操作和查詢數據的核心工具。其中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;數據操作語言&#xff09; 和 DQL&…

MongoDB數據庫的安裝到入門使用詳細講解

本篇文章主要講解MongoDB的安裝使用教程及基礎的數據庫管理和操作能力的講解,通過本篇文章您可以快速的掌握對MongDB數據庫的基本認識及,基礎開發能力。 一、MongoDB介紹 MongoDB是一款免費開源的非關系型數據庫,該數據庫適應于復雜關系的存儲和管理,非常適合數據結構復雜…

git提交實現文件或目錄忽略

前言 開發中使用git下載項目代碼開發,存在不需要提交文件或目錄&#xff0c;這里記錄下ideajava項目開發添加以下配置可忽略不需要提交文件,以方便我們提交代碼時&#xff0c;查看及提交文件只涉及項目代碼修改文件。 git提交實現文件或目錄忽略 .gitignore 文件的內容列出了在…

go語言的八股文

1.go語言觸發異常的場景有哪些 運行時錯誤 1.空指針解引用&#xff1a;嘗試訪問一個未初始化的指針指向的內存&#xff0c;會導致程序崩潰并觸發異常。 2.數組越界訪問&#xff1a;試圖訪問數組中不存在的索引&#xff0c;比如數組長度為5&#xff0c;卻嘗試訪問索引為10的元素…

Ubuntu安裝MySQL步驟及注意事項

一、安裝前準備 1. 系統更新&#xff1a;在安裝 MySQL 之前&#xff0c;確保你的 Ubuntu 系統軟件包是最新的&#xff0c;這能避免因軟件包版本問題導致的安裝錯誤&#xff0c;并獲取最新的安全補丁。打開終端&#xff0c;執行以下兩條命令&#xff1a; sudo apt update sudo …

【愚公系列】《Python網絡爬蟲從入門到精通》054-Scrapy 文件下載

&#x1f31f;【技術大咖愚公搬代碼&#xff1a;全棧專家的成長之路&#xff0c;你關注的寶藏博主在這里&#xff01;】&#x1f31f; &#x1f4e3;開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主&#xff01; &#x1f…

2025最新︱中國信通院靜態應用程序安全測試(SAST)工具能力評估,懸鏡安全靈脈AI通過評估!

背景 研發運營安全&#xff08;DevSecOps&#xff09;從研發運營&#xff08;DevOps&#xff09;的概念延伸和演變而來&#xff0c;其核心理念是將安全貫穿從開發到運營的軟件開發生命周期的每一個環節&#xff0c;在每個階段自動實施安全措施&#xff0c;從而實現快速開發交付…

辛格迪客戶案例 | 浙江高跖醫藥委托生產質量管理協同(OWL MAH)項目

一、案例概述 浙江高跖醫藥科技股份有限公司是一家集“研、產、銷”為一體的專業化藥品持證企業。高跖醫藥自成立之初就建立并運行著一套相對完善的質量管理體系&#xff0c;涵蓋了藥品的研發、生產監管及銷售。高跖醫藥于2022年選擇實施了辛格迪的“委托生產質量管理協同解決…

【NLP 65、實踐 ? 基于Agent優化文章】

羈絆由我而起&#xff0c;痛苦也由我承擔 —— 25.4.18 一、?【核心函數】定義大模型調用函數 call_large_model prompt&#xff1a;用戶傳入的提示詞&#xff08;如 “請分析這篇作文的主題”&#xff09;&#xff0c;指導模型執行任務 client&#xff1a;Zhipu…