УДК 629.7:623.592:004.43(086.48), ВАК 05.13.18, ГРНТИ 20.00.00

Пирогов П. Д.
Некоторые аспекты создания авиасимуляторов

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

Some aspects of the simulation

П. Д. Пирогов

P. D. Pirogov

Ухтинский государственный технический университет,
г. Ухта, Россия

Ukhta state technical University,
Ukhta, Russia

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

This paper discusses issues related to the development of the simulator and flying model aircraft in it. In addition to piloting, there is the construction of models. In this regard, a number of problems, namely the absence of the editor in most simulators, the inconvenience of the existing editors, lack of pre-prepared models. In this work special attention is paid to investigation of the subject area, the choice of the system architecture, modelling, way of implementing a software product. The materials of this work are primarily of interest to game developers sandboxes and modelers.

Ключевые слова: авиасимулятор, программирование, модель

Keywords: simulator, programming, model

Введение

Актуальной задачей авиамоделирования является возможность проверить характеристики модели до первого полёта. Создание собственной модели сопряжено со многими трудностями. Это трудности собственно постройки, требования к материалам, так и трудности создания проекта модели. Моделисту перед сборкой желательно рассчитать огромное количество параметров для прототипа, чтобы быть уверенным в результате. Проблема в том, что качество прототипа определяется в конце вычислений. И этот результат далеко не всегда положительный. Следовательно, возникает необходимость менять прототип модели и повторять все вычисления – а это большие затраты по времени. Поэтому большинство моделистов строят обычно достаточно простые модели из потолочной плитки, без серьёзного расчёта, ограничиваясь приблизительным расчётом центровки. Такие вещи, как эффективность рулей, устойчивость, управляемость, минимальная скорость, определяются экспериментально по ходу испытаний. Для простой контурной модели из потолочной плитки цена конструктивной ошибки может быть невелика (построить новую можно за вечер), но чем модель сложнее, тем больше ресурсов на неё затрачивается, цена ошибки возрастает практически экспоненциально.

Изучение аналогов

С целью упростить расчёты и сэкономить пользователю время и силы, существует ряд приложений. Авиамодельные симуляторы сейчас достаточно широко представлены на рынке. Однако не все они в полной мере выполняют поставленную задачу и удовлетворяют требованиям пользователя. Как правило, модельные симуляторы представляют собой программу, позволяющую управлять одной моделью, выбранной из заранее подготовленного набора моделей. Так как в жизни моделей очень много, кроме того существуют уникальные, построенные самостоятельно, то в итоге чтобы потренироваться для отработки полётных навыков приходится «подбирать» модель. Это крайне неудобно и иногда модель вообще невозможно подобрать. Исключение представляет собой симуляторы CSM и Phoenix 5.0. CSM помимо возможности управления самолётом позволяет редактировать данные моделей. Это даёт возможность проверить поведение ещё не построенной модели и вносить коррективы. Тем не менее, несмотря на то, что моделирование было крайне подробным и достоверным (несмотря на то, что продукт был выпущен в 1995 году, моделисты считают его уровень расчёта поведения модели, непревзойдённым), оно имело недостатки. Например, в CSM невозможно смоделировать биплан (или другой самолёт с числом крыльев больше одного). Физическая модель была полностью ориентирована на моноплан классической схемы. Кроме того, проект создавался ещё во времена DOS и сейчас он имеет большие проблемы с совместимостью. Phoenix 5.0 сочетает в себе реалистичную физику, современную графику и множество уникальных функций, благодаря чему подходит для начинающих, и для профессиональных моделистов. Имеет возможность летать по сети, неплохую звуковую библиотеку, а также бесплатную подгрузку новых моделей. Так же в отличие от многих симуляторов имеет достаточно продуманный редактор, правда являющийся, отдельным софтом. Позволяет настраивать в графическом режиме крылья, рули, фюзеляж.

