Как построить определенный инструмент анимации, который поможет детально проанализировать сложную динамику движения самолета

Говорят, данные - золото.

Однако сами по себе необработанные данные никогда не будут так ценны, как золото. Это инструменты постобработки и визуализации, которые позволяют нам использовать всю добавленную стоимость, которую скрывают данные.

В аэрокосмической отрасли мы анализируем огромное количество необработанных данных, генерируемых симуляторами с высокой точностью. Когда дело доходит до валидации и верификации систем управления полетом, количество симуляций, которые необходимо выполнить для проверки управляемости и управляемости самолета, начинает расти.

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

Если вы хотите углубиться в эту тему, вы можете взглянуть на эту статью.



Как только «отклонение от контролируемого полета» обнаруживается с помощью алгоритмов автоматической постобработки, маневр тщательно анализируется для определения основной причины проблемы.

На следующем рисунке показан пример того, как выглядит «выход из управляемого полета» на высокоманевренном истребителе.

Вы можете это заметить?

Конечно, невооруженным глазом и неподготовленным глазом сложно что-либо увидеть на этих графиках времени. И для умелого глаза даже иногда это тоже непростая задача.

Вот тогда-то и пригодится хороший инструмент для 3D-анимации.

Вы видите сейчас «отклонение от контролируемого рейса»? Страшно, не правда ли?

В этом посте вы научитесь программировать инструмент трехмерной анимации в MATLAB ®, чтобы помочь вам визуализировать сложное движение и динамику самолета.

Я покажу вам, каковы ключевые строительные блоки, чтобы вы могли создать свой собственный инструмент для специальной 3D-анимации.

Я уверен, что вы найдете эти 3D-анимации очень полезными как для визуализации результатов моделирования полета, так и для апостериорной визуализации записанных данных летных испытаний вашего самолета Radio Control или просто для включения иллюстративных видео и GIF-файлов в свои технические презентации.

С небольшими изменениями этот инструмент также поможет вам визуализировать движение любого транспортного средства, спутника, ракеты, корабля, автомобиля, грузовика или даже танка. Независимо от того, что он движется, вы можете анимировать его в Matlab.

Вы можете начать создавать свой собственный инструмент для 3D-анимации, выполнив эти три простых шага.

Шаг 1. Подготовьте 3D-модель

Первое, что вам нужно сделать, это найти 3D-модель в формате * .stl (STereoLithography), которая наилучшим образом отображает внешнюю геометрию плоскости или воздушный транспорт, как этот пример Saab 39 Gripen.

Существует множество веб-страниц, на которых вы можете найти бесконечное количество 3D-моделей для бесплатной загрузки. Я рекомендую вам заглянуть на следующие сайты, где вы обязательно найдете 3D-модель, которую ищете:





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

В случае 3D-модели Saab Gripen набор движущихся частей будет состоять из:

  • Канарды (левый / правый борт)
  • Флапероны (левый / правый борт)
  • Закрылки передней кромки (левый / правый борт)
  • Руль

Вы можете использовать любой инструмент 3D-редактирования, чтобы разделить подвижные управляющие поверхности модели. Мне лично нравится MeshLab, поскольку он прост в использовании и, прежде всего, совершенно бесплатный. .

Шаг 2: адаптируйте 3D-модель к среде MATLAB.

После того, как вы разделили части модели на разные файлы * .stl, мы можем начать программировать наш скрипт для загрузки файла * .stl и создания файла * .mat файл данных с минимумом необходимой информации для анимации подвижных частей. Этот шаг предпочтительнее, потому что в Matlab «всегда быстрее загружать данные из файла * .mat, чем читать их из ASCII или двоичного файла (например, * .stl файл).

Чтобы прочитать файлы * .stl в MATLAB, вам нужно сначала загрузить пакет stlTools из сети обмена файлами MATLAB. После того, как вы скачали пакет, мы можем сразу перейти к разработке кода.

Мы начнем добавлять путь к пакету stlTools, определяя имя выходного файла * .mat, содержащего структуру данных модели Model3D, и, наконец, мы определим свойства те файлы * .stl, которые являются частью геометрии твердого тела летательного аппарата, и те, которые являются подвижными поверхностями.

Для каждой подвижной поверхности модели необходимо определить три важных свойства (первые два можно легко получить с помощью инструмента трехмерного редактирования, то есть MeshLab):

  • Точка поворота: координаты точки поворота.
  • Вектор вращения: этот параметр определяет направление поворота руля управления полетом.
  • Максимальный и минимальный углы отклонения поверхности: вектор, определяющий пределы перемещения.

После определения всех этих свойств мы прочитаем файлы * .stl и сохраним информацию о вершинах и гранях в структуре Model3D вместе с ранее определенными свойствами.

Теперь нам просто нужно сохранить структуру Model3D в файле mat и построить все части модели вместе с линией шарнира подвижных поверхностей, чтобы убедиться, что все в порядке.

На этом этапе мы закончили наш сценарий предварительной обработки, и у нас уже есть файл MAT, содержащий информацию о 3D-модели, поэтому мы готовы к следующему шагу, созданию функции анимации.

Шаг 3. Создайте функцию анимации.

Прежде чем мы углубимся в детали кодирования, сначала я расскажу вам о двух важных встроенных функциях Matlab, которые мы будем широко использовать, hgtransform и makehgtform.

Мы будем использовать эти встроенные функции для непосредственного применения преобразований перемещения и поворота к различным частям нашей 3D-модели с помощью всего двух строк кода.

