自动驾驶,carsim/simulink联合仿真,基于mpc算法的acc自适应巡航控制,根据a...
自动驾驶,carsim/simulink联合仿真,基于mpc算法的acc自适应巡航控制,根据acc求解出期望车速后,用mpc算法计算加速度 carsim2019,matlab2018
深夜调仿真的人都知道,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算法计算加速度 carsim2019,matlab2018
重点来了——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预测模型精度的时刻。
更多推荐
所有评论(0)