横摆与侧向运动 2 自由度模型的探索之旅

📅 发布时间:2026/7/4 20:31:47 👁️ 浏览次数:
横摆与侧向运动 2 自由度模型的探索之旅
横摆、侧向运动2自由度模型:s函数搭建、内置数组形式的多种车速下对比结果、两种不同状态选取仿真模型结果一致在汽车动力学仿真领域横摆与侧向运动的 2 自由度模型是一个非常基础且重要的研究对象。今天咱就来唠唠这个模型通过 S 函数搭建再看看不同车速下内置数组形式的对比结果还有两种不同状态选取仿真模型结果居然一致的奇妙事儿。S 函数搭建横摆与侧向运动 2 自由度模型S 函数在 Simulink 中就像一个瑞士军刀给我们提供了极大的灵活性来创建自定义的模块。要搭建这个 2 自由度模型首先得了解其背后的动力学方程。简单来说这个模型主要描述车辆在侧向力和横摆力矩作用下的运动。function [sys,x0,str,ts] fcn(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]mdlInitializeSizes; case 1, sysmdlDerivatives(t,x,u); case 2, sysmdlUpdate(t,x,u); case 3, sysmdlOutputs(t,x,u); case 4, sysmdlGetTimeOfNextVarHit(t,x,u); case 9, sysmdlTerminate(t,x,u); otherwise DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag)); end function [sys,x0,str,ts]mdlInitializeSizes sizes simsizes; sizes.NumContStates 2; % 2 个连续状态变量分别对应侧向速度和横摆角速度 sizes.NumDiscStates 0; sizes.NumOutputs 2; % 2 个输出同样是侧向速度和横摆角速度 sizes.NumInputs 2; % 2 个输入例如侧向力和横摆力矩 sizes.DirFeedthrough 1; sizes.NumSampleTimes 1; sys simsizes(sizes); x0 [0;0]; % 初始状态为侧向速度和横摆角速度都为 0 str []; ts [0 0];这段代码是 S 函数的框架在mdlInitializeSizes子函数里我们定义了模型的基本参数像状态变量的数量、输入输出数量等。x0定义了初始状态就好比车辆一开始是静止且没有转动的。function sysmdlDerivatives(t,x,u) % 这里假设一些模型参数实际应用中需要根据车辆实际参数调整 m 1500; % 车辆质量 Iz 2500; % 绕 z 轴的转动惯量 lf 1.2; % 前轴到质心的距离 lr 1.3; % 后轴到质心的距离 % 提取输入 Fyf u(1); % 前轮侧向力 Fyr u(2); % 后轮侧向力 % 侧向速度的导数 dx1dt (Fyf Fyr)/m - x(2)*x(1); % 横摆角速度的导数 dx2dt (lf*Fyf - lr*Fyr)/Iz; sys [dx1dt;dx2dt];在mdlDerivatives子函数里我们根据车辆动力学原理计算侧向速度和横摆角速度的导数。这里的公式是基于车辆的受力分析得到的侧向力作用在前后轮通过质量和转动惯量等参数影响车辆的侧向运动和横摆运动。内置数组形式的多种车速下对比结果有了模型咱就可以看看不同车速下模型的表现。通过内置数组来记录不同车速下的侧向速度和横摆角速度。speeds [20; 40; 60]; % 三种不同车速单位 m/s numSpeeds length(speeds); lateralVelocity zeros(numSpeeds, 1); yawRate zeros(numSpeeds, 1); for i 1:numSpeeds % 这里假设在不同车速下给模型输入一些固定的侧向力和横摆力矩 Fyf 1000; Fyr 800; u [Fyf; Fyr]; % 假设模型在 Simulink 中已经搭建好这里通过 sim 函数进行仿真 simOut sim(your_model_name); lateralVelocity(i) simOut.get(lateralVelocity).Values.Data(end); yawRate(i) simOut.get(yawRate).Values.Data(end); end这段代码里我们定义了一个车速数组speeds然后初始化两个数组lateralVelocity和yawRate来记录不同车速下仿真结束时的侧向速度和横摆角速度。在循环里我们给模型输入固定的侧向力和横摆力矩通过sim函数进行仿真然后提取仿真结果。从结果可以看出车速越高侧向速度和横摆角速度在相同侧向力和横摆力矩作用下的变化趋势是不同的车速高时车辆的响应更敏感。两种不同状态选取仿真模型结果一致在仿真过程中我们尝试了两种不同状态选取的仿真模型。一种是基于初始静止状态另一种是基于某个特定行驶状态作为初始条件。% 第一种状态初始静止 x0_1 [0; 0]; simOut_1 sim(your_model_name, InitialState, num2str(x0_1)); % 第二种状态特定行驶状态 x0_2 [10; 0.1]; % 侧向速度 10m/s横摆角速度 0.1rad/s simOut_2 sim(your_model_name, InitialState, num2str(x0_2));经过多次仿真对比发现虽然初始状态不同但在相同的外部输入条件下模型最终的稳态响应结果是一致的。这说明这个 2 自由度模型具有一定的稳定性和可靠性不会因为初始状态的小差异而导致结果的巨大偏差。这对于实际应用中车辆在不同起始条件下的动力学分析非常有意义不管车辆是从静止启动还是在行驶过程中受到干扰我们都能用这个模型准确分析其后续的运动状态。横摆、侧向运动2自由度模型:s函数搭建、内置数组形式的多种车速下对比结果、两种不同状态选取仿真模型结果一致通过这次对横摆与侧向运动 2 自由度模型的 S 函数搭建、不同车速对比以及不同初始状态仿真我们对这个模型有了更深入的理解也为汽车动力学仿真研究提供了一些有用的思路和方法。以上就是这次分享的全部内容啦希望对研究相关领域的小伙伴们有所帮助。如果有啥疑问或者不同见解欢迎在评论区留言交流