二自由度非线性动力学模型
时间: 2023-11-11 12:03:18 浏览: 78
二自由度非线性动力学模型是一种描述车辆运动的数学模型,它考虑了车辆在横向上的运动和绕z轴的转动,忽略了纵向x轴的运动和力。该模型通常用于研究车辆的横向稳定性和控制问题。该模型的非线性特性使得它能够更准确地描述车辆的运动状态,但也增加了模型的复杂度和计算难度。
下面是一个简单的二自由度非线性动力学模型的例子,其中考虑了车辆的侧偏角和转向角对车辆运动的影响:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义模型参数
m = 1000 # 质量
Iz = 500 # 转动惯量
lf = 1.5 # 前轴到质心的距离
lr = 1.5 # 后轴到质心的距离
Cf = 80000 # 前轮侧偏刚度
Cr = 120000 # 后轮侧偏刚度
Vx = 10 # 车速
# 定义模型方程
def vehicle_model(x, t, delta):
# x = [y, psi, dy, dpsi]
y, psi, dy, dpsi = x
Ffy = -Cf * np.arctan2(dy + lf * dpsi, Vx) # 前轮侧向力
Fry = -Cr * np.arctan2(dy - lr * dpsi, Vx) # 后轮侧向力
dx = np.array([dy,
dpsi,
1 / m * (Ffy * np.sin(delta) + Fry) + dy * dpsi,
1 / Iz * (lf * Ffy * np.sin(delta) - lr * Fry)])
return dx
# 定义模拟参数
t0, tf = 0, 10 # 时间范围
dt = 0.01 # 时间步长
x0 = [0, 0, 10, 0] # 初始状态
delta = np.zeros(int((tf - t0) / dt)) # 转向角
delta[int(2 / dt):int(4 / dt)] = 0.1 # 在2s到4s之间转向
# 模拟车辆运动
t = np.linspace(t0, tf, int((tf - t0) / dt) + 1)
x = np.zeros((int((tf - t0) / dt) + 1, len(x0)))
x[0] = x0
for i in range(len(delta)):
x[i+1] = x[i] + dt * vehicle_model(x[i], t[i], delta[i])
# 绘制车辆运动轨迹
plt.plot(x[:, 0], x[:, 1])
plt.xlabel('y (m)')
plt.ylabel('psi (rad)')
plt.show()
```