CarSim与Simulink联合仿真:轨迹跟随、车道保持与横向控制模型详解及文件操作指南
Simulink这边打开TrajectoryTracking.slx,模型结构看着挺唬人,其实核心就三块:轨迹生成器在疯狂输出参考路径,MPC控制器在绞尽脑汁算方向盘转角,CarSim接口模块正把车辆状态偷偷传给控制器。模型包里附带的TuningGuide.pdf第23页有个骚操作:把前轮侧偏刚度和后轮的比值调到1.3:1,能让车子在急转弯时自动呈现转向过度的趋势,配合控制器能做出漂移效果——当然
carsim与simulink联合仿真——轨迹跟随,车道保持,横向控制 carsim的cpar文件导入即可使用 simulink的mdl模型文件支持自己修改 模型说明文件
在自动驾驶demo里看到车子自己拐弯是不是觉得很酷?今天咱们就动手搞一个。抽屉里翻出吃灰的CarSim安装盘,配合Matlab/Simulink,咱们半小时就能搭出个能车道保持的模型。
先打开CarSim把车辆参数整利索。把自带的ChevroletEquinox2017.cpar文件拖进Vehicle标签,这车重1.8吨,轴距2.85米,方向盘打死2.5圈——这些参数后面调控制器时会反复用到。重点检查轮胎魔术公式参数对不对,尤其是那个B.C1参数要是0.3开头的,这直接影响轮胎侧偏刚度。
Simulink这边打开TrajectoryTracking.slx,模型结构看着挺唬人,其实核心就三块:轨迹生成器在疯狂输出参考路径,MPC控制器在绞尽脑汁算方向盘转角,CarSim接口模块正把车辆状态偷偷传给控制器。咱们先看轨迹生成部分的代码:
function refPath = generateSinusoidalPath(t)
amplitude = 3.5; % 车道宽度的一半
wavelength = 150; % 道路起伏波长
refPath.y_ref = amplitude * sin(2*pi*t/50);
refPath.psi_ref = atan((2*pi*amplature)/wavelength * cos(2*pi*t/50));
end
这其实在生成一条正弦波形的参考路径,相当于让车子在连续S弯里蛇形走位。注意psi_ref的计算用了三角函数导数,确保航向角连续变化,避免方向盘突然抽风。
重点看看横向控制的黄金代码段——模型预测控制的核心代价函数:
function cost = mpcCostFunction(u, x, ref)
Q = diag([10, 5, 2]); % 横向误差、航向角误差、方向盘权重
horizon = 10;
cost = 0;
current_state = x;
for k = 1:horizon
current_state = bicycleModel(current_state, u(k), 0.1); % 0.1秒预测步长
error = [current_state.y - ref.y(k);
current_state.psi - ref.psi(k);
u(k)];
cost = cost + error' * Q * error;
end
end
这里用自行车模型做预测,Q矩阵就像调音台——第一个参数调大车子就死死咬住车道线,但方向盘可能抖成帕金森;第三个参数加大能让转向更平顺,但跟踪精度会下降。建议初次调试时先把航向角权重(Q[2])设为0,专心调横向误差。
遇到仿真卡成PPT?八成是求解器在作妖。把Simulink的Solver从变步长改成定步长,步长设0.01秒,CarSim那边的输出频率调到100Hz,立马丝滑如德芙。要是出现方向盘疯狂左右打,检查下车辆参数里的转向传动比是不是和控制器输出对得上——曾经有兄弟把14.8的传动比错输成1.48,车子在弯道里跳起了街舞。
最后看结果时别光盯着误差曲线,CarSim的3D动画才是灵魂。按住Ctrl+Shift再点动画界面的轮胎,能显示实时滑移率。当看到轮胎边缘泛起淡淡的红色(说明开始出现侧滑),就是提醒你该优化轮胎模型或者降低控制器的攻击性了。
模型包里附带的TuningGuide.pdf第23页有个骚操作:把前轮侧偏刚度和后轮的比值调到1.3:1,能让车子在急转弯时自动呈现转向过度的趋势,配合控制器能做出漂移效果——当然,甲方验收时可千万别这么玩。

更多推荐
所有评论(0)