Diseño de una órbita de transferencia elíptica

Estaba trabajando en un ejemplo en "Elementos de diseño de naves espaciales" de Charles Brown, pero no puedo entender cómo se calculó el tiempo de vuelo. Aquí está el problema Ejemplo 6.5 . Obtuve la respuesta correcta al calcular a, rP y e, pero después de eso no he tenido éxito. ¿Alguien podría ayudar?

Parece que simplemente calcularon las fechas julianas y las restaron. ¿Qué parece confuso al respecto?
¿Puedes editar e incluir el problema aquí? No deberíamos tener que ir a otro lugar, y ayudará contra la rotura de enlaces.
Regresé la pregunta al original, Rusty. Tener dos páginas del libro al que se hace referencia como imágenes viola los derechos de autor y las preocupaciones de accesibilidad.

Respuestas (2)

Cómo calcular el tiempo de vuelo

Es fácil si conoces el parámetro gravitacional m GRAMO METRO , el semieje mayor a , la excentricidad mi , la anomalía verdadera inicial θ 0 , y la verdadera anomalía final θ 1 (o de manera equivalente, el cambio en la anomalía verdadera Δ θ θ 1 θ 0 ).

Paso 1: Calcule las anomalías excéntricas iniciales y finales a partir de la excentricidad y las anomalías verdaderas iniciales y finales mediante

broncearse mi 2 = 1 mi 1 + mi broncearse θ 2
Paso 2: Calcule las anomalías medias iniciales y finales a partir de la excentricidad y las anomalías excéntricas iniciales y finales a través de la ecuación de Kepler.
METRO = mi mi pecado mi
Paso 3: Calcule el cambio en la anomalía media a través de
Δ METRO = METRO 2 METRO 1
Paso 4: Calcule el movimiento medio a partir del parámetro gravitacional y la longitud del semieje mayor a través de
norte = m a 3
Paso 5: Calcular el tiempo de vuelo a partir del movimiento medio y el cambio en la anomalía media mediante
Δ t = Δ METRO norte


Cómo diseñar una órbita de transferencia

Esto es considerablemente más desafiante. Aquí el objetivo es encontrar la órbita de transferencia dada la posición inicial y final del objeto. Este es el problema de Lambert. Las ecuaciones subyacentes son trascendentales; no hay una buena solución de forma cerrada. En su lugar, debe hacer una conjetura y luego refinar iterativamente la conjetura. Hay varias formas de resolver iterativamente el problema de Lambert.

En el ejemplo anterior para 'Theta at Earth = 180', Theta_1 = 180 y Theta_2 = 312,99. Luego calcularía E y M para ambos y los usaría a partir de ese momento, ¿verdad? Estoy haciendo eso pero no obtengo 116.15 días. me sale 168

editar: hay más sobre las matemáticas para las órbitas hiperbólicas en la otra respuesta de @DavidHammon .

Agregaré a la respuesta clara de @DavidHammon al incluir los equivalentes parabólicos e hiperbólicos solo para tener todo en un solo lugar. Transcribí de esta práctica tabla y agregué formas alternativas para mi y F de Wikipedia. Hice algunas comprobaciones puntuales con integración numérica solo para asegurarme de que los resultados coincidieran.

Elipse, Círculo ( 0 ϵ < 1 ) :

broncearse mi 2 = 1 mi 1 + mi broncearse θ 2
o
porque mi = mi + porque θ 1 + mi porque θ broncearse θ 2 ,
METRO = mi mi pecado mi ,
Δ METRO = METRO 2 METRO 1 ,
Δ t = a 3 m Δ METRO ,

hipérbola ( ϵ > 1 ) :

bronceado F 2 = mi 1 mi + 1 broncearse θ 2
o
aporrear F = mi + porque θ 1 + mi porque θ broncearse θ 2 ,
METRO = mi pecado F F ,
Δ METRO = METRO 2 METRO 1 ,
Δ t = ( a ) 3 m Δ METRO ,

parábola ( ϵ = 1 ) :

D = broncearse θ 2 ,
METRO = D + D 3 3 ,
Δ METRO = METRO 2 METRO 1 ,
Δ t = q 3 m Δ METRO ,


Para obtener el eje semi-mayor a o para conseguir q , use lo siguiente (no se preocupe de que a es negativo para la hipérbola):

Elipse, hipérbola:

a = r pags mi r i 1 mi

Elipse:

a = r pags mi r i + r a pags o 2

Circulo:

a = r

Parábola:

q = r pags mi r i

Una consulta rápida con m = 1 y r pags mi r i = 1 :

 e      theta      a     v_peri    E/D/F       M         t
