Перейти к содержанию
Авторизация  
Hellboy

Основы аэродинамики JSBSim для авиасимулятора FlightGear

Рекомендуемые сообщения

Димыч, специально тебе.:D

 

Основы аэродинамики JSBSim для авиасимулятора FlightGear

 

1. Введение

 

JSBSim - это программа вычисления полетной динамики (Flight Dynamic Model, FDM). Программа написана на С++, и распространяется по лицензии GPL. Это open-source проект. Программа собирается любым современным компилятором под любую операционную систему - включая разные версии Windows, Linux, BSD, MacOS. JSBSim может работать как автономно, так и в составе авиасимулятора. Сайт проекта - jsbsim.sf.net

JSBSim рассчитывает движение классическим методом коэффициентов. Кроме расчета параметров движения, программа также дает возможность моделировать автопилоты, положения управляющих поверхностей, шасси и тд. JSBSim используется в образовательных, научно-исследовательских и производственных проектах. Это дефолтная динамика для авиасимулятора FlightGear. Автор - Jon S. Berndt, авиаинженер.

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

2. Силы, моменты, координаты

 

Давайте рассмотрим, как JSBSim моделирует движение. Допустим, в предельно упрощенном продольном канале (рис.1).

400_1.jpg Рис. 1. Силы в продольном канале.

Рассмотрим самолет, на него действует сила тяжести Fg. приложенная к цт, и подъемная сила крыла Fl, приложенная к крылу. Перпендикулярно действует сила тяги двигателя Ft, и сила сопротивления Fd. Кроме этого, к стабилизатору приложена сила Fs, компенсирующая продольный момент, возникающий из-за того, что точка приложения подъемной силы не совпадает с центром тяжести.

Когда все эти силы уравновешены (их векторная сумма равна нулю), самолет движется прямолинейно с постоянной скоростью.

А вот как эти силы пересчитываются для моделирования в модуле динамики (рис.2)

400_2.jpg Рис. 2. Силы и моменты в модуле динамики.

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

Моменты поворачивают самолет вокруг осей, так же, как силы смещают самолет вдоль осей. Таким образом, у нас появляется еще три степени свободы. В дополнении к движению по координатам X, Y, Z, самолет вращается вокруг X, Y, Z. Итого - шесть степеней свободы. Центром вращения самолета является его центр тяжести. А вот точка приложения сил и моментов - другая.

В динамике JSBSim все силы и моменты, имеющие аэродинамическую природу, считаются приложенными к одной точке - аэродинамическому центру самолета. Это аналог центра тяжести для сил гравитации и инерции.

В процессе полета, положение аэродинамического центра изменяется. Особенно интенсивно положение меняется при перехода через звуковой барьер. Динамика JSBSim рассчитывает этот эффект. Но для расчетов сил и моментов необходимо какое-то опорное значение, начальное положение аэродинамического центра. Такое положение задается с помощью аэродинамической опорной точки, Aero Reference Point, AERORP или ARP. Это важнейшая координата в файле динамики.

Как я понял, при создании динамических моделей, ARP должна ставиться в точке фокуса самолета. При этом положение фокуса самолета. из-за влияния стабилизатора, смещается относительно фокуса чистого профиля. Если для профиля положение фокуса соответствует около 25% САХ, то например для самолета Ту-154 фокус находится между 55 и 60% САХ.

Относительное положение ARP и центра тяжести - другая важная величина. От этого положения зависит устойчивость модели. Но координаты центра тяжести - тоже величина непостоянная. В полете, положение ЦТ меняется из-за выработки топлива, обледенения итд. Для определения начального положения ЦТ используется другая опорная точка, CG. Это координаты центра тяжести для пустого самолета. После запуска программы, координаты центра тяжести пересчитываются динамикой в зависимости от загрузки и залитого топлива, этот процесс называется триммированием модели.

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

Важно понимать, что динамика JSBSim рассчитывает движение точки - центра тяжести самолета. Но в сцене мы наблюдаем движение трехмерной модели. Как соотносятся между собой координаты модели и рассчитанные динамикой координаты ЦТ? Чтобы ответить на этот вопрос, необходимо рассмотреть основные системы координат JSBSim.

В JSBSim cуществуют две системы координат, Structural Frame и Body Frame, (рис.3)

400_3.jpg Рис. 3. Системы координат JSBSim.

На самом деле, систем координат больше, но именно эти две непосредственно имеют отношение к созданию моделей. Body Frame - это СК, движущаяся совместно с моделью. Ноль СК находиттся в центре тяжести, ось U смотрит вперед, V - вправо, W - вниз. Динамика JSBSim в этой системе координат ввозвращает скорости и ускорения. Если посмотреть встроенным браузером свойств в раздел velocities или accelerations, можно увидеть много переменных с символами U, V, W. Это и есть параметры движения в координатах Body Frame - U соответствует движению вперед, V - вправо, W - вниз.

Если повернуть СК Body Frame вокруг оси V на 180', мы получим Structural Frame СК. Эта СК тоже движется вместе с моделью, но ее центр не соответствует центру тяжести. Ноль Structural Frame - некая условная опорная точка, условный ноль, datum. Почему условный? Дело в том, что динамике неважны абсолютные величины координат опорных точек- она принимает в расчет только их положение относительно друг друга. Поэтому datum может находиться в любом удобном для разработчика месте. Часто его располагают в крайней передней точке модели - носовом обтекателе, или обтекателе винта етс.

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

Теперь мы можем разместить визуальную модель в сцене. Для этого нам потребуется позиционировать модель в координатах Structural Frame таким образом, чтобы совместить опорные точки. Какие? Как ни странно, основная проблема - точное совмещение шасси. Даже небольшой промах приводит к неестественному вращению машины на взлете, проваливание колес сквозь ВПП и другие дефекты.

