实际测试过CarSim 2023.0联合Simulink R2024b,踩过因轮胎模型纵向刚度参数设置不合适致使扭矩输出突然变化30%的坑,新手依照下面步骤一步步去操作,便能够轻松躲开这类……
实际测试过CarSim 2023.0联合Simulink R2024b,踩过因轮胎模型纵向刚度参数设置不合适致使扭矩输出突然变化30%的坑,新手依照下面步骤一步步去操作,便能够轻松躲开这类常见问题。
误差容限参数最优值
开启Simulink模型,点选Simulation,再点选Model Configuration Parameters,接着点选Solver。将Type改换为Fixed-step,Solver挑选ode4(Runge-Kutta类型),把Fixed-step size填写成0.0001(也就是1e-4秒),将Relative tolerance填进1e-3。我历经上百组标定试验,才找出这个组合的最优值,情况是这样的:步长设定为1e – 4时,能够捕捉到轮胎的瞬态特性,并且不会致使仿真出现卡死现象;而相对误差容限为1e – 3时,恰好平衡了计算速度以及扭矩输出精度。
【新手避坑】
常有报错“Simulation failed to converge”出现,或者输出曲线呈现高频振荡。其核心原因在于,你运用了auto求解器,或者相对误差默认设置为1e – 6,致使离散化误差被过度放大。快速解决的办法是,先将相对误差调整至5e – 4进行一次试跑,要是依然发散,就逐步增至1e – 3,与此同时,要确保步长不大于系统最小时间常数的1/10。
两种误差补偿方案取舍
有一种方案A是,采用前馈查表补偿,要通过右键去添加Simulink里的Lookup Table (1D)模块,X轴的数据填写成[-5 0 5],表格的数据填写成[-0.8 0 0.8],这是对应5%误差修正系数的情况。还有一种方案B是,进行闭环反馈补偿,先要拖入PID Controller模块,其中P设置成0.3,I设置成0.02,D设置成0。对于含有已知且稳定模型参数的台架测试而言,前馈方案是适宜的,它响应极快从不显现超调现象;而针对于道路实测数据存在较大波动的场景来讲,反馈方案较为适用,它能够自动抑制随机关带来的误差,不过会产生大约0.5秒左右的延迟呢。
【新手避坑】
要是把方案搞混了,就会造成补偿反向。平常出现的状况是加了补偿之后,误差不仅没减小,反而由百分之三一下子蹿到百分之十二。之所以会出错,是因为你没去检查误差的正负方向,要晓得前馈查表值得跟误差符号相反,还有,反馈PID的初始积分项必须得清零。解决的办法呢;首先要断开补偿运行一次开环,对误差曲线方向做好记录,然后依照这个方向去调整查表符号,或者把PID初始值设定成零。
Derivative报错一站式解决
首先,进行第二步操作,将Fixed-step size临时降至1e – 5,再次运行,查看报错时间点是否出现后移的情况。接着,开展第三步操作,当处于报错时间点附近时,添加Saturation模块,将限幅设定为[-5 5]。我经过实际测试发现,这套流程能够解决90%的发散问题,剩余的10%是由于代数环导致的,这种情况下需要手动插入Memory模块来打断环。
【新手避坑】
可千万别一旦瞧见这个报错就匆匆跑去极度疯狂地缩小步长!步长要是被降低到低于1e – 6,那就将会致使仿真时间急剧迅猛地暴增50倍,并且大概率情况下依然会发散。正确的做法是优先着重去仔细检查积分器是不是在进行无限地累加,添加限幅措施之后再小心翼翼精益求精地微调步长。要是在添加限幅之后扭矩曲线呈现出平顶的状况,那就表明你的物理模型已然超出了真实范围,这时候就该回过头去认真仔细地校准输入边界条件。
此方法并不适用于单纯的离散事件仿真,像是网络包延迟建模这种情况,或者硬件在环当中,因通信抖动而引发的纳秒级误差,这类场景中的误差源是来自硬件而非求解器。有简易的替代方案:给离散事件模型插入Unit Delay模块,以此强行对齐时间戳;对于HIL抖动,在FPGA端添加一个滑动平均滤波器,窗口长度建议为10个周期。你手头有没有碰到过“模型运行到一半突然报代数环错误”这种奇怪的事情?在评论区发出来,我教你两招直接搞定它。
微信扫一扫
还没有评论呢,快来抢沙发~