基于驾驶员轨迹跟踪辅助系统的 CarSim/Simulink联合仿真 建立了独立的基于控制论的...
导入车辆模型时注意单位换算这个坑——CarSim默认用英制单位,而咱们的控制算法可都是按公制设计的,别等仿真结果跑偏了才想起来检查这个。折腾完这波仿真,最大的收获是认识到控制算法和驾驶员行为的耦合关系。建立了独立的基于控制论的simulink驾驶员模型,使用鲁棒性好的滑模控制提高驾驶员的航向角跟踪精度。提供的文档包括CarSim文件导入教程,和控制算法推导过程,包括了滑模控制基于李雅普诺夫的稳定性
基于驾驶员轨迹跟踪辅助系统的 CarSim/Simulink联合仿真 建立了独立的基于控制论的simulink驾驶员模型,使用鲁棒性好的滑模控制提高驾驶员的航向角跟踪精度。 提供的文档包括CarSim文件导入教程,和控制算法推导过程,包括了滑模控制基于李雅普诺夫的稳定性证明。 MATLAB版本为2018b CarSim版本为2018

最近在倒腾CarSim和Simulink的联合仿真,发现用滑模控制做驾驶员轨迹跟踪这事儿特别带劲。咱们直接进入正题,聊聊怎么让虚拟驾驶员在双移线工况下稳稳咬住目标路径。

先说说环境搭建的门道。CarSim 2018和MATLAB 2018b这对老搭档有时候会闹点小脾气,记得在Simulink里配置S-Function时要选对编译器版本。我吃过亏,用VS2015编译的模块在2018b环境下跑起来总报错,换成VS2013突然就老实了。导入车辆模型时注意单位换算这个坑——CarSim默认用英制单位,而咱们的控制算法可都是按公制设计的,别等仿真结果跑偏了才想起来检查这个。

核心的滑模控制器长这样:
function delta = sliding_control(e, de, lambda, eta)
s = de + lambda*e; % 滑模面设计
delta = -eta*sat(s/0.1); % 连续型趋近律
end
function y = sat(x)
y = x/(abs(x)+0.01); % 准饱和函数防抖振
end
这个20行不到的代码藏着两个关键点:lambda决定系统收敛速度,eta负责对抗外界干扰。实测发现当eta超过3时方向盘开始明显抖动,但低于1.5又压不住路径偏差,这个平衡点得靠大量仿真试出来。

基于驾驶员轨迹跟踪辅助系统的 CarSim/Simulink联合仿真 建立了独立的基于控制论的simulink驾驶员模型,使用鲁棒性好的滑模控制提高驾驶员的航向角跟踪精度。 提供的文档包括CarSim文件导入教程,和控制算法推导过程,包括了滑模控制基于李雅普诺夫的稳定性证明。 MATLAB版本为2018b CarSim版本为2018

联合仿真最刺激的部分是数据交互。CarSim输出的航向角信号得经过个卡尔曼滤波器去毛刺,不然滑模控制的抖振能让方向盘像得了帕金森。这里推荐用Simulink自带的Transport Delay模块做个50ms的延时补偿,毕竟真车驾驶员的神经传导也需要时间不是?
跑完仿真别急着看动画,先盯着李雅普诺夫函数的变化曲线。好的控制应该让这个函数值像坐滑梯一样稳步下降,要是看见曲线反复上下窜跳,八成是滑模面的参数没调好。有个取巧的办法——把期望路径的曲率变化率作为前馈量塞进控制律,能减轻反馈控制的压力。
测试双移线工况时发现个有趣现象:传统PID控制在60km/h时路径跟踪偏差超过0.5m,而滑模控制硬是压到0.2m以内。不过代价是方向盘转角的高频抖动多了三成,这或许解释了为什么现实中的赛车手过弯时总在微调方向。
折腾完这波仿真,最大的收获是认识到控制算法和驾驶员行为的耦合关系。下次打算在滑模控制里加入驾驶员预瞄模型,毕竟真人开车可不是死盯着当前误差,而是会预判未来两三秒的路径变化。谁试过类似方案的,咱们评论区接着唠?
更多推荐
所有评论(0)