Позиционирование модели производится с помощью опорной точки Visual Reference Point, VRP. Это смещение центра координат вашей визуальной модели. Если не задавался оффсет в xml-файле модели - нулевая координата в ac или 3ds-файле будет соответствовать смещению VRP в Structural Frame. Оси в этой СК направлены так: X - назад против движения модели, Y - вправо, Z - вверх. Все анимации, координаты приборов итд. используют систему координат визуальной модели, совпадающей по направлению осей с Structural Frame, но имеющих смещение - VRP.

Почему анимации используют систему координат, смещенную относительно Structural Frame, ведь в принципе модель можно сместить средствами 3D редактора? Имхо, дело в том, что для анимации важно точно (буквально до миллиметров) знать размеры и координаты объектов визуальной модели. Получить их можно, только измерив требуемые размеры с помощью 3D редактора. Но все эти размеры будут в СК 3D-редактора! Поэтому все анимации работают именно с этими координатами - это позволяет прямо проставлять размеры и координаты в xml-код. Нам нужно иметь возможность смещать всю модель одновременно, вместе с анимированными деталями плюс приборы. Каждый прибор - это отдельная модель. Чтобы при подстройке положения модели в СК Structural Frame, для правильного вращения и работы шасси, не пересчитывать каждый раз параметры анимаций и положения приборов, СК 3D-редактора загружается в симулятор без изменений, а вся подстройка делается с помощью единственного параметра - VRP.

400_4.jpg Рис. 4. Опорные точки модели.

Для всех перечисленных точек (ARP, VRP, EYEPOINT, CG) важно не абсолютное значение координат, а их относительные величины, поэтому автор 3D-модели не обязан смещать ноль координат в своем файле в какое-то определенное место. Модель может быть правильно позиционирована только средствами JSBSim.

Кстати, ппочему-то только в Blender-е, система координат совпадает с Structural Frame. И 3DMax, и AC3D почему-то меняют местами оси Y и Z, что приводит к неудобствам при измерении координат для анимации...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3. Property Tree

 

Выше упоминался "встроенный браузер свойств". Что это такое? Если мы запустим авиасимулятор FlightGear, и откроем меню File->Browse Internal Properties, мы увидим в открывшемся окне что-то ннапоминающее корневую директорию жесткого диска. Узлы (Property Node) группируют переменные (property), так же как файлы группируются в директориях диска. В такой древовидной структуре сим держит свои внутренние переменные, и называется это Property Tree.

Динамика JSBSim имеет своё дерево свойств ( по-русски звучит это, конечно, сомнительно - но так уж принято переводить ). Точка монтирования - /fdm/jsbsim, и все внутренние переменные JSBSim лежат в этой ветке. Важное замечание. Динамика полностью изолирована в этой ветке, как если бы на директорию файловой системы UNIX была напущена злая команда chroot. О существовании других веток Property Tree динамика не знает - и это правильно, потому что таких веток может и не быть, если динамика запущена отдельным программным модулем, вне симулятора. Но иногда требуется доставлять даннные в вннутренние переменные динамики. Для этого предусмотрен специальный механизм описания интерфейсных свойств.

Давайтее рассмотрим структуру Property Tree JSBSim. Часть переменных используется для ввода управляющих сигналов и команд - это все живет в разделе fcs (flight control system). Например, переменная fcs/flap-cmd-norm - это команда управления закрылками. Cmd в ее названии означает, что это команда, симулятор управляет ею, меняет ее значение. Norm - значение команды нормировано в диапазоне 0:1. Для команд, имеющих по своей природе биполярные значения, нормировка производится в диапазоне -1:1. Оси джойстика транслируются симулятором в команды управления элеронами, рулем высоты, рулем направления именно в этом диапазоне. подобное соглашение об именах следует соблюдать, хотя имена свойств и могут быть произвольными.

Часть переменных JSBSim - это выходные значения, их потребителями могут являться как другие компоненты JSBSim, так и анимации. Например, fcs/flap-pos-deg - это переменная, где хранится положение закрылок в градусах. Пересчет из flap-cmd-norm в flap-pos-deg выполняется по правилу, описанному в кконфигурациооном файле модели, с учетом преддельных углов отклонения, врремени перекладки итд. Эту переменную можно использовать непосредственно в xml-анимации. Кроме того, эту переменную использует как входную та часть программного комплекса JSBSim, которая отвечает за расчет аэродинамики.

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

4. Средства разработки

 

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

Для создания и редактирования динамических моделей JSBSim разработан редактор JSBSim Commander, который можно взять на jsbsimcommander.sf.net. JSC тоже проект open-source, и тоже находится в процессе непрерывной разработки, как и JSBSim, и FlightGear в целом. JSC следует использовать devel-версии, на момент написания статьи релиз довольно сильно устарел и на некоторых платформах не работал.

JSC состоит из двух частей. Одна - это редактор динамики, вторая - визуализатор данных. Сама динамика JSBSim имеет встроенные средства записи в лог-файл требуемых параметров симуляции, и для анализа лог-файла и предназначена эта часть JSC.

400_jc2.jpg Рис.5 JSBSim Commander, для редактирования открыта секция fileheader.

При создании и отладке динамических моделей желательно также использовать автономную версию JSBSim. Это обычная консольная программа на C++, которая не требует никаких допполнительных библиотек и в собранном виде занимает очень мало места. Однако это полноценная динамика - ее можно использовать как внешний инструмент расчета параметров движения, связав по сети с симулятором, причем необязательно FlightGear. Есть средства для связи JSBSim с Mathlab/Simulink. Но для нас важно то, что в автономную версию JSBSim встроена поддержка скриптов. Это позволяет на порядки увеличить скорость разработки. Записав в скрипт необходимые управляющие команды, можно выполнить испытательный полет, не запуская симулятор. Используя эти две ппрограммы - JSC и JSBSim, можно создавать динамические модели не используя симулятор вообще. При этом просчет пятиминутного полета выполняется за несколько секунд. Для анализа параметров полета лог-файл загружается в JSC, где есть встроенные средства визуализации, либо можно использовать Mathlab или Exel. Примеры скриптов и динамических моделей входят в дистрибутив JSBSim, скрипты наглядно показывают возможности модеелирования в автономной среде.

