G60 G60
Páginas: [1] 2   Ir Abajo
  Imprimir  
Autor Tema: Proyecto: Script Auto Flare Universal  (Leído 28391 veces)
0 Usuarios y 1 Visitante están viendo este tema.
23 Abril, 2013, 14:29:19
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Proyecto: Script Auto Flare Universal

Ante la imposibilidad que tengo de contribuir en la sección Proyectos y todas sus subsecciones, ruego que algún moderador mueva la presente contribución a un lugar apropiado (Preferiría una sección de plugins, pero como no la hay creo que la mas apropiada es Proyectos: Aviones). Gracias.

Hola,

El presente proyecto que os presento no se trata de un proyecto individual "per se", si no que es una ínfima parte de un proyecto mayor que llevo realizando desde hace unos años, a mi ritmo, sin prisas, a medida que voy sacando tiempo libre y me apetece, de ahí lo de que "llevo años haciéndolo" y aún no ha sido presentado nada al público. Por otra parte, dicho proyecto ha sufrido algún cambio de dirección en cuando a qué SDKs usar en su implementación por lo que esto muchas veces ha derivado en aún más retrasos.

Cómo el título del hilo dice, se trata de un sistema de Auto Flare Universal, usable para cualquier avión. Evidentemente tendrá más sentido en unos que en otros, y también los resultados serán mejores en unos que en otros.

Los objetivos del presente proyecto son los siguientes:

-Independencia del código de la versión y tipo del sistema operativo.
-Universalidad del sistema. El sistema debe funcionar para cualquier avión, con la única restricción de que éste incorpore sistema ILS (AP, NAV, LOC y GS).
-Automatismo completo. El sistema debe controlar por si solo la tasa de descenso sin intervención del piloto, cuando las condiciones idóneas sean detectadas.
-El afinamiento del sistema, para adaptarlo a peculiaridades y especificaciones de un avión en particular, no debe conllevar la modificación del código a nivel funcional.

El sistema que os comento está actualmente prácticamente finalizado, solo quedan algunos detalles por pulir, como la posibilidad de cancelación del Flare e inicio automático de un "motores y al viento". Esto está actualmente contemplado en el sistema, y probado hasta cierto punto, aunque cambios de última hora hacen que fuese necesario volver a probarlo, por lo que no puedo decir si esta parte concreta de la cancelación es operativa al 100%, lo tendré que probar de nuevo.

Para llevar a cabo los objetivos he tomado las siguientes medidas:

-El desarrollo se basa en la edición libre de SASL, mediante scripts en LUA, de modo que es independiente del sistema operativo.
-El sistema se basa en el análisis de datos telemétricos del vuelo, en tiempo real de la simulación, los cálculos se realizan de forma relativa a los datos de entrada, de modo que es independiente del tipo y características del avión, no se usan tablas fijas preprocesadas.
-El sistema monitoriza altitud, estado del AP, del GS, de la energía, etc, de modo que es totalmente automático.
-El sistema usa dos constantes definidas al principio del script para "afinar" su comportamiento y que no sea necesario variar el código para que funcione con cualquier avión.

Licencia:
La licencia de distribución es GPL v3 http://www.gnu.org/licenses/gpl-3.0.html

Estado:
Trátese todo este código como código en estado BETA

Por qué lo he hecho:
Bueno, primero, evidentemente, porque he querido, pero una circunstancia me ha influenciado mucho en mi decisión. Viendo los aterrizajes ILS con el piloto automático de X-Plane y observando el resultado de un plugin que indica si el aterrizaje ha sido correcto, duro, muy duro o para morirse. Supongo que ése plugin que indica la calidad del aterrizaje, a estas alturas, todos lo conoceréis. Bueno, a mi siempre, o un 90% de las veces, me dice que nos hemos matado todos, y cuanto mayor es el avión, peor es el "aporrizaje" y X-Plane todos sabemos lo permisivo que es en esto. Yo creo que esto no debería ser así y, desde luego, no deseaba que mi desarrollo se sintiese tan "bruto" aterrizando; por otra parte el avión que estoy haciendo es bastante futurista, de modo que pensé en incluir un sistema que suavizase en la medida de lo posible los aterrizajes, dándole una cierta aura Hi-Tech.

