【整车Silmulink模型】(三)驾驶员模型方向盘转角控制

可以说是“例行”碎碎念了吧
不知不觉已经颓了三个星期了,驾驶员已经是最后值得讨论的一个我其实也是似懂非懂,希望大佬经过能留下只言片语的一个部分。(没错,我就是颓废一周,起来整理一晚上)
这个部分对于我的实际稳定性控制来说其实是不需要的,加上反而会造成一些耦合的情况,但我开题的时候就很想整一个,那中期只能咬牙给完成了。终期联合控制也都是辛酸泪,唉。

公式等可能有误,请谨慎参考,若有疏漏,请批评指正!

前言

  驾驶员模型我主要参考的书目是郭孔辉的《汽车操纵动力学》,主要参考的论文是任晨辉的《基于底盘协同的电动轮驱动汽车横向稳定性控制》和高振海的《汽车方向预瞄式自适应PD控制算法》。

由于我自身能力有限,毕业设计时长也有限,理解并不是很透彻。具体体现在目标预期轨迹坐标(或称预瞄点坐标)的获取。我的方法是通过坐标系的变换,查表(目标轨迹曲线)获得,具体在理论模型的论文截图中体现。

  以下是模型展示。

在这里插入图片描述

图3-1 整车Simulink模型
△ 建成这样主要是为了方便看仿真数据,好看看哪里出错

在这里插入图片描述

图3-2 驾驶员模型
△ 我希望某天能拥有这个shai的轿车


1. 理论模型

  驾驶员模型模拟真实驾驶员对车辆的动力或转向的操纵,本文假定理想车辆纵向车速恒定,则驾驶员模型的输出仅为方向盘转角。本文使用郭孔辉教授的单点预瞄驾驶员模型,“单点预瞄”即通过模拟驾驶员基于当前汽车行驶状态,对比未来预瞄时间点轨迹与目标轨迹的偏差,做出判断,滚动调节。该模型同时考虑了驾驶员反应的滞后和校正环节,前者包括驾驶员的神经反应滞后时间和驾驶员手臂和方向盘惯量等的滞后。

  在驾驶员目标行驶轨迹已知的前提下,驾驶员理想侧向加速度的预瞄如图3-2所示。其中,XOY为大地坐标系,xOy为相对坐标系,二者原点重合;则"X(t)" 、“Y(t)” 为车辆质心的绝对坐标,“x(t)” 、“y(t)” 为车辆质心的相对坐标,单位均为m;“ψ” 为车辆航向角,单位为rad。

在这里插入图片描述

图3-3 理想侧向加速度预瞄示意图
△ 图源:《汽车方向预瞄式自适应 PD 控制算法》

在这里插入图片描述△ 图源:我的毕设论文
由《汽车操纵学》,Gay=V2/L,其中,L为轴距。

2. Simulink模型

在这里插入图片描述

图3-2 驾驶员模型
△ 此处重新展示模型

  驾驶员模型的Simulink模型同样经历了两个版本,模型的变换主要还是为了更好的检查和修改数据。驾驶员模型需要调整的参数分别是驾驶员的目标轨迹(正常不用“调整”,但我需要在转弯前完成加速,导致我需要调整进入双移线工况的纵向偏移距)和预瞄时间 T,为简化模型,其余反应及调整时间均设为0。

  以下为计算大地坐标系上的速度分量的代码片,输出后通过积分模块可获得大地坐标系下的坐标。

function [X_dot,Y_dot,V] = fcn(Vx,Vy,yaw)
V=sqrt(Vx^2+Vy^2)+eps;
X_dot=Vx*cos(yaw)-Vy*sin(yaw);
Y_dot=Vx*sin(yaw)+Vy*cos(yaw);

  以下MATLAB Function的代码片通过调整预瞄时间T,即Tp,获得理想侧向加速度。我的导师说双移线工况的预瞄时间是1.1~1.3s,但我通过调参,很艰难的确定下最终预瞄时间为0.8,导师实在是太忙了,,我也不太清楚为什么会这样,大家可以自己调调参。

function [y_dd,Y_tp]   = fcn(X_d,X,Y,yaw,Vy)
Tp=0.8;
y=-sin(yaw)*X+cos(yaw)*Y;
X_tp=X+X_d*Tp;

