基于MATLAB分布式驱动电动汽车轨迹跟踪与稳定性控制
①控制器上层采用模型预测控制(MPC)决策出前轮转角(δ)和附加横摆力矩(ΔMz),实现对无人驾驶分布式电驱动车辆在双移线(DLC)变道场景下的轨迹跟踪控制与稳定性控制。
②控制器下层是基于二次规划(QP)的转矩优化分配。
③对于学习分布式驱动车辆的控制及转矩分配有很好的帮助效果。
以下文字及示例代码仅供参考
文章目录
以下是一个基于 MATLAB/Simulink 的 分布式驱动电动汽车轨迹跟踪与稳定性控制的完整实现方案,涵盖:
- 上层控制器:模型预测控制(MPC)
- 决策前轮转角
δ
和附加横摆力矩ΔMz
- 决策前轮转角
- 下层控制器:二次规划(QP)优化分配
- 将期望的横摆力矩和纵向力合理分配到四个车轮
- 控制场景:双移线变道(Double Lane Change, DLC)
📌 系统结构概述
[参考轨迹] → [MPC控制器] → [QP分配器] → [4轮转矩输出]
↑
[车辆状态反馈]
✅ 车辆动力学模型(Bicycle Model)
% 单轨模型(简化车辆运动学)
function dx = vehicle_model(x, u, params)
% x = [x; y; psi; vx; vy; r]
% u = [delta; Fx_front; Fx_rear; Mz]
m = params.m;
Iz = params.Iz;
lf = params.lf;
lr = params.lr;
vx = x(4);
vy = x(5);
r = x(6);
beta = atan2(vy, vx); % 侧偏角
Fy_f = -params.Cf * (beta + lf*r/vx - u(1)); % 前轮侧向力
Fy_r = -params.Cr * (beta - lr*r/vx); % 后轮侧向力
dxdt = [
vx*cos(psi) - vy*sin(psi);
vx*sin(psi) + vy*cos(psi);
r;
(u(2)+u(3))/m - r*vy;
(Fy_f + Fy_r)/m + r*vx;
(lf*Fy_f - lr*Fy_r + u(4)) / Iz
];
end
🧠 上层控制器:模型预测控制(MPC)
目标函数设计
最小化轨迹误差(横向位移、航向角),并约束输入变化量。
% 设置 MPC 参数
N = 10; % 预测步长
Q = diag([10, 10, 1]); % 横向误差、航向误差、速度误差权重
R = diag([0.1, 0.1]); % 输入权重(前轮转角、横摆力矩)
% 构建 MPC 问题(使用 MATLAB Optimization Toolbox)
mpcobj = mpc(vehicle_ss, Ts, N, N);
setWeights(mpcobj, 'MV', R(1), 'MVRate', 0.01);
setWeights(mpcobj, 'Output', Q);
setConstraints(mpcobj, [], [], [-0.5; -500], [0.5; 500]); % δ ∈ [-0.5, 0.5], ΔMz ∈ [-500, 500]
注:你也可以使用 ACADO ToolKit 或 CasADi 实现更高效的非线性 MPC。
🧠 下层控制器:二次规划(QP)分配器
将 MPC 输出的总力矩和纵向力分配到四个车轮,满足轮胎力椭圆约束。
% 定义变量:四个车轮驱动力 Fx_i
% 约束条件:
% Fx_fl + Fx_fr + Fx_rl + Fx_rr = F_total
% lf*(Fx_fl + Fx_fr) - lr*(Fx_rl + Fx_rr) = ΔMz
% Fx_i >= 0 (仅驱动)
% Fx_i <= μ*N_i (摩擦限制)
% 构造 QP 问题
H = eye(4); % 最小化驱动力平方和(平滑分配)
f = zeros(4,1);
Aeq = [
1 1 1 1; % 总驱动力
lf lf -lr -lr % 横摆力矩
];
beq = [F_total; delta_Mz];
lb = [0; 0; 0; 0]; % 驱动时不能为负
ub = [mu*N_fl; mu*N_fr; mu*N_rl; mu*N_rr]; % 摩擦限制
% 使用 quadprog 求解
Fx_opt = quadprog(H, f, [], [], Aeq, beq, lb, ub);
📈 参考轨迹生成:双移线变道(DLC)
% 生成 DLC 参考轨迹
t = 0:Ts:T_sim;
x_ref = 20 * t; % 纵向位移
y_ref = 1.75 * erf(t/1.2); % 横向位移(erf函数模拟平滑变道)
ref_traj = [x_ref' y_ref'];
📊 Simulink模块建议结构
模块 | 功能 |
---|---|
Reference Path Generator | 生成DLC参考轨迹 |
MPC Controller | 模型预测控制器 |
QP Allocator | 转矩优化分配器 |
Vehicle Dynamics | 整车动力学模型(可使用Vehicle Dynamics Blockset) |
Tire Force Model | 包含轮胎力学约束 |
Scope & Visualization | 显示轨迹跟踪效果 |
📦 示例Simulink结构图
[Reference Trajectory] --> [MPC Controller] --> [QP Allocator] --> [Wheel Torque Inputs]
↑
[Vehicle Feedback]
🧪 运行流程说明
- 初始化车辆状态、参数、参考轨迹
- 在每个控制周期中:
- 获取当前车辆状态
- 利用 MPC 计算最优 δ 和 ΔMz
- 通过 QP 分配得到四个车轮驱动力
- 输入到整车模型进行仿真
- 更新状态并绘制结果
📚 推荐参考资料
- 《Model Predictive Control for Autonomous and Electric Vehicles》
- IEEE论文:“Torque Vectoring and Yaw Control for Electric Vehicles Using Quadratic Programming”
- MATLAB官方示例:
mpc_car
示例quadprog
函数文档
- GitHub开源项目:
- ACADO for MPC
- Apollo Auto(百度自动驾驶系统)