做线控转向算法验证最头疼的往往不是控制策略本身而是缺一个既真实又可重复的整车平台。我上一个预研项目就卡在这里样车改线控转向拆转向柱、装冗余电机、搭传感器一个季度都不一定下得来更别提在实车上反复试不同的控制参数有多折腾。后来被逼着换了一条务实路线——用 Carsim 提供整车动力学用 Simulink 承载转向执行器与控制算法做联合仿真。跑通之后发现这个组合不仅能解决前期算法验证的燃眉之急还能把路感模拟、故障注入这些线控转向特有的问题一起覆盖掉。这篇文章把我从选型、接口配置、建模到调参踩坑的完整过程整理出来适合刚接触线控转向仿真、手里有 Carsim 和 MATLAB/Simulink 但还没形成完整思路的工程师和研究生。我会把为什么这么拆为什么这么配讲透尽量少放空话多放可以直接跟着做的内容。1. 选型的底层逻辑为什么线控转向仿真必须走联合仿真路线1.1 线控转向与传统转向仿真模型的根本差异传统转向系统的仿真在 Carsim 里几乎是开箱即用的方向盘通过转向柱、转向器、横拉杆连接到前轮Carsim 内部自带的齿轮齿条模型已经把机械连接和助力特性建好了你只需要调参数。但线控转向不一样机械连接被切断方向盘到前轮之间只剩信号线。前轮转角由执行电机驱动方向盘上的手感则由一个专门的路感电机模拟产生。这意味着转向系统这个原本藏在整车里的固定结构变成了一个必须独立建模、独立控制的子系统。这个差异带来两个直接影响第一Carsim 的内置转向系统模型对你没有意义了因为你根本没有那条机械路径第二转向系统的核心功能——目标转角跟随、路感反馈、故障容错——全部转移到了控制算法侧。算法侧的建模和验证Simulink 显然是更合适的工具。所以联合仿真不是锦上添花而是线控转向开发流程里的必然选项。1.2 Carsim 与 Simulink 各自擅长什么以及为什么缺一不可坦白说如果只用 Carsim你也能做一部分线控转向仿真。比如直接把外部前轮转角作为输入给到车辆模型整车响应照样能算出来。但这样做有一个致命缺陷它跳过了转向执行器本身。你无法验证电机响应是否跟得上目标转角、齿条力变化会不会让执行器饱和、路感电机输出的力矩是否让驾驶员感到真实。这些恰恰是线控转向开发里最需要被验证的东西。反过来如果只靠 Simulink整车模型就得自己搭。十四自由度整车模型不是不能搭但轮胎模型、悬架KC特性、侧偏刚度的标定难度极高仿真结果的工程可信度存疑。Carsim 的价值在于它在整车动力学这个领域已经积累了大量的验证数据轮胎、悬架、车身侧偏特性都相对可靠。所以最合理的方式就是分工Carsim 负责车Simulink 负责转向系统和控制策略。这个分工一旦定下来后面所有的接口设计和建模思路都围绕它展开。2. 模型分工哪些模块留在 Carsim哪些必须在 Simulink 里重建2.1 转向管柱断开后Carsim 内部还需要保留什么在联合仿真模型里第一步要做的是明确 Carsim 内部还需要保留哪些转向相关的机械结构。我的建议是保留到转向器齿条为止即小齿轮—齿条—横拉杆—转向节这一段的运动学关系继续由 Carsim 处理因为这部分与悬架、轮胎的耦合关系很紧密自己另建反而容易出错。方向盘、转向柱、助力电机这些全部去掉用 Simulink 里的执行器和路感模型替代。这样分配的好处是边界清晰Carsim 里依然有真实的齿条位移和前轮转角之间的关系Simulink 里的执行器模型只需要输出齿条力或者齿条位移给 CarsimCarsim 把整车的回正力矩、齿条力、前轮侧偏角这些信息反馈回来。后续如果要做硬件在环从这种边界切换到真实转向执行器也比较自然。我之前见过有人图省事在 Carsim 里把转向系统整个关掉直接输入前轮转角结果后期想加执行器动态时整个模型返工成本反而更高。2.2 信号接口清单与单位约定接口信号定义不当是联合仿真最常见的坑源之一。我在项目初期专门建了一张信号表强制约定每个信号的方向、单位、范围后来排查问题省了大力气。核心信号大致如下信号名称方向单位说明车速 VxCarsim → Simulinkkm/h 或 m/s必须统一建议用 m/s横摆角速度Carsim → Simulinkdeg/s 或 rad/s控制效果评价的核心指标侧向加速度Carsim → Simulinkm/s²用于路感/稳定控制齿条力Carsim → SimulinkN路感模拟的主要输入前轮回正力矩Carsim → SimulinkN·m可选用于路感补偿目标齿条力/齿条位移Simulink → CarsimN / mm取决于接口方式前轮转角外部输入Simulink → Carsimdeg只在前轮转角直驱模式下使用单位问题看起来不起眼但它一旦出错表现往往是控制参数怎么调都没用。比如方向盘转角你按 rad 算了Carsim 接口里却是 deg同一个信号在两端差 57.3 倍那整个转角跟随必然是错的。所以建议在接口层强制做一次单位转换并加饱和度保护别把脏数据直接送进控制器。2.3 两种输入方式的取舍前轮转角直接输入与齿条力闭环输入Carsim 和 Simulink 之间的转向接口有两种常见做法我在项目里都试过各有利弊取决于你当前要验证什么。第一种是前轮转角直接输入。这个方案最省事Simulink 里的控制器算好目标前轮转角直接作为外部输入给 CarsimCarsim 里的转向机构被旁路掉。它的优点是模型简单、运行稳定适合验证上层控制策略比如可变转向比、稳定性控制这类功能。缺点是执行器的动态特性被忽略了电机迟滞、减速机构摩擦都不存在验证结果偏乐观。第二种是齿条力闭环输入。Simulink 里的执行器电机模型输出小齿轮驱动力矩通过减速机构和齿轮齿条关系换算成齿条力作用到 Carsim 的转向系统上Carsim 把实际的齿条位移和齿条反馈力送回 Simulink形成闭环。这个方案更接近真实硬件执行器的响应特性、饱和特性都暴露在仿真里但建模复杂度明显提高而且对接口步长和数值稳定性更敏感。我的建议是分阶段采用先做转角直驱把控制策略和路感算法跑通再把执行器模型接进去做齿条力闭环。一步到位容易把问题搅在一起出了问题都分不清是执行器模型的问题还是控制策略的问题。3. 接口搭建从端口配置到步长匹配的整个落地过程3.1 版本兼容性第一个隐藏门槛联合仿真踩的第一个坑往往不在模型本身而在软件版本匹配。Carsim 生成 Simulink 接口模型时依赖 MATLAB 版本和编译器环境版本不对S-Function 编译阶段就会报错。我当时的搭配是 Carsim 2019 和 MATLAB R2019b整体还算顺利后续换到新的 MATLAB 版本时还专门重新装了一次编译器才通过。这里给几条实操建议先定 Carsim 版本再定 MATLAB 版本去查官方兼容表全程使用 64 位环境Simulink 的模型语言建议用 C不要用 C编译时少很多麻烦。很多联合仿真跑不起来其实不是模型问题而是接口模型压根没编译成功。这一关过了后面才谈得上调试。3.2 从 Carsim 生成接口模型到接入 Simulink 的完整步骤Carsim 与 Simulink 联合仿真的搭建流程归纳起来就是先在 Carsim 里设置好车和工况再导出接口模型最后在 Simulink 里连线。具体我建议按下面几步走打开 Carsim选择车型、道路和驾驶工况。前期验证我一般用双移线或正弦扫频这两个工况对转向响应考核比较充分。在 Run Control 页面里选择 Simulink 模式配置输入输出端口。输入端口选择外部前轮转角或齿条力输出端口勾选你需要反馈的信号。生成 Carsim 的 Simulink 接口模型文件。这一步会生成一个包含 S-Function 或独立子系统的模型文件Carsim 的整车子系统会被封装在里面。在 Simulink 中打开这个接口模型把你自己的控制器和执行器模型作为外部模块接入形成完整闭环。运行前先做一次接口烟雾测试不接控制器直接给 Carsim 一个固定转角输入确认车辆响应正常再接入自己的模型。在模型连接时注意把 Carsim 生成的子系统用model reference或封装的 Subsystem 包住避免内部信号直接暴露在主模型里被误改。我之前因为直接在接口子系统的线路上动了手脚结果 Carsim 反馈信号被改得乱七八糟排查了很久才发现是连线被插到了错误的位置。3.3 求解器类型、固定步长与通信步长的匹配策略这一步是整个接口搭建里最影响仿真稳定性的环节。Carsim 内部模型是离散化的Simulink 侧如果用变步长求解器在 Carsim 与 Simulink 交换数据的边界上会出现插值误差严重时表现为高频振荡。我实测下来的可靠配置Simulink 侧选择固定步长求解器步长取 1 ms求解器用 ode4四阶龙格库塔。通信步长要单独说。Carsim 和 Simulink 之间的数据交换频率由通信步长决定它和 Simulink 的计算步长可以不一致但不建议差太多。我一般保持两者一致即 1 ms 的计算步长对应 1 ms 的通信步长。如果通信步长过大比如 10 ms车辆横摆响应这种高频信息会被明显低估转角跟随效果看起来还行但横摆角速度曲线会变得很毛糙。仿真时长方面双移线工况跑 20 秒1 ms 步长下计算量完全可接受。还要注意关闭 Simulink 的零交叉检测。联合仿真模型中接口信号往往存在跳变零交叉检测会在这些位置反复缩短步长导致仿真速度急剧下降甚至卡死。固定步长模式下这个选项其实没必要开建议直接关掉。3.4 初始状态同步的几种处理方式联合仿真里另一个容易忽略的问题是两个模型初始状态不一致。最典型的情况是 Carsim 初始车速设了 30 km/h但 Simulink 侧控制器的初始输出还是 0仿真一开始就会出现一个很大的瞬态冲击。处理方式有三种我按推荐程度排序第一种控制器做软启动。仿真开始的前 0.1 秒内控制输出从 0 开始斜坡过渡不让前馈和反馈在瞬间施加满值。这个最简单也能覆盖大多数情况。第二种强制对齐初始状态。在 Simulink 里读 Carsim 的初始车速和初始转角把这些值作为控制器积分器和前馈查表的初始条件保证第一拍输出就是合理的。这个方法更彻底但需要你在模型里写初始化的脚本。第三种干脆把仿真起始条件设为零状态。Carsim 里车从静止开始工况再加速这样初始冲击最小但会牺牲一部分高速工况的验证效率。我在前期验证时常用这种方式等基本功能没问题了再换成直接从高速开始跑。4. 执行器与路感模型在 Simulink 侧的建模实现4.1 转向执行器电机的简化建模思路线控转向的执行器本质上是一个伺服电机加减速机构再驱动齿条的系统。在 Simulink 里建模时不需要把电机内部的磁链、电流斩波全部建出来用一个简化模型就够用电流环等效为一阶惯性环节机械运动方程用转动惯量、阻尼、驱动力矩和负载力矩来描述。我用的模型大概是这样电机输出力矩Tm经过减速比n放大后驱动小齿轮小齿轮带动齿条产生位移。动力学方程可以写成J_eq * theta_dot_dot Tm - Tf - T_load其中J_eq是折算到电机轴上的等效转动惯量Tf包括库仑摩擦和粘性阻尼T_load是齿条力折算回来的负载。齿条位移与电机转角之间用齿轮半径r_p换算x_r r_p * theta_m。模型参数可以参考下面这个量级峰值扭矩 2 N·m减速比 16小齿轮半径 8 mm等效转动惯量 0.002 kg·m²粘性阻尼系数 0.01 N·m·s/rad。这个量级下执行器响应带宽大概在 10 Hz 左右基本符合线控转向的实际需求。初始建模没必要追求精确先把量级建对后续拿实验数据再标定。电机模型的输出需要加饱和限制和变化率限制。饱和限制对应电机的峰值扭矩变化率限制对应电气系统对电流上升速度的约束。不加这两个限制仿真里会出现非常不真实的阶跃扭矩控制器也会提出一些现实中根本做不到的激进需求。4.2 齿条力估算与路感反馈环路的搭建线控转向最需要用心建模的部分其实是路感。驾驶员手感好不好直接影响对车辆的操控信心。路感的源头是齿条力也就是前轮回正力矩、轮胎与地面的侧向力、转向系统摩擦力在齿条上的综合表现。这部分力由 Carsim 反馈给 SimulinkSimulink 里的路感控制器把它换算成路感电机的目标力矩。路感目标力矩的计算公式可以写成T_hand K_force * F_rack * n B_damp * omega_m J_comp * alpha_m。其中K_force是力感增益n是减速比B_damp是阻尼补偿J_comp是惯量补偿。加阻尼和惯量补偿的目的是让方向盘在快速回正的时候不会因为缺少机械摩擦而显得过于轻飘。真正的线控转向系统里这部分补偿算法往往需要大量的主观评价调校仿真阶段先把结构搭好参数后续标定。路感环路在 Simulink 里的实现并不复杂核心是两层第一层根据齿条力计算目标力矩第二层用一个力矩闭环控制去驱动路感电机模型。力矩闭环的带宽可以做得比较高因为路感电机只驱动方向盘惯量很小。我建议用 PI 加前馈前馈量直接等于目标力矩PI 负责消除误差。4.3 转向控制策略角度跟踪与阻尼补偿前轮转角跟随是整个线控转向系统的主控制回路。目标转角由方向盘转角乘以可变的转向比得到。低速时转向比可以小一些减少停车入库的操作圈数高速时转向比放大提升稳定性。这个变化逻辑可以先做成一个查表表的值根据车速查出来。转角控制器的结构我用了经典的 PID 加前馈。前馈量根据齿条力和执行器模型反算得到大致思路是先估计克服齿条力需要的电机力矩再把它换算成电流指令。PID 负责处理模型误差和外部扰动。参数整定顺序建议是先调前馈再调 P最后加 I 和 D。D 项在转向系统里要非常小心因为齿条力信号本身有噪声D 项增益过大会让电机指令出现高频抖动。执行器的阻尼补偿也在这个环节一起做。线控转向取消了机械连接相当于没有了固有摩擦如果控制策略里不加阻尼转向会过于灵敏驾驶员会觉得发飘。阻尼补偿本质上就是在控制指令里叠加一个与电机转速成比例的负力矩让转向速度越快阻力越大。这个量要适度加多了会显得转向迟钝。4.4 故障注入和传感器噪声预留接口线控转向相比传统转向有一个不能回避的话题就是容错。仿真阶段如果不预留故障注入接口后期做功能安全验证的时候只能重新改模型非常痛苦。我在 Simulink 模型里专门留了三路故障注入开关转角传感器增益误差、转角传感器偏置故障、电机力矩输出丢失。故障注入的实现方式很简单就是在信号通路上加一个可切换的故障模块。比如转角传感器故障用一个乘法器模拟 1.2 倍的增益误差再用一个 Switch 模块在正常与故障之间切换。故障时刻用一个阶跃信号触发。这样每次仿真可以在不同时刻注入不同故障跑容错控制算法的场景就非常方便。传感器噪声也是一样。在反馈回路上加一个带限白噪声模块幅值按照实际传感器的水平来设转角传感器噪声一般在 0.1° 到 0.2° 这个量级。加入噪声之后再调控制器得到的参数在真实硬件上才更可能直接可用。5. 联合仿真实测中的三个典型问题与排查记录5.1 现象一起步阶段前轮转角高频振荡整车发散第一次跑通联合仿真时车速刚起步前轮转角就出现了明显的高频振荡随之横摆角速度发散整个模型在几秒内崩掉。第一反应是控制器参数问题把 PID 增益全部调低后振荡依然存在这就说明问题不在控制参数。我回到模型结构上去查发现 Simulink 侧用的是变步长求解器而 Carsim 接口是固定步长。变步长求解器在信号突变处会缩小步长但 Carsim 这个外部系统并不会跟随这个步长变化两者在通信边界上的插值结果就产生了毛刺。毛刺进入转角控制环路后被后续微分环节放大表现出来就是高频振荡。解决方式很简单Simulink 改成固定步长1 ms关闭零交叉检测然后重新跑。振荡消失整车响应也正常了。这个问题的根源不在控制器而在仿真环境配置如果一开始就统一步长策略可以省掉整整一天的排查时间。5.2 现象二转角跟随存在固定比例静差有一次跑正弦扫频工况我盯着前轮跟随曲线看总觉得目标转角和实际转角之间存在一个固定的比例偏差转角越大偏差越大像是够不着。当时怀疑是执行器模型饱和设置太保守结果看了模型里根本没有触发饱和。后来逐段查信号发现目标转角在 Simulink 里是方向盘转角乘以转向比方向盘的输入信号单位是 deg而 Carsim 反馈回来的前轮转角也是 deg。问题出在我自己想在内部统一控制量纲把 Carsim 反馈的转角先用 Gain 模块转成了 rad但目标转角那边忘了同步转于是控制器内部的期望和反馈差了一个 57.3 倍的比例。这个看起来是低级错误但联合仿真里单位混用确实很常见。修复之后我干脆在接口层做了一次强制约定所有进入控制器的角度信号一律是 rad所有从控制器出来进入 Carsim 的角度信号一律转回 deg。并在模型里加了单位注释后续再没有出过这类问题。5.3 现象三仿真起步瞬间横摆角速度出现负尖峰这个问题排查得最有意思。Carsim 初始车速设的是 30 km/h车也没有转向前提但仿真一开始横摆角速度先出现一个负的尖峰然后才回到正常的零值附近。看起来像是 Carsim 受到了一个瞬间的外部冲击。我先把执行器和控制器全部从环路里摘掉只给 Carsim 一个恒定零转角输入尖峰依然存在。这就说明问题不在控制器而在 Carsim 的初始条件与 Simulink 模型之间的状态对齐上。后来查初始化脚本发现 Simulink 模型里有一个前馈查表的输出在最初几拍是 0而 Carsim 内部此时需要克服一个初始转向系统内应力两者的差值形成冲击。解决方法是双管齐下在 Carsim 端把初始转向系统内应力清零同时把控制器的前馈项做成软启动前 0.1 秒内从前馈值 0 斜坡过渡到正常值。改完之后起步尖峰彻底消失。后来凡是遇到仿真起步异常我都会先检查初始状态对齐这比盲目调参数高效得多。5.4 参数整定顺序与效果判据参数整定这一步我摸索出比较稳定的顺序先整定执行器电流环如果有再整定路感力矩环最后整定转角跟随环。转角环的 P 项从一个小值慢慢往上加观察目标转角与实际转角的阶跃响应I 项主要消除稳态误差增益要比 P 小一个数量级D 项能不加就不加实在需要再加。控制指标验证工况我的验收参考值稳态转角跟随误差定转角保持≤ 0.5°瞬态转角跟随误差双移线工况≤ 2°横摆角速度跟踪正弦扫频无明显相位滞后发散路感力矩平滑性回正工况无高频颤振这套指标是工程上的常用参考具体数值可以根据项目和主观评价标准调整。参数整定完毕之后我建议把同一个工况重复跑三遍确认仿真的可重复性避免因为接口时序问题带来结果漂移。毕竟仿真的价值在于可信如果结果本身不稳定后面的算法优化无从谈起。个人体会是线控转向联合仿真模型就像一套骨架骨架搭对了后面加硬件在环、加容错算法、加驾驶员模型都只是往骨架上添肌肉。我后来在这个模型上陆续加了执行器卡死故障注入、传感器漂移场景甚至接了一个简单的人驾模型来做主观路感评价的前期摸底。真到了硬件在环阶段这套 Simulink 侧的执行器和路感模型直接复用改动量比我预想的小得多。如果一开始就把接口边界定义清楚后面每一步都会顺很多。
阅读完成 · 觉得有帮助?