5. Конфигурационный файл модели

 

Давайте рассмотрим структуру главного конфигурационного файла модели. По соглашениям, принятым в FlightGear, имя файла динамики должно совпадать с именем модели (ннапример, для модели TU-154 файл динамики следует называть tu-154.xml). Несмотря на помощь Commander-a, иногда приходится работать непосредственно с xml - особенно в секции flight control - к сожалению, моя версия Commander-а напрочь отказалась создавать новые элементы, ппри том что существующие редактировала нормально. Издержки devel-версии и open-source в целом, увы... а может, следствие собственных кривых рук:)

Кроме того, не следует пытаться создавать файл динамики с нуля - для этой цели существует Аэроматика. Зайдите на сайт jsbsim.sf.net/aeromatic, и последовательно, шаг за шагом, создайте шаблон динамики на основе геометрических данных, веса, мощности и типа двигателя итд. Получившаяся динамика, конечно, не даст требуемые параметры движения модели - но послужит отправной точкой для дальнейшей работы.

Итак. Файл динамической модели JSBSim состоит из девяти секций: fileheader, metrics, mass_balance, ground_reactions, propulsion, flight_control, autopilot, aerodynamics, output. Формат каждой секции разный, в зависимости от того, какую задачу каждая секция решает. Секция autopilot иногда выносится в отдельный файл, чтобы можно было использовать автопилоты сторонних производителей. Пример такого отдельного автопилота есть в дистрибутиве автономной версии JSBSim, смотрите в качестве примера c172ap.xml.

Вот пример секции fileheader, скриншот JSBSim Commandera приведен на рис.1:

<code>

<fileheader>

<author> Yurik V. Nikiforoff and Aeromatic v 0.9 </author>

<filecreationdate> now </filecreationdate>

<description> Model a tu154b </description>

<version> 0.0 </version>

</fileheader>

</code> Это чисто служебная информация. Commander позволяет заполнить эту область более содержательно - с всякими дополнительными полями итд. Поехали дальше.

<code>

<metrics>

<wingarea unit="M2"> 180 </wingarea>

<wingspan unit="M"> 37.55 </wingspan>

<chord unit="M"> 5.285 </chord>

<wing_incidence unit="DEG"> 0.05236 </wing_incidence>

<htailarea unit="M2"> 40.55 </htailarea>

<htailarm unit="M"> 30 </htailarm>

<vtailarea unit="M2"> 31.7 </vtailarea>

<vtailarm unit="M"> 21.64 </vtailarm>

<location name="AERORP" unit="M">

<x> 27.211 </x>

<y> 0 </y>

<z> 0 </z>

</location>

<location name="EYEPOINT" unit="M">

<x> 3.35 </x>

<y> -0.76 </y>

<z> 1.9 </z>

</location>

<location name="VRP" unit="M">

<x> 26 </x>

<y> 0 </y>

<z> 0 </z>

</location>

</metrics>

</code> В секции metrics хранятся геометрические размеры и смещения опорных точек. Сверху вниз: расчетная площадь крыла, размах крыла, САХ, установочный угол крыла, площадь горизонтального оперения, плечо горизонтального оперения, площадь и плечо вертикального оперения, координаты ARP, EYEPOINT, VRP. EYEPOINT - это точка, где расположен наблюдатель, (пилот). Я не знаю точно, где учитывается эта точка, есть предположение, что в расчетах перегрузки на месте пилота - такая переменная есть в разделе accelerations. Назначение остальных точек уже обсуждалось. Отметим еще раз, что динамике важно их относительное положение - некий условный ноль координат (datum) может быть где угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значения htailarea, htailarm, vtailarea, vtailarm на самом деле не участвуют в аэродинамических расчетах вв той динамике, которую нам сварила Аэроматика. Эти величины учтены в соответтствующих коэффициентах, но напрямую не используются - помечены как deprecated. После того, как отработала Аэроматика, изменение этих величин на расчет параметров движения не влияет.

Обратите внимание, что все величины тут имеют единицу измереения. Аэроматика готовит динамику в английской системе мер, но если для элемента стоит тег unit - это значит, можно использовать и метрическую. Commander позволяет легко менять систему мер (хотя и не пересчитыывает значения автоматически) - вооружившись калькулятором, можно перевести всю динамику в привычные нам метры, килограммы, литры итд. Бывают косяки - wing_incidence, несмотря на тег DEG, кстати единственно возможный, все равно идет в расчеты в радианах. Возможно, к выходу статьи этот баг уже ппофиксят.

<code>

<mass_balance>

<ixx unit="KG*M2">1.3e+06</ixx>

<iyy unit="KG*M2">4.36916e+06</iyy>

<izz unit="KG*M2">5.92493e+06</izz>

<ixz unit="KG*M2">0</ixz>

<iyz unit="KG*M2">0</iyz>

<ixy unit="KG*M2">0</ixy>

<emptywt unit="KG">54000</emptywt>

<location name="CG" unit="M">

<x>26.68</x>

<y>0</y>

<z>1.8</z>

</location>

<pointmass name="cargo" >

<weight unit="KG">1000</weight>

<location name="POINTMASS" unit = "M">

<x> 15 </x>

<y> 0 </y>

<z> 1.8 </z>

</location>

</pointmass>

</mass_balance>

</code> Следующая секция содержит информацию о массе пустого самолета. Шесть моментов инерции, три осевых (ixx, iyy, izz) и три центробежных (ixz, iyz, ixy). Центробежные моменты равны нулю, так их посчитала Аэроматика. О моментах инерции можно прочесть тут . Расчет каждого момента не точен и основан, как я догадываюсь, на упрощенных представлениях о распределении масс по объему самолета. Я игрался с этими значениями, и в общем-то, результаты соответствовали ожидаемым - например, уменьшение значения ixx приводило к уменьшению инерции по крену, машина начинала энергичнее реагировать на отклонения элеронов. В своем проекте я оставил моменты такими, как их рассчитала Аэроматика.

