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.mzph.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…