我想展示不同卫星轨道高度的子图,并使用这些线进行进一步分析。
因此,我编写了一个卫星创建函数来计算倾角和平均运动:
def create_sat (a,orbit_type='ISS',e=0.0008835,epoch=26317,number=1):
a=(a+6378)*1000
if orbit_type=='ISS':
i=0.90058989402907
else:
i=np.arccos(-(((a)/(12352000))**(7/2)))
mu=3.986004418*(10**14)
pii=3.14159265359793
p=np.sqrt((a**3*4*pii**2)/(mu))/60
mean_motion=((2*pii)/p)
satrec = Satrec()
satrec.sgp4init(
WGS84, # gravity model
'i', # 'a' = old AFSPC mode, 'i' = improved mode
number, # satnum: Satellite number
epoch, # epoch: days since 1949 December 31 00:00 UT
2.2, # bstar: drag coefficient (/earth radii)
6.969196665e-13, # ndot: ballistic coefficient (revs/day)
0.0, # nddot: second derivative of mean motion (revs/day^3)
e, # ecco: eccentricity
0, # argpo: argument of perigee (radians)
i, # inclo: inclination (radians)
0, # mo: mean anomaly (radians)
mean_motion, # no_kozai: mean motion (radians/minute)
2, # nodeo: right ascension of ascending node (radians)
)
print(p)
print(1/(p/60))
print(mean_motion)
print(i)
ts = load.timescale()
sat = EarthSatellite.from_satrec(satrec, ts)
return sat
然而,当我尝试使用skyfiled包计算子点时,出现了错误:
\toposlib.py:232: RuntimeWarning: invalid value encountered in remainder
lon = (arctan2(y, x) - pi) % tau - pi
我发现 skyfields 的 toposlib.py 中的 _compute_latitude(self, position)
返回 x、y 和 z 的 nan 值。
如果我选择不同的倾角 i
和平均运动 mean_motion
的值,它可以工作,但是对于计算出的值则不行(尽管计算本身是正确的)。
为什么会返回 nan 值?计算的边界是什么?
谢谢!
lon
计算中,x
、y
和tau
分别指什么? - Engineeronp.pi
表示π,而不必在代码中定义它作为一个常量。这通常是更受欢迎的做法。 - Engineero