Что общего у истребителя с тарой для хранения жидкости и машиной Голдберга? Казалось бы только то, что самолет и бочка могут оказаться частями бесполезного, но завораживающего механизма, ан нет. Фигура пилотажа бочка объединяет все эти вещи и не только.



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

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

Введение


После завершения активной фазы очередного проекта у меня с коллегой по беспилотной деятельности возник вопрос, чем заняться пока новые проекты не заняли все свободное время. В ответ на вопрос, заданный пустоте, мы получили очень конкретный ответ «сделай бочку (do a barrel roll)». И правда: бочка это машина Голдберга в авиации, одновременно сложная, практически (в воздушном бою) бесполезная и приносящая исключительно эстетическое удовольствие фигура пилотажа. Так почему бы не научить авиамодель делать бочку в автоматическом режиме, даже Google её делает.

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

Немного теории


Для начала немного о том, почему самолеты летают и о том, как положение самолета описывается относительно поля тяготения. Самолет держит в воздухе подъемная сила, назовем ее Y, которая создается на крыле, но вот какая штука, эта сила появляется только при обдуве крыла набегающим потоком воздуха, соответственно, нужно самолет разогнать. Можно, конечно «разбежавшись прыгнуть со скалы», потратить часть потенциальной энергии поля тяготения земли на разгон и даже зависнуть на мгновенье, но неразрывно с подъемной силой возникает аэродинамическое сопротивление, назовем эту силу X, которое будет самолет тормозить, и подъемная сила будет падать, а вместе с ней и мы. Падать мы будем под действием силы тяжести G. Для противодействия силе сопротивления у всех нормальных самолетов есть двигатель, он создает силу тяги P, которую можно использовать для преодоления силы сопротивления. Простейшая кинематическая модель самолета описывает его движение как перемещение материальной точки в поле тяготения земли. В горизонтальном полете с постоянной скоростью сила тяжести уравновешена подъемной силой крыла Y = G, а сила сопротивления — тягой двигателя X = P.

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

Описание систем координат, используемых при описании движения летательных аппаратов.
В российской/советской традиции система координат (СК), жестко связанная с летательным аппаратом, вводится следующим образом. Ось х направляется продольно в плоскости симметрии самолета, от хвоста к носу. Перпендикулярно этой оси по направлению вверх вводится ось y. Эти две оси дополняются до правой тройки векторов осью z. Получается, что ось z пройдёт вдоль правого крыла.

Движение аппарата в пространстве невозможно описать только при помощи связанной с самолетом системой координат, ведь нам интересно положение аппарата относительно земли. Для этого вводится система координат, которая называется «местная земная система координат». Ось X этой системы находится в горизонтальной плоскости и направлена на географический север. Oсь Y направлена вертикально вверх. Ось Z дополняет их до правой тройки векторов. Расположение связанной системы координат относительно местной земной системы определяется углами крена, тангажа и рыскания. Угол между продольной осью самолета (в нашем случае ось x связанной СК) и горизонтальной плоскостью XZ называется углом тангажа, он изменяется при отклонении руля высоты. Угол между осью z связанной СК и осью Z местной земной СК, повёрнутой так, что угол рыскания равен нулю, называется углом крена, он изменяется при отклонении элеронов. Угол между осью X местной земной СК и проекцией оси x связанной СК на горизонтальную плоскость XZ называется углом рыскания, отсчитывается против часовой стрелки от оси X местной земной СК. Такой формализации нам должно быть достаточно для описания движения самолета при выполнении бочки, и пусть, мы не воспользуемся далее буквенными обозначениями осей, всегда полезно повторить основы.



Инструментарий


Для моделирования движения аппарата мы используем инструментарий, который предоставляет программа для моделирования динамики летательных аппаратов с открытым исходным кодом JSBSim. Вывод графиков доверим gnuplot, а визуализацию маневров самолета FlightGear. В качестве базовой динамической модели возьмем истребитель North American P-51 Mustang: его маневренности будет достаточно для выполнения бочки. Для визуализации будем использовать менее агрессивный, спортивный самолет ЯК-53.

