¿Qué tiene en común un luchador con un contenedor de almacenamiento de líquidos y una máquina Goldberg? Parecería solo que el avión y el cañón pueden ser partes de un mecanismo inútil, pero hechizante, pero no. El modelo de barril de acrobacia aérea combina todas estas cosas y más.

La ejecución del cañón no ayuda a la aeronave civil a llevar a sus pasajeros al destino o al caza en la batalla, pero requiere, si se ejecuta correctamente, utilizar todos los controles del avión: alerones, elevador y timón.
Esta publicación describe el proceso de girar un avión 360 grados alrededor de su eje longitudinal sin reducción desde el punto de vista de una ciencia como la dinámica de vuelo, y describe cómo puede hacer que su avión haga un barril correctamente.
Introduccion
Después de completar la fase activa del próximo proyecto, surgió una pregunta con mi colega sobre actividades no tripuladas, qué hacer hasta que los nuevos proyectos ocuparan todo mi tiempo libre. En respuesta a la pregunta formulada al vacío, recibimos una respuesta muy específica: "
hacer un barril ". Y la verdad: el cañón es una máquina Goldberg en aviación, al mismo tiempo una maniobra acrobática de placer compleja, prácticamente inútil (prácticamente en combate aéreo) y extremadamente estética. Entonces, ¿por qué no enseñar al modelo de avión cómo hacer un barril en modo automático, incluso
Google lo hace?
Antes de comenzar la implementación práctica, decidimos estudiar este proceso utilizando modelos de computadora, y esto es lo que surgió de él.
Poco de teoría
Primero, un poco sobre por qué vuelan los aviones y cómo se describe la posición del avión en relación con el campo gravitacional. El avión mantiene la elevación en el aire, llamémoslo Y, que se crea en el ala, pero aquí está la cosa, esta fuerza aparece solo cuando el ala es soplada por una corriente de aire entrante, por lo que debe dispersar el avión. Puede, por supuesto, "huir del acantilado", gastar parte de la energía potencial del campo gravitacional de la tierra para acelerar e incluso congelarse por un momento, pero la resistencia aerodinámica surge inextricablemente con la fuerza de elevación, llamemos a esta fuerza X, que ralentizará el avión, y la fuerza de elevación caerá, y con ella nosotros. Caeremos bajo la influencia de la gravedad G. Para contrarrestar la fuerza de arrastre, todas las aeronaves normales tienen un motor, crea una fuerza de empuje P, que puede usarse para superar la fuerza de arrastre. El modelo cinemático más simple de un avión describe su movimiento como un desplazamiento de un punto material en el campo gravitacional de la Tierra. En vuelo horizontal a una velocidad constante, la gravedad se equilibra con la elevación del ala Y = G, y el arrastre por el empuje del motor X = P.
Si observa un punto material bajo un microscopio, se convertirá en un cuerpo material. Es para mejor: podemos distinguir el fuselaje, ala, cola de la aeronave, que consiste en un estabilizador horizontal y una quilla vertical. Los alerones se encuentran en las consolas del ala izquierda y derecha, el elevador en la unidad de cola horizontal y el timón en la vertical. Si gira con fuerza con todo esto, el aparato comenzará a maniobrar, y la tarea de hacer un barril se reducirá a la ley para cambiar la posición de los controles para lograr la trayectoria necesaria del aparato en el espacio y en relación con sus propios ejes.
Descripción de los sistemas de coordenadas utilizados para describir el movimiento de aeronaves.En la tradición rusa / soviética, el sistema de coordenadas (SK), conectado rígidamente con el avión, se presenta de la siguiente manera. El eje x se dirige longitudinalmente en el plano de simetría de la aeronave, desde la cola hasta la nariz. El eje y se introduce perpendicular a este eje. Estos dos ejes se complementan con el triple derecho de vectores mediante el eje z. Resulta que el eje z pasará a lo largo del ala derecha.
El movimiento de un aparato en el espacio no puede describirse solo con la ayuda de un sistema de coordenadas conectado con un avión, porque estamos interesados en la posición del aparato en relación con la tierra. Para hacer esto, se introduce un sistema de coordenadas llamado "sistema de coordenadas terrestres locales". El eje X de este sistema está en el plano horizontal y se dirige al norte geográfico. El eje Y se dirige verticalmente hacia arriba. El eje Z los complementa al triple derecho de vectores. La ubicación del sistema de coordenadas asociado en relación con el sistema de tierra local está determinada por los ángulos de balanceo, cabeceo y guiñada. El ángulo entre el eje longitudinal de la aeronave (en nuestro caso, el eje x del SK conectado) y el plano horizontal XZ se llama ángulo de inclinación, cambia cuando el elevador se desvía. El ángulo entre el eje z del SK asociado y el eje Z del SC terrestre local, girado para que el ángulo de guiñada sea cero, se llama ángulo del talón, cambia con la desviación de los alerones. El ángulo entre el eje X del SC terrestre local y la proyección del eje x del SC conectado en el plano horizontal XZ se llama ángulo de guiñada, contado en sentido antihorario desde el eje X del SC terrestre local. Tal formalización debería ser suficiente para que describamos el movimiento del avión durante la ejecución del cañón, y no usemos más las designaciones de letras de los ejes, siempre es útil repetir lo básico.

