基于MPC/模型预测控制的轨迹跟随横向控制模型车道保持simulink模型 采用二自由度车辆动力学模型可以自定义车辆参数自定义目标轨迹图中为单移线目标轨迹与实际轨迹偏差方向盘突然传来一阵细微震动自动驾驶系统正在和物理极限较劲。咱们今天要聊的模型预测控制MPC就像个预判大师在车辆还没偏离车道前就计算好最优动作——这事儿在Simulink里玩起来特别带感。先甩个二自由度车辆模型镇楼function dx vehicleModel(t,x,u) % 参数区 m 1573; % 整备质量(kg) lf 1.4; % 前轴到质心距离 lr 1.7; % 后轴到质心距离 C_alpha 80000; % 轮胎侧偏刚度 % 状态分解 beta x(1); % 质心侧偏角 r x(2); % 横摆角速度 % 动力学方程 dx zeros(2,1); dx(1) (-(C_alpha*(lflr)/(m*(lflr)^2)))*beta ... ((C_alpha*(lr^2 - lf*lr)/(m*(lflr)^2)) - 1)*r ... (C_alpha*lf/(m*(lflr)^2))*u; dx(2) (-(C_alpha*(lflr)/((lflr)^2)))*beta ... (-(C_alpha*(lf^2 lr^2)/((lflr)^2)))*r/(Iz) ... (C_alpha*lf/((lflr)^2))*u/Iz; end这坨方程看着唬人核心就干两件事计算质心侧偏角变化率和横摆角速度变化率。注意第14行的u是前轮转角输入这个才是咱们的控制变量。基于MPC/模型预测控制的轨迹跟随横向控制模型车道保持simulink模型 采用二自由度车辆动力学模型可以自定义车辆参数自定义目标轨迹图中为单移线目标轨迹与实际轨迹偏差MPC控制器要干的就是在每个控制周期解这个优化问题function delta MPC_Controller(x0, refTraj) % 构造预测矩阵 [A, B] calcAB(x0); % 线性化模型 Q diag([10, 1]); % 状态权重 R 0.1; % 控制量权重 N 10; % 预测步长 % 构造QP问题 H blkdiag(kron(eye(N), Q), R*eye(N)); f zeros(size(H,1),1); Aeq [kron(eye(N), A) - eye(N*size(A,1)), kron(eye(N), B)]; beq -A*x0; % 求解 options optimoptions(quadprog,Display,off); sol quadprog(H, f, [], [], Aeq, beq, [], [], [], options); delta sol(end-N1); % 取第一个控制量 end这里有个骚操作用kron函数快速构造预测矩阵。权重系数Q比R大一个量级说明更注重轨迹跟踪精度而非控制量节省——毕竟安全第一。在Simulink里搭模型时记得给执行机构加饱和限制。实测发现方向盘转角超过±25度后轮胎就进入非线性区这时候模型要加个saturation模块% 执行器饱和限制 set_param(mpc_lka/SteeringActuator, UpperLimit, 25*pi/180); set_param(mpc_lka/SteeringActuator, LowerLimit, -25*pi/180);单移线工况跑出来的效果贼有意思——实际轨迹会在目标轨迹两侧蛇形但偏差不超过0.3米。把预测时域从10步调整到20步振幅立刻减小但CPU占用率飙升50%。这时候得在控制精度和计算开销之间找平衡点。最后给个调参秘籍先调Q矩阵让车辆别跑偏再调R矩阵防止方向盘抽风。遇到振荡就加微分项权重响应慢了就砍预测步长。记住没有银弹参数得对着实际路测数据反复摩擦。