Далее. Пустой вес машины и положение центра тяжести. Взяты как есть из Лигума, по высоте я справочных данных не нашел и поднял ЦТ на 1.8 метра, расположив его по центру фюзеляжа.

Обратите внимание на элемент pointmass. Это, как легко можно догадаться, дополнительная масса. Приведенный пример показывает, как легко загрузить тонну в передний салон и потом получить проблемы на взлете и посадке с передней центровкой.

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

Секция ground_reactions содержит координаты и свойства точек, которыми модель взаимодействует с землей.

<code>

<ground_reactions>

<contact type="BOGEY" name="NOSE">

<location unit="M">

<x> 7.9 </x>

<y> 0 </y>

<z> -2 </z>

</location>

<static_friction> 0.8 </static_friction>

<dynamic_friction> 0.5 </dynamic_friction>

<rolling_friction> 0.02 </rolling_friction>

<spring_coeff unit="N/M"> 946000 </spring_coeff>

<damping_coeff unit="N/M/SEC"> 315360 </damping_coeff>

<max_steer unit="DEG"> 5 </max_steer>

<brake_group> NONE </brake_group>

<retractable> 1 </retractable>

</contact>

<contact type="BOGEY" name="LEFT_MAIN">

<location unit="M">

<x> 26.82 </x>

<y> -5.75 </y>

<z> -2 </z>

</location>

<static_friction> 0.8 </static_friction>

<dynamic_friction> 0.5 </dynamic_friction>

<rolling_friction> 0.02 </rolling_friction>

<spring_coeff unit="N/M"> 3.1536e+06 </spring_coeff>

<damping_coeff unit="N/M/SEC"> 630720 </damping_coeff>

<max_steer unit="DEG"> 0 </max_steer>

<brake_group> LEFT </brake_group>

<retractable> 1 </retractable>

</contact>

<contact type="BOGEY" name="RIGHT_MAIN">

<location unit="M">

<x> 26.82 </x>

<y> 5.75 </y>

<z> -2 </z>

</location>

<static_friction> 0.8 </static_friction>

<dynamic_friction> 0.5 </dynamic_friction>

<rolling_friction> 0.02 </rolling_friction>

<spring_coeff unit="N/M"> 3.1536e+06 </spring_coeff>

<damping_coeff unit="N/M/SEC"> 630720 </damping_coeff>

<max_steer unit="DEG"> 0 </max_steer>

<brake_group> RIGHT </brake_group>

<retractable> 1 </retractable>

</contact>

<contact type="STRUCTURE" name="LEFT_WING">

<location unit="M">

<x> 26.82 </x>

<y> -18.7 </y>

<z> -0.5 </z>

</location>

<static_friction> 0.8 </static_friction>

<dynamic_friction> 0.5 </dynamic_friction>

<rolling_friction> 0 </rolling_friction>

<spring_coeff unit="N/M"> 3e+06 </spring_coeff>

<damping_coeff unit="N/M/SEC"> 630720 </damping_coeff>

<max_steer unit="DEG"> 0 </max_steer>

<brake_group> NONE </brake_group>

<retractable> 0 </retractable>

</contact>

</ground_reactions>

</code> В примере приведены шасси (BOGEY) - носовая стойка и две основные, и STRUCTURE - это просто контактные точки. В примере приведена только одна точка - законцовка левого крыла.

Для любой контактной точки задается параметры трения - static_friction и dynamic_friction, сопротивление качению - rolling_friction, параметры подвески: коэффициент упругости spring_coeff и коэффициент демпфирования, damping_coeff. Если колесо управляемое, можно указать максимальный угол разворота max_steer, если есть тормоза - можно указать, к какой группе относится это колесо (brake_group), по умолчанию есть две групппы торможения - правая и левая. Можно отметить стойку как убираемую (retractable). по умолчанию все стойки шасси по выпуску управляютсяя одной переменной fcs/gear-pos-norm. Стоек шасси и контактных точек может быть произвольное число.

В готовящемся к выходу релизе JSBSim 1.0 система моделирования шасси сильно расширена. Добавлены возможность индивидуального управления выпуском стоек, переключаемый угол max_steer и много других вкусностей.

В секции propulsion хранится информация о двигателях и топливных баках.

<code>

<propulsion>

<engine file="nk-8-2u">

<location unit="M">

<x> 34 </x>

<y> -3.13 </y>

<z> 1.78 </z>

</location>

<orient unit="DEG">

<roll> 0 </roll>

<pitch> 0 </pitch>

<yaw> 0 </yaw>

</orient>

<feed>0</feed>

<thruster file="direct">

<location unit="M">

<x> 37.27 </x>

<y> -3.03 </y>

<z> 1.7 </z>

</location>

<orient unit="DEG">

<roll> 0 </roll>

<pitch> -2 </pitch>

<yaw> 0 </yaw>

</orient>

</thruster>

</engine>

<tank type="FUEL">

<location unit="M">

<x> 25 </x>

<y> 0 </y>

<z> 0 </z>

</location>

<capacity unit="KG">3300</capacity>

<contents unit="KG">3300</contents>

</tank>

</propulsion>

</code> Элемент engine ссылается на конфигурационный файл nk-8-2u.xml, который должен находится в директории TU154/Engine. Там же должен лежать и файл thruster-а - direct.xml. Оба эти файла генерит Аэроматика. Если бы мы делали модель, приводимую в движение винтом, то в качестве thruster-а у нас бы был конфигурационный файл винта, со своими характеристиками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Динамика JSBSim позволяет моделировать различные типы двигателей - поршневые, турбореактивные, турбопропы, ракетные и даже электрические. Не все из них смоделированы достаточно детально - но например поршневой двигатель с винтом может доставить массу удовольствия тому, кто способен разобраться во всех тонкостях винто-моторной группы. Мне это еще предстоит - Ан-2 так и не доведен до ума в этой части. Вообще, по моторам и винтам в JSBSim нужно писать отдельную статью...

