首页 / 资讯中心 / 文章详情

四轮转向系统横摆角速度滑模控制:八自由度模型与Simulink仿真实践

四轮转向系统横摆角速度滑模控制:八自由度模型与Simulink仿真实践 ★ FEATURED ARTICLE
四轮转向系统的横摆角速度控制一直是车辆动力学控制里一个既让人兴奋又容易翻车的方向。兴奋在于后轮一旦参与转向整车的灵活性、稳定性都能提升一个量级容易翻车在于模型复杂度上来了控制器的鲁棒性要求也上来了很多人在搭建Simulink仿真时光是处理八自由度模型的耦合项和滑模控制的抖振问题就能卡上一两周。这篇文章基于我实际完成的一个控制仿真项目——利用滑模控制算法配合八自由度车辆模型实现四轮转向系统的横摆角速度控制把整个建模思路、控制器设计逻辑、Simulink搭建细节和踩过的坑一次性说清楚。无论你是做车辆工程毕业设计还是在做底盘电控相关的工程预研这篇内容都应该能帮你少走不少弯路。1. 为什么横摆角速度控制需要“八自由度模型后轮主动转向”1.1 先搞清楚控制对象是什么横摆角速度用通俗的话说就是车辆绕垂直轴旋转的快慢单位是 rad/s。开车时猛打方向盘车头快速转过去那一瞬间横摆角速度就很大。如果横摆角速度失控车辆就会甩尾、侧滑甚至激转尤其是高速变道或者低附着路面这是非常危险的工况。四轮转向系统的核心思路就是让后轮也参与转向。前轮转向有个天然的局限前轮产生的侧向力作用点在前轴绕质心的力臂有限高速时靠前轮很难快速建立起足够的横摆力矩。后轮一旦能转一个与工况匹配的小角度就能在车辆尾部直接“推”一把让车身的横摆响应更快、更准确。而横摆角速度控制的目标就是让车身实际横摆角速度能够跟踪上驾驶员的意图——也就是参考横摆角速度。这个参考值通常由前轮转角、车速、路面附着条件共同决定。控制器要做的事情就是根据当前车辆状态去计算后轮转角必要时叠加前轮补偿把实际横摆角速度拉回到期望值上。1.2 为什么不用传统的二自由度模型很多教材里分析操纵稳定性用的是二自由度模型也就是只考虑横摆和侧向运动俗称自行车模型。它在解释稳态转向特性和基本横摆响应时确实够用但放到四轮转向控制里它有两个明显短板。第一二自由度模型把左右车轮合并成一条“虚拟车轮”这在实际四轮转向控制中会丢失很多信息。比如左右轮垂直载荷转移会直接改变侧偏刚度进而影响轮胎侧向力的响应这在紧急变道时非常重要但二自由度模型完全无法表达。第二二自由度模型没有侧倾自由度。实际车辆转弯时车身会侧倾侧倾会引起轮荷转移轮荷转移又反过来改变前后轴的等效侧偏刚度。这个耦合效应在二自由度模型里被完全忽略。所以我在项目中直接选用了八自由度模型。它的八个自由度是车身纵向运动、横向运动、横摆运动、侧倾运动再加上四个车轮各自的旋转运动。严格来说如果要考虑垂向跳动还需要加悬挂自由度那就是更多自由度的整车模型了。但对于横摆角速度控制这个研究目标八自由度是一个比较均衡的选择——比二自由度精致得多又不会像二十几自由度整车模型那样参数庞杂、调试验证成本过高。1.3 滑模控制为什么适合这个场景四轮转向系统本质上是强耦合的非线性系统。轮胎的侧偏特性本身就不是线性的加上车速变化、路面附着变化模型参数一直在漂移。传统的线性二次型调节器LQR或比例积分微分PID控制在设计时都依赖比较准确的模型参数一旦实车参数发生较大偏移控制效果会明显退化。滑模控制就是一种对参数摄动和外部扰动具有很强的鲁棒性的控制方法。它的核心思想是设计一个滑模面然后施加控制力迫使系统状态在有限时间内到达滑模面并在滑模面上滑动。一旦进入滑动模态系统的动态行为就只由滑模面方程决定与原始模型参数基本无关。这在车辆控制这种工况变化剧烈的场景下简直是天然适配。当然滑模控制也是有代价的最大的问题就是抖振。理想情况下状态到达滑模面之后会一直贴着滑模面滑动但在离散化实现中切换控制会导致控制量高频振荡反映到仿真里就是横摆角速度曲线“发毛”反映到实车上就是后轮转角来回抖。这个问题的解决策略我放到后面专门说。2. 八自由度车辆模型不是单纯“加几个自由度”那么简单2.1 动力学方程组的建立过程我在搭建八自由度模型时参考了国内外很多论文里的建模方式但最终落地还是自己重新推导了一遍原因在于不同论文的坐标系定义、正方向约定、符号体系差别很大直接抄公式很容易在Simulink里出现符号错误而不自知。车辆模型的坐标系我建议统一用ISO约定x轴沿车身纵向向前y轴沿车身横向向左z轴垂直向上横摆角速度绕z轴正方向为正。在这个坐标系下整车动力学方程可以写成如下形式此处给出简化表达实际模型里每一项都要展开成前后轴、左右轮的力叠加纵向运动方程m · (u_dot - v · r) F_x横向运动方程m · (v_dot u · r) F_y横摆运动方程I_z · r_dot M_z侧倾运动方程I_x · φ_dotdot M_x四个车轮的旋转方程I_w · ω_dot T_drive - F_x · R_w这里的 u 是纵向车速v 是侧向车速r 是横摆角速度φ 是车身侧倾角F_x、F_y 是四个轮胎力合成到质心处的合力M_z 是绕z轴的总横摆力矩M_x 是侧倾力矩。每个轮胎的纵向力和侧向力则是通过轮胎模型计算出来的。我在项目中选用了魔术公式轮胎模型Magic Formula它的基本形式是F_y D · sin(C · arctan(B · α - E · (B · α - arctan(B · α))))这个公式里的 B、C、D、E 分别代表刚度因子、形状因子、峰值因子、曲率因子它们跟轮胎垂直载荷、路面附着系数有关。因为八自由度模型里每个车轮的垂直载荷会随着侧倾、纵向加速度变化而重新分配所以轮胎参数必须实时更新这也是八自由度模型比二自由度模型“吃计算量”的直接原因。2.2 前后轮侧偏刚度的动态变化这里我想特别提醒一个容易忽略的细节侧偏刚度不是常数。车辆转弯时离心力把车身推向一侧内侧车轮载荷减小、外侧车轮载荷增大。载荷变化对轮胎侧偏特性的影响是非线性的——在载荷较小时侧偏刚度随载荷近似线性增长但载荷大到一定程度后侧偏刚度增长速度变缓甚至趋于饱和。这种“载荷-侧偏刚度”的非线性关系是车辆在极限工况下操纵稳定性变差的根本原因之一。在八自由度模型里这个效应通过上述侧倾自由度自然体现出来了。四轮转向控制的后轮转向角直接改变了后轴的侧偏力如果一个模型中侧偏刚度参数是定值那后轮转向的很多优势根本体现不出来。所以我强烈建议无论是做毕设还是做工程仿真轮胎模型至少要用魔术公式的简化版本不要用线性侧偏刚度。2.3 参数取值与验证模型建立之后必须要做参数验证否则后面控制器再漂亮仿真结果也没有说服力。我的做法是先不给后轮转角让模型在前轮阶跃转角输入下运行与前人的二自由度模型解析解或者CarSim标准工况数据进行对比。我使用的整车参数大致如下典型中型乘用车参数整车质量 m 1592 kg横摆转动惯量 I_z 2488 kg·m²侧倾转动惯量 I_x 450 kg·m²质心到前轴距离 a 1.05 m质心到后轴距离 b 1.41 m前轮等效侧偏刚度 C_f 62000 N/rad后轮等效侧偏刚度 C_r 75000 N/rad车速取 60 km/h、100 km/h 几个工况点。这些参数在Simulink中以常量Constant模块形式放在一个参数初始化脚本里而不是直接敲进模型里这样批次更换参数非常方便。模型验证的核心指标是稳态横摆角速度增益和侧向加速度响应的相位滞后两者误差控制在 5% 以内我就认为模型可用。3. 滑模控制器设计从滑模面到控制律的完整推导3.1 控制目标和滑模面设计横摆角速度控制的目标是让实际横摆角速度 r 跟踪参考横摆角速度 r_ref。参考值怎么算我采用了理想二自由度模型的稳态增益作为参考r_ref u / (L K_u · u²) · δ_f其中 L a b 是轴距K_u 是稳定性因子δ_f 是前轮转角。这个公式在汽车理论教科书里都有它给出的横摆角速度是常规工况下驾驶员期望的车辆响应。当路面附着系数较低时还需要对 r_ref 做饱和限制因为期望横摆角速度不能超过附着极限这个限幅条件为r_max μ · g / uμ 是路面附着系数。超过这个值的横摆角速度是物理上无法实现的如果控制器强行跟踪只会让车辆失稳。滑模面的选择有很多种方案。最基础的是直接用跟踪误差定义滑模面s r - r_ref这个定义简单直观但缺点是只对横摆角速度有约束对侧偏角没有约束。实际车辆在低附着路面容易发生侧滑单纯控制横摆角速度可能在某个瞬间把尾部推得太狠导致质心侧偏角过大。更稳妥的做法是定义滑模面为s (r - r_ref) λ · β其中 β 是质心侧偏角λ 是权重系数一般取 0.2~0.5。这个滑模面既考虑了横摆响应又兼顾了姿态稳定性。我在项目里用的是这种带质心侧偏角修正的滑模面因为四轮转向系统本身对侧偏角的影响极大后轮转向控制不当很容易引起“过度横摆”而车辆重心还在飘那个状态非常危险。3.2 趋近律选择与控制律推导滑模控制设计时光定义滑模面还不够还需要确定状态如何到达滑模面也就是趋近律的选择。常见的趋近律有三种等速趋近律s_dot -ε · sign(s)指数趋近律s_dot -ε · sign(s) - k · s幂次趋近律s_dot -k · |s|^α · sign(s)指数趋近律在工程中最常用因为 k·s 项可以让系统状态离滑模面较远时快速趋近而 ε·sign(s) 保证了状态到达滑模面后的滑动模态存在性。定义好滑模面之后令 s_dot 0可以解出等效控制项再加上切换控制项得到完整的控制律。我在项目中的控制律结构如下δ_r δ_r_eq δ_r_sw等效控制项 δ_r_eq 是基于车辆模型推导出来的——把滑模面导数表达式中的车辆状态导数代入模型方程反解出能够维持 s_dot 0 的后轮转角。切换控制项则是δ_r_sw -k_s · sign(s)这里的 k_s 是一个重要的设计参数它必须大于系统不确定性带来的等效控制误差上界才能保证滑模到达条件的成立。但 k_s 也不能取得太大否则抖振会非常剧烈这又是一个典型的权衡问题。3.3 抖振抑制的工程化处理抖振是滑模控制绕不开的话题仿真中处理不好横摆角速度曲线会像锯齿一样后轮转角控制信号高频跳动。我的做法是“三重抑制”方案第一用饱和函数 sat(s/Φ) 替换理想符号函数 sign(s)。饱和函数在边界层 |s| Φ 内是线性过渡而不是瞬间跳变。这样系统状态在接近滑模面时控制量是连续变化的而不是在两个极限值之间硬切。边界层厚度 Φ 的取值范围通常在 0.01~0.1 之间太小了抑制效果不明显太大了又会损失控制精度需要根据仿真结果反复调试。第二在切换增益中引入自适应策略。也就是 k_s 不是一个固定值而是根据跟踪误差的大小动态调整误差大时提高增益误差小时降低增益。这个策略的实现方式在Simulink里也不复杂用一个积分环节乘以比例系数再叠加反馈即可。第三合理设计等效控制项中涉及的模型参数。滑模控制虽然对参数摄动有鲁棒性但那是建立在切换增益足够大的前提下的。如果等效控制项本身计算准确切换增益就不需要取得很大抖振自然就小。所以我在此处严格按八自由度模型推导等效控制而不是用简化模型这反而减轻了抖振。整套控制器的搭建逻辑是参考模型模块计算 r_ref车辆状态反馈模块提供 r 和 β滑模控制器模块根据误差计算后轮转角 δ_r然后 δ_r 作为输入注入八自由度整车模型。整个闭环的采样时间在连续系统中由求解器决定在离散系统中建议取 1 kHz 以上即步长不超过 1 ms否则滑模控制效果会明显退化。4. Simulink模型架构从参数脚本到闭环建模的完整搭建流程4.1 模型顶层架构Simulink模型我采用的是模块化分层结构从上到下分四层信号输入层、参考模型层、滑模控制器层、八自由度整车模型层。整车模型层内部又细分为车体动力学模块、轮胎模块、垂直载荷计算模块、车轮旋转动力学模块。这样分层的最大好处是后面调试时能精准定位问题比如发现某个轮胎力算错了直接在子系统内部查不用翻一整张复杂的模型图。顶层信号输入设置上前轮转角 δ_f 使用的是阶跃输入或者正弦扫描输入。阶跃输入适合观察控制器的瞬态响应和稳态跟踪能力正弦扫描输入则是为了验证频率响应特性看系统在中高频段的跟踪能力。我还单独配置了一个车速输入通道用于做不同车速工况的切换测试。4.2 整车动力学模块的实现技巧八自由度模型的Simulink实现关键技巧在于如何处理运动学方程中的耦合项。以横摆运动为例方程中含有一个乘积项 u · r纵向速度与横摆角速度的乘积它是侧向动力学和横摆动力学耦合的体现。我的做法是用一层层积分器串联构建状态空间结构从横摆角加速度 r_dot 开始经过一个积分器得到 r再经过一个积分器得到横摆角 ψ。纵向速度和横向速度类似。侧倾角速度通过侧倾动力学方程积分得到侧倾角。整个模型的核心就像一个“状态积分链”每个积分器前加一个求和点把所有力的贡献在这个求和点处汇合。有一个细节容易让人崩溃直接在Simulink里写整车动力学方程容易出现代数环问题。因为轮胎侧向力依赖侧偏角侧偏角依赖车辆横向速度而横向速度又依赖轮胎力如果不处理Simulink会在每个步长里反复迭代求解这个隐式方程轻则降低仿真速度重则导致仿真无法进行。我的解决方案是在侧偏角计算通道上引入一个“单位滞后”或低通滤波器来打破代数环。物理上这也有依据轮胎力的建立本来就有滞后不是瞬时的。实际仿真中这个近似带来的误差微乎其微但模型的求解效率提升非常明显。4.3 轮胎模型的Simulink封装魔术公式轮胎模型在Simulink中我封装成了一个可重复调用的子系统模块。模块输入是轮胎垂直载荷 F_z 和侧偏角 α输出是轮胎侧向力 F_y。子系统内部通过 Fcn 模块或者 MATLAB Function 模块实现魔术公式的计算。这里要提醒的是MATLAB Function 模块在仿真中是以解释执行方式运行的速度较慢。如果后续要做蒙特卡洛批量仿真建议把魔术公式的计算改写成 C MEX S-Function 或者使用 MATLAB Function 但启用代码生成速度能提升几十倍。如果只是单次仿真验证MATLAB Function 完全够用。四个轮胎模块是并行的各自接收本轮的垂直载荷和侧偏角输出本轮的侧向力再汇总到整车动力学模块中。这样一个“一个模块管一个轮胎”的结构出问题的时候排查非常直观。4.4 滑模控制器在Simulink中的实现滑模控制器的实现相对简单它的核心计算就几步读入 r、β、r_ref计算滑模面 s计算等效控制项 δ_r_eq计算切换控制项 δ_r_sw最后求和输出 δ_r。等效控制项的计算里含有横摆角速度的导数 r_dot直接对 r 做微分在Simulink里不推荐因为数值微分会放大噪声尤其在有测量噪声的模型中会导致控制信号毛刺非常明显。我的做法是不在控制器中微分 r而是直接从整车模型的积分环节前取 r_dot 真值。由于这是仿真模型所有状态都是可观测的根本不需要数值微分。这个“直接取积分器前真值”的技巧是我在实际开发中被反复折磨之后才总结出来的。最初我尝试对 r 做微分横摆角速度控制量抖得没法看后来改成从模型内部直接引出 r_dot 信号控制器的计算量减半抖动问题也缓解了大半。4.5 求解器选择与仿真步长设置Simulink求解器选择对滑模控制仿真影响极大。默认的变步长求解器 ode45 在通常的线性系统中表现很好但在八自由度车辆模型加滑模控制这个组合下可能会出现一个奇怪的现象仿真速度非常慢或者结果不收敛。原因是滑模控制中含有切换函数系统动力学响应中存在快速变化的成分变步长求解器会为了满足误差容限而不断缩小步长导致仿真时间急剧增加。我的做法是先用变步长 ode45 做一次小时间范围的验证确认逻辑无误后切换为固定步长求解器步长设置 0.0005s 到 0.001s 之间。固定步长能确保切换控制在每个采样周期内都被一致地计算结果更加平滑。固定步长求解器我这里推荐使用 ode4四阶龙格库塔它在精度和计算效率之间的平衡比较好。ode1欧拉虽然快但数值阻尼较大会导致横摆角速度响应偏钝ode4 则没有这个问题。5. 仿真结果分析滑模控制与无后轮转向的对比5.1 阶跃输入下的响应对比我在 80 km/h 工况下给了一个 3 度的前轮阶跃转角对比了三种配置无后轮转向传统前轮转向、后轮固定比例转向、后轮滑模控制转向。三者的横摆角速度响应差异非常明显。无后轮转向时横摆角速度从 0 开始缓慢爬升大约 0.45 秒到达稳态值 0.28 rad/s超调量约为 12%。后轮固定比例转向按前后轮比例 1:0.2 反相转向的稳态值更小但响应更加迟钝原因是固定比例后轮转角在低速和高速下都无法自适应调整。滑模控制则展示了更好的综合性能横摆角速度上升时间缩短到约 0.2 秒稳态跟踪误差小于 2%超调量几乎为零。这个对比充分说明四轮转向系统中后轮转角不是随便给一个比例就有用的必须根据车辆实时状态动态调节。固定比例转向在特定车速和特定转角下有效但车速一变就失效这恰恰是滑模控制这类自适应算法发挥价值的地方。5.2 双移线工况下的稳定性验证阶跃响应只能验证控制器的基本跟踪能力真实场景中更具挑战性的是双移线工况——模拟高速变道超车再变回原车道的驾驶行为。我按照 ISO 3888-1 标准设置了双移线路径在 100 km/h 车速下进行仿真。无后轮转向情况下车辆横摆角速度在两次换道的衔接处出现了明显的相位滞后峰值横摆角速度比期望值高出 35%质心侧偏角达到了危险的 4.8 度。而滑模控制下横摆角速度对参考值的跟踪非常紧峰值误差被控制在 10% 以内质心侧偏角控制在 2 度以内。值得强调的是这个工况下控制器的切换动作非常频繁后轮转角在 ±2 度范围内快速调整但由于边界层饱和函数的存在整个控制信号没有出现高频抖振。如果这里用的是理想符号函数控制信号大概率会剧烈振荡需要特别关注。5.3 控制参数敏感性分析我还做了一个敏感性分析把滑模控制里的三个关键参数——指数趋近系数 k、切换增益 ε、边界层厚度 Φ 分别做 ±20% 变化观察控制效果的变化幅度。结果显示影响最大的是切换增益 ε它与跟踪误差关系最密切ε 过小时后轮转角幅度不足横摆角速度跟踪会出现稳态偏差影响第二的是边界层厚度 ΦΦ 过大时控制精度下降Φ 过小时抖振又开始出现影响最小的是指数趋近系数 k它在瞬态段有作用但稳态段影响有限。如果读者想快速得到一组“不怎么出错的初始参数”我的经验范围是k 取 10~20ε 取 3~8Φ 取 0.01~0.05。以此为初值再根据具体车型参数和工作点进行微调通常能较快收敛到理想状态。6. 搭建与调试过程的踩坑记录6.1 代数环导致仿真卡死前面提到了代数环问题这里我要专门展开说说因为这个坑实在太典型了。我第一次在Simulink里把整车模型和控制器连起来时仿真直接报错“Simulink cannot solve the algebraic loop”整个人是懵的。排查思路是这样的先断开控制器输出到整车模型的反馈路径发现单独跑整车模型正常再单独跑控制器也正常一连起来就报错。这时我才意识到问题出在控制器的输入信号和整车模型的输出信号之间存在隐式依赖关系。解决方法我在前文已经提过在侧偏角计算通道上添加一个低通滤波器。但要补充的是滤波器的截止频率不能太低否则会引入额外相位滞后改变系统动态特性。我的经验是截止频率设为控制带宽的 3~5 倍在Simulink直接选用 Transfer Fcn 模块时间为 0.005s 的一阶惯性环节即可。这样既打破了代数环又不会明显影响控制性能。6.2 量纲错误一个低级但致命的失误调试过程中我犯过一个特别蠢的错误整车方程里所有参数都用国际单位制但轮胎魔术公式标定参数是从某篇论文里直接搬来的论文用的是公里每小时km/h和度degree结果仿真出来横摆角速度的量级完全不对车辆开一会就“飞”出去了。排查了很久才发现是魔术公式里的车速没转换成 m/s轮胎侧偏角里的角度没换算成弧度。这类问题做仿真时很容易被忽略因为模型图上每一行看起来都“很合理”。从此以后我习惯把所有模型的输入输出统一写成带单位注释的信号并且做一次单位一致性检查。建议大家在搭建模型时就顺手在信号标签里写上单位后面省下来的排查时间远远大于标注时的那点功夫。6.3 滑模面到达时间的调试技巧滑模控制有个性能指标叫“到达时间”也就是系统状态从初始点到滑模面的时间。初始状态离滑模面较远时到达时间受指数趋近系数 k 的影响比较大。如果调试中发现到达时间过长最直接的方法是调大 k。但 k 调大会带来另一个问题控制量在初始阶段的饱和。因为车辆的硬件层面对后轮转向角有物理限制通常 ±5 度到 ±10 度如果 k 太大控制器计算出的后轮转角可能远超实际限幅导致执行器长时间处于饱和状态。我的建议是在控制器输出端接入一个 Saturation 模块来模拟物理限幅同时调整 k让控制律在实际限幅范围内工作。这种做法既贴近工程实际又能在仿真早期暴露控制量过大的问题。6.4 仿真速度优化八自由度模型加滑模控制的仿真在变步长求解器下非常慢一次 20 秒的仿真可能要跑几分钟到十几分钟。做参数扫描时需要跑几十次时间成本变得不可接受。我的优化手段有三个。第一把求解器从变步长改为固定步长步长 0.001s仿真速度提升约 5 到 8 倍。第二把 MATLAB Function 模块改成内置基本运算模块连接减少解释执行开销。第三如果模型过大可以开启 Simulink 的快速加速模式Rapid Accelerator它会把模型编译成原生代码运行速度又上一个台阶。这几个手段组合使用后同样的 20 秒仿真从十几分钟压缩到了 30 秒以内参数扫描的可行性大大提高。7. 对结果的一些个人判断与进一步扩展思路整套仿真模型跑通之后我认为四轮转向系统的横摆角速度控制真正的难点其实不在控制器算法本身而在对被控对象建模的精细度。滑模控制作为控制律设计方法数学推导是成熟的但前提是模型给出的各自由度响应基本正确。如果模型本身少了侧倾自由度或者用了过于简化的线性轮胎模型再好的滑模控制器也只是在一个“假对象”上做无用功。八自由度模型加滑模控制这个组合在仿真的深度和复杂度之间找到了一个不错的平衡点比二自由度模型更能反映车辆真实动力学又没有到二十几自由度模型中参数标定那样繁重的程度。对于车辆工程专业的学生来说用这个组合完成毕业设计既能体现建模能力又能展示控制算法设计水平对于企业预研项目这套模型也可以作为后续硬件在环测试的软件基础。后续如果继续做我认为有两个方向值得探索。第一个是考虑轮胎的非线性侧偏特性随着路面附着系数的实时变化在滑模控制中引入路面附着系数估计器让控制器在冰面、雨天、干燥路面之间自动适应。第二个方向是把后轮转向控制与直接横摆力矩控制结合——后轮转向负责中高速域DYC利用四个轮子的驱动/制动力差产生横摆力矩负责低速域和极限工况两者通过控制分配策略协调这已经是目前底盘域控制器的主流发展方向了。如果大家在实际仿真中遇到了参数调不准、模型发散或控制量饱和之类的问题欢迎针对具体情况在评论区聊。毕竟四轮转向仿真这个东西只有自己亲手把模型搭起来、把控制器跑通才能真正体会里面那些微妙之处。
阅读完成 · 觉得有帮助?
咨询建站