desire_road_Y = [0 0 0 0.1 0.7 1.8 2.8 3.4 3.5 3.5 3.3 2.4 1.1 0.2 0 0 0];
desire_road_X = [-10 0 305 310 315 320 325 330 335 350 355 380 385 390 395 400 700];

Y_tp = interp1(desire_road_X,desire_road_Y,X_tp,'linear');
y_tp=-sin(yaw)*X_tp+cos(yaw)*Y_tp;
y_d=Vy*cos(yaw);

y_dd=(y_tp-y-y_d*Tp)*2/Tp^2;

3. CarSim验证

原本的CarSim验证我也想和第二部分一样一句带过,但是等有人问的时候再解答就有点被动了。隔了这么久我其实已经忘得差不多了,但是我之前又实在是不想从躺平的状态起来,唉。
最近有点忙,但是又不想拖太久了,这个冷饭隔太多天了。又想着验证部分做完整一点,就各种找过程文件,恢复过程设定(有时候图方便,直接改动用于其他用处)。结果就是,我从开机到找到模型花了我一个半小时,我的用电脑状态变成跷二郎腿看手机等程序,我都笑了。。。那就进入可能不太完整的正题吧!

本部分书写顺序是按照笔者恢复文件的顺序书写,阅读顺序请按part1-part2来

part2

  图3-3是对照组的Simulink界面,注释掉的部分是Simulink模型的控制部分,先放对照组主要是因为我最后验证的为对照部分,保存的也是对照部分。从此图可以看出本人在拟合最优参数时做出的尝试。

在这里插入图片描述

图3-3 对照组Simulink界面
△ 此处输出mat文件而后通过MATLAB命令出图

  CarSim主界面如图3-4所示,其中,Test Specifications部分不需要更改参数,因为我们“驾驶”的是同一辆车,如图3-5所示。
在这里插入图片描述

图3-4 对照组CarSim界面
△ Plot部分并没有用,因为我是通过Simulink出的对比图

在这里插入图片描述
图3-5 Test Specifications界面
△ 我的更改出于研究对象的参数

  Procedure的更改主要是Steering: Drive path follower和车速(由于我研究的是转向性能,故车速设置为Constant target speed)。前者更改内容是目标轨迹,可以选用内置轨迹和驾驶员参数,我是自定义轨迹(在54km/h时,可以满足ISO3888-1-2018 国际标准试验文件),驾驶员参数均为0,如图3-6和3-7所示。 此处需要注意,上述设定需要和Simulink模型对应,如轨迹点和模型中的预期轨迹需一致。

在这里插入图片描述

图3-6 Procedure界面
△ Start and Stop time也要改,不同车速对应不同结束时间

在这里插入图片描述

图3-7 map界面
△ 也可以直接在内置双移线轨迹的基础上更改,我的双移线参数来自课题组

  由于是对照组,只需要想Simulink输出CarSim的数据即可,如图3-8和3-9所示。

在这里插入图片描述

图3-8 联合仿真设定
△ 其他设定可参照本系列第一篇文章《【整车Silmulink模型】(一)整车动力学模型》

在这里插入图片描述

图3-9 输出参数
△ 分别为车辆质心纵向车速(单位m/s)、车辆质心侧向车速(单位m/s)和横摆角(单位°)

  我运行了一下图3-3所示Simulink模型,输出XY Graph如图3-10所示,可证明上述设定有效。

在这里插入图片描述

图3-10 对照组XY Graph

part1

  对于模型组,Simulink便是将注释掉的部分恢复即可,如图3-11所示。由于驾驶员模型需要调参,直接输出纵侧向位移数据至工作区,通过图像对比验证仿真效果。CarSim模型界面如图3-12所示,和对照组相比,Procedure部分的Steering改为no Steer,如图3-13所示。

在这里插入图片描述

图3-11 模型组Simulink模型
△ 此时模型与最终模型有所出入,仅为驾驶员模块的过程模型

在这里插入图片描述

图3-12 模型组CarSim模型
△ 此处可以直接通过Plot查看与对照组相比的仿真结果