Yo ya tenía encarrilado todo esto cuando en x-plane.org vi esta contribución: http://forums.x-plane.org/index.php?showtopic=51973&hl=%2Bflare+%2Bplugin en el que creo que un miembro de nuestra comunidad estaba interesado en que alguien realizase un plugin de Auto Flare. Como siempre, las respuestas en ese lugar fueron lo que siempre suelen ser en un lugar en el que los que saben cierran filas entre si para no desvelar a nadie sus oscuros secretos. Básicamente al final infieren que es imposible, debiendo ser un plugin especial para cada avión, y eso como mucho. Pues bien querido Carlos, aquí tienes tu sistema de Auto Flare, sin excusas, sin circunloquios, sin la pátina de "magia negra" que en según qué sitios quieren dar a lo que hacen. Como digo, no fue ése hilo el que me hizo hacerlo, entre otras cosas porque ya lo tenía hecho, pero si ha sido el que me ha hecho compartirlo tempranamente. Espero sinceramente que os sea útil y, como siempre, vuestros comentarios y preguntas serán bienvenidos.

Cómo funciona el sistema -o al menos se pretende-:
Yo no quería tener que escribir todo un sistema de piloto automático completo, partiendo de cero, para inhabilitar el propio de X-Plane y sustituirlo por el mío. Primero, porque no creo tener los conocimientos necesarios para acometer tal tarea, segundo, porque me hubiese llevado una ingente cantidad de tiempo con un resultado cuestionable y no menos importante, porque es lo que me hubiesen dicho en x-plane.org que hiciera. Si el piloto automático de X-Plane ya hace un buen trabajo manteniendo la orientación horizontal y el Glide Slope, ¿por qué cambiar algo que funciona?

Lo que hice fue lo que cualquier piloto hace para realizar un flare. Nada mas y nada menos que "tirar" de los cuernos. Así de fácil, bueno, más o menos. Como podréis imaginar es más fácil decirlo que hacerlo porque, para tirar de los cuernos del avión automáticamente, antes me tuve que tirar yo de mis pelos y partirme los propios. Mi sistema básicamente lo que hace es detectar que estamos realizando una aproximación por ILS con GS bloqueado, detecta cuando el propio piloto automático de X-Plane corta los motores, monitoriza la energía del avión y la altitud, lo que le da una indicación de la tasa de descenso, estadísticamente calcula una previsión de cuantos ciclos de ejecución del código va a haber antes de que el avión toque el suelo y lo va ajustando tratando de reducir desviaciones. ¿Suena fácil?, lo es, solo que había que averiguar cómo.

Tras mucho investigar, mirar y remirar por los numerosos Data Refs del simulador, vi que existía la posibilidad de "sobreescribir" el control del joystick / yoke por parte del usuario, y que por código podíamos moverlo a voluntad, de modo que eso es lo que hice. Mi código toma el control del yoke en el momento adecuado y tira, en la medida adecuada, para dejar de controlarlo al tocar tierra.

A continuación os indico los Data Refs básicos que uso y para qué. Obviamente quien sepa algo de programación básica de plugins lo podrá analizar con mayor profundidad en el propio código.

sim/cockpit2/gauges/indicators/airspeed_kts_pilot --> El sistema solo se activa por debajo de los 210 nudos.
sim/cockpit/autopilot/autopilot_mode --> El sistema solo se activa si está activo el piloto automático y los servos.
sim/cockpit/autopilot/autopilot_state --> El sistema solo se activa cuando detecta que el AP corta motores en la aproximación.
sim/cockpit/switches/HSI_selector --> Usado para saber que NAV (1 o 2) debe comprobar para saber el tipo de señal (VOR, ILS, etc), el sistema solo se activa cuando tenemos sintonizada una señal ILS.
sim/cockpit/switches/gear_handle_status --> Usado para saber si el tren está abajo o no, el sistema solo se activa con el tren bajado y se cancela al subirlo, si se cancela durante el flare se entra en modo AUTO GO AROUND.
sim/cockpit2/gauges/indicators/radio_altimeter_height_ft_pilot --> Usado para conocer la altura hasta tierra, el sistema solo se activa por debajo de los 50 pies.
sim/cockpit2/gauges/indicators/vvi_fpm_pilot --> Tasa de descenso en pies por minuto. El sistema solo se activa si detecta que estamos en descenso.
sim/joystick/yoke_pitch_ratio --> Posición del yoke (vertical). Usado para mover (tirar) del yoke.
sim/operation/override/override_joystick_pitch --> Flag para poder sobreescribir la posición del yoke mediante el yoke pitch ratio.
sim/cockpit2/gauges/indicators/total_energy_fpm --> Energía total del avión en pies/minuto. Usado para calcular cuanto tirar del yoke según la tasa de descenso.