Kit de herramientas
Para simular el movimiento del aparato, utilizamos las herramientas que proporciona el programa para modelar la dinámica de los aviones con código abierto
JSBSim .
Confiaremos en
gnuplot para mostrar los gráficos y las maniobras de visualización de los aviones
FlightGear . Como modelo dinámico básico, tome el
caza Mustang P-51 de América del
Norte : su maniobrabilidad será suficiente para transportar el cañón. Para la visualización, utilizaremos un avión deportivo menos agresivo
Yak-53 .
Descripción del proceso de configuración del programa y salida de resultados.Todos los archivos necesarios para ejecutar los scripts están en el
repositorio de Github. Para repetir los pasos de este artículo, necesitamos instalar
JSBSim ,
FlightGear y
gnuplot . Todas las acciones se darán para el sistema operativo Windows. Basado en las instrucciones
de aquí . Descargue e instale la última versión de
FlightGear de
www.flightgear.org y
gnuplot de
www.gnuplot.info . Recopilamos
JSBSim de acuerdo con las
instrucciones . Después de eso buscamos dos catálogos necesarios para nosotros.
JSBSim \ y
FlightGear \ directorios raíz. El directorio
FlightGear \ data \ Aircraft contiene carpetas con modelos de aviones: debe copiar el modelo allí, que se utilizará para la visualización. Utilizo el modelo
Yak-53 que encontré en Internet. Otros modelos se pueden encontrar
aquí . El
directorio FlightGear \ bin contiene el archivo ejecutable principal para el simulador
fgfs . Para visualizar la dinámica, utilizaremos la línea de lanzamiento.
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
En esta línea, los primeros parámetros indican la fuente externa de datos sobre la dinámica de la aeronave cuando se inicia el simulador. El parámetro de la
aeronave establece el modelo deseado del vehículo. Otros parámetros son opcionales, sus valores se pueden encontrar
aquí . Atajos de teclado útiles:
"V" - cambia la vista del modelo
Shift + Esc - reinicia FlightGear con guardar los parámetros de la línea de comandos
Ctrl + "R" : comience a grabar un vuelo para repetir lo que sucedió.
Eso es todo lo que necesitamos en el simulador
FlightGear . Volvamos al programa de modelado dinámico
JSBSim . El directorio
JSBSim \ aircraft contiene modelos de aviones dinámicos. El directorio
JSBSim \ engine contiene modelos dinámicos de motores y tornillos. Los modelos de aviones dinámicos se almacenan en directorios separados en archivos con el
nombre de formulario
* .xml . Al final de cada archivo hay una sección responsable del tipo de datos de salida durante el modelado. Si queremos que la salida esté en una forma adecuada para la visualización en
FlightGear , debería verse así:
<output name="localhost" type="FLIGHTGEAR" port="5500" rate="60"/>
Si queremos guardar datos en un archivo, así:
<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>
Es conveniente
iniciar el proceso de simulación utilizando el archivo por lotes ubicado en la carpeta raíz de
JSBSim \ con la línea
JSBtest.bat *_
con contenido
Este archivo elimina los resultados de la simulación anterior, ejecuta el script ubicado en
\ JSBSim \ aircraft \ p51d \ scripts \ , y luego comienza a dibujar los datos recibidos utilizando gnuplot. El parámetro en
tiempo real debe especificarse cuando desea recibir datos de
JSBSim en tiempo real, por ejemplo, cuando se procesa en
FlightGear .
Veamos el contenido del archivo de script:
<?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>
Para el lanzamiento correcto, la tercera línea indica el modelo de la aeronave a modelar y la ruta al archivo de inicialización con el contenido
<?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>
Solo queda considerar el contenido del archivo para trazar a través de
gnuplot :
set autoscale
Este archivo genera y muestra una imagen en la pantalla de tres gráficos: ángulo de balanceo, inclinación y altura versus tiempo. Los datos para la construcción se toman del archivo
* script_name.csv . En el camino, las unidades imperiales se convierten en las unidades métricas habituales. Puede modificar el archivo para la salida en
formatos PostScript ,
PNG o
PDF descomentando las líneas correspondientes.
Aquí, en general, está todo el proceso de preparación de herramientas para el auto modelado y la visualización del movimiento de la aeronave.
Modelado y Resultados
Si imaginamos un avión "esférico", o más bien un avión ideal, en el que los ejes del sistema de coordenadas conectado coinciden con los ejes principales del elipsoide de inercia y los controles crean momentos cada uno con respecto a uno solo de los ejes, podemos entender cualitativamente cómo se moverá el aparato cuando el control se desvía. Digamos que un avión vuela en vuelo horizontal; Al desviar los alerones en direcciones opuestas, cambiamos la magnitud de la fuerza de elevación en las consolas de las alas, lo que conduce a la aparición de un momento de fuerza en relación con el eje x, y el aparato comenzará a girar alrededor de este eje. Para completar el barril, esto es exactamente lo que necesitamos. Compusimos un script en el que los alerones se rechazan tanto como sea posible en 2,45 segundos, y luego regresamos a su posición original:
El contenido del guión. <?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>