在这里插入图片描述
图3-13 Procedure界面
△ 结束时间为13就可以了

  联合仿真时,CarSim输出纵侧向车速和横摆角度,输入为方向盘转角,如图3-14-3-16所示。
在这里插入图片描述

图3-14 联合仿真设定
△ 其他设定可参照本系列第一篇文章《【整车Silmulink模型】(一)整车动力学模型》

在这里插入图片描述
图3-15 输入参数
△ 方向盘转角(单位°)

在这里插入图片描述

图3-16 输出参数
△ 分别为车辆质心纵向车速(单位m/s)、车辆质心侧向车速(单位m/s)和横摆角(单位°)

  我运行了一下图3-11所示Simulink模型,输出XY Graph如图3-17所示,可证明上述设定有效。
在这里插入图片描述

图3-17 对照组XY Graph

  最终的对比图如图3-18所示,其中,Yobj代表目标轨迹、Y代表Simulink模型的驾驶员轨迹、Ymat代表CarSim的驾驶员轨迹。可以看到,虽然后两者并没有完全重合,但在理论趋势上,两条曲线是一致的。
在这里插入图片描述

图3-18 模型对比曲线
△ 此为MATLAB输出曲线,过程图像并未加入坐标轴,且速度不一定为108km/h


总结

  本文介绍了整车Simulink模型中的驾驶员模型,其中,预期轨迹坐标(或称预瞄点坐标)的获取方法是通过坐标系的变换,而后查表(目标轨迹曲线)获得。本文还阐述了Simulink驾驶员模型与CarSim模型的联合仿真,以验证Simulink模型的有效性。

### 驾驶员模型中的方向盘转角控制 在构建驾驶员模型时,方向盘转角作为关键输入之一,在模拟真实驾驶行为方面起着至关重要的作用。为了提高路径跟随精度并确保稳定性和响应性,通常会采用预瞄点搜索算法来决定所需的方向盘角度调整[^1]。 对于具体实现而言,当车辆沿预定轨迹行驶时,系统持续监测当前坐标与期望路线之间的偏差,并据此动态调节转向指令。这种策略不仅适用于直线段也适合处理弯道情况。特别是在涉及复杂路况条件下,通过实时评估前方一定距离处的目标位置(即所谓的“预瞄点”),可以更精准地预测必要的转弯动作,从而优化整体操控表现。 此外,在某些高级应用场合下还会结合四轮转向技术进一步增强灵活性和安全性。此时除了常规的前轴调控外,也会对后桥施加适当的角度变化以辅助完成更加精细的姿态修正任务。例如,文献提到使用滑模控制器来进行此类多轴协同作业的设计方案[^2]。 至于底层物理机制,则往往依赖于简化版的动力学框架——比如二自由度模型——它能有效捕捉到核心要素如车身重心位移以及轮胎侧倾效应的影响,同时保持相对较低的计算成本以便快速迭代求解过程。此方法假设忽略悬挂系统的贡献并将整个装置抽象成一对理想化车轮单元;另外还假定胎面摩擦力呈线性关系且不考虑任何纵向加速因素干扰,使得最终得到的状态方程组易于解析表达和数值仿真验证[^3]。 ```matlab % MATLAB/Simulink 中用于计算目标方向盘转角的基础伪代码片段 function delta = calculateSteeringAngle(currentPose, lookaheadPoint, vehicleParams) % currentPose: 当前车辆姿态 (x,y,theta),lookaheadPoint: 预瞄点坐标 (x',y'), % vehicleParams: 包含诸如轮距、轴距等几何属性的对象 % 计算当前位置至预瞄点连线相对于前进方向的角度差值 deltaX = lookaheadPoint(1) - currentPose(1); deltaY = lookaheadPoint(2) - currentPose(2); alpha = atan2(deltaY,deltaX); % 连接两点形成的矢量方位角 beta = mod(alpha-currentPose(end), pi*2)-pi; % 对齐误差 L = sqrt(sum((currentPose([1 2])-lookaheadPoint).^2)); % 到达预瞄点的距离 k = vehicleParams.wheelbase / L; delta = arctan(k * sin(beta)); end ```
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值