Obviamente se usan más Data Refs, pero básicamente estos son los que gobiernan todo el sistema.

Y básicamente es eso. El sistema comprueba que el AP controla los servos, que el avión está en vuelo, que tenemos como fuente del HSI un ILS, que vamos a menos de 210 nudos, que estamos por debajo de los 50 pies, que el tren de aterrizaje está extendido, que estamos en descenso y en estas condiciones monitoriza la energía del descenso, para ir compensando tirando del yoke una cantidad determinada estadísticamente según como vamos descendiendo y según la posición del yoke.

Enlaces de descarga:

Sistema Auto Flare (scripts LUA para SASL):
https://docs.google.com/file/d/0BwgpgdeBe7gOa0Mxamd2b2VNLTA/edit?usp=sharing
Descomprimir en el directorio del avión para el que se quieran instalar. SASL debe residir en el directorio Plugins del avión.
Configuración: En el script flare_control.lua hay dos constantes, desired_energy y max_yoke_pitch_ratio. desired_energy es la energía que deseamos sea la de descenso, debe ser siempre negativo, cuanto más cercano a cero, mayor se intentará suavizar el descenso. max_yoke_pitch_ratio es la deflexión maxima a la que se puede poner el yoke. El máximo debe ser 1 que indica el yoke totalmente hacia atrás.

Plugin SASL licencia libre (compatible 32/64 bits):
https://docs.google.com/file/d/0BwgpgdeBe7gOSGxkaUJNRVZRV28/edit?usp=sharing
Descomprimir dentro del directorio Plugins del avión en el que se desee implementar SASL

Aviones de ejemplo (alguno es free, otros se incluyen con X-Plane por lo que no creo que haya problema en su distribución):
https://docs.google.com/file/d/0BwgpgdeBe7gOeU83ZnphYnc5Wms/edit?usp=sharing
https://docs.google.com/file/d/0BwgpgdeBe7gOUGdrWUFTcDJvZ2M/edit?usp=sharing
https://docs.google.com/file/d/0BwgpgdeBe7gObWtNR0lJdFZIWW8/edit?usp=sharing
https://docs.google.com/file/d/0BwgpgdeBe7gOYnQ2TEc3d01tZDg/edit?usp=sharing

Como descargar de Google Drive:


Cualquier problema que tengáis con las descargas, decídmelo, trataré de solucionarlo.

Un saludo y deseo os sea todo esto de ayuda. Preguntas sobre como funciona o peticiones de explicación del código son bienvenidas.
« Última modificación: 23 Abril, 2013, 14:50:20 por kha29096335 »

23 Abril, 2013, 14:55:20 #1
CarlosGarcia
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 663



En línea
Re: Proyecto: Script Auto Flare Universal

Sr kha29096335

Gracias...

Descargando ahora... Muchas Gracias ... Sonrisa

Carlos Garcia

Nota : Reportare en este foro, algunas pruebas con los aviones de SSG en especial el E170 y E190

23 Abril, 2013, 15:11:47 #2
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

Sr kha29096335

Gracias...

Descargando ahora... Muchas Gracias ... Sonrisa

Carlos Garcia

Nota : Reportare en este foro, algunas pruebas con los aviones de SSG en especial el E170 y E190

De nada, espero lo puedas disfrutar. Prueba primero con viento a 0, porque tal vez haya que ir ajustando esas dos constantes que cito. Si al final, antes del touch down el avión levanta en demasía el morro, establece el valor de max_yoke_pitch_ratio a un valor decimal entre 0 y 1, por ejemplo 0.8 Y si aún lo levanta demasiado, ve bajandolo de décima en décima hasta encontrar uno adecuado. Si debes cambiar uno de esos valores, empieza tocando solo ese.

La constante desired_energy es eso, un deseo. Según las condiciones del descenso, viento, peso, etc, puede ser que el sistema se vea incapaz de conseguir exactamente ese valor, pero en general, esta constante determina lo agresivo que es el sistema al intentar suavizar el descenso. Juega con ámbos valores, pero siempre ajusta primero el max_yoke_pitch_ratio.

