对企业网站的印象,国外网站建设素材库,做网站的代码难吗,平台网站建设需要什么技术悬架 悬架的定义#xff1a; 连接车轮与车身的**机构。支撑车身保持几何姿态**缓冲路面冲击传递车轮与路面间的力和力矩#xff0c;保证轮胎抓地力#xff0c;关乎操控稳定与安全 悬架设计的难点#xff1a;“舒适性”与“操控性”的权衡 舒适性#xff1a;需要“软”悬架…悬架悬架的定义连接车轮与车身的**机构。支撑车身保持几何姿态**缓冲路面冲击传递车轮与路面间的力和力矩保证轮胎抓地力关乎操控稳定与安全悬架设计的难点“舒适性”与“操控性”的权衡舒适性需要“软”悬架隔离路面振动操控性需要“硬”悬架减少车身侧倾、俯仰保持轮胎紧贴路面注释软悬架刚度低软悬架能够更好地吸收高频振动如路面接缝或不平引起的冲击。它通过降低共振频率减少车身振动对乘客的影响从而提升乘坐舒适性。然而过于柔软的悬架可能导致低频振动如长波路面的持续时间更长可能引起乘客的不适感。注释硬悬架能够更快地抑制振动减少车身的晃动但在处理高频振动时可能不够柔和导致更多的振动传递到车内影响舒适性。软悬架的共振频率较低能够更好地适应高频振动减少乘客感受到的振动强度。而硬悬架的共振频率较高可能与人体敏感的频率范围4~8Hz重叠导致不适感。共振频率是指当一个系统受到外界周期性力的作用时其固有频率与外界力的频率一致时所达到的频率。高频振动通常指的是频率较高的振动一般在几百赫兹以上。高频振动传递到车内时可能会产生尖锐的噪声影响车内环境的安静性。人体对高频振动的敏感度较低但过高的高频振动仍可能引起不适。低频振动指的是频率较低的振动通常在几十赫兹以下。低频振动对人体的影响更为显著尤其是对内脏和整体身体的晃动可能导致疲劳和不适。人体对低频振动特别敏感因此在汽车设计中减少低频振动是提升乘坐舒适性的关键。悬架的核心部件弹性元件弹簧作用支撑车身储存/释放能量决定悬架“软硬”基调关键参数刚度K – 刚度越大抵抗变形的能力越强车身姿态越稳但过滤小振动能力越差减震器作用消耗弹簧储存的能量抑制车身振荡。关键参数阻尼系数导向机构-连杆与摆臂作用决定车轮跳动的轨迹外倾角、前束角等变化规律关键状态量与性能指标簧载质量车身非簧载质量车轮、制动系统等悬架行程车轮与车身的相对位移。防止“打顶”撞到上限位块和“托底”撞到下限位块是控制的基本约束车身姿态俯仰角pitch、侧倾角roll、垂向加速度heave轮胎动载荷轮胎与地面间垂直方向的动态力悬架的分类**被动悬架**弹簧刚度K固定和减振器阻尼C固定的参数在车辆出厂后无法改变**半主动悬架**阻尼系数C可以实时主动调节但弹簧刚度K依然固定。系统不能向车身注入能量主流的技术方案是CDC连续阻尼控制减振器通过电磁阀改变油液通路孔径实现阻尼无级调节MR磁流变减振器通过改变磁场使内部的磁流变液粘度瞬间变化从而改变阻尼空气悬架使用空气弹簧内部是压缩空气替代传统的金属螺旋弹簧。通常需要与可调阻尼减振器如CDC结合使用。可调刚度通过充放气改变空气弹簧内的气压从而改变其等效刚度。气压高则硬气压低则软。可调车高通过整体充放气改变悬架行程的初始位置实现车身的升高或降低。**主动悬架**配备独立的力作动器如液压、电磁能向系统注入能量理论上能完全控制车身运动可以做到在刹车时主动抵抗“点头”转弯时主动抵抗“侧倾”过坎时主动抬起车轮抵消冲击。性能天花板是所有悬架中最高的。整车平顺性的7自由度模型车身的垂直heave、俯仰pitch、侧倾roll4个车轮有4个垂直度的自由度单质量车身微分振动方程公式m _ 2 d 2 z d t 2 c ( d z d t − d q d t ) k ( z − q ) 0 m\_{2} \frac{d^2 z}{dt^2} c \left( \frac{dz}{dt} - \frac{dq}{dt} \right) k(z - q) 0m_2dt2d2zc(dtdz−dtdq)k(z−q)0→m _ 2 d 2 z d t 2 c d z d t k z c d q d t k q m\_{2} \frac{d^2 z}{dt^2} c \frac{dz}{dt} kz c \frac{dq}{dt} kqm_2dt2d2zcdtdzkzcdtdqkqm _ 2 z ¨ c ( z ˙ − q ˙ ) k ( z − q ) 0 m\_2 \ddot{z} c(\dot{z} - \dot{q}) k(z - q) 0m_2z¨c(z˙−q˙)k(z−q)0→m _ 2 z ¨ c z ˙ k z c q ˙ k q m\_2 \ddot{z} c \dot{z} kz c \dot{q} kqm_2z¨cz˙kzcq˙kqm _ 2 m\_{2}m_2簧上质量Kg-由悬架支撑的车身部分的质量。在单质量模型中它代表分配到该悬架上的车身质量如1/4车身质量z zz车身垂直位移m-车身质量块相对于静止平衡位置的垂直位移绝对位移通常以向上为正方向c cc悬架阻尼系数(N·m/s)减振器的阻尼特性。阻尼越大振动衰减越快但过大会导致悬架变硬k kk悬架弹簧刚度(N/m)悬架弹簧的软硬程度。刚度越大产生单位变形所需的力越大悬架越“硬”q qq路面相对于理想平滑路面的垂直位移绝对位移。是系统的主要激励源通常以向上为正z ¨ \ddot{z}z¨车身加速度q ˙ \dot{q}q˙路面的相对速度示意图公式推导m _ 2 z ¨ m\_2 \ddot{z}m_2z¨质量 × 加速度 惯性力牛顿第二定律 Fma− k ( z − q ) -k(z-q)−k(z−q)弹簧力− c ( z − q ) -c(z-q)−c(z−q)阻尼力与相对速度有关举例子时间点1车轮刚要上凸起路面 q 开始上升车身 z 还没动z - q 变小 → 弹簧被压缩 → 弹簧力向上推车身dz/dt - dq/dt 为负路面向上比车身快→ 阻尼力向上时间点2车轮在凸起顶端路面 q 开始下降车身 z 被弹簧推着还在向上z - q 变大 → 弹簧被拉伸 → 弹簧力向下拉车身dz/dt - dq/dt 为正车身向上比路面快→ 阻尼力向下整个过程中弹簧和阻尼器共同作用消耗能量让车身振动尽快平息。代码模拟importnumpyasnpimportmatplotlib.pyplotasplt# 参数m300# kgk20000# N/mc2000# N·s/m# 时间设置dt0.001# 时间步长tnp.arange(0,5,dt)# 5秒# 路面激励一个简单的凸起qnp.zeros_like(t)q[(t1)(t1.2)]0.05*np.sin(np.pi*(t[(t1)(t1.2)]-1)/0.2)# 初始化znp.zeros_like(t)# 车身位移dznp.zeros_like(t)# 车身速度# 数值积分欧拉法foriinrange(1,len(t)):# 计算加速度ddz(-k*(z[i-1]-q[i-1])-c*(dz[i-1]-(q[i]-q[i-1])/dt))/m# 更新速度和位移dz[i]dz[i-1]ddz*dt z[i]z[i-1]dz[i]*dt# 绘图plt.figure(figsize(12,8))plt.subplot(3,1,1)plt.plot(t,q,label路面位移 q(t))plt.ylabel(位移 (m))plt.legend()plt.title(路面激励与车身响应)plt.subplot(3,1,2)plt.plot(t,z,label车身位移 z(t),colororange)plt.ylabel(位移 (m))plt.legend()plt.subplot(3,1,3)plt.plot(t,dz,label车身速度 dz/dt,colorgreen)plt.xlabel(时间 (s))plt.ylabel(速度 (m/s))plt.legend()plt.tight_layout()plt.show()双质量系统振动微分方程公式m _ 2 z ¨ _ 2 c ( z ˙ _ 2 − z ˙ _ 1 ) k ( z _ 2 − z _ 1 ) 0 m _ 1 z ¨ _ 1 c ( z ˙ _ 1 − z ˙ _ 2 ) k ( z _ 1 − z _ 2 ) k _ t ( z _ 1 − q ) 0 m\_2 \ddot{z}\_2 c(\dot{z}\_2 - \dot{z}\_1) k(z\_2 - z\_1) 0 \\ m\_1 \ddot{z}\_1 c(\dot{z}\_1 - \dot{z}\_2) k(z\_1 - z\_2) k\_t(z\_1 - q) 0m_2z¨_2c(z˙_2−z˙_1)k(z_2−z_1)0m_1z¨_1c(z˙_1−z˙_2)k(z_1−z_2)k_t(z_1−q)0公式矩阵化M Z ¨ C Z ˙ K Z F _ q \mathbf{M} \ddot{\mathbf{Z}} \mathbf{C} \dot{\mathbf{Z}} \mathbf{K} \mathbf{Z} \mathbf{F}\_qMZ¨CZ˙KZF_q位移向量KaTeX parse error: Undefined control sequence: \[ at position 14: \mathbf{Z} \̲[̲z\_2, z\_1\]^T质量矩阵M [ m _ 2 0 0 m _ 1 ] \mathbf{M} \begin{bmatrix} m\_2 0 \\ 0 m\_1 \end{bmatrix}M[m_200m_1]阻尼刚度C [ c − c − c c ] \mathbf{C} \begin{bmatrix} c -c \\ -c c \end{bmatrix}C[c−c−cc]刚度矩阵K [ k − k − k k k _ t ] \mathbf{K} \begin{bmatrix} k -k \\ -k k k\_t \end{bmatrix}K[k−k−kkk_t]输入向量F _ q [ 0 k _ t q ] \mathbf{F}\_q \begin{bmatrix} 0 \\ k\_t q \end{bmatrix}F_q[0k_tq]m _ 2 m\_2m_2簧上质量悬挂质量–包括车身、负载等由悬架支撑的质量z _ 2 z\_2z_2簧上质量的垂直位移绝对坐标向上为正m _ 1 m\_1m_1簧下质量非悬挂质量-- 包括车轮、车轴、制动盘等随车轮跳动的质量z _ 1 z\_1z_1簧下质量的垂直位移绝对坐标向上为正q qq路面不平度位移绝对坐标向上为正 是系统的输入激励c cc悬架阻尼系数(N·m/s)减振器的阻尼特性。阻尼越大振动衰减越快但过大会导致悬架变硬k kk悬架弹簧刚度(N/m)悬架弹簧的软硬程度。刚度越大产生单位变形所需的力越大悬架越“硬”k _ 1 k\_{1}k_1轮胎垂直刚度(N/m)示意图公式推导m _ 2 z ¨ _ 2 c ( z ˙ _ 2 − z ˙ _ 1 ) k ( z _ 2 − z _ 1 ) 0 m\_2 \ddot{z}\_2 c(\dot{z}\_2 - \dot{z}\_1) k(z\_2 - z\_1) 0m_2z¨_2c(z˙_2−z˙_1)k(z_2−z_1)0m _ 2 m\_2m_2受到的弹簧力− k ( z _ 2 − z _ 1 ) -k(z\_2 - z\_1)−k(z_2−z_1)m _ 2 m\_2m_2受到的阻尼力− c ( z ˙ _ 2 − z ˙ _ 1 ) -c(\dot{z}\_2 - \dot{z}\_1)−c(z˙_2−z˙_1)m _ 2 m\_2m_2的牛顿第二定律m _ 2 z ¨ m\_{2}\ddot{z}m_2z¨− k ( z _ 2 − z _ 1 ) − c ( z ˙ _ 2 − z ˙ _ 1 ) -k(z\_2 - z\_1)-c(\dot{z}\_2 - \dot{z}\_1)−k(z_2−z_1)−c(z˙_2−z˙_1)公式推导m _ 1 z ¨ _ 1 c ( z ˙ _ 1 − z ˙ _ 2 ) k ( z _ 1 − z _ 2 ) k _ t ( z _ 1 − q ) 0 m\_1 \ddot{z}\_1 c(\dot{z}\_1 - \dot{z}\_2) k(z\_1 - z\_2) k\_t(z\_1 - q) 0m_1z¨_1c(z˙_1−z˙_2)k(z_1−z_2)k_t(z_1−q)0m _ 1 m\_{1}m_1受到的弹簧力k ( z _ 2 − z _ 1 ) k(z\_2 - z\_1)k(z_2−z_1)m _ 1 m\_{1}m_1受到的弹簧力k ( z _ 1 − q ) k(z\_1 - q)k(z_1−q)m _ 1 m\_{1}m_1受到的阻尼力c ( z ˙ _ 2 − z ˙ _ 1 ) c(\dot{z}\_2 - \dot{z}\_1)c(z˙_2−z˙_1)注释z ˙ _ 2 z ˙ _ 1 \dot{z}\_2 \dot{z}\_1z˙_2z˙_1时m _ 1 m\_{1}m_1相对于m _ 2 m\_{2}m_2向下运动阻尼力向上m _ 1 m\_1m_1的牛顿第二定律m _ 1 z ¨ k ( z _ 2 − z _ 1 ) k ( z _ 1 − q ) c ( z ˙ _ 2 − z ˙ _ 1 ) m\_{1}\ddot{z}k(z\_2 - z\_1)k(z\_1 - q)c(\dot{z}\_2 - \dot{z}\_1)m_1z¨k(z_2−z_1)k(z_1−q)c(z˙_2−z˙_1)公式解析簧上控制簧上的加速度z _ 2 ¨ \ddot{z\_2}z_2¨提高舒适性 → 半主动悬架中调节c cc最小化z _ 2 ¨ \ddot{z\_2}z_2¨簧下最小化轮胎动载荷波动 → 半主动悬架中调节c cc最小化KaTeX parse error: Undefined control sequence: \* at position 7: k\_{t}\̲*̲var(z\_1 - q)约束∣ z _ 2 − z _ 1 ∣ ≤ 最大行程 |z\_2 - z\_1|≤最大行程∣z_2−z_1∣≤最大行程天棚算法以簧上质量速度z _ 2 ¨ \ddot{z\_2}z_2¨为反馈调节c cc使系统仿佛悬挂在“天空”一样极大提升舒适性地棚算法以簧上质量速度z _ 1 ¨ \ddot{z\_1}z_1¨为反馈优化轮胎接地性混合控制平衡舒适与操控MPC利用该模型预测未来状态求解最优阻尼力序列代码举例代码流程系统参数的定义计算系统的固有频率和阻尼比设置仿真时间、补偿与生成路面激励被动悬架计算初始化状态→计算相对位移与相对速度 → 计算簧上簧下加速度 → 性能指标计算半主动悬架计算初始化状态→计算相对位移与相对速度→计算期望阻尼→计算簧上簧下加速度→性能指标计算指标解读RMS加速度越小越好代表舒适性最大悬架行程越小越好避免机械撞击轮胎载荷变化越小越好代表操控稳定性阻尼系数变化显示控制算法的决策过程路面常见的激励类型bump凸块或单次冲击模拟路面上一个孤立的、瞬态的凸起或凹陷例如减速带、路面修补后的接缝、小坑洼等。常见形状半正弦波、三角形、矩形凸起sine正弦波路面模拟具有固定波长和振幅的周期性波形路面例如老化的水泥路接缝、洗衣板路、有规律起伏的越野路面random随机路面模拟真实世界中最常见的、不规则的路面不平度例如普通的沥青公路、乡村土路等。其不平度统计特性符合一定的功率谱密度标准。step阶跃模拟路面的突然高度变化例如路缘石、深坑的边缘、铁轨等是一种极端的bumpimportnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]fromscipyimportsignalclassQuarterCarModel: 1/4车辆二自由度悬架模型 用于仿真和分析悬架系统的动态响应 def__init__(self,m_s320,m_u40,k_s22000,k_t200000,c_min1000,c_max5000): 初始化模型参数 参数: m_s: 簧上质量 (kg) - 车身质量 m_u: 簧下质量 (kg) - 车轮质量 k_s: 悬架刚度 (N/m) k_t: 轮胎刚度 (N/m) c_min: 最小阻尼系数 (N·s/m) c_max: 最大阻尼系数 (N·s/m) self.m_sm_s# 簧上质量self.m_um_u# 簧下质量self.k_sk_s# 悬架刚度self.k_tk_t# 轮胎刚度self.c_minc_min# 最小阻尼self.c_maxc_max# 最大阻尼# 计算系统的固有特性self.calc_natural_properties()defcalc_natural_properties(self):计算系统的固有频率和阻尼比# 簧上质量固有频率 (车身模态)self.omega_snp.sqrt(self.k_s/self.m_s)# rad/sself.f_sself.omega_s/(2*np.pi)# Hz# 簧下质量固有频率 (车轮跳动模态)self.omega_unp.sqrt((self.k_sself.k_t)/self.m_u)# rad/sself.f_uself.omega_u/(2*np.pi)# Hz# 阻尼比 (使用平均阻尼)c_avg(self.c_minself.c_max)/2self.zeta_sc_avg/(2*np.sqrt(self.k_s*self.m_s))# 车身模态阻尼比self.zeta_uc_avg/(2*np.sqrt((self.k_sself.k_t)*self.m_u))# 车轮模态阻尼比print(f系统固有频率: 车身模态{self.f_s:.2f}Hz, 车轮模态{self.f_u:.2f}Hz)print(f平均阻尼比: 车身模态{self.zeta_s:.3f}, 车轮模态{self.zeta_u:.3f})defpassive_suspension(self,t,road_profile,c_value): 被动悬架仿真固定阻尼 参数: t: 时间向量 road_profile: 路面输入 c_value: 固定阻尼系数 返回: 包含各种响应的字典 dtt[1]-t[0]# 时间步长nlen(t)# 初始化状态变量z_snp.zeros(n)# 簧上质量位移z_unp.zeros(n)# 簧下质量位移v_snp.zeros(n)# 簧上质量速度v_unp.zeros(n)# 簧下质量速度a_snp.zeros(n)# 簧上质量加速度# 初始条件静止状态z_s[0]0z_u[0]0v_s[0]0v_u[0]0# 数值积分前向欧拉法简单但稳定foriinrange(n-1):# 计算相对位移和相对速度z_relz_s[i]-z_u[i]# 悬架动行程v_relv_s[i]-v_u[i]# 悬架相对速度# 计算加速度牛顿第二定律# 簧上质量加速度a_s[i](-self.k_s*z_rel-c_value*v_rel)/self.m_s# 簧下质量加速度a_u(self.k_s*z_relc_value*v_rel-self.k_t*(z_u[i]-road_profile[i]))/self.m_u# 更新速度和位移v_s[i1]v_s[i]a_s[i]*dt v_u[i1]v_u[i]a_u*dt z_s[i1]z_s[i]v_s[i1]*dt z_u[i1]z_u[i]v_u[i1]*dt# 计算最后一个点的加速度z_rel_lastz_s[-1]-z_u[-1]v_rel_lastv_s[-1]-v_u[-1]a_s[-1](-self.k_s*z_rel_last-c_value*v_rel_last)/self.m_s# 计算性能指标rms_accelerationnp.sqrt(np.mean(a_s**2))# 加速度RMS值舒适性指标max_suspension_travelnp.max(np.abs(z_s-z_u))# 最大悬架动行程tire_load_variationnp.std(self.k_t*(z_u-road_profile))# 轮胎动载荷变化操控性指标return{time:t,road:road_profile,sprung_displacement:z_s,# 簧上质量位移unsprung_displacement:z_u,# 簧下质量位移sprung_acceleration:a_s,# 簧上质量加速度suspension_travel:z_s-z_u,# 悬架动行程tire_deflection:z_u-road_profile,# 轮胎变形量rms_acceleration:rms_acceleration,max_suspension_travel:max_suspension_travel,tire_load_variation:tire_load_variation,damping_coefficient:np.ones(n)*c_value}defskyhook_control(self,v_s,v_rel): 天钩控制算法 参数: v_s: 簧上质量绝对速度 v_rel: 悬架相对速度 返回: 理想的阻尼系数 # 天钩控制增益需要调参c_sky3000# 天钩阻尼系数# 理想的天钩阻尼力: F_sky -c_sky * v_s# 实际的阻尼力: F_damper -c_actual * v_rel# 令两者相等: c_actual c_sky * v_s / v_rel# 避免除以零ifabs(v_rel)0.001:returnself.c_minifv_s*v_rel0elseself.c_max# 计算理想阻尼系数c_desiredc_sky*v_s/v_rel# 确保阻尼系数非负且在规定范围内c_clippednp.clip(c_desired,self.c_min,self.c_max)returnc_clippeddefgroundhook_control(self,v_u,v_rel): 地钩控制算法 参数: v_u: 簧下质量绝对速度 v_rel: 悬架相对速度 返回: 理想的阻尼系数 # 地钩控制增益c_ground3000# 理想的地钩阻尼力: F_ground -c_ground * v_u# 实际的阻尼力: F_damper -c_actual * v_rel# 令两者相等: c_actual c_ground * v_u / v_relifabs(v_rel)0.001:returnself.c_minifv_u*v_rel0elseself.c_max c_desiredc_ground*v_u/v_rel c_clippednp.clip(c_desired,self.c_min,self.c_max)returnc_clippeddefhybrid_control(self,v_s,v_u,v_rel,alpha0.7): 混合控制天钩地钩 参数: v_s: 簧上质量速度 v_u: 簧下质量速度 v_rel: 相对速度 alpha: 天钩权重 (0~1)地钩权重为1-alpha 返回: 理想的阻尼系数 # 分别计算天钩和地钩的理想阻尼系数c_skyself.skyhook_control(v_s,v_rel)c_groundself.groundhook_control(v_u,v_rel)# 加权混合c_desiredalpha*c_sky(1-alpha)*c_ground# 确保在合理范围内c_clippednp.clip(c_desired,self.c_min,self.c_max)returnc_clippeddefsemi_active_suspension(self,t,road_profile,control_typeskyhook,control_paramNone): 半主动悬架仿真 参数: t: 时间向量 road_profile: 路面输入 control_type: 控制类型 (skyhook, groundhook, hybrid) control_param: 控制参数混合控制的alpha值 返回: 包含各种响应的字典 dtt[1]-t[0]nlen(t)# 初始化状态变量z_snp.zeros(n)# 簧上质量位移z_unp.zeros(n)# 簧下质量位移v_snp.zeros(n)# 簧上质量速度v_unp.zeros(n)# 簧下质量速度a_snp.zeros(n)# 簧上质量加速度c_arraynp.zeros(n)# 阻尼系数变化# 初始条件z_s[0]0z_u[0]0v_s[0]0v_u[0]0c_array[0]self.c_min# 混合控制参数alphacontrol_paramifcontrol_paramisnotNoneelse0.7# 数值积分foriinrange(n-1):# 计算相对位移和相对速度z_relz_s[i]-z_u[i]v_relv_s[i]-v_u[i]# 根据控制策略计算阻尼系数ifcontrol_typeskyhook:c_array[i]self.skyhook_control(v_s[i],v_rel)elifcontrol_typegroundhook:c_array[i]self.groundhook_control(v_u[i],v_rel)elifcontrol_typehybrid:c_array[i]self.hybrid_control(v_s[i],v_u[i],v_rel,alpha)else:raiseValueError(f未知的控制类型:{control_type})# 计算加速度a_s[i](-self.k_s*z_rel-c_array[i]*v_rel)/self.m_s a_u(self.k_s*z_relc_array[i]*v_rel-self.k_t*(z_u[i]-road_profile[i]))/self.m_u# 更新状态v_s[i1]v_s[i]a_s[i]*dt v_u[i1]v_u[i]a_u*dt z_s[i1]z_s[i]v_s[i1]*dt z_u[i1]z_u[i]v_u[i1]*dt# 计算最后一个点z_rel_lastz_s[-1]-z_u[-1]v_rel_lastv_s[-1]-v_u[-1]# 最后一点的阻尼系数ifcontrol_typeskyhook:c_array[-1]self.skyhook_control(v_s[-1],v_rel_last)elifcontrol_typegroundhook:c_array[-1]self.groundhook_control(v_u[-1],v_rel_last)elifcontrol_typehybrid:c_array[-1]self.hybrid_control(v_s[-1],v_u[-1],v_rel_last,alpha)a_s[-1](-self.k_s*z_rel_last-c_array[-1]*v_rel_last)/self.m_s# 计算性能指标rms_accelerationnp.sqrt(np.mean(a_s**2))max_suspension_travelnp.max(np.abs(z_s-z_u))tire_load_variationnp.std(self.k_t*(z_u-road_profile))return{time:t,road:road_profile,sprung_displacement:z_s,unsprung_displacement:z_u,sprung_acceleration:a_s,suspension_travel:z_s-z_u,tire_deflection:z_u-road_profile,rms_acceleration:rms_acceleration,max_suspension_travel:max_suspension_travel,tire_load_variation:tire_load_variation,damping_coefficient:c_array,control_type:control_type}defgenerate_road_profile(self,t,profile_typebump,amplitude0.05,frequency1.0): 生成路面激励 参数: t: 时间向量 profile_type: 路面类型 (bump, sine, random, step) amplitude: 激励幅值 (m) frequency: 激励频率 (Hz仅对正弦波有效) 返回: 路面位移向量 ifprofile_typebump:# 单凸起路面常用测试工况roadnp.zeros_like(t)bump_time1.0# 凸起发生的时间bump_duration0.2# 凸起持续时间# 创建半正弦凸起mask(tbump_time)(tbump_timebump_duration)road[mask]amplitude*np.sin(np.pi*(t[mask]-bump_time)/bump_duration)elifprofile_typesine:# 正弦波路面roadamplitude*np.sin(2*np.pi*frequency*t)elifprofile_typestep:# 阶跃输入模拟过台阶roadnp.zeros_like(t)step_time1.0road[tstep_time]amplitudeelifprofile_typerandom:# 随机路面更真实的工况# 使用低通滤波器生成有色噪声np.random.seed(42)# 固定随机种子以便重复实验white_noisenp.random.randn(len(t))b,asignal.butter(2,0.1)# 低通滤波器roadsignal.filtfilt(b,a,white_noise)*amplitudeelse:raiseValueError(f未知的路面类型:{profile_type})returnroaddefplot_comparison(results_passive,results_semi,title_suffix): 绘制被动悬架和半主动悬架的对比图 figplt.figure(figsize(16,12))# 1. 路面输入ax1plt.subplot(4,2,1)ax1.plot(results_passive[time],results_passive[road],k-,linewidth2,label路面输入)ax1.set_ylabel(位移 (m))ax1.set_title(f路面激励{title_suffix})ax1.grid(True,alpha0.3)ax1.legend()# 2. 车身加速度对比ax2plt.subplot(4,2,2)ax2.plot(results_passive[time],results_passive[sprung_acceleration],b-,labelf被动 (RMS{results_passive[rms_acceleration]:.3f}m/s²))ax2.plot(results_semi[time],results_semi[sprung_acceleration],r-,labelf半主动 (RMS{results_semi[rms_acceleration]:.3f}m/s²))ax2.set_ylabel(加速度 (m/s²))ax2.set_title(车身加速度对比 (舒适性指标))ax2.grid(True,alpha0.3)ax2.legend()# 3. 悬架动行程对比ax3plt.subplot(4,2,3)ax3.plot(results_passive[time],results_passive[suspension_travel],b-,labelf被动 (最大{results_passive[max_suspension_travel]*100:.1f}cm))ax3.plot(results_semi[time],results_semi[suspension_travel],r-,labelf半主动 (最大{results_semi[max_suspension_travel]*100:.1f}cm))ax3.set_ylabel(位移 (m))ax3.set_title(悬架动行程对比 (机械约束))ax3.grid(True,alpha0.3)ax3.legend()# 4. 轮胎变形量对比ax4plt.subplot(4,2,4)ax4.plot(results_passive[time],results_passive[tire_deflection],b-,labelf被动 (标准差{results_passive[tire_load_variation]/1000:.2f}kN))ax4.plot(results_semi[time],results_semi[tire_deflection],r-,labelf半主动 (标准差{results_semi[tire_load_variation]/1000:.2f}kN))ax4.set_ylabel(位移 (m))ax4.set_title(轮胎变形量对比 (操控性指标))ax4.grid(True,alpha0.3)ax4.legend()# 5. 车身位移对比ax5plt.subplot(4,2,5)ax5.plot(results_passive[time],results_passive[sprung_displacement],b-,label被动)ax5.plot(results_semi[time],results_semi[sprung_displacement],r-,label半主动)ax5.set_xlabel(时间 (s))ax5.set_ylabel(位移 (m))ax5.set_title(车身位移对比)ax5.grid(True,alpha0.3)ax5.legend()# 6. 车轮位移对比ax6plt.subplot(4,2,6)ax6.plot(results_passive[time],results_passive[unsprung_displacement],b-,label被动)ax6.plot(results_semi[time],results_semi[unsprung_displacement],r-,label半主动)ax6.set_xlabel(时间 (s))ax6.set_ylabel(位移 (m))ax6.set_title(车轮位移对比)ax6.grid(True,alpha0.3)ax6.legend()# 7. 阻尼系数变化ax7plt.subplot(4,2,7)ax7.plot(results_passive[time],results_passive[damping_coefficient],b-,labelf被动 (固定{results_passive[damping_coefficient][0]:.0f}N·s/m))ax7.plot(results_semi[time],results_semi[damping_coefficient],r-,labelf半主动 ({results_semi.get(control_type,自适应)}))ax7.set_xlabel(时间 (s))ax7.set_ylabel(阻尼系数 (N·s/m))ax7.set_title(阻尼系数变化)ax7.grid(True,alpha0.3)ax7.legend()# 8. 性能指标总结ax8plt.subplot(4,2,8)metrics[舒适性\n(RMS加速度),悬架行程\n(最大值),轮胎载荷\n(标准差)]passive_vals[results_passive[rms_acceleration],results_passive[max_suspension_travel],results_passive[tire_load_variation]/1000]semi_vals[results_semi[rms_acceleration],results_semi[max_suspension_travel],results_semi[tire_load_variation]/1000]xnp.arange(len(metrics))width0.35ax8.bar(x-width/2,passive_vals,width,label被动悬架,colorblue,alpha0.7)ax8.bar(xwidth/2,semi_vals,width,label半主动悬架,colorred,alpha0.7)ax8.set_xlabel(性能指标)ax8.set_ylabel(数值)ax8.set_title(性能指标对比)ax8.set_xticks(x)ax8.set_xticklabels(metrics)ax8.grid(True,alpha0.3,axisy)ax8.legend()plt.suptitle(f1/4车辆悬架模型仿真 -{title_suffix},fontsize16,y1.02)plt.tight_layout()plt.show()defmain(): 主函数运行悬架模型仿真和对比 # 1. 创建悬架模型实例print(*60)print(1/4车辆二自由度悬架模型仿真)print(*60)# 使用电动车典型参数modelQuarterCarModel(m_s400,# 电动车簧上质量更大电池重m_u45,# 簧下质量k_s25000,# 悬架刚度k_t220000,# 轮胎刚度c_min800,# 最小阻尼c_max6000# 最大阻尼)# 2. 设置仿真时间dt0.001# 时间步长 (1ms)t_max5.0# 总仿真时间tnp.arange(0,t_max,dt)# 3. 生成路面激励road_profilemodel.generate_road_profile(t,profile_typestep,# 尝试 bump, sine, random, stepamplitude0.05,# 5cm凸起frequency1.0)# 4. 仿真被动悬架固定阻尼print(\n仿真被动悬架...)c_passive2000# 固定阻尼系数results_passivemodel.passive_suspension(t,road_profile,c_passive)# 5. 仿真半主动悬架天钩控制print(仿真半主动悬架天钩控制...)results_semimodel.semi_active_suspension(t,road_profile,control_typehybrid# 尝试 skyhook, groundhook, hybrid)# 6. 打印性能对比print(\n*60)print(性能对比结果:)print(*60)print(f{指标:20}{被动悬架:15}{半主动悬架:15}{改善率:10})print(-*60)# 计算各项指标的改善率acc_improvement(results_passive[rms_acceleration]-results_semi[rms_acceleration])/results_passive[rms_acceleration]*100travel_improvement(results_passive[max_suspension_travel]-results_semi[max_suspension_travel])/results_passive[max_suspension_travel]*100tire_improvement(results_passive[tire_load_variation]-results_semi[tire_load_variation])/results_passive[tire_load_variation]*100print(f{RMS加速度(m/s²):20}{results_passive[rms_acceleration]:15.3f}{results_semi[rms_acceleration]:15.3f}{acc_improvement:8.1f}%)print(f{最大悬架行程(cm):20}{results_passive[max_suspension_travel]*100:15.1f}{results_semi[max_suspension_travel]*100:15.1f}{travel_improvement:8.1f}%)print(f{轮胎载荷标准差(kN):20}{results_passive[tire_load_variation]/1000:15.2f}{results_semi[tire_load_variation]/1000:15.2f}{tire_improvement:8.1f}%)# 7. 绘制对比图plot_comparison(results_passive,results_semi,title_suffix凸起路面 - 天钩控制)# 8. 额外分析不同控制策略对比print(\n*60)print(不同控制策略对比:)print(*60)control_strategies[skyhook,groundhook,hybrid]results_all{}forstrategyincontrol_strategies:ifstrategyhybrid:resultsmodel.semi_active_suspension(t,road_profile,control_typestrategy,control_param0.7)else:resultsmodel.semi_active_suspension(t,road_profile,control_typestrategy)results_all[strategy]resultsprint(f{strategy:10}: RMS加速度{results[rms_acceleration]:.3f}m/s², f最大行程{results[max_suspension_travel]*100:.1f}cm, f轮胎载荷标准差{results[tire_load_variation]/1000:.2f}kN)# 9. 绘制不同控制策略的阻尼系数变化plt.figure(figsize(12,4))fori,strategyinenumerate(control_strategies):plt.subplot(1,3,i1)plt.plot(t,results_all[strategy][damping_coefficient],r-)plt.fill_between(t,model.c_min,model.c_max,alpha0.1,colorgray)plt.xlabel(时间 (s))plt.ylabel(阻尼系数 (N·s/m))plt.title(f{strategy}控制策略)plt.grid(True,alpha0.3)plt.ylim([model.c_min-500,model.c_max500])plt.suptitle(不同控制策略的阻尼系数变化,fontsize14,y1.05)plt.tight_layout()plt.show()returnmodel,results_passive,results_semi,results_allif__name____main__:# 运行主程序model,results_passive,results_semi,results_allmain()print(\n*60)print(仿真完成)print(*60)天棚算法Skyhook算法简介用于汽车半主动悬挂系统的控制算法旨在减轻路面颠簸对车身的影响。其核心思想是通过调节减振器的阻尼力使车身保持相对稳定从而提高乘坐舒适性和车辆操控性。核心思想想象在车身与固定不动的天空之间连接一个阻尼器这个天棚阻尼器只对车身的绝对运动产生阻尼力而不受车轮运动的影响。理想天棚系统中阻尼器连接车身和固定的天空这意味着阻尼力只与车身的绝对速度有关可以最有效地抑制车身的振动而不受车轮运动的影响公式让实际系统的车身动力学与理想系统一致即让两个系统的车身方程等价注释减振器做不到负的阻尼系数那只能提供最小阻尼了。如果能达到0当然最好了但任何一种液压阻尼可调减振器阻尼系数都不可能做到0是有下边界。当算法请求阻尼系数为正的时候需要限制在最小最大边界C _ s k y C\_{sky}C_sky的值怎么确定呢目前是依据经验值图解当车身和车轮反向运动时控制系统需施加大阻尼快速衰减振动注释车轮已经过了减速带最高点开始向下运动 (v₁ 0)但车身由于惯性还在向上运动 (v₂ 0)此时悬架被拉伸需要大阻尼抑制反弹当车身和车轮同向运动时若车身速率大于车轮速率控制系统需要施加大阻尼衰减车身振动注释提升舒适性直接针对车身加速度舒适性指标进行控制当车身和车轮同向运动时若车身速率小于车轮速率控制系统需降低阻尼小阻尼减少车轮振动传递至车身例如v1V2且方向向上此时m2的阻尼力方向为正向大小为− c ( z ˙ _ 2 − z ˙ _ 1 ) -c(\dot{z}\_2 - \dot{z}\_1)−c(z˙_2−z˙_1)这个力通过悬架推着车身向上加速我们减小阻尼可以减小这个里的大小