Los resultados de la simulación se muestran en el gráfico:

Se puede ver que el avión giró 360 grados a lo largo del rollo, sin embargo, realizó esta maniobra con una disminución de 40 metros e inclinó su nariz 14 grados; este es un ejemplo de un cañón completamente no apto.
De hecho, si recuerdas que el avión desde lejos es un punto material, entonces, durante la rotación, la proyección de la fuerza de elevación en la dirección de la gravedad disminuye y el avión comienza a declinar, pero no necesitamos esto en absoluto, porque queremos hacer un hermoso barril sin una caída. Para esto, antes de comenzar a rechazar los alerones, debe crear una reserva de velocidad vertical. Tomamos el timón sobre nosotros mismos, el elevador se desvía, aparece un momento de fuerza en relación con el eje z. La nariz del avión se eleva y comenzamos a ganar altura, en este momento es hora de comenzar la rotación. Agregamos al guión la desviación del elevador en un 40 por ciento durante 0.4 segundos antes del inicio de la desviación de los alerones y la regresamos a la posición neutral. 0.2 segundos antes del final de la rotación, tomamos el timón completamente hacia nosotros para eliminar la bajada de la nariz del avión:
El contenido del guión. <?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>

Nos fijamos en lo que pasó:

Aquí está: un barril muy decente y rápido. Si regresamos el elevador a la posición neutral un poco más tarde, el dispositivo ganaría una pequeña altura y, después de que los alerones se desviaran, pasaría a un giro en U. La combinación de "dirección hacia usted" y "desviación de los alerones" conduce al hecho de que la fuerza de elevación del ala cuando el dispositivo está inclinado comienza a actuar de manera normal a la trayectoria actual del dispositivo y se dobla más cuanto más se desvía el elevador. Puedes probarlo tú mismo y verlo por ti mismo.
El barril anterior se hizo sin reducción, el ángulo de cabeceo a la salida del barril no difería mucho del original. Sin embargo, la altura durante la ejecución cambió en 12 metros. Intentaremos aplicar más activamente los controles para minimizar el tiro de altura durante la ejecución de la figura. Para no torcer los controles del avión de todos modos, echemos un vistazo a
Wikipedia y veamos cómo se nos recomienda hacer un barril. La idea principal de hacer un barril ideal es que debe mantener el eje longitudinal del plano en un plano horizontal. Para esto, el elevador y el timón se usan alternativamente. Al comienzo del barril, como de costumbre, usamos el elevador para ganar velocidad vertical. Rechazamos los alerones, comenzamos la rotación. Cuando el avión gira alrededor del eje longitudinal, el elevador y el timón cambian de lugar. Al alcanzar un ángulo de balanceo de aproximadamente 90 grados, la desviación del timón conducirá a subir o bajar la nariz del avión en un plano vertical. En este sentido, rechazamos el timón para evitar que la nariz se caiga. Además, cuando el ángulo del talón alcanza los 180 grados, debe desviarse el timón de usted mismo para mantener la nariz del avión en un vuelo invertido en un plano horizontal. Con un giro adicional, repetimos la desviación del timón con el signo opuesto en un ángulo del talón cercano a 90 grados y terminamos el cañón con una ligera desviación del timón "hacia usted". Todos estos pasos se expresan en el siguiente script:
El contenido del guión. <?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>

Comenzamos y vemos qué pasó:

En el rollo, el dispositivo giró 180 grados, mientras que el rango total del cambio de altura fue de aproximadamente 2.5 m, esto es cinco veces menos que en el caso anterior. Podemos decir que tenemos un barril casi perfecto.
En lugar de una conclusión
Entonces, examinamos algunos principios de acrobacias aéreas de cometas y nos aseguramos de que, actuando con prudencia, podamos realizar un barril de buena calidad en el simulador. Sería bueno ir a practicar, y aquí, con la ayuda de la cual estamos planeando hacer esto, el modelo de avión + stm32f103 + mpu9250. Todos estos artículos son fácilmente accesibles y baratos, por lo que cualquiera puede intentar hacerlo por sí mismo. Los resultados de prueba, error e instrucciones para repetir son objeto de las siguientes publicaciones.