В Matlab графические объекты, такие как линии, поверхности и пятна, могут быть сгруппированы для совместного использования общего родителя, определяющего набор пространственных преобразований (перемещение, масштабирование и вращение), которые применяются к каждому дочернему элементу.

Дескриптор группы преобразования создается с помощью функции hgtransform, а ассоциация группы выполняется через свойство ‘Parent’ графических объектов. Вот простой пример:

Прямо сейчас вам может быть интересно, в чем преимущество всего этого? Что ж, представьте себе Beech G36 Bonanza - самолет с двумя элеронами, двумя рулями высоты и рулем направления.

Каждая из основных поверхностей управления имеет триммер, чтобы уменьшить усилия пилота на штанге управления в условиях триммирования. Эти триммеры вращаются вокруг шарнирной линии, расположенной на поверхности управления, и последний также вращается вокруг своей шарнирной линии, которая солидарна с конструкцией самолета.

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

Однако мы можем сделать это гораздо проще, используя функции hgtransform и makehgtform. Вместо того, чтобы применять отдельные преобразования (перемещение и вращение) к каждой из поверхностей, мы могли бы рекурсивно сгруппировать их вместе в родительский объект преобразования, чтобы затем просто применить одно преобразование для перемещения всех из них с помощью двух операций при выполнении кинематического твердого тела. условия. Это самое большое преимущество этого метода.

Группирующая или «родительская» стратегия, которой мы будем следовать для решения этой проблемы, изображена на рисунке ниже.

Теперь, когда мы увидели, как работают группы графических объектов и как эффективно применять к ним преобразования, мы готовы кодировать функцию 3D-анимации.

В этом случае мы будем использовать 3D-модель Saab Gripen, которую мы уже подготовили на шагах 1 и 2, поэтому мы должны учитывать в качестве входных данных пять различных углов отклонения для поверхностей управления полетом (симметричное отклонение флаперонов по носу, левому и правому борту. , симметричные передние кромки и руль направления), стандартные переменные механики полета и некоторые вспомогательные параметры, которые мы будем использовать для настройки видео анимации.

Помните, что если ваша 3D-модель имеет больше поверхностей управления, чем у Saab Gripen, вы должны добавить их в качестве дополнительных входных данных для функции визуализации.

После определения интерфейса функции мы перейдем к загрузке файла mat, содержащего информацию о частях модели, и инициализации дескриптора видео с помощью функции (если мы выбрали сохранение анимации)

На последующем этапе мы откроем новое окно рисунка с пустыми осями, чтобы затем определить группы преобразований, которые мы собираемся использовать для анимации графических объектов.

На этом этапе мы готовы приступить к рисованию нашего самолета. Сначала мы построим твердые части тела с помощью функции patch, и мы назначим их все для parent (). Затем мы продолжим рисовать подвижные управляющие поверхности и настраивать камеру и свойства освещения оси.

Так выглядит фигура, которую мы только что построили с помощью рендеринга нашей 3D-модели. Выглядит неплохо, не правда ли?

На следующем этапе мы построим дополнительные визуальные ориентиры вокруг самолета, которые помогут нам в дальнейшем лучше визуализировать движение самолета и изменение углов Эйлера (курс, тангаж и угол крена). В приложении к этим ссылкам мы также будем отображать текущие значения наиболее важных параметров полета.

Теперь осталось построить только два объекта: вектор скорости самолета и перекрестную диаграмму входов пилота.

Теперь у нас есть все строительные блоки, показанные на рисунке, поэтому мы можем переходить к анимации 3D-модели, кадр за кадром. Основные шаги, которые мы будем выполнять в каждом кадре:

  1. Обновите круги и линии, представляющие углы Эйлера
  2. Обновите группу трансформации жестких деталей
  3. Обновите группу трансформации элементов управления
  4. Обновить вектор аэродинамической скорости
  5. Обновите текстовые дескрипторы текущим значением каждого из параметров полета, представленных на рисунке.
  6. Измените цвет самолета, если он вылетает из контролируемого полета.
  7. Измените цвет поверхностей управления полетом, если они достигают максимального угла отклонения (насыщенность положения)
  8. Приостановите цикл, если требуется, чтобы анимация отображалась в реальном времени.
  9. Получите рамку фигуры и добавьте ее в файл фильма.

Вот фрагмент кода цикла анимации:

Держу пари, вам не терпится увидеть пример анимации, которую можно получить с помощью этого инструмента, так что давайте!

А как насчет маневра отрыва?

Может, рапид-прокат?

Или, может быть, маневр ножницами?

Что мне действительно нравится в этих анимациях, так это то, что вы можете с первого взгляда увидеть положение ручки управления пилота, значение основных параметров полета, то, как движутся поверхности управления полетом самолета, и как изменяется вектор аэродинамической скорости во время маневра.

С таким представлением даже неопытный в динамике полета может понять, что происходит в очень сложном маневре. Видео стоит тысячи историй времени, не так ли?

Все, что вы ищете, здесь

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



Выводы

Теперь у вас есть знания, вы знаете, как работает инструмент, каковы его строительные блоки и как их изменять. Итак, поиграйте с кодом и измените его по своему усмотрению для своих собственных приложений. Возможности безграничны.

Получите этот «вау» эффект в своих презентациях с видео, которые вы можете записывать с помощью этого инструмента.

Надеюсь, тебе понравится, приятель.