基于matlab MPC车辆动力学的模型预测控制车道保持辅助LKA

主要包括传感器动力学、汽车动力学、车道保持辅助系统和曲率预览器等模块。
传感器动力学模块:输入为当前曲率、纵向速度、横向速度和横摆角速度;输出为横向偏差和相对偏航角;
汽车动力学模块:输入为纵向速度和转向角;输出为横向速度和横摆角速度;
车道保持辅助系统模块:输人为道路曲率、纵向速度、横向偏差、相对偏航角;输出为转向角。
模型仿真结果显示:横向偏差、相对偏航角和转向角都能收敛到零,这说明汽车能够根据预览的曲率紧跟道路行驶,完成车道保持辅助功能。

在这里插入图片描述
以下文字及示例代码仅供参考

以下是基于 MATLAB/Simulink模型预测控制(MPC)用于车辆动力学的车道保持辅助系统(LKA) 的完整实现方案,包含详细的代码和说明。


🧠 一、系统概述

✅ 控制目标:

使用 MPC 控制器 对车辆横向进行控制,使车辆保持在车道中心线上,防止偏离。

🚗 使用模型:

  • 车辆动力学模型(Bicycle Model)
  • 线性时变状态空间模型
  • 雷诺兹误差模型(Lateral Error Dynamics)

📦 二、所需工具箱

确保安装以下 MATLAB 工具箱:

  • Simulink
  • Model Predictive Control Toolbox
  • Control System Toolbox

📝 三、主要步骤

  1. 建立车辆动力学模型(Bicycle Model)
  2. 构建横向误差状态方程
  3. 设计 MPC 控制器
  4. 搭建 Simulink 模型进行仿真
  5. 可视化结果

在这里插入图片描述

🚗 四、车辆动力学建模(Bicycle Model)

% 车辆参数
m = 1575;        % 质量 (kg)
Iz = 2870;       % 绕 z 轴转动惯量 (kg·m²)
lf = 1.2;        % 前轴到质心距离 (m)
lr = 1.6;        % 后轴到质心距离 (m)
Cf = 80000;      % 前轮胎侧偏刚度 (N/rad)
Cr = 80000;      % 后轮胎侧偏刚度 (N/rad)

% 纵向速度 vx (假设为常数)
vx = 20;         % m/s

% 状态方程:x_dot = A*x + B*u
A = [0, 1, 0, 0;
     0, -(Cf+Cr)/(m*vx), (Cf+Cr)/m, (Cr*lr - Cf*lf)/(m*vx);
     0, 0, 0, 1;
     0, (Cr*lr - Cf*lf)/(Iz*vx), (Cf*lf - Cr*lr)/Iz, -((Cf*lf^2)+(Cr*lr^2))/(Iz*vx)];

B = [0;
     Cf/m;
     0;
     (Cf*lf)/Iz];

C = eye(4);
D = zeros(4,1);

sys_vehicle = ss(A,B,C,D);

🔄 五、横向误差状态方程(Lateral Error Dynamics)

我们定义横向误差状态向量:

x e = [ e y e ˙ y e ψ e ˙ ψ ] x_e = \begin{bmatrix} e_y \\ \dot{e}_y \\ e_\psi \\ \dot{e}_\psi \end{bmatrix} xe= eye˙yeψe˙ψ

其中:

  • $ e_y $: 横向偏差
  • $ e_\psi $: 航向角偏差

构建线性误差状态空间模型:

A_error = [0, 1, 0, 0;
           0, -(Cf+Cr)/(m*vx), (Cf+Cr)/m, (Cr*lr - Cf*lf)/(m*vx);
           0, 0, 0, 1;
           0, (Cr*lr - Cf*lf)/(Iz*vx), (Cf*lf - Cr*lr)/Iz, -((Cf*lf^2)+(Cr*lr^2))/(Iz*vx)];

B_error = [0; Cf/m; 0; (Cf*lf)/Iz];
C_error = eye(4);
D_error = zeros(4,1);

sys_error = ss(A_error, B_error, C_error, D_error);

🎯 六、MPC 控制器设计

使用 mpc 函数创建控制器对象,并设置权重和约束:

Ts = 0.1;          % 控制周期
p = 10;            % 预测步长
m = 3;             % 控制步长

mpcobj = mpc(sys_error, Ts, p, m);

% 设置输出权重(重点在横向偏差)
mpcobj.Weights.OutputVariables = [10 0 1 0];   % ey 最重要

% 设置输入权重(方向盘转角变化惩罚)
mpcobj.Weights.ManipulatedVariablesRate = 0.1;

% 输入限制(方向盘转角)
mpcobj.MV.Min = -0.5;    % rad
mpcobj.MV.Max = 0.5;
mpcobj.MV.RateMin = -0.2;
mpcobj.MV.RateMax = 0.2;

🧩 七、Simulink 模型搭建(推荐方式)

您可以创建一个 Simulink 模型 LKA_MPC.slx,结构如下:

[Initial Conditions] -->
[State Space Vehicle Model] -->
[Outputs: ey, psi] -->
[MPC Controller] -->
[Steering Command] --> 
反馈回 State Space 模型

模块包括:

模块 功能
State Space 表示车辆动力学模型
MPC Controller 执行预测控制算法
Reference Input 提供车道中心线的目标轨迹(如 ey_ref = 0)
Scope 显示控制效果

📊 八、仿真与结果分析

初始条件:

x0 = [1; 0; 0.1; 0];  % 初始状态:[ey=1m, v=0, psi=0.1rad, r=0]

参考信号:

r = 0;  % 横向偏差参考值为 0

在这里插入图片描述

运行仿真:

在 Simulink 中点击运行按钮,观察车辆是否能够稳定地回到车道中央。


📸 九、可视化脚本(后处理)

figure;
plot(tout, yout(:,1), 'b-', 'LineWidth', 1.5);
xlabel('时间 (s)');
ylabel('横向偏差 e_y (m)');
title('横向偏差随时间变化');
grid on;

figure;
plot(tout, uout, 'r-', 'LineWidth', 1.5);
xlabel('时间 (s)');
ylabel('方向盘转角 (rad)');
title('MPC 输出转向角');
grid on;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