Python坐标转换 ECI到ECEF
我正在使用sgp4这个Python库(由Brandon Rhodes开发);我输入了国际空间站(Zarya)的TLE信息。我可以在某个日期获取卫星在ECI坐标系中的位置。但是,我想把它转换成ECEF坐标系。
在MATLAB中至少有两个函数(ecitoecef,eci2ecef)和一个C语言函数(eci2ecef)是为RTKLIB项目实现的。(因为这是我第一次提问,我的声望只有1,所以我不能发链接,限制了每个问题只能发两个链接)
我没有找到Python实现的函数。不过,在之前的一个问题中,使用spg4和pyephem进行Python卫星跟踪,位置不匹配,有用户提到:“我发现了问题的一部分。spg84.propagate()返回的是ECI中的位置,而不是ECEF。快速运行一下eci2ecef,它的结果和预测的响应完全一致。”
这里提到的eci2ecef是指Python实现吗?这个实现在线上有吗?有没有文档可以详细说明如果我自己实现需要做哪些步骤?在另一个问题中如何将ECI坐标转换为经度、纬度和高度以在地图上显示?,有评论说:“它们的区别在于地球的自转速率,所以转换只是一个二维的余弦正弦;-正弦余弦类型的转换。”这个转换的角度是什么?是格林威治恒星时间吗?当我们使用sgp4时,我们指定的也是GST吗,还是其他时间?
非常感谢你的帮助!
3 个回答
简化扰动模型是一组五个数学模型(SGP、SGP4、SDP4、SGP8 和 SDP8),用来计算卫星和太空垃圾相对于地球的轨道状态。这些模型通常统称为SGP4,因为它在使用频率上特别高,尤其是与NORAD和NASA生成的两行元素集一起使用。这些模型可以预测地球的形状、空气阻力、辐射以及其他天体(如太阳和月球)引起的引力等因素对卫星轨道的影响。简化一般扰动(SGP)模型适用于轨道周期少于225分钟的近地物体。简化深空扰动(SDP)模型则适用于轨道周期超过225分钟的物体,这对应于假设为圆形轨道时的高度为5877.5公里。SGP4模型是由Ken Cranford在1970年开发的。这个模型是通过简化Lane和Cranford的更复杂的分析理论而来的,后者使用Brouwer的引力模型解和一个大气模型的功率密度函数。SGP4的MATLAB版本可以返回卫星在四个坐标系统中的状态向量,即TEME、ITRS、GCRS和TOD。而SGP4的Python版本则返回卫星在三个坐标系统中的状态向量,即TEME、ITRS和GCRS。你可以通过以下链接使用我的SGP4 Python版本:https://www.researchgate.net/publication/358351066_SGP4_Python_code,或者使用我的SGP4 MATLAB版本:https://www.researchgate.net/publication/346217793_SGP4_MATLAB_code
ECI到ECEF的转换在satellite-js这个项目中也有实现,这个项目是从PyEphem这个库衍生出来的。
你可能需要检查一下它的正确性。
首先,我研究了AIAA 2006-6753这篇论文,这篇论文可以在CelesTrak网站上找到,它为我在Python中制作sgp4
库奠定了基础:
https://celestrak.org/publications/AIAA/2006-6753/
根据这篇论文的建议,特别是附录中的信息,我正在尝试将地球卫星整合到我新的Skyfield天文学库中。这个新版本的工作很快就会发布,但在此期间,你可以查看我使用的转换方法(基于上述论文),链接在这里:
https://github.com/brandon-rhodes/python-skyfield/blob/master/skyfield/sgp4lib.py
我不太确定我的转换是否正确,但我会尽量将结果与我能找到的官方位置来源进行对比,以确定是否存在系统性的错误。