Engee 文档
Notebook

汽车悬架建模

本例将演示简化汽车悬架的建模,该悬架由独立的前后垂直悬架组成。该模型包括车身倾斜计算。

汽车模型的悬架图:

car.png

汽车悬挂模型总览:

suspension_1708522950414.png

图中显示了半挂卡车的模型特征。前悬挂和后悬挂被模拟为弹簧/减震器系统。更详细的模型将包括轮胎模型和阻尼器非线性特性,如速度相关阻尼(回弹阻尼大于压缩阻尼)。车身具有倾斜和反弹的自由度。这些在模型中由四个状态表示:垂直位移、垂直速度、俯仰角位移和俯仰角速度。使用矢量代数模块可以实现具有六个自由度的完整模型,以执行轴变换和力/位移/速度计算。方程块 1 描述了前悬架对回弹的影响(即垂直自由度).....:

$$F_{f} = 2K_f (L_f \theta - (z + h)) + 2C_f(L_f \dot{\theta} -\dot{z})$$

其中

-$F_{f}, F_{r} = \mbox{ усилие, направленное вверх на кузов от передней/задней подвески}$

-$K_f, K_r = \mbox{постоянная пружин передней и задней подвески}$

-$C_f, C_r = \mbox{ коэффициент демпфирования передней и задней подвески}$

-$L_f, L_r = \mbox{ расстояние по горизонтали от центра тяжести до передней/задней подвески}$

-$\theta, \dot{\theta} = \mbox{угол тангажа (поворота) и скорость его изменения}$

-$z, \dot{z} = \mbox{ расстояние отскока (по вертикали) и скорость его изменения}$

-$h = \mbox { высота дороги }$

方程组 2 描述了由悬挂装置引起的摇摆力矩。

$$M_{f} = -L_{f}F_{f}$$

$$F_{r} = -2K_r (L_r\theta + (z + h)) -2C_r ( L_r \dot {\theta} + \dot{z})$$

$$M_{r} = L_r F_{r}$$

在哪里?

-$M_{f}, M_{r} = \mbox{ Момент качки из-за передней/задней подвески}$

方程组 3 根据牛顿第二定律求解了物体运动产生的力和力矩:

$$m_b\ddot{z} = F_{f} + F_{r} - m_b g$$

$$I_{yy} \ddot{\theta} = M_{f} + M_{r} + M_y $$

在哪里?

-$m_b = \mbox{ масса тела}$

-$M_y = \mbox{ момент тангажа, вызванный ускорением транспортного средства}$

-$I_{yy} = \mbox{момент инерции тела относительно центра тяжести}$

加载并运行模拟

连接后台--图形显示方法:

In [ ]:
using Plots
gr();

加载并运行模型

In [ ]:
try
    engee.close("suspension", force=true) # закрытие модели 
    catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
        m = engee.load("/user/start/examples/controls/suspension/suspension.engee") # загрузка модели
    end;

try
    engee.run(m, verbose=true) # запуск модели
    catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
        m = engee.load("/user/start/examples/controls/suspension/suspension.engee") # загрузка модели
        engee.run(m, verbose=true) # запуск модели
    end
Building...
Progress 100%
Out[0]:
Dict{String, DataFrames.DataFrame} with 6 entries:
  "Скорость изменения угла наклона" => 1001×2 DataFrame…
  "Торможение.1"                    => 1001×2 DataFrame…
  "Угол наклона"                    => 1001×2 DataFrame…
  "Усилие на задней оси"            => 1001×2 DataFrame…
  "Препятствие.1"                   => 1001×2 DataFrame…
  "Усилие на передней оси"          => 1001×2 DataFrame

处理结果

从 simout 变量中提取描述制动距离和滑动的数据:

In [ ]:
sleep(5)
data = collect(simout)
Out[0]:
6-element Vector{WorkspaceArray}:
 WorkspaceArray("suspension/Торможение.1")
 WorkspaceArray("suspension/Препятствие.1")
 WorkspaceArray("suspension/Усилие на передней оси")
 WorkspaceArray("suspension/Скорость изменения угла наклона")
 WorkspaceArray("suspension/Усилие на задней оси")
 WorkspaceArray("suspension/Угол наклона")

将模型中的数据定义为相应的变量:

In [ ]:
stop_signal = collect(data[1])
barrier_signal = collect(data[2])
front_force = collect(data[3])
angle_speed = collect(data[4])
rear_force = collect(data[5])
angle = collect(data[6]);

将建模结果可视化

In [ ]:
p1 = plot(stop_signal[:,1], stop_signal[:,2], title="Сигнал торможения")
p2 = plot(barrier_signal[:,1], barrier_signal[:,2], title="Сигнал препятствия")
p3 = plot(front_force[:,1], front_force[:,2], title="Усилие на передней оси")
p4 = plot(angle_speed[:,1], angle_speed[:,2], title="Скорость изменения \n угла наклона")
p5 = plot(rear_force[:,1], rear_force[:,2], title="Усилие на задней оси")
p6 = plot(angle[:,1], angle[:,2], title="Угол наклона")
plot(p1, p2, p3, p4, p5, p6, layout=(3, 2), legend=false)
Out[0]:

结论

本例演示了简化车辆悬架的建模。通过该模型,可以研究悬架的阻尼和刚度元素的影响。

示例中使用的块