Python OrbitalPy Traceback 错误笛卡尔状态向量来自开普勒元素的位置和速度
Python OrbitalPy Traceback error Cartesian State Vectors Position and Velocity from Keplerian Elements
我正在尝试获取轨道中每个传播步骤的笛卡尔位置和速度矢量。我正在使用 OrbitalPy http://pythonhosted.org/OrbitalPy/ 生成具有经典开普勒元素的轨道。
根据文档,我应该能够从 class orbital.utilities.StateVector
获取状态向量(位置和速度),但我收到类型错误:new( ) 恰好接受 3 个参数(给定 2 个)
代码如下:
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=<Time object: scale='utc' format='jyear_str' value=J2000.000>)
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)
<ipython-input-53-91fb5303082b> in <module>()
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)
我不使用这个包,但错误很容易诊断。从 the docs 你可以看到 orbital.utilities.StateVector
有两个参数;一份用于 "position",一份用于 "velocity"。当您执行 orbital.utilities.StateVector(orbitPineapple)
时,您只提供一个参数 (orbitPineapple
),其值将被视为表示 "position"。你也需要提供速度。
至于错误...takes exactly 3 arguments (2 given)
,python 高估了class 方法的required/passed 个参数的数量,因为它考虑了self
参数它正在计算它们。例如:
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
给出:
TypeError: do_something() takes exactly 2 arguments (3 given)
因此您可以将错误解读为"takes 2 arguments but you only gave 1"
原来问题出在 OrbitalPy 上。使用原始轨道名称只能得到状态向量。
在这种情况下,orbitPineapple.r
会 return 位置 (x,y,z),orbitPineapple.v
会 return (Vx,Vy,Vy)。
位置和速度矢量在应用每次机动后更新,只需使用与原始轨道名称完全相同的线 print(orbitPineapple.r, orbitPineapple.v)
。
此外,一个超级有用的功能可以节省我几个小时,您只需键入一个变量或函数,然后 name.
然后点击 选项卡键 并显示所有选项。
我正在尝试获取轨道中每个传播步骤的笛卡尔位置和速度矢量。我正在使用 OrbitalPy http://pythonhosted.org/OrbitalPy/ 生成具有经典开普勒元素的轨道。
根据文档,我应该能够从 class orbital.utilities.StateVector
获取状态向量(位置和速度),但我收到类型错误:new( ) 恰好接受 3 个参数(给定 2 个)
代码如下:
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=<Time object: scale='utc' format='jyear_str' value=J2000.000>)
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)
<ipython-input-53-91fb5303082b> in <module>()
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)
我不使用这个包,但错误很容易诊断。从 the docs 你可以看到 orbital.utilities.StateVector
有两个参数;一份用于 "position",一份用于 "velocity"。当您执行 orbital.utilities.StateVector(orbitPineapple)
时,您只提供一个参数 (orbitPineapple
),其值将被视为表示 "position"。你也需要提供速度。
至于错误...takes exactly 3 arguments (2 given)
,python 高估了class 方法的required/passed 个参数的数量,因为它考虑了self
参数它正在计算它们。例如:
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
给出:
TypeError: do_something() takes exactly 2 arguments (3 given)
因此您可以将错误解读为"takes 2 arguments but you only gave 1"
原来问题出在 OrbitalPy 上。使用原始轨道名称只能得到状态向量。
在这种情况下,orbitPineapple.r
会 return 位置 (x,y,z),orbitPineapple.v
会 return (Vx,Vy,Vy)。
位置和速度矢量在应用每次机动后更新,只需使用与原始轨道名称完全相同的线 print(orbitPineapple.r, orbitPineapple.v)
。
此外,一个超级有用的功能可以节省我几个小时,您只需键入一个变量或函数,然后 name.
然后点击 选项卡键 并显示所有选项。