汽车动力学模型对比:线性二自由度、Carsim与运动学模型
线性二自由度模型
该模型将车辆简化为具有侧向与横摆两个自由度的刚体。设质心位置为 \( G \),纵向速度为 \( u \),侧向速度为 \( v \),横摆角速度为 \( \omega_r \)。运动方程可通过以下Python代码(使用SymPy库)表达:
from sympy import symbols, Function, Derivative
t_var = symbols('t')
long_vel = symbols('u')
lat_vel = Function('lat_vel')(t_var)
yaw_rate = Function('yaw_rate')(t_var)
steer_angle = symbols('steer_angle')
mass = symbols('mass')
inertia_z = symbols('inertia_z')
front_axle_dist = symbols('front_axle_dist')
rear_axle_dist = symbols('rear_axle_dist')
front_stiff = symbols('front_stiff')
rear_stiff = symbols('rear_stiff')
front_lateral_force = -front_stiff * (lat_vel + front_axle_dist * yaw_rate) / long_vel
rear_lateral_force = -rear_stiff * (lat_vel - rear_axle_dist * yaw_rate) / long_vel
lateral_eq = mass * (Derivative(lat_vel, t_var) + long_vel * yaw_rate) - front_lateral_force - rear_lateral_force
yaw_eq = inertia_z * Derivative(yaw_rate, t_var) - front_axle_dist * front_lateral_force + rear_axle_dist * rear_lateral_force
其中,lateral_eq为侧向力平衡方程,yaw_eq为横摆力矩平衡方程。此模型忽略轮胎非线性和悬架影响。
Carsim模型
Carsim为专业整车动力学仿真软件,整合轮胎、悬架、传动系等子系统。其模型采用魔术公式等轮胎模型,精确描述非线性特性。
用户可设置几何参数、质量分布及工况(如转向角、路面条件),输出高精度动力学响应。
运动学模型
此模型描述车辆位置变化,忽略力学因素。基于自行车假设,实现轨迹预测:
import numpy as np
import matplotlib.pyplot as plt
def simulate_trajectory(init_x, init_y, init_heading, velocity, steer_angle, wheelbase, time_step, steps):
x_pos = np.zeros(steps)
y_pos = np.zeros(steps)
heading_angle = np.zeros(steps)
x_pos[0] = init_x
y_pos[0] = init_y
heading_angle[0] = init_heading
for step in range(1, steps):
dx_dt = velocity * np.cos(heading_angle[step - 1])
dy_dt = velocity * np.sin(heading_angle[step - 1])
dtheta_dt = velocity * np.tan(steer_angle) / wheelbase
x_pos[step] = x_pos[step - 1] + dx_dt * time_step
y_pos[step] = y_pos[step - 1] + dy_dt * time_step
heading_angle[step] = heading_angle[step - 1] + dtheta_dt * time_step
return x_pos, y_pos
start_x = 0
start_y = 0
start_heading = 0
speed = 5
steer_input = np.deg2rad(5)
base_length = 2.5
delta_t = 0.1
iterations = 100
x_coords, y_coords = simulate_trajectory(start_x, start_y, start_heading, speed, steer_input, base_length, delta_t, iterations)
plt.plot(x_coords, y_coords)
plt.xlabel('X坐标 (m)')
plt.ylabel('Y坐标 (m)')
plt.title('基于运动学模型的车辆轨迹')
plt.grid(True)
plt.show()
模型计算量小,适用于路径规划。