En algunos de los aviones de ejemplo que he puesto para descarga ya están ajustadas estas constantes. Tómalas como guía.

23 Abril, 2013, 23:20:25 #3
cescll
Usuario Ocasional
***
Desconectado Desconectado

Mensajes: 44



En línea
Re: Proyecto: Script Auto Flare Universal

Enhorabuena por el trabajo y gracias por compartirlo. Giñar

Un par de dudas:

-En teoría, ¿sería posible aplicar el plugin a aeronaves IA? La idea sería generar un tráfico propio en un lugar determinado independiente del generado por el propio simulador.
-¿Qué tal se trabaja con SASL + Lua? ¿Es una combinación útil para plugins más generalistas, 'externos' a las aeronaves?  ¿Cómo es su curva de aprendizaje? (Buf, ya van cuatro!)

Felicidades otra vez
 

24 Abril, 2013, 08:43:37 #4
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

-En teoría, ¿sería posible aplicar el plugin a aeronaves IA? La idea sería generar un tráfico propio en un lugar determinado independiente del generado por el propio simulador.

En teoría algo se puede hacer, hay que sustituir los Datarefs que yo he usado por los equivalentes en la sección sim/multiplayer/autopilot/ y sim/multiplayer/controls/ algunos no son los exactos, y otros ni siquiera existen, concretamente no hay dataref específico para saber si el avión IA tiene sintonizado un ILS, pero quizá un flag en el Dataref autopilot_state que sí existe para cada uno de los aviones IA pudiera usarse. Para otras cosas habría que usar la imaginación, pero básicamente habría que añadir un bucle para que el código controlase y mantuviese traza de los valores de todos los aviones IA (solo de los activos).

Por otro lado la IA pilota, literalmente, tan horripilantemente mal, que no creo que merezca la pena hacer una cosa así si no se pasa a controlar tambien todo lo demás por cada avión. Cuando veo los porrazos que se meten los aviones IA al aterrizar o las barbaridades que hacen al despegar -sobre todo los grandes en condiciones meteorológicas adversas- me llevo las manos a la cabeza.

-¿Qué tal se trabaja con SASL + Lua? ¿Es una combinación útil para plugins más generalistas, 'externos' a las aeronaves?  ¿Cómo es su curva de aprendizaje? (Buf, ya van cuatro!)

De todos los sistemas que he probado SASL es con el que más cómodo me encuentro. Lo ideal es hacerlo en C++ puro, pero entonces tienes que tener entorno para cada una de las plataformas, Windows, Linux y Mac, y en sus dos vertientes 32 y 64 bits, demasiado para desarrollos no profesionales.

Durante un tiempo también probé Pithon Interface, pero necesitas tener Pithon instalado, el adecuado a tu plataforma, junto con el plugin que ejecuta tus scripts en Pithon, la depuración es un problema y no es de muy alto nivel. Prácticamente lo único que hace es transformar las llamadas del SDK de X-Plane de C a Pithon, pero tienes que hacer prácticamente los mismos pasos, lo único que te facilita es la independencia de la plataforma.

SASL es de mayor alto nivel, te automatiza el tener que estructurar llamadas específicas a funciones del SDK para ciertas cosas. La depuración, en comparación con Pithon, es una maravilla, no porque sea buena si no porque la de Pithon Interface es demencial. Yo el SASL es el sistema que recomiendo, LUA tiene sus cosillas particulares, pero es cuestión de aprenderlo poco a poco y, además, hay buenas referencias en Internet.

Lo único malo que tiene SASL es que su versión libre y gratuíta está algo, bueno, yo diría que totalmente, abandonada por su creador, el cual se ha apuntado al carro de "hago esto gratis, y cuando todo el mundo lo use, me pongo a cobrar", abandonando lo que era gratis, algo que me parece absolútamente vergonzoso, así que todos que usamos SASL dependemos de otras personas que tengan a bien mejorar y compilar el sistema para las distintas plataformas.

Yo solo he usado SASL para avionica, de hecho a ello va dirigido, debiendo residir los scripts en el mismo directorio del avión para el que se han implementado. Seguro que puedes hacer cosas más generales, pero no existe, que yo sepa, un sistema para ponerlo a funcionar para todos los aviones, lo que hagas debe ir en el propio directorio del avión, y se carga y descarga al cargar o cambiar de avión.