Вернемся к конфигу. В примере показан только один двигатель, его координаты отрицательны по Y, это двигатель N1. Двигателей может быть произвольное число, в одной модели можно применять двигатели разного типа. В секции engine, кроме координат двигателя (я так понимаю, что это координаты его центра тяжести), есть ещё его ориентация. Ориентация для турбоджета значения не имеет - направление вектора тяги задается ориентацией thruster-а. Для турбореактивного двигателя thruster всегда - direct, и это просто координаты и направление сопла. Обратите внимание, что двигатель дует на два градуса вверх от горизонтальной плоскости, что соответствует реальному направлению реактивной струи для Ту-154Б.

Турбореактивные двигатели в JSBSim могут иметь реверс - см. переменные propulsion/engine[N]/reverser-angle-rad. Если присвоить этой переменной значение 3.14, вектор тяги развернется на 180'. Отметим тут, что направление вектора тяги можно динамически менять раздельно для каждого двигателя, что открывает любопытные возможности для моделирования разных экспериментальных устройств, от лунных платформ до ракетных ранцев...

Топливо. Обратим внимание на тег feed элемента engine. Это номер топливного бака, откуда данный двигатель будет потреблять топливо. Двигатель может питаться от своего топливного бака, или все двигатели могут питаться от одного общего. Топливные баки описываются тегом tank, у каждого бака есть координаты его центра тяжести, емкость (в разных системах мер), также можно указать количество залитого топлива по умолчанию. Динамика при запуске симуляции пересчитает новое положение ЦТ, в зависимости от залитого топлива.

Баки доступны в property tree, их может быть произвольное количество, и их можно заполнятьперекачиватьсливать либо средствами JSBSim, либо Nasal, либо просто вручную, через браузер свойств. До появления динамических пойнтмасс с помощью дополнительных непотребляемых топливных баков можно было моделировать перераспределение массы самолета - например, при разных вариантах загрузки или при сбросе груза. Сейчас необходимость в фальшивых топливных баках отпала - следует использовать элемент pointmass в секции mass_balance.

Следующая секция flight_control описывает движение управляющих поверхностей и других движущихся частей самолета, влияющих на аэродинамику. Все переменные, относящиеся к данной секции, размещены в директории fcs и это наверное самая многочисленная группа переменных. Flight_control - это основной интерфейс динамики с внешним миром. Нужные команды передаются динамике извне путем изменения входных переменных другими частями программного комплекса авиасимулятора, или из скрипта, или по сети. В секции flight_control эти команды преобразуются в другие переменные, переменные положения, в соответствии с физическими особенностями движения той или иной поверхности. Эти новые переменные сами по себе не оказывают влияния на параметры движения модели, они являются входными значениями для функций аэродинамики в следующей секции.

Как было уже отмечено, переменные положения могут использоваться для анимации. Однако тут есть одна тонкость. При использовании встроенного режима повтора (reply), когда вы просматриваете, например, свою посадку, вы обнаружите, что анимации не работают как ожидается. Переменные FDM при реплее сохраняют свое последнее положение, т.к. повтор движений делается вне динамики, другими средствами FlightGear. Поэтому, если нужна анимация в режиме повтора - следует использовать копии свойств из других частей property tree, специально для этого предназначенных.

Как работает секция flighgt_control? Допустим, мы хотим смоделировать выпускающиеся закрылки. В самолете выпуск закрылков управляется с помощью рычага, ручки, многопозиционного переключателя итд. В симуляторе выпуск закрылков управляется с клавиатуры, либо с кнопки джойстика, либо с дополнительной оси джойстика или вообще из самодельного "железного кокпита" через любой возможный интерфейс, или с помощью команды из глобальной сети, если у нас мультиплей. Для части этих способов симулятор (не JSBSim!) содержит уже готовые средства конфигурирования команд - например, для клавиатуры и джойстика есть готовые подпрограммы, которые можно удобно использовать из xml-конфига или nasal. Но каким бы способом не управлялись закрылки, команда на выпуск или уборку - это присваивание значения (в идеале - нормированного) переменной в секции flight_control.

Допустим, наш самолет имеет четыре фиксированных положения закрылков - {0, 15, 28, 45} градусов. А нормированнная команда на выпуск принимает значения {0, 0.34, 0.67, 1.0}. Логика обработки событий клавиатуры/джойстика изменяет значение нормированной команды скачком, либо с небольшой задержкой, таким образом давая возможность использовать это значение в качестве входного для анимации ручки. Но закрылки выпускаются значительно медленнее. Для обеспечения связи между движением ручки управления (нормированной команды) и положения исполнительного механизма (переменной положения), служат средства секции flight_control.

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

Поскольку системы управления самолетом достаточно сложны, чтобы обеспечить некоторое логическое упорядочивание, в секции flight_control применяются именованные каналы. Каналы примерно соответствуют абзацам в тексте, и не являются обязательными. Можно не пользоваться разбиением на каналы, все переменные глобальны, но это не способствует восприятию кода.

Итак. Секция flight_control делится (необязательно) на каналы. В канале (или секции) описывается последовательная цепочка элементов, каждый из которых определенным образомм преобразует входные данные. Средством связи между элементами flight_control служат именованные переменные (property).

Давайте смоделируем выпускаемые закрылки в динамике JSBSim. Выглядит это так:

<code>

<flight_control name="tu154b">

 

<channel name="Flaps">

 

<kinematic name="Flaps Control">

<input>fcs/flap-cmd-norm</input>

<traverse>

<setting>

<position>0</position>

<time>0</time>

</setting>

<setting>

<position>15</position>

<time>7</time>

</setting>

<setting>

<position>28</position>

<time>8</time>

</setting>

<setting>

<position>45</position>

<time>12</time>

</setting>

</traverse>

<output>fcs/flap-pos-deg</output>

</kinematic>

 

</channel>

 

</flight_control>

