Entonces, actualmente estoy haciendo un proyecto sobre optimización de trayectoria. Obtengo el principio de esto, minimizar el costo de combustible para un viaje o tratar de maximizar el peso de la nave espacial en el destino objetivo, y eso arroja una trayectoria óptima para hacerlo. Simplemente no estoy seguro... ¿cómo hacerlo realmente? Estoy leyendo mucho sobre cosas como 'vectores primarios' y métodos basados en formas e incluso hamiltonianos (que asustan a este pobre ingeniero) y no estoy seguro de cómo comenzar a construir un trayectoria optima?
¿Hay alguna forma de explicar esto para tontos, o un libro para explicarlo para tontos?
¡Gracias por adelantado!
Estoy buscando una respuesta similar, así que pensé en comenzar una aquí y dejar que otros ofrezcan su opinión. Esto es lo que he encontrado hasta ahora.
Comenzaré a compilar algunos enlaces generales aquí.
Para planificar una misión, debe identificar algunas limitaciones generales de la misión. Si se trata de un problema nuevo, es posible que deba iniciar una solución para comprender qué restricciones pueden existir.
Para hacer eso, puede elegir una fecha de inicio de misión específica cuando crea que una trayectoria podría ser factible, así como algunas otras restricciones específicas (alguna cantidad de combustible disponible, Isp del motor, etc.). Según Ocampo (Capítulo 4 de Spacecraft Trajectory Optimization , editado por Conway), quien creó el programa de optimización de trayectoria Copernicus de la NASA , hay cuatro pasos básicos:
Creo que los pasos 1-2 son todo lo que realmente necesita para generar gráficos C3 o DV. Después de identificar sus limitaciones generales (a continuación), puede elegir un conjunto específico de fechas de misión y seguir todos los pasos.
Si ya existen trayectorias de referencia, puede omitir los pasos 1 y 2, generar sus diagramas C3/DV y luego realizar los cuatro pasos una vez que haya determinado las fechas de salida y llegada, etc.
Vale la pena señalar que Paul ha proporcionado muy buena información sobre cómo se realiza la optimización en sí misma en otra respuesta a esta pregunta . No intentaré mejorar su respuesta en este momento.
¿Adónde vas? ¿Cuáles son las duraciones mínima y máxima de la misión? ¿Cuándo es lo más temprano que podrías irte? ¿Lo último? ¿Está interesado en trayectorias de bajo empuje o algo más parecido a Hohmann?
Utilice un diagrama de chuleta de cerdo para trayectorias extremadamente aproximadas que cumplan con los límites seleccionados.
Para Earth-Mars, hay una herramienta basada en la web para generar estos archivos . Esta herramienta parece usar la orientación de Lambert, por lo que realiza transferencias directas y probablemente no ayudará mucho con trayectorias de baja energía que involucren asistencias por gravedad.
De manera más general, la NASA tiene un motor de búsqueda de trayectorias (que proporciona mucha información sobre este tema). Al igual que con la aplicación anterior, y aparentemente en general, "la base de datos contiene soluciones para transferencias directas y asistencia de gravedad simple en tramos de salida. Se pueden usar maniobras de asistencia de gravedad más complejas y otras estrategias para encontrar trayectorias alternativas que no figuran en la base de datos".
No es raro que los diagramas de chuletas de cerdo incluyan grandes espacios vacíos donde no se muestra información de la trayectoria. Por ejemplo, considere este del navegador de trayectoria de la NASA:
Puede ser que los autores no calcularon las trayectorias en el área blanca porque sabían que el DV sería demasiado alto, o puede ser que simplemente no se muestren porque son órdenes de magnitud más altas que las que se muestran y sesgan el barra de color. La conclusión aquí es que el diagrama de chuleta de cerdo solo debe mostrar trayectorias relevantes.
No he visto ninguna trama de chuleta de cerdo para misiones lunares (hasta ahora). Sin embargo, la idea parece ser la misma: identificas tus limitaciones y eliges una clase de misiones (por ejemplo, transferencias directas) para observar. Luego, considere la energía específica (C3) o el DV.
Por ejemplo, considere este capítulo del libro Diseño de transferencia lunar de baja energía del JPL . Comienzan observando tres clases diferentes de misiones: transferencia directa, corta de baja energía, larga de baja energía. Varían la longitud del nodo ascendente (que es función de la fecha de salida) y muestran cómo cambia la delta-V para la inserción lunar para cada uno de estos.
Entonces, en general, han descubierto las restricciones para sus misiones y luego han determinado qué variables ejercen el mayor control sobre DV (o C3).
Una vez que haya producido sus diagramas de porkchop (o delta-V), puede identificar las restricciones que cumplen simultáneamente con los requisitos de su misión y brindan la mayor flexibilidad (p. ej., ventana de lanzamiento prolongada, mayor tolerancia a fallas, etc.).
Y me detendré aquí por ahora y regresaré y agregaré más más tarde (a medida que aprenda).
En su forma más amplia, la Optimización de Trayectoria es simplemente encontrar la mejor ruta (y controlar los valores para producir esta ruta) que satisfaga la dinámica. La dinámica, en este caso, es la dinámica orbital (por ejemplo, el problema de 2 cuerpos de Kepler con efemérides adecuadas), la dinámica de ascenso del cohete o la dinámica de reentrada balística/elevadora. La función de costo se puede crear de muchas maneras diferentes, según lo que desee al final. Por ejemplo, puede querer optimizar la dinámica para producir un estado particular al final de un intervalo de tiempo fijo. O quizás desee minimizar el combustible utilizado en el viaje (lo que maximiza la masa de carga útil). O es posible que desee minimizar el tiempo que lleva alcanzar un estado final particular usando la menor cantidad de (empuje regulable/vectorizado).
Una vez que establezca cuáles son sus ecuaciones dinámicas y cuál es su "función de costo", puede traducir eso en un conjunto de ecuaciones que puede resolver. Este proceso se denomina "transcripción" en la nomenclatura de optimización de trayectoria. A grandes rasgos, hay dos formas de transcribir el problema. El método "indirecto" sugiere que debe formular las condiciones de optimización primero analíticamente, luego discretizar esas condiciones en un número de pasos de tiempo N. Esto dará como resultado un sistema de ecuaciones no lineal con variables, donde M es el número de variables para describir un estado en un momento dado (por ejemplo, el número de ecuaciones diferenciales); más variables de control, donde P es el número de controles que se aplican en cada paso de tiempo. Por ejemplo, en un problema de dos cuerpos en coordenadas cartesianas, tendrá cuatro variables de estado en cada paso de tiempo (posición x, velocidad x, posición y y velocidad y). El control puede ser un empuje regulable que siempre apunta en la dirección de la velocidad. Entonces, solo habría 1 control en cada paso de tiempo. Muchas veces, esto puede ser tedioso, ya que gran parte del trabajo debe hacerse a mano.
La alternativa se denomina método "directo". En este caso, primero discretizaría las ecuaciones y luego formularía las condiciones de optimización. Entonces, en lugar de formular las condiciones en un espacio infinito (método indirecto), las está formulando solo para el espacio de dimensión finita (un número finito de variables de estado + control). La ventaja de este método es que el problema ahora se convierte en un problema de optimización con restricciones no lineal (que es más fácil de programar directamente y resolver usando paquetes de software).
Bajo el paraguas de los métodos directos, hay un par de formas diferentes de discretizar el problema. Una forma se llama colocación, donde obligamos a la dinámica a estar de acuerdo en ciertos puntos en el tiempo (mientras se asume algún tipo de esquema de interpolación entre estos puntos, como la interpolación lineal o cuadrática). El otro enfoque se llama disparo, que es como un enfoque de prueba y error donde la discrepancia (también conocida como restricción de defecto) en cada paso de tiempo se discretiza y también se minimiza. No he usado métodos de disparo para la optimización de la trayectoria, pero he usado el método de colocación, así que lo abordaré directamente.
El truco clave del método de colocación es saber cómo calcular las restricciones de igualdad no lineal utilizando la dinámica del problema. La idea clave es que en cada paso de tiempo, se debe restringir el valor predicho de la dinámica para que sea igual al valor real al final del paso de tiempo. Supongamos que estamos considerando el paso de tiempo i-ésimo, que tiene variables de estado y respectivamente en intervalos de tiempo y . Supongamos también que la ecuación dinámica se puede escribir en la forma . Si integramos ambos lados de esta ecuación con respecto al tiempo en el intervalo de a , obtenemos
Uno puede discretizar la integral de muchas maneras. Para simplificar, elijamos algo como la regla trapezoidal. Entonces podemos obtener
Definamos el valor predicho por la dinámica como El valor real al final de este paso de tiempo es . Entonces, para imponer una restricción dinámica, simplemente establecemos el valor predicho igual al valor real al final de este intervalo de tiempo. Matemáticamente, escribimos: . Lo escribimos de esta manera porque la mayoría de los paquetes de programación no lineal requieren que escriba restricciones de igualdad con el RHS igual a cero.
Esa es la mayor parte del trabajo duro. Simplemente necesita crear una función que calcule un vector que contenga todas estas restricciones en cada paso de tiempo simultáneamente. De manera similar, deberá escribir su función objetivo en términos de las variables discretas , que puede incluir una integral discretizada en el tiempo y/o una función del estado final.
Una vez que tenga la función objetivo y la función de restricción de igualdad (que son funciones de las variables de estado y los controles en todos los intervalos de tiempo), también deberá proporcionar los límites inferior y superior de cada una de las variables de estado y control en todos los intervalos de tiempo. Estos límites generalmente están motivados físicamente, como que la masa debe ser positiva o el radio de la órbita no puede exceder las 2 unidades astronómicas, etc. Además, a menudo debe proporcionar una suposición inicial que satisfaga los límites inferior y superior. A veces, un problema de optimización de trayectoria puede ser sensible a su suposición inicial, por lo que es una buena idea elegirlo lo más cerca posible de lo que cree que debería ser la verdadera solución (por ejemplo, si tiene alguna intuición física sobre el problema, ahora es la solución). hora de usarlo).
Una vez que tenga toda esta información, puede enviarla a un solucionador de programación no lineal (por ejemplo, fmincon, ipopt, etc. de Matlab). Por lo general, existen diferentes métodos que puede usar para resolver problemas de optimización con restricciones no lineales, como la programación cuadrática secuencial (SQP), los métodos de conjuntos activos (ASM) o los métodos de puntos interiores (IP). De los métodos que he usado en la optimización de trayectorias para la mecánica orbital, he encontrado que los métodos de puntos interiores son los más rápidos y robustos. Independientemente del método de programación no lineal que elija, asegúrese de que cuando compruebe la convergencia, compruebe tanto la viabilidad (cuánta violación de restricciones estamos incurriendo) como la optimización de primer orden (qué tan cerca estamos de estar en el fondo de un tazón). /Valle). Ambos valores deben ser pequeños para que se consideren una solución "convergente".
Antes de comenzar a programar un código de optimización de trayectoria para la mecánica orbital, recomiendo probar un problema más simple con una solución conocida. El llamado problema de control bang-bang es un buen ejemplo de un problema de control óptimo 1D que involucra movimiento 1D. En este problema se busca la aceleración óptima necesaria para alcanzar una distancia determinada en el tiempo mínimo tal que su velocidad final también sea cero. Este es un problema clásico con mucha intuición física (e incluso una solución analítica). Intuitivamente, el mejor control sería acelerar lo más rápido que pueda hacia su destino objetivo hasta cierto punto y luego desacelerar lo más rápido posible hasta que apenas llegue a su punto de destino con una velocidad de cero.
Puede ver cómo se puede transcribir este problema bang-bang utilizando el método de colocación directa (completo con el código matlab) en el blog de Sam Pfrommer:
http://sam.pfrommer.us/tutorial-direct-colocation-trayectory-optimization-with-matlab
Para obtener información adicional sobre la optimización de la trayectoria en general, con ejemplos más complicados, como el problema del control del poste del carro, sugiero leer/ver el tutorial de Matthew Kelley sobre este tema:
[Esta será una respuesta preliminar a medida que aprenda más y tenga más tiempo para completarla y editarla con matemáticas simbólicas; en este momento será muy difícil y esta respuesta evolucionará mucho con el tiempo]
Problema básico simplificado
El problema genérico es tomar una nave espacial de un conjunto de condiciones iniciales a un conjunto de condiciones terminales donde es un control continuo a resolver para el cual es la dirección de empuje del cohete, sujeto a una función de costo ser minimizado. La función de costo suele ser el tiempo mínimo o la masa terminal máxima para un problema de tiempo final libre, o la energía orbital máxima para un problema de tiempo fijo. Puede haber otros controles discretos como tiempos de conmutación u otros controles continuos si se trata de limitación, junto con restricciones de ruta y otras complejidades que ignoraré por ahora.
Si a uno se le da la solución
para todo t, entonces el problema se reducirá a un problema de valor inicial simple (IVP) con un sistema acoplado de diferentes ecuaciones ordinarias (EDO), que podría integrarse hacia adelante con un solucionador de ODE como el método Runge-Kutta-Fehlberg (RKF45) o el solucionador Dormand-Prince (RKDP) en Matlab's ode45
.
Como no nos dan y, en cambio, debe resolver ese control de manera que se cumplan las condiciones de contorno terminales, se convierte en un problema de valor de contorno de dos puntos (TPBVP).
Método indirecto
El método "indirecto" usa el Cálculo de Variaciones (CoV) y una rama de las matemáticas llamada Teoría de Control Óptimo que utiliza el principio máximo (o mínimo) de Pontryagin. Cuando se aplica al problema de optimizar las trayectorias de los cohetes, esto se convierte en la Teoría del vector básico de Lawden, donde gran parte del marco matemático se ha realizado para el ingeniero.
El método indirecto generalmente usa métodos de disparo (o disparos múltiples) para integrar una conjetura en las condiciones iniciales hacia adelante en el tiempo hasta el estado terminal. Se construye el residuo de todos los valores límite y luego se utiliza una herramienta de búsqueda de raíces como Levenberg-Marquardt o un método de región de confianza cuasi-Newton (la vainilla Newton-Raphson tendrá dificultades de convergencia con este problema no lineal).
Omitiendo el desarrollo matemático, el problema de un cohete en el vacío, sujeto a un potencial de fuerza central al cuadrado inverso donde la masa final debe maximizarse, la función de costo es un problema de Mayer simple:
[EDITAR: necesito un comentario sobre la normalización] El hamiltoniano lo expresaré como:
[...todavía trabajo en progreso aquí...]
El método indirecto se puede resolver utilizando las funciones fsolve
o de Matlab lsqnonlin
para encontrar raíces, y el ode45
solucionador para integrar IVP y disparar. O los solucionadores de colocación bvp4c/bvp5c
se pueden usar para integrar el estado y la costa y para aplicar restricciones interiores.
Las limitaciones del método indirecto son:
Las ventajas del método indirecto son:
Método directo
El método directo utiliza algunas formas de colocación ortogonal y discretización para convertir el TPBVP en un problema de programación no lineal. Esto elimina el costado y las ecuaciones de costado y las condiciones de transversalidad del problema. Generalmente no habrá una única solución al problema que satisfaga las condiciones terminales, pero la función de costo se aplica directamente para encontrar la solución que satisface las restricciones terminales.
[... gran cantidad de detalles omitidos de los que todavía estoy aprendiendo...]
La función de Matlab fmincon
o los enlaces de Matlab ipopt
se pueden usar para resolver este tipo de problema, SNOPT
es un paquete comercial comúnmente utilizado para resolver este tipo de problema que también tiene enlaces de Matlab.
Las ventajas del método directo incluyen:
UH oh
UH oh
harvey rael
Dan Sorensen
translunar
UH oh
SF.
lamont