TLEファイルから位置を計算し、LEO衛星のパスを予測しようとしています。便宜上、国際宇宙ステーションに乗ります。
これまでに行ったことは、C++ 用の spg4 ライブラリ sgp4 ライブラリをダウンロードし、2 つのサンプル プログラムsattrakとpasspredictを調べたことです。前者はECI座標系での地球衛星の位置を示し、後者は地球上の特定の場所からいつ見えるようになるかを予測します。
私がこれまでに行った唯一のことは、最近の TLE ファイルを入力し、オブザーバーの位置を変更してコンパイルしたことです。
この結果を、 Heavens Aboveで予測されたパスと比較すると、結果は大幅に異なります。たとえば、数秒から約 90 秒までのパスの予測。最高高度の縫い目はそれほど間違っていませんが、Heavens Above は 100 度で丸められているため、比較するのは困難です。衛星が見えるかどうかを判断するアルゴリズムが異なるだけであることを除外するために、sattrakのデータと比較して、計算された位置が実際に異なることを確認しました。
また、Python用のpyephemライブラリを使用して同じことを試しましたが、これはさまざまに便利なようです。次の 5 つのパスを計算するために、次のことを試しました。
#!/usr/bin/python
import sys
import math
import ephem
iss = ephem.readtle("ISS Zarya",
"1 25544U 98067A 16034.21638441 .00007171 00000-0 11436-3 0 9997",
"2 25544 51.6442 11.1183 0006796 73.3436 50.5136 15.54391313983985")
observer = ephem.Observer()
observer.lat = '48'
observer.lon = '16'
observer.elevation = 179
observer.horizon = '10'
print("observer:\nLattitude: ", observer.lat,"\n Longitude: ", observer.lon,"\n", "horizon: ", observer.horizon,"\n")
for p in range(5):
tr, azr, tt, altt, ts, azs = observer.next_pass(iss)
rise = tr
print("===============================")
while tr < ts:
observer.date = tr
iss.compute(observer)
tr = ephem.Date(tr + 10 * ephem.minute)
print("Rise: ", rise)
print("Set time: ", ts)
print("Duration: ",math.floor((ts-rise)*60*24), "min", math.floor(((ts-rise)*60*24)%1*60), "s")
print("Max. Alt: %4.2f \n" % (math.degrees(altt)))
observer.date = tr + ephem.minute
ただし、差は常に 10 秒未満ですが、結果は Heavens Above (または C++ コード) とも一致しません。
正直なところ、私は pyephem で使用される libastro ルーチンについて何も知らないので、それらを 100% 信頼していません。私が間違っている場合は、私を修正してください。
期待した結果が得られないのはなぜですか? 私の意見では、変更されていないpasspredictプログラムを使用すると、それを台無しにする可能性はほとんどありません。
良い結果が得られる限り、C++ を使用するか Python を使用するかはあまり気にしません。その上、python-sgp4 は非常によく見えます。うまくいけば、python と C++ の間で簡単に交換できると確信しています。
最小限の例でさえ機能していないので、私は今非常に無力であるため、私を助けてくれる人がいることを本当に願っています. すでに同様の投稿があることは知っていますが、他の投稿の問題であった座標系を混乱させる機会を与えたとは思いません。
事前にどうもありがとうございました!