基于MATLAB分布式驱动电动汽车轨迹跟踪与稳定性控制

基于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 ToolKitCasADi 实现更高效的非线性 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]

🧪 运行流程说明

  1. 初始化车辆状态、参数、参考轨迹
  2. 在每个控制周期中:
    • 获取当前车辆状态
    • 利用 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(百度自动驾驶系统)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值