24 Abril, 2013, 13:02:26 #5
cescll
Usuario Ocasional
***
Desconectado Desconectado

Mensajes: 44



En línea
Re: Proyecto: Script Auto Flare Universal

OK, gracias  crack.

24 Abril, 2013, 15:36:44 #6
CarlosGarcia
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 663



En línea
Re: Proyecto: Script Auto Flare Universal

Primera prueba :

XPFW Boeing 773ER
Peso al aterrizar : 522.000 lbs (MLW :554.000 lbs)
Velocidad : 157 Knots
Flaps : Full

La primera prueba fue con los valores por defecto del plugin. Resultado : el avion realizo el Flare, pero volvio a elevarse nuevamente.

Segunda prueba : Cambie un poco el valor de  max_yoke_pitch_ratio a 0.75

Resultado : Excellent Landing 92 fpm

Se me ocurre algo : Una vez el avion entra en el Flare, tener en cuenta el valor de la altura del avion (radio altitude), si detectamos que en ese momento especificamente el avion vuelve a elevarse (Por que el valor de max_yoke_pitch_ratio es muy alto)  cambiamos dinamicamente el valor de max_yoke_pitch_ratio en ese caso disminuimos el valor para volver a obtener velocidad de descenso. Es como si el piloto soltara un poco los cuernos... Bueno al menos esa es la idea que quiero reproducir de forma dinamica.

En todo caso es una idea que se me viene a la cabeza, me toca estudiar un poco mas el codigo del script.

Gracias


24 Abril, 2013, 16:45:14 #7
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

Primera prueba :

XPFW Boeing 773ER
Peso al aterrizar : 522.000 lbs (MLW :554.000 lbs)
Velocidad : 157 Knots
Flaps : Full

La primera prueba fue con los valores por defecto del plugin. Resultado : el avion realizo el Flare, pero volvio a elevarse nuevamente.

Segunda prueba : Cambie un poco el valor de  max_yoke_pitch_ratio a 0.75

Resultado : Excellent Landing 92 fpm

Se me ocurre algo : Una vez el avion entra en el Flare, tener en cuenta el valor de la altura del avion (radio altitude), si detectamos que en ese momento especificamente el avion vuelve a elevarse (Por que el valor de max_yoke_pitch_ratio es muy alto)  cambiamos dinamicamente el valor de max_yoke_pitch_ratio en ese caso disminuimos el valor para volver a obtener velocidad de descenso. Es como si el piloto soltara un poco los cuernos... Bueno al menos esa es la idea que quiero reproducir de forma dinamica.

En todo caso es una idea que se me viene a la cabeza, me toca estudiar un poco mas el codigo del script.

Gracias

Hola Carlos,

Me alegro de que te sirva. El código no tiene en cuenta la altitud, pero sí la energía, para calcular la cuantía con la que "tira" de los cuernos, esta cuantía se calcula dinámicamente, lo que ocurre es que en un ciclo concreto, teniendo en cuenta la tendencia, al sistema le puede parecer que tiene que tirar cierta cantidad que luego, con las condiciones variables, puede resultar ser demasiado. Esto es así porque no hay forma de calcular un yoke pitch fijo para un VVI o nivel de energía dado, porque las condiciones están cambiando continuamente. El efecto que has observado de levantar demasiado el morro suele ocurrir al final del flare, sobre todo si se ha indicado un valor de desired_energy demasiado exigente (negativo pero muy pequeño). Precísamente para afinar ese comportamiento están esas dos constantes que, como veo, te han servido perfectamente para afinarlo a ese avión en concreto.

Lo que sí podrías hacer es dividir el incremento del yoke pitch por un valor calculado que dependa de la altura hasta el suelo, de modo que sea éste divisor inversamente proporcional a la altura, como un modo de "suavizar" la agresividad del código, pero este valor tambien deberás afinarlo para cada avión y, segúramente, su progresión debiera no ser lineal, si no más bien basado en el cuadrado de la altura.

Ánimo y estudia el código pues, y si llegas a una mejor solución, no olvides compartirla con todos nosotros.

