问题标签 [sgp4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - sgp4 轨道计算中的单位
我正在做一个项目来使用包sgp4计算卫星的矢量位置。给定一个输入文件,它应该从地球中心吐出一个以米为单位的位置向量。但是,在给出的示例中以及我看到的所有输出中,x、y 和 z 值始终在数千米范围内,这意味着卫星被埋在地球表面以下很远的地方。我已经尝试过假设它们意味着公里,并且假设它们意味着从表面而不是中心,以没有更有意义的结果。有谁知道位置向量中的数字代表什么?
样本输出向量:[5576.056952400586,-3999.371134576452,-1521.9571594376037]
java - Java Code 在 android 上给出不同的结果
我有一些代码,在 PC 上作为 java 代码运行,它给出了我想要的答案(正确的答案)。在 android 上,相同的代码给出了非常不同的答案。
我使用的代码最初来自 JsatTrack 项目,并将这些答案 jun 作为 eclipse 中的 java 项目提供(正确答案):
相同的代码,在 Android 上使用相同的输入给出了这样的结果:
我是java新手,所以我从哪里开始寻找这样的问题。例如,它会以 android 处理数学的方式吗?
所以我想我的问题归结为为什么 PC 和 android 会对相同的数学问题给出不同的答案?2+2 应该在任何平台上给出相同的答案。SGP4模型中的数学更复杂,但它仍然只是数学。
如果有人想看,代码可以在这里找到
python - Python SGP4 1.1 计算不正确的轨道
我正在使用 python SGP4 1.1 模块来计算 MEO 卫星的位置和速度。当与 STK 和 JSatTrak 进行比较时,我注意到返回的位置和速度值不正确。卫星应该有大约 6 小时的地面重复轨道,但这个程序显示的是 4:47:51 的地面重复。有什么我做错了吗?
python - 我应该使用哪个:Python-sgp4、PyEphem、python-skyfield
似乎完成传播地球卫星/天体任务的 Python 工具的前景令人困惑。根据您要执行的操作,PyEphem 或 Python-SGP4 可能更合适。如果出现以下情况,我应该使用哪一个:
- 我想要地球卫星的 ECEF/ECI 坐标
- 我想要一个天体的一般天空坐标
- 近地与远方物体
- 想用两行元素集
这些中的任何一个都可以完成精确的轨道确定吗?如果没有,我该去哪里/那里有哪些资源可用于精确的轨道确定?
我有点知道这里的答案。例如,POD 不属于这些库中的任何一个。这些计算似乎非常复杂。许多对象的 POD 可从 IGS 获得。我问的主要原因是出于文档目的。我对 python-skyfield 不熟悉,但我有预感它完成了其他两个所做的事情。--Brandon Rhodes,我等待您的专业知识 :)
python - 输出与 C++、pyephem 和 Heavens Above 中的 sgp4 不匹配
我正在尝试从 TLE 文件中预测计算 LEO 卫星的位置和预测通过。为方便起见,我只乘坐国际空间站。
到目前为止,我所做的是下载用于 C++ 的 spg4 库 sgp4 库并查看了两个示例程序sattrak和passpredict。前者给出了地球卫星在ECI坐标系中的位置,后者预测了它何时可以从地球上的某个位置看到。
到目前为止我唯一做的就是输入一个最近的 TLE 文件,更改观察者位置并编译它,一次使用包含的 makefile,一次通过 g++ foo.cpp -o bar /usr/lib/libsgp4
将结果与Heavens Above中的预测通行证进行比较,结果差异很大。对于预测的通过,例如,在几秒到大约 90 秒之间。最大高度接缝并没有那么错误,虽然天堂之上是全度数,这使得它很难比较。为了排除它们只是在确定卫星是否可见的算法上有所不同,我将其与sattrak的数据进行了比较,确认计算出的位置实际上是不同的。
我也尝试使用 python 的 pyephem 库进行相同的操作,这似乎很方便。我尝试了以下方法来计算接下来的五次传球:
但是,结果也与 Heavens Above(或 C++ 代码)不匹配,尽管差异始终低于 10 秒。
老实说,我对 pyephem 中使用的 libastro 例程一无所知,因此不能 100% 相信它们。请纠正我,如果我错了。
有谁知道,为什么我没有得到预期的结果?在我看来,使用未更改的passpredict程序几乎不可能搞砸。
我并不关心我会使用 C++ 还是 python,只要我得到好的结果。此外,python-sgp4 看起来很不错,我很有信心,一旦我做对了,我可以很容易地在 python 和 C++ 之间进行交换。
我真的希望有人可以帮助我,因为我现在很无助,甚至连一个最小的例子都没有。我知道,已经有一个类似的帖子,但我不认为我给了它一个混淆坐标系的机会,这是另一篇帖子中的问题。
非常感谢您!
python - 如何使用 skyfied 将 SGP4 TEME 坐标转换为 ECEF?
我想在地图上绘制卫星跟踪。所以我将 SGP4 1.4 与 python 一起使用。输入 TLE 数据,但输出数据不是我想要的。所以我想将输出数据转换为ECEF数据并得到经度和纬度。
我知道 skyfied 可以将 TEME 转换为 ECEF,但我不知道如何使用它。
https://github.com/skyfielders/python-skyfield/blob/master/skyfield/sgp4lib.py
而我使用skyfield遇到了错误:
错误是:
python - How to install SGP4 V 1.4 package in Python 3.6
First post hear and relatively new coder. Trying to get this package: https://pypi.python.org/pypi/sgp4/ to work, only I have no idea what I'm doing. I'm not familiar with the file extension (.tar.gz) and I don't know if this is a module or what and how to install it and get it to work. I am using python 3.6.4 currently. Apologies that this is a pretty dumb question, but I'm trying to learn towards the goal of adding to this script so that I can build a tracking capable ground station.
Any and all help appreciated.
Thank you for your time,
Lorcan.
python - Skyfield:在给定的时间间隔内以 1 秒的周期实现 sgp4 结果
我已经在 python 中使用 Skyfield 实现了 sgp4 算法。
我需要 1 天时间间隔的位置向量,周期为 1 秒。为此,我必须反复计算 sgp4,每次加 1 秒。
有没有办法返回一个包含所有位置的向量?
python - 随着时间的推移传播卫星目录的有效方法
问题陈述
我需要使用或类似方法从 space-track.org 传播最近 TLE 的整个目录(需要免费帐户才能查看) 。skyfield
列表中通常有 15k-16k TLE。我有它的工作,但它很慢。在服务器上使用 46 个内核大约需要几个小时。
没有结婚skyfield
。如果astropy
或pyephem
或其他东西更快,我会很乐意接受一个答案,表明我正在尝试使用它来做什么。
最小的例子
对于我的应用程序,我将 TLE 加载到 Pandas 数据框中并在那里进行分析,因此我将把我的示例保留在 Pandas 世界中。最小的例子如下。
假设卫星目录保存为catalog.txt
,设置环境,然后读取 TLE,生成sf.sgp4lib.EarthSatellite
对象,并将所有内容加载到 Pandas 数据帧中。我们还向一些观察点偏移了位置。我将选择一个观察点留给读者(0、0、0 可以):
每个循环 2.1 秒 ± 20 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)
创建一个时区感知日期时间对象数组,在其上传播所有卫星。在这里,我选择了从写这篇文章当天午夜前 4 小时到之后 4 小时的每 10 分钟。
每个循环 189 毫秒 ± 36.9 毫秒(平均值 ± 标准偏差。7 次运行,每次 10 次循环)
最后,计算每个卫星的每个时间步长的天体测量位置。这需要永远。为了获得时间,我再次运行时间太长了,但在服务器上使用 46 个内核大约需要几个小时。
额外细节
我在文档中发现了关于日期数组的讨论,该讨论建议一次传递整个数组:x.at(ts.utc(times))
. 到目前为止,这需要更少的内核并且运行速度更快,但仍然需要非常长的时间。
通过为天体测量创建生成器,我暂时解决了这种减速问题(最初是为什么我不再一次性传递整个times
数组),但最终我实际上需要评估事情,所以我无法永远避免繁重的工作。
如果最终的用例适合某种特定的加速,我最终需要从这些对象中获取站点的观察角度,所以[x.altaz() for x in row.astrometrics]
类型的东西。
关于解决方案的想法
我现在的想法是,我正在为目录中的每颗卫星计算整个夜间每个时间步长的观测点位置。我可能是错的,但如果我是对的,那么我想通过计算一次然后为每颗新卫星查找它,我会看到一个相当不错的加速(可能还不够)。有人知道怎么做这个吗?
此外,如果那里有更快的轨道传播器实施,或者有一种加快天空场实施的方法,我会很乐意接受一个答案,说明如何使用它来做我正在尝试做的事情(因此包括astropy
和pyephem
标签)。
谢谢你。
matlab - 为什么我在 matlab 的“lla2eci”和“sgp4.propagate”之间有所不同?
我在这方面没有经验,但在过去的几天里,我在 python 中编写了一些跟踪(希望)国际空间站的代码。我已经完成了数学计算,并且让这方面的工作正常进行,但只有当我使用 matlab 的 lla2eci 注入卫星位置时。为了得到正确的答案,我从实时数据中获取卫星子点的纬度和经度,然后使用 matlab 将其转换为 eci。这种方法为我提供了正确的国际空间站视角(方位角和仰角),我已经使用 pyephem 方法使用 iss.compute(home) 确认了它们,其中“home”是我的 lla。
我将 matlab 的 lla2eci 与 Satellite.propagate(...) 得到的结果进行比较,在时间 = 2019 12 16 8 53 19 时,我得到以下结果:
Matlab lla2eci: x,y,z = (3873.9, -902.18, -4969.9) sgp4 传播: x,y,z= (-4082.5, 3458.3, -4195.1)
我必须在这里遗漏一些东西!任何帮助将不胜感激,我很高兴回答任何问题以澄清。