自动驾驶carsim/simulink联合仿真基于mpc算法的acc自适应巡航控制根据acc求解出期望车速后用mpc算法计算加速度 carsim2019matlab2018深夜调仿真的人都知道Carsim和Matlab这对黄金搭档总能整出点新花样。这次咱们要搞的是ACC自适应巡航的MPC控制简单来说就是让前车瞎变速度的时候后车能像老司机一样稳住不慌。先看联合仿真的骨架搭建。Carsim2019里把八自由度整车模型调教好重点是把油门/刹车标定参数校准到位——这步要是偷懒后面加速度跟踪准得飘。Matlab2018这边新建Simulink工程Carsim的S函数接口模块记得选2019版本不然数据通道直接罢工给你看。核心算法在ACC目标速度计算这块得讲究。实测下来用五阶多项式做速度规划效果最丝滑% 速度规划器 function v_ref speed_planner(v_current, v_target, T) t linspace(0,T,5); coeff polyfit(t, [v_current, zeros(1,3), v_target], 5); v_ref polyval(coeff, t); end这么搞出来的速度曲线不会有阶跃突变MPC后续处理压力小很多。注意多项式阶数别太高否则容易整出过山车式的速度曲线乘客体验堪比蹦迪。自动驾驶carsim/simulink联合仿真基于mpc算法的acc自适应巡航控制根据acc求解出期望车速后用mpc算法计算加速度 carsim2019matlab2018重点来了——MPC控制器的设计。这里有个坑直接控制加速度会导致求解器频繁报错得把控制量改成加速度变化率。状态方程得这么建A [1 Ts 0; 0 1 Ts; 0 0 1]; % 状态量[位置差,速度差,加速度] B [0;0;1]; Q diag([10, 5, 1]); % 状态权重 R 0.1; % 控制量权重 N 20; % 预测时域权重参数的调整是个玄学过程。实测发现速度差权重超过位置差时车辆容易产生点头效应。建议拿实际驾驶数据反推或者直接上试错法——调参两小时跑仿五分钟是常态。求解器部分用quadprog比fmincon快三倍不止特别是预测时域超过30步时[H,f] get_qp_matrices(A,B,Q,R,N); % 生成QP问题矩阵 A_cons build_constraints(N, a_max, delta_a_max); % 加速度变化率约束 opt optimoptions(quadprog,Algorithm,active-set); u_opt quadprog(H,f,A_cons,b,[],[],[],[],[],opt);注意约束条件的设置要符合物理极限。比如乘员舒适性要求加速度变化率不超过0.3g/s这个参数直接决定MPC输出的顺滑程度。曾经有个版本忘记加deltaamax约束结果仿真视频里的车开得像醉汉跳舞。最后在Simulink里整闭环验证时记得给Carsim输出加个低通滤波器。实测发现Carsim的加速度信号有高频抖动直接喂给控制器会导致MPC疯狂震荡。滤波截止频率设在2Hz左右最合适既保真度够又不引发振荡。跑完仿真看着速度跟踪曲线完美贴合加速度变化平缓如德芙巧克力时——就知道今晚的泡面没白吃。不过别高兴太早切到方向盘转角监视器看看说不定会发现轮胎早就在画龙了...这才是真正考验MPC预测模型精度的时刻。