1. 悬架系统建模基础
任务说明
本案例建立1/4车辆悬架的二自由度动力学模型,作为后续MILSIL仿真与代码生成的被控对象基础。模型包含车身质量(簧载质量)与车轮质量(非簧载质量)两个自由度,考虑悬架弹簧刚度、阻尼器阻尼系数以及轮胎刚度,忽略轮胎阻尼。输入为路面位移激励,输出为车身位移、车轮位移及二者加速度。
模型方程
根据牛顿第二定律,二自由度1/4车辆悬架模型运动方程如下:
m_s·ẍ_s + c_s·(ẋ_s − ẋ_u) + k_s·(x_s − x_u) = 0
m_u·ẍ_u + c_s·(ẋ_u − ẋ_s) + k_s·(x_u − x_s) + k_t·(x_u − x_r) = 0
其中:x_s为车身位移,x_u为车轮位移,x_r为路面输入位移;m_s为簧载质量,m_u为非簧载质量,k_s为悬架刚度,c_s为阻尼系数,k_t为轮胎刚度。
状态空间实现
选取状态向量 X = [x_s, ẋ_s, x_u, ẋ_u]ᵀ,路面位移 x_r 为输入,车身位移与车轮位移为输出。状态空间形式为:
Ẋ = A·X + B·x_r
Y = C·X + D·x_r
矩阵定义如下:
A = [[0, 1, 0, 0],
[−k_s/m_s, −c_s/m_s, k_s/m_s, c_s/m_s],
[0, 0, 0, 1],
[k_s/m_u, c_s/m_u, −(k_s+k_t)/m_u, −c_s/m_u]]
B = [[0], [0], [0], [k_t/m_u]]
C = [[1, 0, 0, 0],
[0, 0, 1, 0]]
D = [[0], [0]]
Python参考实现
import numpy as np
# 车辆参数(单位:SI)
m_s = 300.0 # 簧载质量 kg
m_u = 40.0 # 非簧载质量 kg
k_s = 18000.0 # 悬架刚度 N/m
c_s = 1200.0 # 阻尼系数 N·s/m
k_t = 200000.0 # 轮胎刚度 N/m
def create_quarter_car_matrices():
"""构建1/4车辆悬架二自由度模型的状态空间矩阵"""
A = np.array([
[0, 1, 0, 0],
[-k_s/m_s, -c_s/m_s, k_s/m_s, c_s/m_s],
[0, 0, 0, 1],
[k_s/m_u, c_s/m_u, -(k_s+k_t)/m_u, -c_s/m_u]
])
B = np.array([[0], [0], [0], [k_t/m_u]])
C = np.array([[1, 0, 0, 0],
[0, 0, 1, 0]])
D = np.array([[0], [0]])
return A, B, C, D
def simulate_step(A, B, C, D, x, x_r, dt):
"""单步欧拉积分,返回新状态与输出"""
x_dot = A @ x + B * x_r
x_new = x + x_dot * dt
y = C @ x + D * x_r
return x_new, y
# 初始化
A, B, C, D = create_quarter_car_matrices()
x = np.zeros((4, 1)) # 初始状态
dt = 0.001 # 仿真步长 1ms
t_end = 2.0 # 仿真时长 2s
n_steps = int(t_end / dt)
# 路面输入:0.05m 阶跃(模拟减速带)
x_r = 0.05
# 仿真循环
for i in range(n_steps):
x, y = simulate_step(A, B, C, D, x, x_r, dt)
# 输出最终状态与输出
print("最终状态 X = [x_s, v_s, x_u, v_u]:")
print(x.flatten())
print("最终输出 Y = [x_s, x_u]:")
print(y.flatten())
模型验证方法
运行上述代码,观察最终状态与输出值。判定标准:
- 车身位移
x_s最终收敛至约0.05m(等于路面阶跃输入),稳态误差小于1%; - 车轮位移
x_u同样收敛至约0.05m; - 车身速度与车轮速度最终趋近于0。
若满足以上条件,说明模型状态空间矩阵构建正确,动力学方程实现无误,可用于后续MILSIL仿真与代码生成。