Carsim-Simulink联合仿真MPC主动悬架 MPC是一种根据模型预测的方式在有限时域内求解最优解的控制方法,MPC善于处理多约束和多目标优化问题,计算时依据自定义的变量权重大小书写代价函数,通过二次规划求解,实现最优的控制效果。 通过Carsim-Simulink联合仿真验证MPC控制效果,Carsim具有更加真实的动力学模型,使仿真结果更加准确,路面使用C级路面进行仿真。 模型预测控制算法在simulink中编写的mfunction代码,模型对比主/被动悬架如簧载质量加速度、侧倾角速度、俯仰角速度等变量以观察MPC控制器控制效果。 matlab代码中包括画图代码,可以将悬架性能指标绘制出来。 主要分为两种模型: 1. 在Carsim中提前制定好的路面,此模型在carsim的3D Road中提前做好路面进行仿真。 2. 在联合仿真时,使用制作的考虑轮胎之间的相关性和延迟性的四轮路面激励输入给车辆模型,这个模型可以替换为自己所制作的路面或者自己所测得的路面。 MPC编程方法均较灵活,只需要修改状态空间方程、权重变量、控制目标、预测区间、控制区间等即可自动编写对应求解二次规划的矩阵。 资料中有matlab代码,simulink模和介绍资料(自制),包括详细的建模过程,mpc算法原理和推导过程以及使用说明。

最近在研究车辆悬架控制,发现Carsim - Simulink联合仿真与MPC(模型预测控制)结合简直是个宝藏组合,今天就来跟大家唠唠。

MPC:多面手的控制魔法

MPC本质上是基于模型预测,在有限时域内求解最优解的控制手段。它就像一个精打细算的小能手,特别擅长处理多约束和多目标优化这类复杂问题。怎么做到的呢?通过自定义变量权重,写出代价函数,再借助二次规划求解,从而达到最优控制效果。

Carsim-Simulink联合仿真MPC主动悬架 MPC是一种根据模型预测的方式在有限时域内求解最优解的控制方法,MPC善于处理多约束和多目标优化问题,计算时依据自定义的变量权重大小书写代价函数,通过二次规划求解,实现最优的控制效果。 通过Carsim-Simulink联合仿真验证MPC控制效果,Carsim具有更加真实的动力学模型,使仿真结果更加准确,路面使用C级路面进行仿真。 模型预测控制算法在simulink中编写的mfunction代码,模型对比主/被动悬架如簧载质量加速度、侧倾角速度、俯仰角速度等变量以观察MPC控制器控制效果。 matlab代码中包括画图代码,可以将悬架性能指标绘制出来。 主要分为两种模型: 1. 在Carsim中提前制定好的路面,此模型在carsim的3D Road中提前做好路面进行仿真。 2. 在联合仿真时,使用制作的考虑轮胎之间的相关性和延迟性的四轮路面激励输入给车辆模型,这个模型可以替换为自己所制作的路面或者自己所测得的路面。 MPC编程方法均较灵活,只需要修改状态空间方程、权重变量、控制目标、预测区间、控制区间等即可自动编写对应求解二次规划的矩阵。 资料中有matlab代码,simulink模和介绍资料(自制),包括详细的建模过程,mpc算法原理和推导过程以及使用说明。

举个简单例子,假设我们要控制一个小车的速度,既要考虑速度稳定在某个值,又要考虑能耗最低,这时候MPC就可以通过调整权重,在代价函数里平衡这两个目标。

Carsim - Simulink联合仿真验证MPC控制效果

Carsim的“真实力”

选择Carsim和Simulink联合仿真,是因为Carsim拥有超真实的动力学模型,能让仿真结果精准度大幅提升。这次仿真我们选用C级路面,为啥选C级呢?因为它是比较常见的一种路面状况,能代表很多实际场景。

模型预测控制算法的代码实现

模型预测控制算法在Simulink里通过mfunction代码编写。这里我挑一段关键代码讲讲:

function [u] = mpc_controller(x, y_ref, Q, R, Np, Nu)
% x: 当前状态
% y_ref: 参考输出
% Q: 状态权重矩阵
% R: 控制输入权重矩阵
% Np: 预测区间
% Nu: 控制区间

% 状态空间方程 A, B 假设提前定义好了
A = [1 0.1; 0 1];
B = [0.05; 0.1];

% 初始化预测输出和控制输入矩阵
Y = zeros(2 * Np, 1);
U = zeros(2 * Nu, 1);

% 构建优化问题的矩阵
H = 2 * [R zeros(size(R, 1), size(R, 1) * (Np - 1));
         zeros(size(R, 1) * (Np - 1), size(R, 1)) zeros(size(R, 1) * (Np - 1))];
f = -2 * [zeros(size(R, 1), 1); y_ref(2:end) - repmat(A * x, Np - 1, 1)];

% 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
U = quadprog(H, f, [], [], [], [], [], [], [], options);

% 提取第一个控制输入
u = U(1:size(B, 2));
end

代码分析:这段代码实现了一个简单的MPC控制器。开头定义了函数输入输出参数,接着假设了状态空间方程的矩阵A和B (实际应用中这两个矩阵要根据具体系统确定)。然后初始化预测输出和控制输入矩阵,构建用于二次规划求解的矩阵H和f 。最后调用quadprog函数求解二次规划问题,提取出第一个控制输入作为本次的控制量输出。

模型对比

为了更好地观察MPC控制器的效果,我们拿主/被动悬架的一些关键变量对比,像簧载质量加速度、侧倾角速度、俯仰角速度等。通过这些变量的变化,就能直观感受到MPC控制和传统悬架控制的差异。

绘制悬架性能指标

Matlab代码里还有画图的部分,这对于分析结果太重要了。比如下面这段简单代码:

figure;
plot(time, sprung_mass_acceleration, 'b', 'LineWidth', 1.5);
xlabel('Time (s)');
ylabel('Sprung Mass Acceleration (m/s^2)');
title('Sprung Mass Acceleration over Time');
grid on;

这段代码就把簧载质量加速度随时间的变化画出来了,方便我们分析悬架在不同时刻的性能表现。

两种模型的奥秘

Carsim预定义路面模型

在Carsim的3D Road里提前制作好路面进行仿真,这种方式就像提前设定好关卡,车辆就在这个既定的“赛道”上跑,好处是每次仿真环境固定,便于对比不同控制策略的效果。

考虑轮胎相关性和延迟性的四轮路面激励模型

这个模型就更灵活了,它考虑了轮胎之间的相关性和延迟性,而且可以替换成自己制作或实测的路面。想象一下,你可以根据实际路况采集数据,然后应用到这个模型里,让仿真更贴合实际驾驶场景。

MPC编程:灵活多变的艺术

MPC编程非常灵活,只要调整状态空间方程、权重变量、控制目标、预测区间、控制区间这些关键参数,就能自动编写对应求解二次规划的矩阵。就像搭积木一样,不同的组合能适应各种不同的控制需求。

最后,资料里有Matlab代码、Simulink模型以及详细的介绍资料(自制哦),涵盖了建模过程、MPC算法原理和推导过程,还有使用说明。感兴趣的小伙伴可以深入研究。希望这篇博文能给大家在车辆悬架控制研究上带来一些启发!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