К минусам можно отнести высокую цену, некоторые спорные решения в графике, а также любимую фишку производителей авиамодельных симуляторов: уникальный кабель для подключения аппаратуры. Актуальным недостатком является использование отдельного приложения для постройки модели, которое далеко то совершенства. Например, 3D модель надо создавать в отдельном приложении и потом загружать в редактор.

Рисунок 1. Редактор Phoenix-а

Постановка задачи

Таким образом складываются предпосылки написания такой программы, которая будет отличаться от уже существующих наличием недостающих возможностей, а именно: более широкой возможностью для моделирования, а также упрощение этого процесса (применение специального раздела в самой программе; в CSM, например, это осуществлялось путём редактирования файлов, Phoenix 5.0 имеет требует приложение). Важным аспектом является возможности симулятора так таковые. Алгоритмы, описывающие полет должны быть оптимизированы под актуальную задачу. Например, крайне перспективным выглядит применение элементов Advanced Flight Model. В Standard Flight Model параметры, влияющие на образование аэродинамической силы, заданы на весь самолёт целиком, и сила эти рассчитываются для всего самолёта сразу. Это было характерно для всех симуляторов недавнего времени. В AFM самолёт «разделён» на множество частей, для каждой из которых параметры заданы отдельно, аэродинамическая сила считается на каждую часть отдельно, и общее движение самолёта складывается в результате действия на него всех этих сил, приложенных каждая в своём месте. Это позволяет воспроизводить такие тонкие эффекты, как неравномерный срыв потока на разных деталях планера самолёта, несимметричность обтекания самолёта при его вращении. Это позволяет получать довольно точное воспроизведение деталей поведения реального самолёта, таких, как покачивание перед сваливанием, динамика развития сваливания в штопор, поведение в штопоре, поведение при выполнении резких манёвров, «просадка» самолёта при выводе из пикирования, реакция на резкие движения рычагов управления самолётом – все это, благодаря увеличенной «глубине» модели, удалось приблизить к реальному поведению самолёта в этих условиях. Кроме того, это позволило избавиться от отдельной модели физики самолёта для моделирования его поведения на закритических углах атаки, впервые во всех симуляторах [4]. Таким образом основой для симулятора должен стать алгоритм, позволяющий реализовать виртуальный полет с применением AFM, и прицелом на возможность редактирования.

Выбор среды разработки

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

Было решено остановить выбор на среде Unity. Unity является бесплатным инструментом разработки приложений, поддерживает сценарии на языке программирования C#, систему наследования объектов, импорт большого количества форматов. В среде разработки MonoDevelop, в которой происходит непосредственное написание программного кода для Unity, и является скорее единственным выходом в условиях ограниченного времени на разработку и детальное изучение среды, нежели лучшей альтернативой.

В Unity интегрирован физический движок PhysX, что достаточно удобно для разработки. Для обработки физического поведения и взаимодействия объектов из которых состоит модель внутри Unity под воздействием кода симулятора используется именно PhysX. Это кроссплатформенный физический движок для симуляции ряда физических явлений, а также комплект средств разработки (SDK) на его основе, имеет аппаратное ускорение. PhysX может также производить вычисления с использованием обычного процессора. Стоит отметить, что PhysX имеет определённые ограничения при расчётах, что влияет на точность. Чрезвычайно перспективным выглядит использование Newton Game Dynamics – физический движок реального времени, моделирующий реалистичное поведение твёрдых тел в компьютерных играх и других приложениях реального времени. В отличие от большинства других физических движков, работающих в реальном времени, «Newton» больше акцентирован на физическую точность моделирования, чем на скорость. Его обработчик является детерминированным и не базируется на традиционных методах. Преимущество движка заключается в том, что он может обрабатывать тела с более высоким отношением масс (до 400:1), и моделирование является очень устойчивым и легко настраиваемым [6].

Реализация

В данном разделе будут показаны некоторые из наиболее важных компонентов системы, описаны методы, реализующие основные алгоритмы по обработке данных. Описание сопровождается демонстрацией программного кода на языке C#.

