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

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

В данном примере будет продемонстрировано моделирование упрощенной подвески автомобиля, которая состоит из независимых передней и задней вертикальных подвесок. Модель включает в себя расчёт наклона кузова.

Схема подвески модели автомобиля:

car.png

Общий вид модели подвески автомобиля:

suspension—​1708522950414.png

На рисунке показаны смоделированные характеристики полукара. Передняя и задняя подвески смоделированы как пружинно-амортизаторные системы. Более подробная модель включала бы модель шины и нелинейности демпфера, такие как зависящее от скорости демпфирование (при этом демпфирование при отскоке больше, чем при сжатии). Кузов транспортного средства имеет степени свободы наклона и отскока. Они представлены в модели четырьмя состояниями: вертикальное смещение, вертикальная скорость, угловое смещение по тангажу и угловая скорость по тангажу. Полная модель с шестью степенями свободы может быть реализована с использованием блоков векторной алгебры для выполнения преобразований осей и расчетов силы/перемещения/скорости. Блок уравнений 1 описывает влияние передней подвески на отскок (т.е. вертикальную степень свободы).:

где:

  • усилиенаправленноевверхнакузовотпереднейзаднейподвески

  • постояннаяпружинпереднейизаднейподвески

  • коэффициентдемпфированияпереднейизаднейподвески

  • расстояниепогоризонталиотцентратяжестидопереднейзаднейподвески

  • уголтангажаповоротаискоростьегоизменения

  • расстояниеотскокаповертикалиискоростьегоизменения

  • высотадороги

Блок уравнений 2 описывают моменты качки, обусловленные подвеской.

где:

  • Моменткачкииззапереднейзаднейподвески

Блок уравнений 3 разрешают силы и моменты, возникающие при движении тела, согласно Второму закону Ньютона:

где:

  • массатела

  • моменттангажавызванныйускорениемтранспортногосредства

  • моментинерциителаотносительноцентратяжести

Загрузка и запуск симуляции

Подключение бэкенда - метода этображения графики:

using Plots
gr();

Загрузка и запуск модели:

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%
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 данных, описывающих тормозной путь и скольжение:

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

Определение данных из модели в соответствующие переменные:

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]);

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

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)

interactive-scripts/images/controls_suspension/37d18a939b3f38b543796c560f886f86542ce4f9

Вывод

В данном примере было продемонстрировано моделирование упрощенной подвески автомобиля. Эта модель позволяет исследовать эффекты, возникающие при работе элементов демпфирования и жесткости подвески.