Выполнение бочки никак не помогает гражданскому самолету довезти своих пассажиров до места назначения или истребителю в бою, но требует, при правильном выполнении, задействовать все органы управления самолетом: элероны, руль высоты и руль направления.
В данной публикации изложено описание процесса поворота самолета на 360 градусов вокруг продольной оси без снижения с точки зрения такой науки, как динамика полета, и приведено описание того, как можно заставить ваш самолет сделать бочку правильно.
Введение
После завершения активной фазы очередного проекта у меня с коллегой по беспилотной деятельности возник вопрос, чем заняться пока новые проекты не заняли все свободное время. В ответ на вопрос, заданный пустоте, мы получили очень конкретный ответ «сделай бочку (do a barrel roll)». И правда: бочка это машина Голдберга в авиации, одновременно сложная, практически (в воздушном бою) бесполезная и приносящая исключительно эстетическое удовольствие фигура пилотажа. Так почему бы не научить авиамодель делать бочку в автоматическом режиме, даже Google её делает.
Прежде чем начать практическую реализацию мы решили изучить это процесс с привлечением компьютерных моделей, и вот что из этого получилось.
Немного теории
Для начала немного о том, почему самолеты летают и о том, как положение самолета описывается относительно поля тяготения. Самолет держит в воздухе подъемная сила, назовем ее Y, которая создается на крыле, но вот какая штука, эта сила появляется только при обдуве крыла набегающим потоком воздуха, соответственно, нужно самолет разогнать. Можно, конечно «разбежавшись прыгнуть со скалы», потратить часть потенциальной энергии поля тяготения земли на разгон и даже зависнуть на мгновенье, но неразрывно с подъемной силой возникает аэродинамическое сопротивление, назовем эту силу X, которое будет самолет тормозить, и подъемная сила будет падать, а вместе с ней и мы. Падать мы будем под действием силы тяжести G. Для противодействия силе сопротивления у всех нормальных самолетов есть двигатель, он создает силу тяги P, которую можно использовать для преодоления силы сопротивления. Простейшая кинематическая модель самолета описывает его движение как перемещение материальной точки в поле тяготения земли. В горизонтальном полете с постоянной скоростью сила тяжести уравновешена подъемной силой крыла Y = G, а сила сопротивления — тягой двигателя X = P.
Если посмотреть на материальную точку под микроскопом, она превратится в материальное тело. Оно и к лучшему: мы можем разглядеть у самолета фюзеляж, крыло, хвостовое оперение, которое состоит из горизонтального стабилизатора и вертикального киля. На левой и правой консолях крыла расположены элероны, на горизонтальном хвостовом оперении — руль высоты, на вертикальном — руль направления. Если всем этим усиленно вертеть, аппарат начнет маневрировать, и задача сделать бочку сведется к тому, по какому закону изменять положение органов управления для достижения необходимой траектории движения аппарата в пространстве и относительно его собственных осей.
Движение аппарата в пространстве невозможно описать только при помощи связанной с самолетом системой координат, ведь нам интересно положение аппарата относительно земли. Для этого вводится система координат, которая называется «местная земная система координат». Ось X этой системы находится в горизонтальной плоскости и направлена на географический север. Oсь Y направлена вертикально вверх. Ось Z дополняет их до правой тройки векторов. Расположение связанной системы координат относительно местной земной системы определяется углами крена, тангажа и рыскания. Угол между продольной осью самолета (в нашем случае ось x связанной СК) и горизонтальной плоскостью XZ называется углом тангажа, он изменяется при отклонении руля высоты. Угол между осью z связанной СК и осью Z местной земной СК, повёрнутой так, что угол рыскания равен нулю, называется углом крена, он изменяется при отклонении элеронов. Угол между осью X местной земной СК и проекцией оси x связанной СК на горизонтальную плоскость XZ называется углом рыскания, отсчитывается против часовой стрелки от оси X местной земной СК. Такой формализации нам должно быть достаточно для описания движения самолета при выполнении бочки, и пусть, мы не воспользуемся далее буквенными обозначениями осей, всегда полезно повторить основы.
Инструментарий
Для моделирования движения аппарата мы используем инструментарий, который предоставляет программа для моделирования динамики летательных аппаратов с открытым исходным кодом JSBSim. Вывод графиков доверим gnuplot, а визуализацию маневров самолета FlightGear. В качестве базовой динамической модели возьмем истребитель North American P-51 Mustang: его маневренности будет достаточно для выполнения бочки. Для визуализации будем использовать менее агрессивный, спортивный самолет ЯК-53.
fgfs --native-fdm=socket,in,60,,5500,tcp --fdm=external --timeofday=noon --aircraft=Yak-53 --disable-sound --disable-real-weather-fetch --disable-clouds3d --disable-clouds
В этой строке первые параметры указывают внешний источник данных о динамике самолета при запуске симулятора. Параметр aircraft задает требуемую модель аппарата. Остальные параметры не обязательны, их значения можно найти здесь. Полезные сочетания клавиш:
«V»-изменить вид модели
Shift+Esc – перезапуск FlightGear с сохранением параметров командной строки
Ctrl+«R» — запуск записи полета для повторения того, что получилось.
Вот собственно и все, что нам понадобится в симуляторе FlightGear. Вернемся к программе моделирования динамики JSBSim. В каталоге JSBSim\aircraft находятся динамические модели самолетов. В каталоге JSBSim\engine находятся динамические модели двигателей и винтов. Динамические модели самолетов хранятся в отдельных каталогах в файлах вида name*.xml. В конце каждого файла есть секция, отвечающая за вид выходных данных при моделировании. Если мы хотим, чтобы вывод был в виде, подходящем для визуализации во FlightGear, то она должна выглядеть так:
<output name="localhost" type="FLIGHTGEAR" port="5500" rate="60"/>
Если же мы хотим сохранять данные в файл, то так:
<output name="p51d.csv" rate="60" type="CSV">
<property> velocities/vc-kts </property>
<property> aero/alphadot-deg_sec </property>
<property> aero/betadot-deg_sec </property>
<property> fcs/throttle-cmd-norm </property>
<simulation> OFF </simulation>
<atmosphere> OFF </atmosphere>
<massprops> OFF </massprops>
<aerosurfaces> ON </aerosurfaces>
<rates> ON </rates>
<velocities> ON </velocities>
<forces> OFF </forces>
<moments> OFF </moments>
<position> ON </position>
<coefficients> OFF </coefficients>
<ground_reactions> OFF </ground_reactions>
<fcs> ON </fcs>
<propulsion> OFF </propulsion>
</output>
Запускать процесс моделирования удобно при помощи пакетного файла, расположенного в корневой папке JSBSim\, строкой
JSBtest.bat *имя_скрипта
с содержанием
rem Remove the old result file
del /Q aircraft\p51d\Results\%1.csv
rem Run the test
Debug\JSBSim --script=aircraft\p51d\scripts\%1.xml --outputlogfile=aircraft\p51d\Results\%1.csv>JSBSim.out --realtime
rem Generate gnuplot to the screen
gnuplot aircraft\p51d\plots\%1.p
Данный файл удаляет предыдущие результаты моделирования, запускает скрипт, расположенный по адресу \JSBSim\aircraft\p51d\scripts\, а затем запускает отрисовку полученных данных при помощи gnuplot. Параметр realtime необходимо указывать в случае, когда данные из JSBSim хочется получать в режиме реального времени, например, при визуализации во FlightGear.
Посмотрим на содержание файла скрипта:
<?xml version="1.0" encoding="utf-8"?>
<runscript>
<use aircraft="p51d" initialize="scripts/airborne"/>
<run start="0" end="5" dt="0.0166666">
<!--
Проводим триммирование аппарата для горизонтального полета
-->
<event name="Trims">
<condition> sim-time-sec ge 0.0 </condition>
<set name="simulation/do_simple_trim" value="1"/>
</event>
<!--
Отклоняем элероны по максимуму
-->
<event>
<condition> sim-time-sec ge 0.5 </condition>
<set name="fcs/aileron-cmd-norm" value="1"/>
</event>
<!--
Возвращаем элероны в исходное положение
-->
<event>
<condition> sim-time-sec ge 2.95 </condition>
<set name="fcs/aileron-cmd-norm" value="0"/>
</event>
</run>
</runscript>
Для правильного запуска в третьей строке указывается модель самолета, который будет смоделирован, и путь к инициализационному файлу с содержанием
<?xml version="1.0" encoding="utf-8"?>
<initialize name="airborne">
<!--
Файл с начальными параметрами состояния аппарата
-->
<running> -1 </running>
<altitude unit="FT"> 325.0 </altitude>
<vc unit="KTS"> 210.0 </vc>
<latitude unit="DEG"> 42.3769 </latitude>
<longitude unit="DEG"> -70.9993 </longitude>
</initialize>
Осталось только рассмотреть содержание файла для построения графиков через gnuplot:
set autoscale # scale axes automatically
unset log # remove any log-scaling
unset label # remove any previous labels
set xtic auto # set xtics automatically
set ytic auto # set ytics automatically
set tics font "Arial, 16"
set key font "Arial, 16"
set xlabel font "Arial, 16"
set ylabel font "Arial, 16"
# If you have graphical capabilities, you can plot on your screen
# if none of the other terminals is specificed.
# This is how to output the plot in PostScript format
#set terminal postscript portrait enhanced color lw 1 "Helvetica" 14 size 8.5,11
# This is how to output the plot in PNG format
#set terminal png size 1280,960
#set output "aircraft/p51d/results/plot.png"
# This is how to output the plot in PDF format. (Not available on Mac)
#set terminal pdfcairo color size 8.5,11
#set output " aircraft/p51d/results/plot.pdf"
set multiplot title ""
set size 1,0.30
set lmargin 10
set xrange [0:4]
set ytic auto
set origin 0.0,0.00
set xlabel "Время,с"
set ylabel "Высота, м"
plot "aircraft/p51d/results/trim-cruisep51d.csv" using 1:($43*0.3048) title "" with lines
set origin 0.0,0.33
set ylabel "Угол тангажа, °"
set xlabel ""
plot "aircraft/p51d/results/trim-cruisep51d.csv" using 1:33 title "" with lines
set origin 0.0,0.66
set ylabel "Угол крена, °"
set xlabel ""
set yrange [-180:180]
set ytics 60
plot "aircraft/p51d/results/trim-cruisep51d.csv" using 1:32 title "" with lines
unset multiplot # exit multiplot mode
pause -1 "Press ENTER to continue"
Данный файл формирует и выводит изображение на экран трех графиков: угла крена, тангажа и высоты от времени. Данные для построения берутся из файла *имя_скрипта.csv. Попутно, имперские единицы переводятся в привычные нам, метрические. Можно изменить файл для вывода в форматах PostScript, PNG или PDF, раскомментировав соответствующие строки.
Вот, в общем-то, и весь процесс подготовки инструментов для самостоятельного моделирования и отображения движения самолета.
Моделирование и результаты
Если вообразить «сферический», а точнее идеальный самолет, у которого оси связанной системы координат совпадают с главными осями эллипсоида инерции и органы управления создают моменты каждый относительно только одной из осей, можно на качественном уровне понять, как аппарат будет двигаться при отклонении органов управления. Допустим, самолет летит в горизонтальном полете; отклоняя элероны в противоположные стороны, мы изменяем величину подъемной силы на консолях крыла, что приводит к возникновению момента сил относительно оси x, и аппарат начнет вращаться вокруг этой оси. Для выполнения бочки это как раз, то что нам нужно. Составляем скрипт, в котором элероны максимально отклонены в течение 2.45 секунд, а затем возвращаются в исходное положение:
<?xml version="1.0" encoding="utf-8"?>
<runscript>
<use aircraft="p51d" initialize="scripts/airborne"/>
<run start="0" end="5" dt="0.0166666">
<!--
Проводим триммирование аппарата для горизонтального полета
-->
<event name="Trims">
<condition> sim-time-sec ge 0.0 </condition>
<set name="simulation/do_simple_trim" value="1"/>
</event>
<!--
Отклоняем элероны по максимуму
-->
<event>
<condition> sim-time-sec ge 0.5 </condition>
<set name="fcs/aileron-cmd-norm" value="1"/>
</event>
<!--
Возвращаем элероны в исходное положение
-->
<event>
<condition> sim-time-sec ge 2.95 </condition>
<set name="fcs/aileron-cmd-norm" value="0"/>
</event>
</run>
</runscript>
Результаты моделирования приведены на графике:
Видно, что самолет повернулся на 360 градусов по крену, однако, сделал этот маневр со снижением в 40 метров и наклонил нос на 14 градусов — это пример совсем не годной бочки.
И правда, если вспомнить, что самолет издалека это материальная точка, то при вращении проекция подъемной силы на направление силы тяжести уменьшается и самолет начинает снижение, а нам этого совсем не нужно, ведь мы хотим выполнить красивую бочку без снижения. Для этого, до того, как мы начали отклонять элероны, нужно создать запас вертикальной скорости. Берем штурвал на себя — отклоняется руль высоты — возникает момент силы относительно оси z. Нос самолета поднимается, и мы начинаем набирать высоту — в этот момент пора начинать вращение. Добавляем в скрипт отклонение руля высоты на 40 процентов за 0.4 секунды до начала отклонения элеронов и возвращаем его в нейтральное положение. За 0.2 секунды до окончания вращения берем штурвал полностью на себя, чтобы устранить опускание носа самолета:
<?xml version="1.0" encoding="utf-8"?>
<runscript>
<use aircraft="p51d" initialize="scripts/airborne"/>
<run start="0" end="5" dt="0.0166666">
<!--
Проводим триммирование аппарата для горизонтального полета
-->
<event name="Trims">
<condition> sim-time-sec ge 0.0 </condition>
<set name="simulation/do_simple_trim" value="1"/>
</event>
<!--
Отклоняем руль высоты "на себя"
-->
<event>
<condition> sim-time-sec ge 0.1 </condition>
<set name="fcs/elevator-cmd-norm" value="-0.4"/>
</event>
<!--
Отклоняем элероны по максимуму
Возвращаем руль высоты в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 0.5 </condition>
<set name="fcs/aileron-cmd-norm" value="1"/>
<set name="fcs/elevator-cmd-norm" value="0"/>
</event>
<!--
Отклоняем руль высоты "на себя"
-->
<event>
<condition> sim-time-sec ge 2.75 </condition>
<set name="fcs/elevator-cmd-norm" value="-1"/>
</event>
<!--
Возвращаем элероны в нейтральное положение
Возвращаем руль высоты в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 2.95 </condition>
<set name="fcs/aileron-cmd-norm" value="0"/>
<set name="fcs/elevator-cmd-norm" value="0"/>
</event>
</run>
</runscript>
Смотрим, что получилось:
Вот она — вполне приличная, быстрая бочка. Если бы мы вернули руль высоты в нейтральное положение немного позже, аппарат набрал бы небольшую высоту и после отклонения элеронов пошел бы в разворот. Комбинация «штурвал на себя» и «отклонение элеронов» приводит к тому, что подъемная сила крыла при наклоне аппарата начинает действовать по нормали к текущей траектории аппарата и искривляет её тем сильнее, чем более отклонен руль высоты. Можете попробовать сами и убедиться в этом.
Предыдущая бочка была выполнена без снижения, угол тангажа на выходе из бочки не сильно отличался от исходного. Однако, высота в процессе выполнения изменялась на 12 метров. Попробуем более активно применить органы управления, чтобы минимизировать заброс по высоте в процессе выполнения фигуры. Чтобы не вертеть органами управления самолетом абы как, заглянем в Википедию и посмотрим, как нам рекомендуют делать бочку. Основная мысль выполнения идеальной бочки состоит в том, что нужно сохранить продольную ось самолета в горизонтальной плоскости. Для этого попеременно используются руль высоты и руль направления. В начале бочки, как обычно, мы используем руль высоты, чтобы набрать вертикальную скорость. Отклоняем элероны – начинаем вращение. Когда самолет поворачивается вокруг продольной оси руль высоты и руль направления меняются местами. По достижению величины угла крена около 90 градусов отклонение руля направления приведет к поднятию или опусканию носа самолета в вертикальной плоскости. В связи с этим, отклоняем руль направления так, чтобы предотвратить опускание носа. Далее, когда угол крена достигает 180 градусов, нужно отклонить руль направления от себя чтобы в перевернутом полете удержать нос самолета в горизонтальной плоскости. При дальнейшем повороте повторяем отклонения руля направления с противоположным знаком при угле крена вблизи – 90 градусов и завершаем бочку небольшим отклонением руля высоты «на себя». Все эти этапы выражены в скрипте, приведенном ниже:
<?xml version="1.0" encoding="utf-8"?>
<runscript>
<use aircraft="p51d" initialize="scripts/airborne"/>
<run start="0" end="10" dt="0.0166666">
<!--
Проводим триммирование аппарата для горизонтального полета
-->
<event name="Trims">
<condition> sim-time-sec ge 0.0 </condition>
<set name="simulation/do_simple_trim" value="1"/>
</event>
<!--
Отклоняем руль высоты "на себя"
-->
<event>
<condition> sim-time-sec ge 0.0 </condition>
<set name="fcs/elevator-cmd-norm" value="-0.05"/>
</event>
<!--
Отклоняем элероны по максимуму
-->
<event>
<condition> sim-time-sec ge 0.5 </condition>
<set name="fcs/aileron-cmd-norm" value="1"/>
</event>
<!--
Возвращаем руль высоты в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 0.6 </condition>
<set name="fcs/elevator-cmd-norm" value="0"/>
</event>
<!--
Отклоняем руль направления
-->
<event>
<condition> sim-time-sec ge 1.4 </condition>
<set name="fcs/rudder-cmd-norm" value="0.7"/>
</event>
<!--
Возвращаем руль направления в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 1.6 </condition>
<set name="fcs/rudder-cmd-norm" value="0"/>
</event>
<!--
Отклоняем руль высоты "от себя"
-->
<event>
<condition> sim-time-sec ge 1.65 </condition>
<set name="fcs/elevator-cmd-norm" value="0.5"/>
</event>
<!--
Возвращаем руль высоты в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 2.35 </condition>
<set name="fcs/elevator-cmd-norm" value="0"/>
</event>
<!--
Отклоняем руль направления в противоположную сторону
-->
<event>
<condition> sim-time-sec ge 2.6 </condition>
<set name="fcs/rudder-cmd-norm" value="-1.0"/>
</event>
<!--
Возвращаем руль направления в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 2.8 </condition>
<set name="fcs/rudder-cmd-norm" value="0"/>
</event>
<!--
Отклоняем руль высоты "на себя"
-->
<event>
<condition> sim-time-sec ge 2.75 </condition>
<set name="fcs/elevator-cmd-norm" value="-0.4"/>
</event>
<!--
Возвращаем элероны в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 2.95 </condition>
<set name="fcs/aileron-cmd-norm" value="0"/>
</event>
<!--
Возвращаем руль высоты в нейтральное положение
-->
<event>
<condition> sim-time-sec ge 3.0 </condition>
<set name="fcs/elevator-cmd-norm" value="0"/>
</event>
</run>
</runscript>
Запускаем и смотрим, что получилось:
По крену аппарат повернулся на 180 градусов, при этом общий размах изменения высоты составил около 2.5 м — это в пять раз меньше, чем в предыдущем случае. Можно сказать, у нас получилась почти идеальная бочка.
Вместо заключения
Итак, мы рассмотрели некоторые принципы выполнения фигуры высшего пилотажа бочка и убедились, что, действуя разумно, мы можем на симуляторе выполнить неплохую по качеству бочку. Хорошо бы перейти к практике, и вот с помощью чего мы предполагаем это сделать — авиамодель + stm32f103 + mpu9250. Все эти элементы легко доступны и дешевы, так что любой желающий сможет попробовать сделать это сам. Результаты проб, ошибок и инструкция для повторения — тема следующих публикаций.
Комментарии (40)
mayorovp
02.10.2017 12:40В горизонтальном полете с постоянной скоростью сила тяжести уравновешена подъемной силой крыла Y = G, а сила сопротивления — тягой двигателя X = P.
Это только если сила тяги у двигателей горизонтальна...
RideaPlane Автор
02.10.2017 12:53В общем, да. Но, так как в горизонтальном полёте, обычно, угол атаки мал, а угол установки двигателя в принципе небольшой — принимается такое предположение.
Afinogen
02.10.2017 13:49+1Интересно, с каких пор авиамодель стала дешевой? Даже если делать из потолочи (а тут еще не факт, что полетит с первого раза) + электроника + аккумы выйдет рублей в 10. Потом нужно учить летать модель, что тоже несет расходы.
Есть опыт постройки тренера в виде цессны, вчера наконец ее облетали, я бы не сказал что это прям очень легко. Дальше будет установка ПК на F4 с прошивкой inav. И опять учить летать, настаивать пиды и т.д.
Все же интересно будет посмотреть на Вашу готовую модель делающую бочку да и другие фигуры высшего пилотажа)RideaPlane Автор
02.10.2017 17:01+1Конечно, авиамодель стоит денег. Простенький паркфлаер как раз будет стоить около 10 тысяч рублей из которых 3 будет радиоаппаратура, а ее можно использовать и с другими моделями.
izzholtik
03.10.2017 00:08Кстати, не подскажете, на старый Hitech Flash 4 ещё можно найти кварц/приёмник?
Misha_Mo
03.10.2017 09:50hobbyking.com/en_us/radios-servos/radios/synthesized-rx.html
но я думаю надо 2,4 гц использовать
сейчас громадный выбор на разный кошелек
hobbyking.com/en_us/radios-servos/radios/complete-systems.html
lingvo
02.10.2017 15:59Хмм. Получается, что вы подобрали экспериментальным путем идеальные параметры (моменты времени и угол отклонения соответсвующих рулей) для определенных условий полета — скорости, угла тангажа, характеристик самолета, высоты, давления воздуха и пр. А теперь попробуйте перемоделировать, поменяв одно или несколько из этих условий. Если все будет получаться одинаково независимо от условий — я бы перешел к физической модели.
Если нет — то ваша модель контроллера "бочки" несовершенна — нужно добавлять учет данных факторов, и возможно вводить обратную связь. Так вы, возможно, сохраните не одну авиамодель в целостностиRideaPlane Автор
02.10.2017 16:45Из всех параметров, что Вы назвали, ключевой это скорость. От нее зависит эффективность органов управления. Остальное либо связано с ней, как крейсерский угол тангажа, либо для авиамодели остаётся неизменным. Коэффициенты подобраны для конкретной модели аппарата с определенной начальной скоростью. Высота для авиамодели при визуальном пилотировании не больше 200 м. В этом диапазоне плотность и температура воздуха неизменны. При малом изменении всех параметров задачи кроме скорости, которая входит в скоростной напор квадратично, мы получим отклонение от идеальной бочки, но не драматичные. Для сохранения авиамодели, как и любого другого самолета, при совершении маневров предполагается запас по высоте.
lingvo
02.10.2017 17:24+1Хорошо. А если, допустим, бочка выполняется не в горизонтальном полете, а при наборе/уменьшении высоты? А если в наличии некоторый крен? Вы же не можете с земли точно сказать летит самолет горизонтально или нет, запуская "Бочку"?
В моем понимании Автоматический Контроллер "Бочки" (АКБ) должен уметь ее делать идеально из любого положения при любом направлении полета и в широком диапазоне скоростей. В этом же смысл вашей разработки? И в этом Вам должно помочь моделирование. Попробуйте применить показания гироскопов и акселерометров, чтобы автоматически рассчитывать время воздействия. Скорость и тяга мотора тоже желательна. Они же у вас в реальной модели будут?
Я бы применил еще Matlab/Simulink для можелирования контроллера.lingvo
02.10.2017 17:31+3*моделирования
Идеальной целью проекта ИМХО, вообще должен стать режим "бочка", как Headless mode у квадрокоптеров(когда он крутится вокруг своей оси, но тем не менее летит в нужную сторону). Т.е. включил этот режим на пульте — и самолет начинает крутить бочки непрерывно, при этом летя идеально по траектории и подчиняясь органам управления, как будто он никакой бочки и не делает вовсе. Вот это точно было бы шоу, так как реальный пилот вряд ли на это способен.
RideaPlane Автор
03.10.2017 09:40Конечный смысл нашей разработки не определен. Мы начали реализовывать пилотаж в автоматическом режиме и решили на примере этой работы выпустить ряд статей, описывающих динамику полета самолета и практическую реализацию пилотажа в железе.
Что касается matlab/simulink, это программное обеспечение совсем не бюджетное и для нашей работы избыточное, попробуем обойтись чем-то попроще, а если не получится, тогда уже достанем из ящика повязку на глаз, деревянную ногу и попугая матершинника.lingvo
03.10.2017 12:57Что касается matlab/simulink, это программное обеспечение совсем не бюджетное и для нашей работы избыточное
Раз вы работаете на Defense, то денег на одно место должно хватить, либо через студенческие лицензии — они сравнительно халявные.
А насчет избыточности вы просто не знаете, что с помощью него возможно. Почитайте концепцию Model-Based Design. Вы сделаете модель автомата тангажа/крена/рулей в Simulink, отладите ее во всех режимах в своем симуляторе самолетов и потом за пять минут сгенерите полностью работающий Cи-код для вашей STMки. И все это сделает ваш специалист по аэродинамике вообще без знаний программирования за неделю.
У вас много избыточного времени? А авиамоделей, чтобы поразбивать, тоже много?RideaPlane Автор
03.10.2017 13:24Мы не работаем на Defence, а те, кто работают, я думаю, тоже редко покупают matlab. Насчет Model-Based Design, она сработает, если будет точная модель объекта управления. Создать такую модель это отдельная задача, которую можно решать различными способами.
lingvo
03.10.2017 13:53А чем вам не нравится ваш JSBSim/Flightgear в качестве модели объекта управления? Если я правильно понимаю, в нем есть все, что вам нужно. Ну а гугл по jsbsim matlab показывает, что Model-Based Design в этом плане интересен очень многим.
RideaPlane Автор
03.10.2017 15:08+1Моделирование движения аппарата и системы автоматического управления обязательно будет частью нашей деятельности в рамках данной работы.
lingvo
03.10.2017 13:13Результаты проб, ошибок и инструкция для повторения — тема следующих публикаций.
Вот именно, что метод проб и ошибок в данном случае может обойтись Вам очень дорого. Прикиньте, что ваш программист при программировании алгоритма в Си создал баг, при котором STM32 переводит рули в крайнее положение и зависает на этом месте… А аварийную блокировку управления или хотя бы вачдог вы еще не предусмотрели — хочется ведь побыстрее на практике попробовать, правда?
В итоге нажали на кнопку и… минус одна модель — 10 тысяч. А все из-за тупого бага… И в симуляторе такого не было...
0xd34df00d
02.10.2017 16:58Бочка — вполне себе маневр уклонения от ракеты, так что и в бою поможет.
Free_ze
02.10.2017 17:02+1Это очень плохой маневр для уклонения от ракеты. Корпус ЛА практически не отклоняется с траектории.
0xd34df00d
02.10.2017 17:23Смысл не в том, чтобы отклониться от траектории, а в том, чтобы вытянуть больше g, чем ракета (с учётом разницы скоростей).
Free_ze
02.10.2017 17:41Если вы пытаетесь противопоставить эти понятия, то расскажите, как можно получить значительную перегрузку без отклонения ЛА с траектории движения?
0xd34df00d
03.10.2017 01:59+1Бочка — это не обязательно поворот без смещения продольной оси, как на последней иллюстрации в статье.
Напримерsotnikdv
03.10.2017 00:58Тактика эта применялась на заре развития ЗРК, с того момента железо шагнуло далеко вперед и ракета держит большую перегрузку, чем пилот. Плюс не делает повороты, приводящие к разрушению конструкции.
Второй момент, я не очень понимаю, как бочка поможет вам заложить вираж такой, что-бы идущая на перехват ракета получила бОльшую перегрузку, чем пилот.
Я смотрю на вещи с другой стороны прицела, но думаю военные пилоты меня поддержат. Бочка не входит в набор противоракетных маневров.
Задачи противоракетного маневра, как пассивного средства противодействия (как правило, комбинируется с активными средствами противодействия):
— срыв наведения
— подрыв БЧ на безопасном расстоянии / направлении разлета осколков
Бочка здесь нужна, как собаке пятая нога.
Но вы продолжайте пропагандировать эту идею. Глядишь в следующий раз самолет вместо выброса ловушек и резкой смены курса начнет делать бочку. Благое дело делаете (в этом месте военные пилоты меня не поддержат), мы будем вам благодарны. No pasaran, они не пролетят, товарищ!0xd34df00d
03.10.2017 02:10Тактика эта применялась на заре развития ЗРК, с того момента железо шагнуло далеко вперед и ракета держит большую перегрузку, чем пилот.
Ракете, чтобы попасть в самолёт, надо делать g больше пропорционально отношению скоростей (если не квадрату отношения, это надо будет вспомнить ещё). Поэтому если самолёт у вас, скажем, на 1000 км/ч, а ракета — 3000 км/ч, то ракете надо уметь делать от 3 до 9 раз больше g.
Я смотрю на вещи с другой стороны прицела, но думаю военные пилоты меня поддержат. Бочка не входит в набор противоракетных маневров.
Я в своё время читал много литературы на эту тему разного характера, от мемуаров пилотов до американских (их почему-то охотнее рассекречивают, данные по AIM-120 достать проще, чем по более старой Р-27, например) протоколов испытаний и прочих подобных документов, если что.
Задачи противоракетного маневра, как пассивного средства противодействия
Кроме перечисленных вами это ещё и исчерпание энергии ракеты. Не зря расстояние поражения неманевренной и маневрирующей цели немножко различаются.
Бочка здесь нужна, как собаке пятая нога.
Split-S, конечно, лучше будет, заодно допплеровский радар может вас потерять, но, увы, иногда вам нужно поддерживать захват цели.
Глядишь в следующий раз самолет вместо выброса ловушек
Кто говорил про то, что ловушки/ДО не нужны?
резкой смены курса начнет делать бочку
Каждая тактика уместна в своей ситуации.mayorovp
03.10.2017 08:51Если ракета повторяет траекторию самолета — то квадрату, конечно же. Нормальное ускорение — это квадрат скорости деленный на радиус разворота.
Но мне почему-то казалось, что ракеты не так летают.
0xd34df00d
03.10.2017 18:31Ракеты не так летают, конечно. Однако, если ракеты летят на упреждение, то при эффективном манёвре расчётная точка меняет своё положение с параметрами, аналогичными таковым самолёта.
Но точные guidance algorithm'ы вам никто не расскажет, увы. В теории никто не мешает сделать достаточно умную ракету снеонкойнейросетью унутре, которая будет распознавать всякие бочки и не тратить на них драгоценную энергию.
sotnikdv
03.10.2017 12:08Ракете, чтобы попасть в самолёт, надо делать g больше пропорционально отношению скоростей (если не квадрату отношения, это надо будет вспомнить ещё). Поэтому если самолёт у вас, скажем, на 1000 км/ч, а ракета — 3000 км/ч, то ракете надо уметь делать от 3 до 9 раз больше g.
Вы себе странно представляете алгоритм наведения. Она не гоняется за самолетом, как в мультиках и голливудских фильмах, повторяя его траекторию. Ей не надо делать такие резкие маневры.
Более того, вы вообще странно представляете себе механизм поражения цели.
Я в своё время читал много литературы на эту тему разного характера, от мемуаров пилотов до американских (их почему-то охотнее рассекречивают, данные по AIM-120 достать проще, чем по более старой Р-27, например) протоколов испытаний и прочих подобных документов, если что.
Понимаю.
иногда вам нужно поддерживать захват цели.
Что, простите делать? А иногда не нужно?
Каждая тактика уместна в своей ситуации.
Угу, бочка ему очень поможет.
Господа, дискуссия себя исчерпала. Вы опираетесь на гуглеж и личные соображения, я на знания офицера наведения, секретную документацию по комплексам и занятия по тактике, включая противоракетные маневры противника. Точек пересечений у нас просто нет. Гуглить для вас публичную информацию мне влом, а пересказывать вам непубличную — я еще из ума не выжил. Вольны верить во что хотите, в т.ч. в то, что я школьник, который фантазирует и слился бла-бла. Может я вообще кот.
0xd34df00d
03.10.2017 18:43+2Вы себе странно представляете алгоритм наведения. Она не гоняется за самолетом, как в мультиках и голливудских фильмах, повторяя его траекторию.
Безусловно. Я об этом уже написал чуть выше.
Ей не надо делать такие резкие маневры.
А вот это уже не следует.
Что, простите делать?
Захват цели. Радаром. ПАРГСН, вот это всё.
А иногда не нужно?
А иногда не нужно. Если вы пустили, скажем, Р-27ЭТ, которая с ИКГСН и средней дистанцией. Или если вы пустили ракету с АРГСН (AIM-54, AIM-120, Р-77), и она перешла в терминальную фазу полёта с собственным радарным наведением (то, что в tactical brevity codes обозначается как pitbull).
Вы опираетесь на гуглеж
Нагуглить условную википедию и нагуглить открытые по FOI данные — разные вещи, ну да ладно.
личные соображения
Если они имеют физические основания, то давайте с этим спорить. Если нет — ну, извините.
я на знания офицера наведения, секретную документацию по комплексам и занятия по тактике, включая противоракетные маневры противника
Если это уровня военной кафедры, то мы с вами примерно на равных позициях. Если глубже — а вам по шапке за такое не надают там?
Wernisag
03.10.2017 06:45Ракета ускоряется только при пуске. Далее летит своим ходом, тратя энергию на маневры. И самое главное, что ракета летит на перехват цели, а не за ней, повторяя все маневры. Если «измотать» ракету, заставив её потерять как можно больше энергии на маневрировании, то и бочкой можно обойтись для ухода от поражения
sotnikdv
03.10.2017 07:38Ракета ускоряется только при пуске. Далее летит своим ходом, тратя энергию на маневры.
НетWernisag
03.10.2017 08:12У ракет вечный двигатель используется или никогда не кончается топливо?
sotnikdv
03.10.2017 11:44+1На маневры отдельный газогенератор, которого с запасом для обоих участков траектории.
Как можно обойтись бочкой для ухода от поражения — вообще неясно. Вы плохо представляете, как работает зенитная ракета0xd34df00d
03.10.2017 18:45Не знаю, как вы, но я как-то изначально говорил про воздушный бой, следовательно, ракету воздух-воздух противника. За зенитные комплексы говорить не буду.
Там бочка действительно вряд ли поможет, точка упреждения меняется не сильно при таком ракурсе.
Timur_n
02.10.2017 18:29т.е. можно рассматривать ваши статьи, как небольшое учебное пособие а не просто обзор? спасибо, буду ждать продолжения)
arkodiy
03.10.2017 09:51+1Эта бочка на троечку, разболтало, выход со скольжением) Не бочка — кадушка)
А можете график по рысканью добавить? И интересно было бы увидеть графики по расходу рулей.
И спасибо Вам, интересный материал)
grafdezimal
03.10.2017 19:31+3Мне кажется, что тут смешаны понятия barrel roll и slow roll. Я не специалист, но вроде как при бочке самолёт ещё как смещается, поэтому то она и бочка, что самолёт как бы летит по внутренней поверхности бочки. Это позволяет в бою например попасть вверх ногами над противником всё время его видя.
Slow roll это чисто фигура высшего пилотажа для соревнований, там действительно поворот вокруг продольной оси без смещения. Соответсвенно противника не видно из-за капота.
Надеюсь найдётся специалист, который поправит меня с русскими названиями и по делу, если ошибаюсь.
kurojneko
а вот с момента авиамодель + stm32f103 + mpu9250 можно и поподробней )
RideaPlane Автор
Обязательно будет подробнее, но контроллер, датчики и даже самолет это инструменты для реализации идеи. Сначала хочется понять и объяснить физику процесса.