Engee 文档
Notebook

汽车悬架模拟

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

汽车模型的悬挂方案:

car.png

汽车悬架模型的一般视图:

suspension--1708522950414.png

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

哪里:

等式块2描述了悬浮引起的俯仰力矩。

哪里:

方程块3根据牛顿第二定律求解物体运动过程中出现的力和力矩。:

哪里:

加载和运行仿真

启用显示图形的后端方法:

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]:

结论:

在这个例子中,演示了一个简化的汽车悬架的模拟. 该模型使我们能够研究阻尼元件和悬架刚度运行过程中发生的影响。