Para el que tenga curiosidad, aqui incluyo unas gráficas resultado del uso del script en diferentes aviones, puede verse como la salida se ajusta a como el script "siente" el avión, produciendo el mismo código comportamientos distintos según las características de vuelo.

Flare en A321


Flare en Cirrus TheJet


Flare en el avión que estoy haciendo


En todos ellos cuando la gráfica del yoke pitch ratio es plana es que se ha alcanzado el máximo valor, a avión más pesado, antes se alcanza, porque para frenar la caida, antes hay que tirar del todo de los cuernos. Tambien se puede observar como aviones mas "nerviosos" tienen una gráfica de la energía con mas variaciones por tiempo, esto es destacable en el Cirrus, cuya configuración de estabilizador horizontal hace que a pequeñas variaciones del estabilizador se produzcan grándes influencias en la tasa de descenso.

Un saludo.

P.D.: Se me olvidaba añadir que el script deja en el .log de x-plane una serie de valores (cada Flare lo hará) que os pueden ser de gran utilidad a la hora de analizar qué sucede y que valores le llegan al script, los que usa en sus cálculos y el resultado, tanto parcial como final, todo esto por cada ciclo.
« Última modificación: 26 Abril, 2013, 07:59:13 por kha29096335 »

24 Abril, 2013, 21:49:31 #8
zxplane
Administrador
Superusuario
*****
Desconectado Desconectado

Mensajes: 4288




En línea
Re: Proyecto: Script Auto Flare Universal

Ante la imposibilidad que tengo de contribuir en la sección Proyectos y todas sus subsecciones, ruego que algún moderador mueva la presente contribución a un lugar apropiado (Preferiría una sección de plugins, pero como no la hay creo que la mas apropiada es Proyectos: Aviones). Gracias.

Kha, como plugins no se se realizan habitualmente, no existe foro de plugins en la sección de proyectos, aunque se podría crear uno si es necesario por la cantidad. ¿Sin embargo, no prefieres que se quede aquí en este foro donde se tratan temas sobre plugins?


24 Abril, 2013, 21:57:05 #9
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

Kha, como plugins no se se realizan habitualmente, no existe foro de plugins en la sección de proyectos, aunque se podría crear uno si es necesario por la cantidad. ¿Sin embargo, no prefieres que se quede aquí en este foro donde se tratan temas sobre plugins?

Hmmmmm... Ya has sembrado la duda en mi  Lengua, el caso es que como esta sección parece ser más para noticias sobre plugins y añadidos -hechos por otros, o parece sugerirse así- que para proyectos de desarrollo propio, no se... pense que sería más adecuado ponerlo en la sección de proyectos, pero vamos, mira, os lo dejo a vuestro criterio, de modo que haced lo que consideréis que es mas apropiado según el contenido.

Muchas gracias.  Giñar

29 Abril, 2013, 23:20:23 #10
zxplane
Administrador
Superusuario
*****
Desconectado Desconectado

Mensajes: 4288




En línea
Re: Proyecto: Script Auto Flare Universal

Kha, lo pongo como tema destacado y queda fijado para que esté fácilmente localizable en el encabezado de la sección.


30 Abril, 2013, 14:13:32 #11
Murdock
Usuario Iniciado
****
Desconectado Desconectado

Mensajes: 465


¡¡ Esto !! ¿Dónde está la palanca de cambios ?



En línea
Re: Proyecto: Script Auto Flare Universal

 Impresionado  muchas gracias kha

14 Mayo, 2013, 09:30:59 #12
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

Muy buenas,

Estoy aún a vueltas con este script, y estoy realizando modificaciones para usar la VS en lugar de la energía, sustituyendo el sistema de medias auto-corregidas que uso por uno que me agrada más. Ya lo tengo listo, en cuanto tenga algo de tiempo lo subo a Google drive y lo comparto con vosotros. No se si funcionará mejor o peor, a mi me esta sirviendo. Lo he probado en varios aviones de dispares características, incluso con algunos en los que no tendría sentido -la C172SP- y condiciones de viento y me está dando buenos resultados, eso sí, es importante mantener una GS adecuada. Por ejemplo, con vientos en contra, con autothrust, lo recomendado es indicar una velocidad menor porque de lo contrario, durante el flare, la excesiva sustentación hace que el avión suba algo, para volver a bajar y aumenta la necesidad de autocorrección por parte del script.

