Документация Engee
Notebook

Моделирование подвески автомобиля

В данном примере демонстрируется моделирование работы подвески автомобиля при наезде на препятствие.

Препятствие задано в виде прямоугольного сигнала с помощью блока Signal Generator. С помощью источника скорости производная сигнала (скорость), подаётся на порт C блока Translational Spring, который описывает упругие свойства колеса.

Translational Spring, в свою очередь, присоединён к массе, которая характеризует инерционные свойства колеса.

Колесо закреплено на элементах подвески, амортизаторе и амортизационной пружине, которые представлены блоками Damper и Spring.

Сама "четверть" автомобиля закреплена за другие порты блоков Damper и Spring.

Колесо имеет массу 50 кг, а "четверть" автомобиля 350 кг.

Препятствие имеет высоту 5 см.

Схема модели:

suspension_physmod_1727789568075.png

Определение функции для загрузки и запуска модели:

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

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/suspension_physmod.engee") # загрузка модели
            engee.run(m) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

Запуск симуляции

In [ ]:
try
    start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
    catch err
    end;

Выделение из simout данных в переменную:

In [ ]:
sleep(5)
result = simout;
res = collect(result)
Out[0]:
4-element Vector{WorkspaceArray}:
 WorkspaceArray("suspension_physmod/Положение колеса")
 WorkspaceArray("suspension_physmod/Перегрузка")
 WorkspaceArray("suspension_physmod/Препятствие")
 WorkspaceArray("suspension_physmod/Положение машины")

Запись в переменные данных о перемещении колеса и автомобиля, а также о перегрузке:

In [ ]:
wheel_pos = collect(res[1])
car_pos = collect(res[4])
overload = collect(res[2]);

Визуализация результатов моделирования

In [ ]:
using Plots
plot(wheel_pos[:,1], wheel_pos[:,2], linewidth=3, label="Положение колеса, м")
plot!(car_pos[:,1], car_pos[:,2], linewidth=3, label="Положение автомобиля, м")
Out[0]:
In [ ]:
plot(overload[:,1], overload[:,2], linewidth=3, label="Перегрузка, м/(с^2)")
Out[0]:

Проанализировав графики можно увидеть, что перегрузка (отношение ускорения тела к ускорению свободного падения), возникающая при наезде на препятствие, величиной чуть больше 2 $м/с^2$, в течении менее чем 50 мс воздействует на четверть автомобиля.

Такая перегрузка не велика и не окажет опасного влияния на человека, а также не повлияет на комфорт пассажиров.

Вывод:

В данном примере продемонстрировано моделирование работы подвески автомобиля при резком наезде на препятствие. Проанализированы параметры движения четверти автомобиля, а также значение перегрузки, которая может повлиять на безопасность и комфорт пассажиров.