Plantearé mi pregunta matemática sobre las matrices de transición de estado y propagación de estado primero, luego le mostraré un problema simple para el cual me gustaría usar estos conceptos para generar una familia densamente espaciada de órbitas de halo.
También comenzaré con la declaración de que estoy buscando un ¡Ajá! escriba respuesta. No espero una explicación tan larga como esta excelente e intuitiva explicación de los cuaterniones . No necesito que se resuelva todo, solo alguna explicación de cómo se podría entender, obtener y usar la Matriz de Transición del Estado en este contexto.
Lo siguiente es bastante estándar, estoy citando un artículo que tengo a mano en este momento, Juan Senent, César Ocampo y Antonio Capella; Transferencias de impulso específico variable de bajo empuje y guía para órbitas periódicas inestables. Journal of Guidance, Control, and Dynamics, 28 (2) de marzo a abril de 2005:
Para el sistema dinámico
evaluado desde Para algo , el diferencial de estado final en es dado por
donde la matriz de transición de estado satisface
y
y es el jacobiano del campo vectorial utilizado como matriz de propagación de estado,
Empecé con el artículo clásico escrito por Kathleen Connor Howell Three-Dimensional, Periodic 'Halo' Orbits Celestial Mechanics 32 (1984) 53-71. Describe una técnica para encontrar soluciones para las órbitas de halo en el problema circular restringido de 3 cuerpos (CR3BP), siguiendo de cerca una técnica descrita por Breakwell, JV y Brown, JV: 1979, The "Halo" Family of 3-Dimensional Periodic Orbits en el Problema de 3 Cuerpos Restringido Tierra-Luna Celest. mecánico 20 , 389.
Howell 1984 describe en detalle un procedimiento paso a paso para encontrar miembros de una familia de órbitas de halo alrededor de los puntos de libración colineales de Lagrange que tienen simetría alrededor del plano xz, aprovechando el hecho de que para este grupo de órbitas tres de los seis componentes del vector de estado debe converger a cero en el punto donde la órbita interseca al plano.
El documento tabula seis ejemplos de órbitas de halo, y con los números dados allí puedo integrar los vectores de estado, verificar que los tres componentes del vector de estado de hecho, pase por cero en el punto medio de las órbitas y haga un buen gráfico.
Lo que me gustaría hacer es entender intuitivamente qué es un vector de propagación de estado y un vector de transición de estado, y cómo usarlos para converger más rápido en un nuevo miembro de la familia de órbitas de halo que si hubiera comenzado a disparar órbitas en un cúmulo. alrededor de un punto de partida y usó algo simple como el descenso más pronunciado para encontrar la siguiente órbita con todos iguales a cero.
dónde
¡NOTA! Creo que las etiquetas para las posiciones de L y yo en el GIF y el guión están transpuestos (etiquetas/nombres incorrectos). Actualizaré la imagen pronto.
def deriv(X, t):
x, y, z, xdot, ydot, zdot = X
r1 = np.sqrt((x + mu)**2 + y**2 + z**2)
r2 = np.sqrt((x - 1. + mu)**2 + y**2 + z**2)
term_1 = x + 2. * ydot
term_2 = -(1.-mu) * (x + mu) / r1**3
term_3 = -mu * (x - 1. + mu) / r2**3
xddot = term_1 + term_2 + term_3
term_1 = -2. * xdot
term_2 = 1. - (1.-mu)/r1**3 - mu/r2**3
yddot = term_1 + y * term_2
term_1 = (1. - mu)/r1**3 + mu/r2**3 # should be plus???
zddot = -z * term_1
return np.array([xdot, ydot, zdot, xddot, yddot, zddot])
class Sat(object):
def __init__(self, X0, T0, nu12):
self.X0 = X0
self.pos0 = X0[:3]
self.v0 = X0[3:]
self.T0 = T0
self.nu1, self.nu2 = nu12
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint
from mpl_toolkits.mplot3d import Axes3D
# From "Three-Dimensional, Periodic 'Halo' Orbits,
# Kathleen Connor Howell, Celestial Mechanics 32 (1984) 53-71
pi, twopi = np.pi, 2*np.pi
mu = 0.04
# starting points:
x0 = [0.723268, 0.729988, 0.753700, 0.777413, 0.801125, 0.817724]
y0 = 6*[0.0]
z0 = [0.040000, 0.215589, 0.267595, 0.284268, 0.299382, 0.313788]
xdot0 = 6*[0.0]
ydot0 = [0.198019, 0.397259, 0.399909, 0.361870, 0.312474, 0.271306]
zdot0 = 6*[0.0]
# X0s = np.array(zip(x0, y0, z0, xdot0, ydot0, zdot0)) Nope!
X0s = np.array(list(zip(x0, y0, z0, xdot0, ydot0, zdot0)))
Thalf0s = [1.300177, 1.348532, 1.211253, 1.101099, 1.017241, 0.978653]
T0s = [2.0*x for x in Thalf0s]
nu1s = [1181.69, 51.07839, 4.95816, 1.101843, 0.94834, 1.10361]
nu2s = [ 0.98095, -0.90203, -0.40587, -0.420200, -1.58429, -2.09182]
nu12s = zip(nu1s, nu2s)
n_half = 200
fractional_times = np.linspace(0.0, 1.0, 2*n_half+1)
rtol, atol = 1E-12, 1E-12
sats = []
for X0, T0, nu12 in zip(X0s, T0s, nu12s):
sat = Sat(X0, T0, nu12)
sat.n_half = n_half
sat.t = sat.T0 * fractional_times
sat.rtol, sat.atol = rtol, atol
sats.append(sat)
for sat in sats:
answer, info = ODEint(deriv, sat.X0, sat.t,
rtol=sat.rtol, atol=sat.atol,
full_output = True )
sat.answer = answer
sat.mid = answer[sat.n_half]
sat.mid = answer[sat.n_half]
sat.info = info
if 1 == 1:
xL2, xL1 = 0.74091, 1.21643 # lazy!
fig = plt.figure(figsize=[10, 8])
ax = fig.add_subplot(1, 1, 1, projection='3d')
for sat in sats:
x, y, z = sat.answer.T[:3]
ax.plot(x, y, z)
ax.plot([0.0-mu], [0], [0], 'ob', markersize=20)
ax.plot([1.0-mu], [0], [0], 'og', markersize=12)
ax.plot([xL2], [0], [0], 'ok', markersize=8)
ax.plot([xL1], [0], [0], 'ok', markersize=8)
ax.set_xlim(0.7, 1.25)
ax.set_ylim(-0.225, 0.225)
ax.set_zlim(-0.15, 0.40)
ax.text(xL1, 0, -0.05, "L1", fontsize=14, horizontalalignment='center')
ax.text(xL2, 0, -0.05, "L2", fontsize=14, horizontalalignment='center')
nplot = 80
thetas = np.linspace(0, twopi, nplot+1)[:-1]
azimuths = -90 + 10.0 * np.cos(thetas)
fnames = []
for i, azim in enumerate(azimuths):
fname = "haloz_3D_" + str(10000+i)[1:]
ax.elev, ax.azim = 0, azim
plt.savefig(fname)
fnames.append(fname)
# tight cropping
for i in range(len(fnames)):
fname_in = "haloz_3D_" + str(10000+i)[1:]
fname_out = "haloz_3D_crop_" + str(10000+i)[1:] + ".png"
img = plt.imread(fname_in + ".png")
plt.imsave(fname_out, img[200:-175, 240:-190])
El STM es un procedimiento de linealización de un sistema dinámico. Se puede usar para cualquier sistema dinámico no lineal y se usa para aproximar la dinámica de un sistema en períodos cortos de tiempo. En astrodinámica, se utiliza especialmente para la determinación estadística de la órbita (stat OD) y el problema circular restringido del tercer cuerpo (CRTBP).
El cálculo del STM para la OD estadística se explica en profundidad en "Determinación estadística de la órbita" de Tapley, Schultz, Born, Elsevier 2004. Específicamente, las secciones 1.2.5 y 4.2.1. En adelante, esta referencia se denominará "(1)".
Dejar sea el estado de su sistema en un marco cartesiano. En el siguiente, y corresponden respectivamente a la posición y la velocidad de la nave espacial; corresponde a la derivada temporal de la variable. Elegir la posición y la velocidad es a menudo lo que usará para los problemas de nivel de entrada. Si está haciendo una estadística OD más seria , también querrá agregar el parámetro gravitacional, la posición de sus estaciones terrestres, etc. pero es importante tener en cuenta que cambiar su vector de estado también cambiará el STM y la matriz A (cf. abajo).
Entonces podemos expresar la derivada temporal del estado como sigue:
En esta formulación, el La función corresponde a la dinámica completa del sistema: esta función se integra durante un período de tiempo si está calculando la dinámica real, es decir, es una representación de las ecuaciones de movimiento. Suponiendo el problema de los dos cuerpos, es la aceleración debida únicamente al cuerpo primario, es decir . Si se modelan dinámicas más complejas, el función también incluirá estos.
Como se dijo anteriormente, el STM es una linealización de su dinámica. Entonces comenzamos discretizando el tiempo y asumiendo que el sistema se comporta de manera lineal durante ese tiempo. Esta es una aproximación muy útil. De hecho, permite simplificar la simulación: en lugar de tener que propagar su dinámica (es decir, la
función) durante un tiempo de integración dado, simplemente necesita multiplicar el estado
con el STM
para obtener
. Además, según (1), el STM tiene las siguientes propiedades (la sección y el número de página se muestran en la primera línea como referencia):
Entonces, a partir de ahora, sabemos que el STM es una linealización de un sistema dinámico que nos permite considerarlo como un sistema lineal en un corto período de tiempo. Entonces, necesitamos linealizar la dinámica del sistema en torno a un estado dado, referencia aquí . Esta referencia se basa en el tiempo y se actualiza a través del STM. En otras palabras, calculamos el STM inicial, calculamos el estado la próxima vez y luego volvemos a calcular el STM alrededor de ese nuevo estado.
El siguiente es un extracto de una conferencia del Dr. McMahon. Lo que está marcado con una estrella corresponde al estado de referencia.
Podemos ver claramente aquí que simplemente estamos calculando la serie de Taylor de la función en el primer orden! Así que matemáticamente esto es simple. Sin embargo, en la práctica, esto corresponde a la derivada de la aceleración, por lo que es un poco molesto de calcular (pero Mathematica o Sage Math (ahora CoCalc) pueden ayudar mucho con sus derivadas simbólicas, esto podría ayudar ). De todos modos, este parcial generalmente se conoce como el matriz (al menos en mi experiencia).
Relación entre la matriz A y el STM, de "Análisis del entorno Lagrangiano Sol-Tierra para el New Worlds Observer (NWO)", Deccia 2017 ( enlace )
Creo que un buen ejemplo es ver cómo se puede hacer esto en el código (estos son de mi biblioteca de astrodinámica que está en Golang, lo siento... Creo/espero que todavía sea relativamente legible). En primer lugar, el cálculo de la matriz A con una serie de posibles perturbaciones en función de la configuración de la misión. En segundo lugar, una serie de casos de prueba . Entre otras cosas, la prueba verifica que la norma de la diferencia entre el estado anterior y el nuevo estado (calculado a través del STM) está dentro de (esto es algo arbitrario, pero el estado tiene posiciones y velocidades de una nave espacial LEO, por lo que esta es una pequeña diferencia). En tercer lugar, es posible que desee consultar el código fuente de GMAT (que he puesto a disposición en Github para su comodidad; consulte su repositorio sourceforge para obtener las últimas actualizaciones).
Según su pregunta, parece que ya conoce las órbitas de Halo, por lo que no me sumergiré en estas (de todos modos, no soy un experto en ellas, por lo que podría decir cosas incorrectas). En resumen, Halo orbita en órbitas cuasi-periódicas alrededor de los puntos de libración (son periódicas en el CRTPB). Los puntos de libración son puntos de equilibrio entre dos cuerpos masivos. En efecto, una órbita será periódica durante un tiempo dado. (y por lo tanto ser una órbita de Halo) si y sólo si en la mitad de su período, el movimiento (es decir, la velocidad) de la nave espacial es cero en todas las direcciones excepto en una. Este folleto del Dr. Davis (de CCAR en CU Boulder) sobre cómo encontrar órbitas de Halo a partir de una suposición inicial detalla cómo programar esto. Añadiré las siguientes aclaraciones:
¿Por qué quieres usar el STM para encontrar órbitas de Halo en lugar de forzarlo todo?
Descargo de responsabilidad: no he validado este código de Matlab. Puede tener errores, tener casos límite, descomponerse en casos específicos, etc., etc. Pero, puede ser útil tener una idea de cómo implementar esto: código no validado . (Creo que he incluido todos los archivos necesarios para ejecutar esto, pero si no lo he hecho, házmelo saber en los comentarios y lo agregaré; no tengo ningún problema en compartir mi código, todo lo contrario)
¡Vamos a intentarlo! Para mantenerlo simple, consideraré una ecuación de movimiento unidimensional
Las aplicaciones a la órbita del halo son en realidad más simples porque los coeficientes y no dependería del tiempo.
La teoría de las ecuaciones diferenciales lineales nos dice dos resultados importantes:
El primer resultado implica que debe existir una función que mapea sobre . El segundo resultado garantiza que esta función es lineal, es decir
Pero entonces la velocidad tiene la misma forma.
y por lo tanto podemos poner todo junto
Y se llama la matriz de transición del tiempo al tiempo .
De esta ecuación, ya que satisface la ecuación diferencial (1) de la que partimos, podemos esperar razonablemente para satisfacer a uno también. Para encontrarlo, solo necesitamos diferenciar (2)
dónde denota la diferenciación con respecto a , manteniendo constante. Pero luego el lado izquierdo dice
Igualando el lado derecho de (3a) y (3b), obtenemos
Esta igualdad debe ser cierta para cualquier y cualquier . Así, las matrices que actúan sobre en ambos lados de la ecuación será igual, y obtenemos la ecuación diferencial que buscamos,
Después de escribir todo eso, siento que tengo que explicar el último truco del artículo de Howell. Entonces tenemos y queremos entender qué podría hacer que varíe un poquito. depende de , tan variable por induce una variación, proporcional a la derivada: . Pero también depende de y y esa dependencia viene dada por (2). La segunda fila de la matriz para ser exactos, y la variación es . Entonces, si consideramos solo pequeñas variaciones, podemos simplemente sumar esas dos contribuciones y obtener:
En el problema de su interés, es el medio periodo , y la variación proviene de una pequeña variación de , para las mismas condiciones iniciales, o de una pequeña variación de las condiciones iniciales, para el mismo semiperíodo.
¡Espero que traiga algo de iluminación y te deseo lo mejor para tu proyecto!
Trataré de responder a sus dos preguntas simplemente primero. Si estas respuestas son demasiado simples o no dan en el blanco, házmelo saber y editaré la respuesta.
1) ¿Qué son el vector de propagación de estado y la matriz de transición de estado (STM)?
El vector de propagación de estado es simplemente la posición y la velocidad en un momento dado.
El STM es una matriz que captura la sensibilidad de la propagación al estado inicial. Entonces, responde a la pregunta "Si cambio mi coordenada x inicial en 5 metros, ¿cuánto cambiarán mi posición y velocidad finales?"
2) ¿Cómo puedo usar el STM para mejorar la convergencia en las nuevas órbitas de Halo?
Puede usar el STM para lograr una convergencia más rápida en las nuevas órbitas de Halo mapeando el cambio que necesita en el eje Y que cruza de regreso al estado inicial. (Por ejemplo, si llega al cruce con una velocidad Z de +2, puede usar el STM para calcular un estado inicial diferente que tendrá una velocidad Z reducida en aproximadamente 2. (sujeto a errores de linealización) Dr. Davis de CU Boulder ( CCAR) proporciona el siguiente folleto en el curso de posgrado de Diseño de misiones interplanetarias que imparte:
http://ccar.colorado.edu/imd/2015/documents/SingleShootingHandout.pdf
Además, aquí está el resumen de un proyecto sobre las órbitas de Halo que incluye una serie de figuras útiles: http://ccar.colorado.edu/asen5050/projects/projects_2012/dowling/introduction.html
odeevents
en Matlab) y calcule la diferencia. Luego haga los cálculos para encontrar la corrección necesaria en el estado inicial.
usuario20022
UH oh