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

以下文字及示例代码仅供参考
文章目录
以下是基于 MATLAB/Simulink 的 模型预测控制(MPC)用于车辆动力学的车道保持辅助系统(LKA) 的完整实现方案,包含详细的代码和说明。
🧠 一、系统概述
✅ 控制目标:
使用 MPC 控制器 对车辆横向进行控制,使车辆保持在车道中心线上,防止偏离。
🚗 使用模型:
- 车辆动力学模型(Bicycle Model)
- 线性时变状态空间模型
- 雷诺兹误差模型(Lateral Error Dynamics)
📦 二、所需工具箱
确保安装以下 MATLAB 工具箱:
- Simulink
- Model Predictive Control Toolbox
- Control System Toolbox
📝 三、主要步骤
- 建立车辆动力学模型(Bicycle Model)
- 构建横向误差状态方程
- 设计 MPC 控制器
- 搭建 Simulink 模型进行仿真
- 可视化结果

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



所有评论(0)