</code> Здесь мы описали секцию flight_control, состоящую из единственного канала - Flaps. В этом канале используется единственный элемент kinematic, ему присвоено имя "Flaps Control". У этого элемента есть вход - fcs/flap-cmd-norm, и выход - fcs/flap-pos-deg. Таким образом, элемент преобразует положение ручки управления закрылками в угловое положение самих закрылков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каким образом это происходит? Взгляните на структуру элемента. Тег traverse ограничивает набор промежуточных точек перемещения поверхности (setting). Каждое промежуточное положение - это пара тегов position и time. Время здесь - это время, необходимое на перемещение поверхности между соседними положениями. В первом блоке setting время всегда нулевое. По умолчанию, первое положение соответствует нулевому значению входной переменной, последнее - единичному.

Давайте рассмотрим канал управления рулем высоты. Входными параметрами этого канала являются положение штурвальной колонки (fcs/elevator-cmd-norm, сюда сим транслирует ось джойстика) и триммер РВ (fcs/pitch-trim-cmd-norm, это можно рассматривать как модель МЭТ).

<code>

<channel name="Pitch">

 

<summer name="Pitch Trim Sum">

<input>fcs/elevator-cmd-norm</input>

<input>fcs/pitch-trim-cmd-norm</input>

<clipto>

<min>-1</min>

<max>1</max>

</clipto>

</summer>

 

<summer name="Pitch Absu Sum">

<input>fcs/pitch-trim-sum</input>

<input>fcs/absu-pitch</input>

<clipto>

<min>-1</min>

<max>1</max>

</clipto>

</summer>

 

<aerosurface_scale name="Elevator Control">

<input>fcs/pitch-absu-sum</input>

<range>

<min>-0.506</min>

<max>0.28</max>

</range>

<output>fcs/elevator-pos-rad</output>

</aerosurface_scale>

 

</channel>

</code> Здесь мы видим два новых элемента - summer и aerosurface_scale. Первый из них - обычный сумматор, который может вычислять и разность - если одно из входных значений предварить минусом, например вот так: -fcs/pitch-trim-sum. Сумматор "Pitch Trim Sum" суммирует положение колонки и триммера, ограничивая выходное значение величиной -1:1 - обратите внимание на тег clipto. Второй сумматор, "Pitch Absu Sum", суммирует положение ШК+МЭТ и выходной сигнал АБСУ, являясь в какой-то мере моделью дифференциальной качалки агрегата РА-56.

Обратите внимание на именование сумматоров. Имя первого сумматора "Pitch Trim Sum" автоматически превратилось в переменную fcs/pitch-trim-sum, которая служит входным параметром второго сумматора. А можно было написать сразу: , расположив сумматор в другой "директории" property tree, в целях порядка и наглядности. В большинстве случаев, использование тега output необязательно - имя любого элемента является одновременно и переменной, где хранится его выходное значение.

На рис.6 приведен скриншот JSBSim Commandera, где в наглядном виде представлена структурная схема данного канала.

400_jc1.jpg Рис.6 Канал управления рулем высоты в JSBSim Commander.

Элемент aerosurface_scale преобразует входное (по умолчанию нормированное) значение - в выходное, в заданном диапазоне, без временных задержек. В нашем случае, это можно рассматривать как модель идеальной рулевой машины. Значение -1 на входе преобразуется в величину -0.56, а значение 1 - в величину 0.28. Это в радианах, а в градусах это будет соответствует углам -30: +16.

Элемент aerosurface_scale может включать дополнительный тег zero_centered, и если он установлен в единицу - то ноль входного нормированного значения транслируется в середину выходного диапазона (рис.7).

400_5.jpg Рис. 7. Работа элемента aerosurface_scale и трансляция нуля.

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

<code>

<aerosurface_scale name="name">

<input> {[-]property name} </input>

<domain>

<min> {value} </min> <!-- If omitted, default is -1.0 ->

<max> {value} </max> <!-- If omitted, default is 1.0 ->

</domain>

<range>

<min> {value} </min> <!-- If omitted, default is 0 ->

<max> {value} </max> <!-- If omitted, default is 0 ->

</range>

<zero_centered< value </zero_centered>

[<clipto>

<min> {[-]property name | value} </min>

<max> {[-]property name | value} </max>

</clipto>]

[<gain> {property name | value} </gain>]

[<output> {property} </output>]

</aerosurface_scale>

</code> Кратко рассмотрим другие способы масштабировать входную величину, примеры взяты из исходников JSBSim:

<code>

<pure_gain name="Roll AP Wing Leveler">

<input>fcs/attitude/sensor/phi-rad</input>

<gain>2.0</gain>

<clipto>

<min>-0.255</min>

<max>0.255</max>

</clipto>

</pure_gain>

</code> Pure_gain - это масштабный коэффициент, можно так же использовать переменную в теге gain.

<code>

<scheduled_gain name="Scheduled Steer Pos Deg">

<input>fcs/steer-cmd-norm</input>

<table>

<independentVar>velocities/vg-fps</independentVar>

<tableData>

10.0 80.0

50.0 15.0

150.0 2.0

</tableData>

</table>

<gain>0.017</gain>

<output>fcs/steer-pos-rad</output>

</scheduled_gain>

</code> Scheduled_gain - способ нелинейного преобразования входной величины. В приведенном примере, отклонение колеса зависит от скорости - чем выше скорость, тем меньше отклонение уравляемого колеса при одном и том же управляющем воздействии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Актуатор - это недавно появившийся элемент управления. Он предназначен для более точного моделирования различных пприводов и рулевых машин, и по логике, имхо, должен использоваться после aerosurface_scale. Актуатор позволяет задать для привода задержку (lag), предельную скорость перемещения (rate_limit), начальное смещение (bias), мертвую зону (deadband_width), механический гистерезис (hysteresis_width).

<code>

<actuator name=fcs/gimbal_pitch_position>

<input> fcs/gimbal_pitch_command </input>

<lag> 60 </lag>

<rate_limit> 0.085 <rate_limit> <!-- 5 degrees/sec -->

<bias> 0.002 </bias>

<deadband_width> 0.002 </deadband_width>