Bueno, cuando esté a aquel que le interese que lo pruebe y comente cual es el que mejor resultados le da, si el primero o éste. Como en el caso del anterior, hay unos parámetros que deben afinarse para adaptar el comportamiento a cada caso particular.

Las próximas actualizaciones serán para el sistema de cancelación de flare y "motores y al viento", que se activará si, durante el flare recogemos el tren de aterrizaje. Esto ya está contemplado en el script anterior, pero en fase alfa, sin comprobar lo necesario.

Saludos.
« Última modificación: 14 Mayo, 2013, 09:33:48 por kha29096335 »

14 Mayo, 2013, 16:17:09 #13
CarlosGarcia
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 663



En línea
Re: Proyecto: Script Auto Flare Universal

Hola... Gracias por la actualización.

Si... he tenido problemas por que normalmente vuelo Aviones Heavy Metal, creo que lo mas pequeño que vuelo es el Embraer 170. Para evitar que el avión vuelva a subir en el momento del "Flare" me toca bajar mucho la velocidad hasta el punto que muchas veces estoy casi en el "Stall".

Observando el QPAC A-320 veo que el flare del A320 es muy bien coordinado y no se ve muy afectado por las velocidades y/o Peso del avión. Es mas estoy por creer que lo que ellos hacen en el flare es tomar control total de la POSICION del avión y MOVERLO haciendo el FLARE Artificial y no basado en velocidades y/o energía.

De todas formas si tienes la oportunidad de probar el QPAC A320, te das cuenta que el FLARE no cambia con el aterrizaje, el comportamiento del avión es practicamente el mismo en cualquier aterrizaje. ( PUEDO ESTAR EQUIVOCADO --- Es lo mas probable)

Gracias de antemano

Carlos Garcia

15 Mayo, 2013, 19:21:40 #14
kha29096335
Usuario Frecuente
*****
Desconectado Desconectado

Mensajes: 664



En línea
Re: Proyecto: Script Auto Flare Universal

Hola... Gracias por la actualización.

Si... he tenido problemas por que normalmente vuelo Aviones Heavy Metal, creo que lo mas pequeño que vuelo es el Embraer 170. Para evitar que el avión vuelva a subir en el momento del "Flare" me toca bajar mucho la velocidad hasta el punto que muchas veces estoy casi en el "Stall".

Observando el QPAC A-320 veo que el flare del A320 es muy bien coordinado y no se ve muy afectado por las velocidades y/o Peso del avión. Es mas estoy por creer que lo que ellos hacen en el flare es tomar control total de la POSICION del avión y MOVERLO haciendo el FLARE Artificial y no basado en velocidades y/o energía.

De todas formas si tienes la oportunidad de probar el QPAC A320, te das cuenta que el FLARE no cambia con el aterrizaje, el comportamiento del avión es practicamente el mismo en cualquier aterrizaje. ( PUEDO ESTAR EQUIVOCADO --- Es lo mas probable)

Gracias de antemano

Carlos Garcia

Si, es bastante complicado, la verdad. Y sí, también he usado el avión de QPAC, que es soberbio, desdeluego. No creo que hagan "trampas" controlando la posición del avión. Lo que ocurre es que el plugin lo estuvieron desarrollando durante más de dos años, tengo entendido, basándose en el real de Airbus y yo diría que sustituyeron todo el piloto automático con el suyo propio, que tiene mérito la cosa.

El principal problema de no sustituir todo el AP de X-Plane por el propio es que tienes que lidiar con su comportamiento por defecto. El AP de X-Plane corta motores totalmente justo donde empezaría la "recogida". Creo que los pasa a "IDLE". En esa situación el problema es que carecemos de empuje a partir de ese momento, de modo que para compensar esa falta de sustentación repentina hay que tirar de los cuernos demasiado agresivamente, lo que conlleva que mediante mi sistema, si hay viento de cara de cierta magnitud, sea "tirar demasiado", y se produce un "reflote" del aparato. Lo contrario es totalmente cierto también, pero por lo contrario. Ha sido realmente muy complicado encontrar un equilibrio entre suavidad y agresividad, de modo que el script no tire "brutalmente" de los cuernos, lo que conlleva que, en casos de viento a favor, el avión caiga mas fuerte de la cuenta. Ésas variables confgurables, precísamente estan para eso, para dotar de cierta capacidad de ajuste.