Главным элементом самолёта, который наделяет его способностью летать является крыло. За описанием действующих на крыло сил используется скрипт Forces. Силы рассчитываются для каждого элемента отдельно, что позволяет получить аддитивную модель, удобную как для применения в редакторе (легко редактировать модель, путём изменения количества элементов), так и воплотить парадигму AFM.

На крыло при обтекании действует аэродинамическая сила, которая раскладывается соответственно на подъёмную силу и силу сопротивления.

Рисунок 2. Аэродинамическая сила и профиль

Подъёмная сила и сила сопротивления рассчитываются по следующим формулам (1–2):

    Y = c∙ ρ ∙ ∙      (1)

    X = c∙ ρ ∙ ∙      (2)

где,    cx, cy – коэффициенты сопротивления и подъёмной силы соответственно;

    ρ – плотность воздуха;

    S – форма крыла в плане.

Разложение аэродинамической силы на вектора подъёмной силы и силы сопротивления возможно в скоростной и связанной системах отсчёта [2]. Из-за особенностей физики Unity было принято решение использовать для расчёта связанную систему координат.

Рисунок 3. Составляющие сил в связанной системе координат

Связанная система координат лежит в плоскости профиля и связана собственно с ним. То есть сила сопротивления всегда направлена вдоль хорды профиля, а подъёмная сила всегда перпендикулярна к силе сопротивления. Выбор подобной реализации связан с тем что в физике Unity сила прикладывается в локальных координатах, причём поворачивать вектор прикладываемой силы достаточно неудобно. Подъёмная сила и сила сопротивления в связанной системе отсчёта называются нормальной и продольной аэродинамическими силами. Выбранная реализация позволяет использовать стандартную функцию AddRelativeForce.

Листинг 1. Реализация сил

normal = 1.225f * db.getPolarByAngle(angleAttack).Cy * 1.05f * (ActualVelocity * ActualVelocity) / 2f; //нормальная сила
lateral = -1.225f * db.getPolarByAngle(angleAttack).Cx * 1.05f * (ActualVelocity * ActualVelocity) / 2f; //продольная сила
rb.AddRelativeForce (0, normal, lateral, ForceMode.Force);


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

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

 

Рисунок 4. Поляра

Рисунок 5. Угол атаки

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

    cy = cya cos a + cxa sin a; cx = cxa cos a – cya sin a    (3)

    cya = cy cos a – cx sin a; cxa = cx cos a + cy sin a.    (4)

Перерасчёт выполняется в Excel. От угла атаки изменяется не только коэффициенты подъемной силы и сопротивления, но и центр давления. Центр давления – это точка приложения аэродинамической силы. Для определения положения этой точки использовалась формула расчета центра давления в зависимости от угла атаки (5).

Рисунок 6. Центр давления в связанной системе координат

         (5)

Пример файла:

Рисунок 7. Представление поляры в файле

Для извлечения материалов из текстового файла требуется парсер, который и загружает данные в программу. В самой программе используется класс Dictionary, который позволяет по ключу извлекать нужную информацию. Подобная реализация позволяет осуществить гораздо более быструю работу приложения, чем вариант с обходом массива. Минусом данного решения является, что всегда должен быть ключ, который есть в списке ключей. Угол атаки, являющийся ключом в данном случае, может и не быть точным значением. Для того чтобы исключить ошибку, угол атаки по которому определяется данные поляр округляется до целых.

Листинг 2. Реализация загрузки поляры

public
class
Polar {

public
float Cy;

public
float Cx;

public
float Cm;

public
Polar(float Cy, float Cx, float Cm)
{

this.Cy = Cy;

this.Cx = Cx;

this.Cm = Cm;
}
}