<hysteresis_width> 0.05 </hysteresis_width>

<clipto> <!-- +/- 10 degrees -->

<min> -0.17 </min>

<max> 0.17 </max>

</clipto>

</actuator>

</code> Мы рассмотрели синтаксис и некоторые из возможных элементов секции flight_control. Остальные нерассмотренные тут элементы относятся в основном к узлам автоматики - всевозможные фильтры, PID-контроллеры, итд. Они, в основном, применяются при моделировании автопилотов. Все элементы flight_control могут использоваться в секции autopilot, и наоборот, так что с точки зрения динамики обе эти секции полностью равнозначны, а раздельные секции сделаны в целях логического упорядочивания, а также обеспечения возможности использования одной модели автопилота в разных динамиках.

Секция autopilot в данной статье рассматриваться не будет - не столько из-за сложности или большого объема, но в основном потому, что это требует серьезной теоретической подготовки. Может быть потом, когда-нибудь...

Следующая секция - aerodynamics. Это, собственно, и есть динамика. Именно в этой секции, на основе вычисленного положения управляющих поверхностей (секция flight_control), тяги двигателя (propulsion), массы, состояния атмосферы (переменные в директории atmosphere) итд производится расчет аэродинамических сил и моментов. Вычислив силы и моменты, динамика (уже без использования дополнительных конфигурационных параметров) вычисляет очередные координаты центра тяжести модели, угловое положение, а также скорости, ускорения, углы атаки и массу дополнительных параметров движения. Вот, в общем, таким образом все это и работает.

Секция aerodynamics разделена на шесть основных разделов, примерно так же, как flight_control делится на каналы. Только каналов может быть произвольное количество, а вот аэродинамических осей (axis) должно быть ровно шесть: LIFT, DRAG, SIDE, PITCH, ROLL, YAW. Три первые - это силы, они смещают ЦТ модели каждая по своей координате. Силы могут быть заданы в ньютонах, а могут - в фунтах (lbs). Остальные три - это моменты. Моменты поворачивают модель вокруг соответствующей оси, проходящей через ЦТ. Моменты задаются в ньютонах на метр либо в фунтах на фут (lbs*ft). По некоторой причине, в своем проекте я оставил силы и моменты в английской системе мер.

В каждом разделе axis может быть произвольное количество функций. Если это раздел сил - то функция должна возвращать силу в соответствующей системе мер (как определено в заголовке axis). То же справедливо и для моментов. Динамика суммирует все силы и моменты по соответствующим осям.

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

Функции раздела aerodynamics используют свои элементы, отличные от рассмотренных в разделе flight_control. Использовать элементы из flight_control в разделе aerodynamics нельзя.

Давайте рассмотрим, как моделировать аэродинамические силы. Смотрите, что нам нарисовала Аэроматика:

<code>

<aerodynamics>

<axis name="LIFT" unit="LBS">

<function name="aero/coefficient/CLalpha">

<description>Lift_due_to_alpha</description>

<product>

<property>aero/qbar-psf</property>

<property>metrics/Sw-sqft</property>

<table>

<independentVar>aero/alpha-rad</independentVar>

<tableData>

-1.57 1.23

-0.26 0.05

0 0

0.26 0.05

1.57 1.23

</tableData>

</table>

</product>

</function>

</axis>

</aerodynamics>

</code> В этом примере показано, как смоделировать зависимость подъемной силы от угла атаки. Кривая зависимости Су(альфа) задана в таблице. Все функции секции aerodynamics размещены в директории aero/coefficient. Тег description задает комментарий. Дальше следует тег product, который задает произведение величин. Все, что стоит внутри этого тега, перемножается. Из исходников следует, что на данный момент существуют следующие арифметические операции и функции, для использования в разделе aerodynamics:

 

  • - sum (понимает несколько аргументов)

 

  • - difference (несколько аргументов)

 

  • - product (несколько аргументов)

 

  • - quotient (два аргумента)

 

  • - pow (два аргумента)

 

  • - exp (два аргумента)

 

  • - abs (один аргумент)

 

  • - sin (один аргумент)

 

  • - cos (один аргумент)

 

  • - tan (один аргумент)

 

  • - asin (один аргумент)

 

  • - acos (один аргумент)

 

  • - atan (один аргумент)

 

  • - atan2 (два аргумента).

Назначение и принцип использования, думаю, особых пояснений не требует. Большинство встроенных функций - просто врапперы к соответствующим функциям C++.

Кроме этого, в функциях аэродинамики широко используется табличное представление величин - обратите внимание на тег table и tableData. Чтобы выбрать требуемое значение, используется тег independentVar. В примере показана обычная "двумерная" таблица - зависимость Cy(alpha). Если нам необходимо несколько кривых - "трехмерная таблица", она может быть задана так:

<code>

<table name="Roll due beta">

<independentVar lookup="row">aero/alpha-wing-rad</independentVar>

<independentVar lookup="column">fcs/flap-pos-deg</independentVar>

<tableData>

0 28 45

0 -0.00135 -0.003 -0.0034

0.08727 -0.0017 -0.0033 -0.00375

0.17453 -0.0019 -0.0036 -0.004

0.2678 -0.0025 -0.0037 -0.0048

</tableData>

</table></code> Тут в качестве параметра выборки столбца в таблице, используется вычисленная нами ранее в разделе flight_control переменная fcs/flap-pos-deg. Вот таким образом взаимодействуют эти секции.

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

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

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

Если мы рассмотрим примеры моделей, мы увидим, что все аэродинамические силы и моменты выражены через произведение скоростного напора и площади крыла. Сами же коэффициенты безразмерны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда брать конкретные значения для аэродинамических коэффициентов? Для модели Ту-154, все необходимые данные я нашел в "Практической аэродинамике" Лигума. Табличные значения я срисовывал с графиков, а коэффициенты применял те, которые приведены в тексте (обращая внимание на размерность). Уравнения для сил и моментов, которые приведены в ПА, выглядят точно так же, как в примерах готовых аэродинамик JSBSim, и переносятся в конфиг без особого труда. Но основная сложность в создании реалистичной динамики - это заставить все составляющие работать совместно. Тонкая настройка, инженерное искусство. Не уверен, что у меня получилось как надо...