Todos los problemas surjen del hecho de que no he encontrado una relación directa entre el yoke pitch ratio y la VS o la energía. Relación la hay, pero al no ser lineal no puede encontrarse una formula "sencilla" para saber cuanto tirar del yoke para obtener una determinada VS en un tiempo T. He probado de muchas formas, al principio, si usaba una relación lineal basándome en la estadística, en en cuanto varió la VS con cada variación de yoke en ciclos anteriores, digamoslo así, el script se comportaba de forma muy agresiva y, sobre todo en aviones ligeros, llegaba a superar el ángulo de ataque máximo, y el avión en cuestión entraba en pérdida. De modo que no podía usar una relación lineal, ni siquiera por tramos, es decir, no podía usar una funcion coninua lineal para calcular el yoke pitch según la VS que quería obtener. El problema viene de que en un ciclo dado, puede que a mucha variación de yoke se produzca poca de VS, el sistema se ajusta a ello, pero en ciclos posteriores puede ocurrir todo lo contrario, por las circunstancias puntuales, y a poca variación de yoke se produzca mucha de VS, en esos casos el precalculo de lo que debería variar el yoke resulta incorrecto para la situación instantánea actual.

El tema se complica más cuando en un ciclo lo calculado sirve para ese ciclo, porque instantes después, en el siguiente ciclo, las condiciones han variado, de modo que lo que era cierto antes, puede no serlo ahora, el viento puede haber variado, etc. Es un sistema que se retroalimienta, dado que el propio cambio en el yoke en el ciclo anterior, cambia las condiciones para el siguiente.

Así, a bote pronto, se me ocurren un par de cosas que se podría probar.

1) Establecer un yoke pitch máximo, pero que se recalcule teniendo en cuenta la GS, KIAS menos la componente paralela al avión de la velocidad del viento. Si el max_yoke_pitch_ratio correcto para un Cirrus es 0.8 a velocidad de viento 0, con viento en contra de 20 nudos deberá ser inferior, e ir recalculando ese máximo a cada ciclo, habiendo partido del valor inicial, de modo que todo lo demás se adapte a ese nuevo máximo.

2) Echarle napias y usar la física, con un par. Teniendo en cuenta que se trata de un movimiento parabólico. Tener en cuenta todas las fuerzas que influyen en la VS del avión, y variar el yoke pitch de forma acorde para que la resultante de las fuerzas nos de una VS específica. Sospecho que aquí tenemos el mismo problema, que es muy complicado obtener una fórmula que relacione la VS con el yoke pitch y que, al mismo tiempo, tenga en cuenta todas las sutilezas de un cambio de viento, por mínimo que fuese. Aparte de la complicación de obtener los DataRefs adecuados para todo ese cálculo de fuerzas, aunque estar, seguro que están.

Cuando investigaba todo esto lo primero que intenté es usar el propio AP de X-Plane. Indicándole que cuando se debía ejecutar el Flare yo quería una VS de -50 fpm, por ejemplo. Tuve cierto éxito en cierta medida pero me surgió un problema que resultó ser insuperable. No había forma de decirle que la VS fuese de -50, porque el indicador de VS del AP va de 100 en 100 como poco, y es tan tonto el sistema que no te admite -50 por código, cosa ridícula en mi opinión. Si quieres no dejes que el piloto lo ponga en saltos distintos de 100, pero por código deja que se ponga lo que se quiera. Así que o no encontré el DataRef correcto o no es posible valores que no sean múltiplos de 100. Tras ése fracaso opté por hacerlo controlando el yoke, y ahí estamos. Ni que decir tiene que cada cambio o prueba me lleva innumerables análisis prácticos, innumerables aterrizajes, innumerables fracasos, pocos éxitos y una paciencia a prueba de bomba.

Si alguien tiene ideas que aportar, cosas por probar, sugerencias, etc, yo lo invito a la participación. Y cualquiera que tenga dudas o preguntas lo mismo. Le intentaré contestar lo mejor que pueda.
« Última modificación: 15 Mayo, 2013, 19:29:55 por kha29096335 »

Tags:
Páginas: [1] 2   Ir Arriba
  Imprimir  
 
Ir a:  

www.x-plane.es.
Página creada en 0.105 segundos con 20 queries.