核心内容摘要
女泰山·赛仑满天星:星辰大海中的野性召唤与心灵栖居
基于模型预测控制(mpc)的车辆换道车辆轨迹跟踪换道轨迹为五次多项式matlab与carsim联防控制手把手教你用五次多项式玩转MPC换道控制最近在调车辆横向控制时发现用五次多项式做换道轨迹配合MPC真是香今天咱们就抛开复杂的公式推导直接上代码实战聊聊怎么用Matlab和CarSim搞联合控制。
为啥非得是五次多项式换道轨迹要满足起终点位置、速度、加速度连续五次项刚好能塞进去六个边界条件。
举个栗子横向位移从0变到3米纵向速度保持20m/s起终点加速度都得是零。
用下面这段代码生成轨迹% 五次多项式系数计算横向位移y关于时间t t0 0; tf 5; % 换道时间5秒 A [1 t0 t0^2 t0^3 t0^4 t0^5; 0 1 2*t0 3*t0^2 4*t0^3 5*t0^4; 0 0 2 6*t0 12*t0^2 20*t0^3; 1 tf tf^2 tf^3 tf^4 tf^5; 0 1 2*tf 3*tf^2 4*tf^3 5*tf^4; 0 0 2 6*tf 12*tf^2 20*tf^3]; b [0; 0; 0; 3; 0; 0]; % y(t
0, y(t
0, y(t
0 → y(tf)3m coeff A\b; % 解线性方程组生成曲线类似S型加速度连续不会让乘客晕车。
但实际场景中得考虑纵向速度变化这时候需要做轨迹参数化处理比如用s-L坐标系。
MPC控制器核心操作模型预测控制的精髓在于滚动优化。
这里用二自由度单车模型做预测% 状态量[横向位移y横摆角psi横向速度vy横摆角速度r] % 控制量前轮转角delta dt
1; % 控制周期
1秒 A_k [1 dt 0 0; 0 1 dt 0; 0 0 1 -vx*dt; 0 0 0 1]; B_k [0; 0; C_alpha_f*dt/m; C_alpha_f*lf*dt/Iz]; % 轮胎侧偏刚度代入目标函数设计是关键——既要跟踪轨迹又要限制方向盘打得太猛H blkdiag(Q, R); % Q惩罚状态误差R惩罚控制量变化 f -Q*Y_ref; % Y_ref是未来N步的参考轨迹 [delta_opt,~,exitflag] quadprog(H,f,A_cons,b_cons,[],[],delta_min,delta_max);实际调试时会遇到几个坑预测时域N选太大导致求解慢建议从N10开始试权重矩阵Q对角线元素别拍脑袋定先让横向位移误差权重比角度大10倍约束前轮转角变化率方向盘转速不能超过500度/秒。
CarSim和Matlab的基情配合基于模型预测控制(mpc)的车辆换道车辆轨迹跟踪换道轨迹为五次多项式matlab与carsim联防控制联合仿真的核心是数据交互协议。
在Simulink里拉出这几个接口CarSim输出车速vx、横向误差ey、横摆角Matlab输入前轮转角指令!建议用S-Function做CarSim接口避免IO延迟问题调试时注意单位换算CarSim默认用英制单位记得在Dataset里改成kph和rad。
遇到过最离谱的bug是方向盘转角符号反了车子直接蛇形走位...效果展示与调参玄学成功运行时能看到车辆丝滑换道方向盘的转角变化像下面这样!如果出现轨迹震荡尝试增大MPC的R矩阵权重让控制量变化更保守检查轮胎模型是否线性区大转角时非线性明显得换更复杂的模型完整代码已传Github搜索MPC_LaneChange包含联合仿真配置文件和参数说明。
下期预告——加入障碍物避让的MPC该怎么玩注实际项目记得考虑路面附着系数变化和传感器噪声仿真和实车差距往往在这些细节里。