Python OrbitalPy error de rastreo Estado cartesiano Vectores Posición y velocidad desde elementos keplerianos

Estoy tratando de obtener los vectores cartesianos de posición y velocidad para cada paso de propagación en mi órbita. Estoy usando OrbitalPy http://pythonhosted.org/OrbitalPy/ para generar la órbita con elementos clásicos de Kepler.

De acuerdo con la documentación, debería poder obtener los vectores de estado (posición y velocidad) de la class orbital.utilities.StateVector , pero obtengo un error de tipo: new () toma exactamente 3 argumentos (2 dados)

Aquí está el código:

 from scipy.constants import kilo import orbital from orbital import earth, KeplerianElements, Maneuver, plot, utilities from orbital.utilities import Position, Velocity import matplotlib.pyplot as plt import numpy as np #Orbit Setup orbitPineapple = KeplerianElements.with_period(96 * 60, body=earth, i=(np.deg2rad(51.6))) plot(orbitPineapple) plt.show() orbitPineapple Out[23]: KeplerianElements(a=6945033.343911132, e=0, i=0.90058989402907408, raan=0, arg_pe=0, M0=0.0, body=orbital.bodies.earth, ref_epoch=) prop1 = orbital.maneuver.PropagateAnomalyTo(M=1.00) orbitX = orbitPineapple.apply_maneuver(prop1) plot(orbitPineapple, title='Go Pineapple!') plt.show() orbital.utilities.StateVector(orbitPineapple) TypeError Traceback (most recent call last)  in () 4 #print(orbital.utilities.StateVector.velocity(orbitPineapple)) 5 ----> 6 orbital.utilities.StateVector(orbitPineapple) 7 #orbital.utilities.StateVector.position(orbitPineapple()) 8 TypeError: __new__() takes exactly 3 arguments (2 given) 

No uso este paquete, pero el error es lo suficientemente simple como para diagnosticarlo. Desde los documentos puede ver que orbital.utilities.StateVector toma dos argumentos; uno para “posición” y otro para “velocidad”. Cuando realiza orbital.utilities.StateVector(orbitPineapple) , solo proporciona un argumento ( orbitPineapple ) cuyo valor se considerará como “posición”. Necesitas suministrar velocidad también.

En cuanto al error ...takes exactly 3 arguments (2 given) , Python sobreestima el número de argumentos requeridos / pasados ​​para los métodos de clase porque toma en cuenta el parámetro self cuando los cuenta. Por ejemplo:

 class Testing(object): def __init__(self): self.a = 2 def do_something(self, b): self.a += b obj = Testing() obj.do_something(2, 3) # Clearly passing only 2 arguments 

Da:

 TypeError: do_something() takes exactly 2 arguments (3 given) 

Por lo que puede leer el error como “toma 2 argumentos pero solo dio 1”

Resulta que el problema es con OrbitalPy. Solo se pueden obtener vectores de estado cuando se usa el nombre original de la órbita.

En este caso, orbitPineapple.r devolvería la posición (x, y, z) y orbitPineapple.v devolvería (Vx, Vy, Vy).

Los vectores de posición y velocidad se actualizan después de que se aplique cada maniobra, solo use exactamente la misma línea con el nombre de la órbita original print(orbitPineapple.r, orbitPineapple.v) .

Además, una característica súper útil que me habría ahorrado horas, es que solo puede escribir una variable o función y name. y pulsa la tecla de tabulación y se muestran todas las opciones.