1.5   90.000000  -2.0   1.581139  55.14281  40.94513  2.021271
1.0   90.000000   n/a   1.414214  57.29578  76.39437  1.885618
0.5   90.000000   2.0   1.224745  60.00000  35.19020  1.737177
0.0   90.000000   1.0   1.000000  90.00000  90.00000  1.570796

Si quieres probarlo en Python:

def deriv(X, t):
    x, v = X.reshape(2, -1)
    acc  = -mu * x * ((x**2).sum())**-1.5
    return np.hstack((v, acc))

def get_D(theta, e):
    if e == 1.0:
        D    = np.tan(0.5*theta)
    else:
        D    = np.nan
    return D

def get_E(theta, e):
    if e < 1.0:
        term = np.sqrt((1.-e)/(1.+e)) * np.tan(0.5*theta)
        E    = 2.*np.arctan(term)
    else:
        E    = np.nan
    return E

def get_E_alt(theta, e):
    if e < 1.0:
        term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
        E    = np.arccos(term)
    else:
        E    = np.nan
    return E

def get_F(theta, e):
    if e > 1.0:
        term = np.sqrt((e-1.)/(e+1.)) * np.tan(0.5*theta)
        F    = 2.*np.arctanh(term)
    else:
        F    = np.nan
    return F

def get_F_alt(theta, e):
    if e > 1.0:
        term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
        F    = np.arccosh(term)
    else:
        F    = np.nan
    return F

def get_M_from_E(E, e):
    if e < 1.0:
        M = E - e*np.sin(E)
    else: 
        M = np.nan
    return M

def get_M_from_F(F, e):
    if e > 1.0:
        M = e*np.sinh(F) - F
    else: 
        M = np.nan
    return M

def get_M_from_D(D, e):
    if e == 1.0:
        M = D + D**3/3.
    else: 
        M = np.nan
    return M

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint

# http://www.bogan.ca/orbits/kepler/orbteqtn.html

quarterpi, halfpi, pi, twopi = [f*np.pi for f in [0.25, 0.5, 1, 2]]
rads, degs = pi/180, 180/pi

mu = 1.0

th0, th1 = 0.0, halfpi
print "th0, th1 (degs): ", degs*th0, degs*th1

eccs = [1.5, 1.0, 0.5, 0.0]

for e in eccs:

    print "e: ", e

    rp =  1.0  # periapsis

    if e < 1.0:
        print "     is ellipse!"

        ra = rp * (1+e)/(1-e)
        print "rp, ra: ", rp, ra

        a0 = 0.5*(rp + ra)
        v0 = np.sqrt(mu * (2./rp - 1./a0))
        print "a0, v0: ", a0, v0

        E0,  E1  = [get_E(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_E(E, e)  for E  in [E0,  E1 ]]
        print "E0, E1 (degs): ", degs*E0, degs*E1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "E0, E1: ", E0, E1
        print "M0, M1: ", M0, M1

        dt = np.sqrt(a0**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    elif e > 1.0:
        print "     is hyperbola!"

        ra = rp * (1+e)/(1-e)
        print "rp, ra: ", rp, ra

        a0 = 0.5*(rp + ra)
        v0 = np.sqrt(mu * (2./rp - 1./a0))
        print "a0, v0: ", a0, v0

        F0,  F1  = [get_F(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_F(F, e)  for F  in [F0,  F1 ]]
        print "F0, F1 (degs): ", degs*F0, degs*F1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "F0, F1: ", F0, F1
        print "M0, M1: ", M0, M1

        dt = np.sqrt((-a0)**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    elif e == 1.0:
        print "     is parabola!"

        print "rp: ", rp

        v0 = np.sqrt(mu * (2./rp))
        print "v0: ", v0

        D0,  D1  = [get_D(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_D(D, e)  for D  in [D0,  D1 ]]
        print "D0, D1 (degs): ", degs*D0, degs*D1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "D0, D1: ", D0, D1
        print "M0, M1: ", M0, M1

        q = rp

        dt = np.sqrt(2.*q**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    time = np.array([0, dt])
    X0   = np.array([rp, 0, 0, v0])

    answer, info = ODEint(deriv, X0, time, atol=1E-13, rtol=1E-13, full_output=True)

    x, y, vx, vy = answer.T
    theta = np.arctan2(y, x)

    print degs*theta[0], degs*theta[-1], " should be ", degs*th0, degs*th1
¡Sugerencias de edición son bienvenidas!
¡Aquí hay un problema! Como se señaló en este comentario , algunos de estos fueron mal transcritos. Arreglaré esto hoy después del café...