使用Skyfield从轨道参数绘制卫星的子点

3

我想展示不同卫星轨道高度的子图,并使用这些线进行进一步分析。

因此,我编写了一个卫星创建函数来计算倾角和平均运动:

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 值?计算的边界是什么?

谢谢!


当你说“返回x、y和z的nan”时,你所指的x、y和z是什么?在你的lon计算中,xytau分别指什么? - Engineero
另外,既然您已经在使用numpy了,您可以直接使用np.pi表示π,而不必在代码中定义它作为一个常量。这通常是更受欢迎的做法。 - Engineero
x、y、z和tau不是我的计算部分。它们属于skyfield包和“toposlib.py”。它们通过以下行进行计算:xyz_au = position.frame_xyz(itrs).au x,y,z = xyz_au但那不是我的代码,那是这个包的代码。 - Merci
1个回答

0

你可能创建了一个无效的卫星,并且得到了[nan nan nan]作为其位置 - 当要求NaN值与%取余时,一些NumPy版本会感到不安。

  1. 尝试在请求其坐标之前打印原始位置。这将帮助您确认NaN值是否是问题所在。
  2. 如果确实是问题,请尝试打印EarthSatellite .message属性,以查看SGP4例程与您的坐标有何错误。

谢谢你的建议!不幸的是,我不得不转向Matlab。Matlab可以毫无问题地接受相同的输入。 - Merci
有趣!它生成的坐标是“nan”值还是数字? - Brandon Rhodes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接