Описание процесса настройки программы и вывода результатов.
Все файлы, необходимые для запуска скриптов, находятся в Github репозитории. Для повторения действий, приведенных в статье, нам понадобится установить JSBSim, FlightGear и gnuplot. Все действия буду приведены для операционной системы Windows. За основу взята инструкция отсюда. Скачиваем и устанавливаем последнюю версию FlightGear с www.flightgear.org и gnuplot с www.gnuplot.info. Собираем JSBSim по инструкции. После этого ищем два необходимых нам каталога. Корневые каталоги JSBSim\ и FlightGear\. В каталоге FlightGear\data\Aircraft находятся папки с моделями самолетов: туда нужно скопировать модель, которая будет использоваться для визуализации. Я использую модель Як-53, которую нашел на просторах Интернета. Другие модели можно найти здесь. В каталоге FlightGear\bin находится основной исполняемый файл симулятора fgfs. Для визуализации динамики будем использовать строку запуска

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)


  1. kurojneko
    02.10.2017 12:12
    +2

    а вот с момента авиамодель + stm32f103 + mpu9250 можно и поподробней )


    1. RideaPlane Автор
      02.10.2017 12:16
      +2

      Обязательно будет подробнее, но контроллер, датчики и даже самолет это инструменты для реализации идеи. Сначала хочется понять и объяснить физику процесса.


  1. mayorovp
    02.10.2017 12:40

    В горизонтальном полете с постоянной скоростью сила тяжести уравновешена подъемной силой крыла Y = G, а сила сопротивления — тягой двигателя X = P.

    Это только если сила тяги у двигателей горизонтальна...


    1. RideaPlane Автор
      02.10.2017 12:53

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


    1. RideaPlane Автор
      02.10.2017 12:55

      Для многих задач о движении самолетов такое приближение оправдано.


  1. Afinogen
    02.10.2017 13:49
    +1

    Интересно, с каких пор авиамодель стала дешевой? Даже если делать из потолочи (а тут еще не факт, что полетит с первого раза) + электроника + аккумы выйдет рублей в 10. Потом нужно учить летать модель, что тоже несет расходы.
    Есть опыт постройки тренера в виде цессны, вчера наконец ее облетали, я бы не сказал что это прям очень легко. Дальше будет установка ПК на F4 с прошивкой inav. И опять учить летать, настаивать пиды и т.д.

    Все же интересно будет посмотреть на Вашу готовую модель делающую бочку да и другие фигуры высшего пилотажа)


    1. RideaPlane Автор
      02.10.2017 17:01
      +1

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


      1. izzholtik
        03.10.2017 00:08

        Кстати, не подскажете, на старый Hitech Flash 4 ещё можно найти кварц/приёмник?


        1. RideaPlane Автор
          03.10.2017 09:30

          К сожалению, не подскажу.


        1. Misha_Mo
          03.10.2017 09:50

          hobbyking.com/en_us/radios-servos/radios/synthesized-rx.html
          но я думаю надо 2,4 гц использовать
          сейчас громадный выбор на разный кошелек
          hobbyking.com/en_us/radios-servos/radios/complete-systems.html


  1. lingvo
    02.10.2017 15:59

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


    1. RideaPlane Автор
      02.10.2017 16:45

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


      1. lingvo
        02.10.2017 17:24
        +1

        Хорошо. А если, допустим, бочка выполняется не в горизонтальном полете, а при наборе/уменьшении высоты? А если в наличии некоторый крен? Вы же не можете с земли точно сказать летит самолет горизонтально или нет, запуская "Бочку"?
        В моем понимании Автоматический Контроллер "Бочки" (АКБ) должен уметь ее делать идеально из любого положения при любом направлении полета и в широком диапазоне скоростей. В этом же смысл вашей разработки? И в этом Вам должно помочь моделирование. Попробуйте применить показания гироскопов и акселерометров, чтобы автоматически рассчитывать время воздействия. Скорость и тяга мотора тоже желательна. Они же у вас в реальной модели будут?
        Я бы применил еще Matlab/Simulink для можелирования контроллера.


        1. lingvo
          02.10.2017 17:31
          +3

          *моделирования
          Идеальной целью проекта ИМХО, вообще должен стать режим "бочка", как Headless mode у квадрокоптеров(когда он крутится вокруг своей оси, но тем не менее летит в нужную сторону). Т.е. включил этот режим на пульте — и самолет начинает крутить бочки непрерывно, при этом летя идеально по траектории и подчиняясь органам управления, как будто он никакой бочки и не делает вовсе. Вот это точно было бы шоу, так как реальный пилот вряд ли на это способен.


          1. RideaPlane Автор
            03.10.2017 09:42
            +1

            Интересная идея, можно будет попробовать её реализовать.


        1. RideaPlane Автор
          03.10.2017 09:40

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


          1. lingvo
            03.10.2017 12:57

            Что касается matlab/simulink, это программное обеспечение совсем не бюджетное и для нашей работы избыточное

            Раз вы работаете на Defense, то денег на одно место должно хватить, либо через студенческие лицензии — они сравнительно халявные.
            А насчет избыточности вы просто не знаете, что с помощью него возможно. Почитайте концепцию Model-Based Design. Вы сделаете модель автомата тангажа/крена/рулей в Simulink, отладите ее во всех режимах в своем симуляторе самолетов и потом за пять минут сгенерите полностью работающий Cи-код для вашей STMки. И все это сделает ваш специалист по аэродинамике вообще без знаний программирования за неделю.
            У вас много избыточного времени? А авиамоделей, чтобы поразбивать, тоже много?


            1. RideaPlane Автор
              03.10.2017 13:24

              Мы не работаем на Defence, а те, кто работают, я думаю, тоже редко покупают matlab. Насчет Model-Based Design, она сработает, если будет точная модель объекта управления. Создать такую модель это отдельная задача, которую можно решать различными способами.


              1. lingvo
                03.10.2017 13:53

                А чем вам не нравится ваш JSBSim/Flightgear в качестве модели объекта управления? Если я правильно понимаю, в нем есть все, что вам нужно. Ну а гугл по jsbsim matlab показывает, что Model-Based Design в этом плане интересен очень многим.


                1. RideaPlane Автор
                  03.10.2017 15:08
                  +1

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


          1. lingvo
            03.10.2017 13:13

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

            Вот именно, что метод проб и ошибок в данном случае может обойтись Вам очень дорого. Прикиньте, что ваш программист при программировании алгоритма в Си создал баг, при котором STM32 переводит рули в крайнее положение и зависает на этом месте… А аварийную блокировку управления или хотя бы вачдог вы еще не предусмотрели — хочется ведь побыстрее на практике попробовать, правда?
            В итоге нажали на кнопку и… минус одна модель — 10 тысяч. А все из-за тупого бага… И в симуляторе такого не было...


  1. 0xd34df00d
    02.10.2017 16:58

    Бочка — вполне себе маневр уклонения от ракеты, так что и в бою поможет.


    1. Free_ze
      02.10.2017 17:02
      +1

      Это очень плохой маневр для уклонения от ракеты. Корпус ЛА практически не отклоняется с траектории.


      1. 0xd34df00d
        02.10.2017 17:23

        Смысл не в том, чтобы отклониться от траектории, а в том, чтобы вытянуть больше g, чем ракета (с учётом разницы скоростей).


        1. Free_ze
          02.10.2017 17:41

          Если вы пытаетесь противопоставить эти понятия, то расскажите, как можно получить значительную перегрузку без отклонения ЛА с траектории движения?


          1. 0xd34df00d
            03.10.2017 01:59
            +1

            Бочка — это не обязательно поворот без смещения продольной оси, как на последней иллюстрации в статье.

            Например


        1. sotnikdv
          03.10.2017 00:58

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

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

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

          Задачи противоракетного маневра, как пассивного средства противодействия (как правило, комбинируется с активными средствами противодействия):
          — срыв наведения
          — подрыв БЧ на безопасном расстоянии / направлении разлета осколков

          Бочка здесь нужна, как собаке пятая нога.

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


          1. 0xd34df00d
            03.10.2017 02:10

            Тактика эта применялась на заре развития ЗРК, с того момента железо шагнуло далеко вперед и ракета держит большую перегрузку, чем пилот.

            Ракете, чтобы попасть в самолёт, надо делать g больше пропорционально отношению скоростей (если не квадрату отношения, это надо будет вспомнить ещё). Поэтому если самолёт у вас, скажем, на 1000 км/ч, а ракета — 3000 км/ч, то ракете надо уметь делать от 3 до 9 раз больше g.

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

            Я в своё время читал много литературы на эту тему разного характера, от мемуаров пилотов до американских (их почему-то охотнее рассекречивают, данные по AIM-120 достать проще, чем по более старой Р-27, например) протоколов испытаний и прочих подобных документов, если что.

            Задачи противоракетного маневра, как пассивного средства противодействия

            Кроме перечисленных вами это ещё и исчерпание энергии ракеты. Не зря расстояние поражения неманевренной и маневрирующей цели немножко различаются.

            Бочка здесь нужна, как собаке пятая нога.

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

            Глядишь в следующий раз самолет вместо выброса ловушек

            Кто говорил про то, что ловушки/ДО не нужны?

            резкой смены курса начнет делать бочку

            Каждая тактика уместна в своей ситуации.


            1. mayorovp
              03.10.2017 08:51

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


              Но мне почему-то казалось, что ракеты не так летают.


              1. 0xd34df00d
                03.10.2017 18:31

                Ракеты не так летают, конечно. Однако, если ракеты летят на упреждение, то при эффективном манёвре расчётная точка меняет своё положение с параметрами, аналогичными таковым самолёта.

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


            1. sotnikdv
              03.10.2017 12:08

              Ракете, чтобы попасть в самолёт, надо делать g больше пропорционально отношению скоростей (если не квадрату отношения, это надо будет вспомнить ещё). Поэтому если самолёт у вас, скажем, на 1000 км/ч, а ракета — 3000 км/ч, то ракете надо уметь делать от 3 до 9 раз больше g.


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

              Более того, вы вообще странно представляете себе механизм поражения цели.

              Я в своё время читал много литературы на эту тему разного характера, от мемуаров пилотов до американских (их почему-то охотнее рассекречивают, данные по AIM-120 достать проще, чем по более старой Р-27, например) протоколов испытаний и прочих подобных документов, если что.

              Понимаю.

              иногда вам нужно поддерживать захват цели.

              Что, простите делать? А иногда не нужно?

              Каждая тактика уместна в своей ситуации.

              Угу, бочка ему очень поможет.

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

              image


              1. 0xd34df00d
                03.10.2017 18:43
                +2

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

                Безусловно. Я об этом уже написал чуть выше.

                Ей не надо делать такие резкие маневры.

                А вот это уже не следует.

                Что, простите делать?

                Захват цели. Радаром. ПАРГСН, вот это всё.

                А иногда не нужно?

                А иногда не нужно. Если вы пустили, скажем, Р-27ЭТ, которая с ИКГСН и средней дистанцией. Или если вы пустили ракету с АРГСН (AIM-54, AIM-120, Р-77), и она перешла в терминальную фазу полёта с собственным радарным наведением (то, что в tactical brevity codes обозначается как pitbull).

                Вы опираетесь на гуглеж

                Нагуглить условную википедию и нагуглить открытые по FOI данные — разные вещи, ну да ладно.

                личные соображения

                Если они имеют физические основания, то давайте с этим спорить. Если нет — ну, извините.

                я на знания офицера наведения, секретную документацию по комплексам и занятия по тактике, включая противоракетные маневры противника

                Если это уровня военной кафедры, то мы с вами примерно на равных позициях. Если глубже — а вам по шапке за такое не надают там?


          1. Wernisag
            03.10.2017 06:45

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


            1. sotnikdv
              03.10.2017 07:38

              Ракета ускоряется только при пуске. Далее летит своим ходом, тратя энергию на маневры.


              Нет


              1. Wernisag
                03.10.2017 08:12

                У ракет вечный двигатель используется или никогда не кончается топливо?


                1. sotnikdv
                  03.10.2017 11:44
                  +1

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

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


                  1. 0xd34df00d
                    03.10.2017 18:45

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

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


  1. Timur_n
    02.10.2017 18:29

    т.е. можно рассматривать ваши статьи, как небольшое учебное пособие а не просто обзор? спасибо, буду ждать продолжения)


  1. arkodiy
    03.10.2017 09:51
    +1

    Эта бочка на троечку, разболтало, выход со скольжением) Не бочка — кадушка)
    А можете график по рысканью добавить? И интересно было бы увидеть графики по расходу рулей.
    И спасибо Вам, интересный материал)


  1. grafdezimal
    03.10.2017 19:31
    +3

    Мне кажется, что тут смешаны понятия barrel roll и slow roll. Я не специалист, но вроде как при бочке самолёт ещё как смещается, поэтому то она и бочка, что самолёт как бы летит по внутренней поверхности бочки. Это позволяет в бою например попасть вверх ногами над противником всё время его видя.
    Slow roll это чисто фигура высшего пилотажа для соревнований, там действительно поворот вокруг продольной оси без смещения. Соответсвенно противника не видно из-за капота.
    Надеюсь найдётся специалист, который поправит меня с русскими названиями и по делу, если ошибаюсь.