Вот как выглядит сложная функция для вычисления подъемной силы: <code>

<function name="aero/function/cy">

<description>Lift due to alpha</description>

<table name="Cy">

<independentVar lookup="row">aero/alpha-wing-rad</independentVar>

<independentVar lookup="column">aero/function/cmf</independentVar>

<tableData>

-0.95 -0.8 -0.5 0.2 28 45

-0.06981 -0.65 -0.65 -0.65 -0.65 0 0.25

0 -0.22 -0.2 -0.25 -0.25 0.4 0.65

0.04887 0.05 0.1 0.05 0 0.65 0.93

0.08727 0.24 0.36 0.3 0.2 0.87 1.15

0.1658 0.62 0.8 0.78 0.6 1.3 1.58

0.2618 0.78 1 1.19 1.05 1.78 2.08

0.2792 0.78 1.01 1.25 1.11 1.85 2.13

0.2967 0.75 0.95 1.28 1.18 1.9 2.08

0.3316 0.56 0.78 1.25 1.26 1.85 1.7

0.3665 0.3 0.5 1.18 1.3 1.7 1.4

0.384 0.18 0.35 1.1 1.27 1.6 1.3

0.4363 -0.2 -0.1 0.9 1.13 1.3 1

</tableData>

</table>

</function>

</code>В данном примере, кроме зависимости Су(альфа), в качестве аргумента участвует вспомогательная функция - cmf(flaps, mach). Эта функция была написана заранее, чтобы считать некий интегральный параметр, зависящий одновременно от положения закрылок и числа М. Это позволило свести на один график разные зависимости и упростить расчет. Обе функции - cmf и Су - глобальны, их результаты используются для расчетов в других разделах секции aerodynamics. Вот как с этой таблицей работает JSBSim Commander:

400_jc3.jpg Рис. 8. Сложная таблица.

400_jc4.jpg Рис. 9. Графическое представление таблицы. Цветом выделена одна из кривых Су(альфа,flaps,М).

Оставшиеся секции - Input и Output. Эти секции необязательны и могут быть опущены. Input имеет смысл только для автономной версии, и вроде бы сейчас уже не используется - необходимые интерфейсные свойства можно задавать прямо в секции flight_control. Это нужно делать, если мы хотим работать с собственными свойствами (переменными), нужные мы просто объявляем тегом property, и их можно использовать как входные и выходные для злементов flight_control.

Секция Output - это фактически МСРП.

<code>

<output name="fldata.csv" type="CSV" rate="1">

<simulation> OFF </simulation>

<atmosphere> OFF </atmosphere>

<massprops> OFF </massprops>

<aerosurfaces> ON </aerosurfaces>

<rates> OFF </rates>

<velocities> ON </velocities>

<forces> OFF </forces>

<moments> OFF </moments>

<position> ON </position>

<coefficients> OFF </coefficients>

<ground_reactions> OFF </ground_reactions>

<fcs> OFF </fcs>

<propulsion> ON </propulsion>

<property>attitude/heading-true-rad</property>

<property>ap/heading-true-deg</property>

<property>ap/heading-error-ils</property>

</output>

</code> В примере показано, как можно сохранять параметры полета в файл (fldata.csv), это обычный текстовый файл с данными, разделенными запятой (Comma Separated Value, CSV). Частота выборки - 1 секунда (параметр rate). Далее можно выбрать интересующий раздел для записи, лишние можно отключить. У меня выбрано: положение поверхностей (aerosurfaces), скорости (velocities), положение (position) и параметры силовой установки (propulsion). Кроме этого, в лог пишется три переменных: attitude/heading-true-rad, ap/heading-true-deg, ap/heading-error-ils. Две последние - мои пользовательские переменные.

Данный лог разбирается JSBSim Commander-ом, данные представляются в виде кривых, с которыми довольно удобно работать. Можно сразу рассмотреть результаты исправлений, внести новые, итд. Отладка динамики - процесс итерационный и кропотливый...

400_jc5.jpg Рис. 10. Работа с анализатором логов JSBSim Commander. Представлена кривая воздушной скорости. Из левой панели можно выбрать любой параметр для визуализации. В правом нижнем углу цифры показывают положение курсора по X и Y.

400_jc6.jpg Рис. 11. Многоканальный режим. Кривые сверху вниз: высота, скорость, угол атаки, обороты КВД двигателя N1

6. Заключение.

 

Мы рассмотрели основы динамики JSBSim. Приведеннная информация, надеюсь, позволит начинающему разработчику разбирать уже готовые динамики, понимать принципы и практические приемы моделирования. Многое осталось за кадром - в частности, создание автопилотов, моделирование конкретных двигателей, винто-моторных групп, шасси. Эти вопросы требуют серьезного рассмотрения и отдельных больших статей. Существует довольно много документации на сайте проекта, в разделе newsletter лежит документация в виде журналов. Все материалы этого раздела следует обязательно прочитать, там, в общем-то, немного. Там же есть wiki. К сожалению, все на английском. Насколько я могу судить, у нас в стране еще нет ни переводов, ни статей, посвященных JSBSim.

Если данная статья привлекла внимание разработчиков динамик к JSBSim и FlightGear - будем считать задачу выполненной, время потрачено не зря. Мне кажется, динамика достойна самого серьезного внимания со стороны симерского сообщества.

Источник: http://www.avsim.su/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Это я так, разговор поддержать. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не увидишь. Слишком тонко и сложно для моделирования. Это ж не реактивный момент винта -)).

 

Тут кстати на себе испытал. Газовали самолет (Цесну, на которой на слете были). Подошел слева к капотам - почти вплотную. Тихо, нормально, все хорошо. Обошел, подошел справа - ближе чем на метр не подойти. Сдувает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×
×
  • Создать...