【天棚半主动悬架模型】 采用天棚阻尼控制的1/4半主动悬架模型以车身垂向加速度为控制目标输入为B级随机路面输出为车身垂向加速度、轮胎动载荷、悬架动挠度等平顺性评价指标并计算了各个参数的均方根值。 内容包括模型所有源文件说明文档和参考资料路面生成是基础中的基础B级路面用白噪声生成。代码里这个road_profile函数是关键def road_profile(v, t, road_levelB): n0 0.1 # 参考空间频率 G0 {A:16e-6, B:64e-6, C:256e-6}[road_level] delta_t t[1] - t[0] w 2 * np.pi * n0 * v phase np.random.rand() * 2 * np.pi return np.sqrt(2 * G0 * v * n0) * np.sin(w * t phase)这段代码把路面等级转换成对应的路面不平度系数用正弦函数模拟不同车速下的路面激励。注意那个random相位角的处理让每次仿真结果都有细微差异避免过拟合。悬架模型的核心是状态方程。看这个微分方程组实现function dx suspension_model(t, x, u) % 参数定义 ms 320; % 簧上质量 mu 45; % 簧下质量 ks 27000; kt 250000; c0 1500; % 被动阻尼 % 天棚控制力计算 F_c -0.8 * x(2); % 速度反馈 dx zeros(4,1); dx(1) x(2); dx(2) (-ks*(x(1)-x(3)) - c0*(x(2)-x(4)) F_c)/ms; dx(3) x(4); dx(4) (ks*(x(1)-x(3)) c0*(x(2)-x(4)) - kt*x(3) - F_c)/mu; end这里有个骚操作——直接把车身速度作为控制量输入系数0.8是调参调出来的黄金值。注意看第四行方程里的F_c符号这个正负号直接关系到系统稳定性之前在这里栽过跟头。仿真结果得看时域对比。用subplot画三指标对比fig, (ax1, ax2, ax3) plt.subplots(3,1) ax1.plot(t, passive_acc, --, label被动) ax1.plot(t, active_acc, -, linewidth1.5, label半主动) ax1.set_ylabel(加速度(m/s²)) # 类似处理动载荷和动挠度... plt.tight_layout()这种可视化方式可以直接看出控制效果。重点要关注的是加速度曲线的峰值削减情况半主动的振荡衰减明显更快。【天棚半主动悬架模型】 采用天棚阻尼控制的1/4半主动悬架模型以车身垂向加速度为控制目标输入为B级随机路面输出为车身垂向加速度、轮胎动载荷、悬架动挠度等平顺性评价指标并计算了各个参数的均方根值。 内容包括模型所有源文件说明文档和参考资料均方根值计算千万别直接用mean得先平方再平均开根号rms_acc sqrt(mean(acc.^2)); rms_tdl sqrt(mean(tdl.^2)); rms_susp sqrt(mean(susp_travel.^2));有个坑是数据要去掉前20%的瞬态过程不然计算结果会被初始震荡带偏。在代码里加个t0.2*T_total的条件筛选数据更准。模型文件结构建议这么组织/SemiActiveSuspension ├── /src │ ├── road_generator.m # 路面生成 │ ├── suspension_ode.m # 微分方程 │ └── post_process.py # 后处理 ├── /docs │ └── tuning_guide.pdf # 参数整定手册 └── run_simulation.m # 主入口文件仿真跑完记得保存.mat数据文件避免重复计算。用parfor循环做参数扫描能节省大量时间特别是调天棚系数的时候。最后说下调参经验簧上质量变化±10%时控制效果衰减不明显但簧下质量变化超过5%就得重新整定参数。路面等级从B变到C级时建议把天棚系数从0.8降到0.6左右防止作动器饱和。完整代码和实验数据已经打包需要的小伙伴可以戳这里自取github.com/xxx/semi-active-suspension里面有个调参小工具特别适合刚入门的同学把玩。
半主动悬架搞起来比想象中有意思。最近在玩天棚阻尼控制的1/4车模型,这玩意儿对车身垂向加速度的控制效果确实有点东西。咱们直接上干货,先说说模型怎么搭的
【天棚半主动悬架模型】 采用天棚阻尼控制的1/4半主动悬架模型以车身垂向加速度为控制目标输入为B级随机路面输出为车身垂向加速度、轮胎动载荷、悬架动挠度等平顺性评价指标并计算了各个参数的均方根值。 内容包括模型所有源文件说明文档和参考资料路面生成是基础中的基础B级路面用白噪声生成。代码里这个road_profile函数是关键def road_profile(v, t, road_levelB): n0 0.1 # 参考空间频率 G0 {A:16e-6, B:64e-6, C:256e-6}[road_level] delta_t t[1] - t[0] w 2 * np.pi * n0 * v phase np.random.rand() * 2 * np.pi return np.sqrt(2 * G0 * v * n0) * np.sin(w * t phase)这段代码把路面等级转换成对应的路面不平度系数用正弦函数模拟不同车速下的路面激励。注意那个random相位角的处理让每次仿真结果都有细微差异避免过拟合。悬架模型的核心是状态方程。看这个微分方程组实现function dx suspension_model(t, x, u) % 参数定义 ms 320; % 簧上质量 mu 45; % 簧下质量 ks 27000; kt 250000; c0 1500; % 被动阻尼 % 天棚控制力计算 F_c -0.8 * x(2); % 速度反馈 dx zeros(4,1); dx(1) x(2); dx(2) (-ks*(x(1)-x(3)) - c0*(x(2)-x(4)) F_c)/ms; dx(3) x(4); dx(4) (ks*(x(1)-x(3)) c0*(x(2)-x(4)) - kt*x(3) - F_c)/mu; end这里有个骚操作——直接把车身速度作为控制量输入系数0.8是调参调出来的黄金值。注意看第四行方程里的F_c符号这个正负号直接关系到系统稳定性之前在这里栽过跟头。仿真结果得看时域对比。用subplot画三指标对比fig, (ax1, ax2, ax3) plt.subplots(3,1) ax1.plot(t, passive_acc, --, label被动) ax1.plot(t, active_acc, -, linewidth1.5, label半主动) ax1.set_ylabel(加速度(m/s²)) # 类似处理动载荷和动挠度... plt.tight_layout()这种可视化方式可以直接看出控制效果。重点要关注的是加速度曲线的峰值削减情况半主动的振荡衰减明显更快。【天棚半主动悬架模型】 采用天棚阻尼控制的1/4半主动悬架模型以车身垂向加速度为控制目标输入为B级随机路面输出为车身垂向加速度、轮胎动载荷、悬架动挠度等平顺性评价指标并计算了各个参数的均方根值。 内容包括模型所有源文件说明文档和参考资料均方根值计算千万别直接用mean得先平方再平均开根号rms_acc sqrt(mean(acc.^2)); rms_tdl sqrt(mean(tdl.^2)); rms_susp sqrt(mean(susp_travel.^2));有个坑是数据要去掉前20%的瞬态过程不然计算结果会被初始震荡带偏。在代码里加个t0.2*T_total的条件筛选数据更准。模型文件结构建议这么组织/SemiActiveSuspension ├── /src │ ├── road_generator.m # 路面生成 │ ├── suspension_ode.m # 微分方程 │ └── post_process.py # 后处理 ├── /docs │ └── tuning_guide.pdf # 参数整定手册 └── run_simulation.m # 主入口文件仿真跑完记得保存.mat数据文件避免重复计算。用parfor循环做参数扫描能节省大量时间特别是调天棚系数的时候。最后说下调参经验簧上质量变化±10%时控制效果衰减不明显但簧下质量变化超过5%就得重新整定参数。路面等级从B变到C级时建议把天棚系数从0.8降到0.6左右防止作动器饱和。完整代码和实验数据已经打包需要的小伙伴可以戳这里自取github.com/xxx/semi-active-suspension里面有个调参小工具特别适合刚入门的同学把玩。