public
class
AnglesDatabase{

public
string filename = «C:/Users/HP/Documents/New Unity Project A/Assets/polars.txt»;

//List<float> angelAttack;
Dictionary <float, Polar> angelAttack;

//List<Polar> polars;


int indexplus = 60;

int indexminus = 60;

int ser = 0;

public
AnglesDatabase(){

//angelAttack = new List<float> ();
//polars = new List<Polar> ();
angelAttack = new
Dictionary<float, Polar>();

Листинг 3. Реализация загрузки поляры



public
void Load(){

foreach(string lol in
File.ReadAllLines(filename)){

Debug.Log (lol);

string line = lol;
line = line.Replace (‘,’, ‘.’);

float[] arr = Array.ConvertAll<string, float>(line.Split(new
char[] {‘ ‘}, StringSplitOptions.RemoveEmptyEntries), elem => {

return
Convert.ToSingle(elem);});
angelAttack.Add ((float)arr[0], new
Polar(arr[1], arr[2], arr[3]));

//polars.Add (new Polar(arr[1], arr[2], arr[3]));
//Debug.Log (line);
//Debug.Log (angelAttack[0]);
//Debug.Log («(» + polars[0].Cy + » » + polars[0].Cx + » » + polars[0].Cm + «)»);
}


//ser = (int)(angelAttack.Count / 2);
//Debug.Log («» + ser);
}


public
Polar getPolarByAngle(float angle){

//Debug.Log («Angle: » + angle);——
angle = (float)System.Math.Round(angle, 0);

return angelAttack[(float)angle];

Стоит отметить, что скорость, которая фигурирует в расчетах находится в плоскости профиля и соответственно её надо пересчитывать, так как velocity по умолчанию возвращает просто скорость в глобальных координатах.

 

Рисунок 7. Профильная скорость

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

Листинг 4. Реализация расчета угла атаки и профильной скорости

//проекция на локальную плоскость z y
Vector3 v = Vector3.ProjectOnPlane(rb.velocity, transform.TransformVector(1, 0, 0));

angleAttack = Vector3.Angle(v, transform.TransformVector(0, 0, 1));
Vector3 local_v = transform.InverseTransformVector (rb.velocity.x, rb.velocity.y, rb.velocity.z);
angleAttack *= -Mathf.Sign(local_v.y);


Заключение

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

Список литературы

1. Остославский И. В., Титов В. М. Аэродинамический расчёт самолета. 2-е изд. М. : Оборонгиз, 1947.

2. Мхитарян А. М. Аэродинамика. М. : Машиностроение, 1976.

3. Смирнов Э. П. Как сконструировать и построить летающую модель. М. : Издательство: ДОСААФ. 1973.

4. Дневники разработчика [электронный ресурс]. Режим доступа: http://forum.il2sturmovik.ru/topic/89-dnevniki-razrabotchika/#entry60770

5. Drag (physics) // Википедия [электронный ресурс]. Режим доступа: https://en.wikipedia.org/wiki/Drag_(physics)

6. Newton Game Dynamics // Википедия [электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Newton_Game_Dynamics

List of references

1. Ostoslavsky I. V., Titov V. M. Aerodynamic calculation of the aircraft, Moscow, 1947.

2. Mkhitaryan A. M., Aerodynamics, Moscow, Publishing House «Engineering», 1976.

3. Smirnov E. P., How to design and build flying model, Moscow, Publishing house: DOSAAF, 1973.

4. Diaries developer. Mode of access http://forum.il2sturmovik.ru/topic/89-dnevniki-razrabotchika/#entry60770.

5. »Drag (physics)», Wikipedia, Mode of access https://en.wikipedia.org/wiki/Drag_(physics).

6. »Newton Game Dynamics», Wikipedia, Mode of access https://ru.wikipedia.org/wiki/Newton_Game_Dynamics

VN:F [1.9.17_1161]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.17_1161]
Rating: +2 (from 2 votes)
VN:F [1.9.17_1161]
Стиль изложения
Информативность
Сложность вопроса
Научная новизна
Коммерциализуемость
Rating: 4.2/5 (1 vote cast)
Некоторые аспекты создания авиасимуляторов, 10.0 out of 10 based on 2 ratings