python pyephem库 卫星轨道计算及两行轨道参数TLE

python pyephem库 卫星轨道计算及两行轨道参数TLE

作者微信公众号:小卫星

 操作系统: Ubuntu18.04 LTS

IDE: PyCharm Community 2018.1 

 Python 2.7

1、安装

$ pip install pyephem

http://rhodesmill.org/pyephem/

2、测试

先找颗卫星,事实上可以用python自动弄下来,进北美防空司令部的:

http://celestrak.com/NORAD/elements/beidou.txt

可以看到北斗卫星的两行轨道参数(TLE),把前三行复制进来,自己的经纬度可以在google上找:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import ephem
#http://rhodesmill.org/pyephem/quick.html
me = ephem.Observer()
me.lon, me.lat, me.elevation = '108.5000', '34.5000', 800.0
line1 = "BEIDOU G1"
line2 = "1 36287U 10001A   18194.84994825 -.00000297  00000-0  00000-0 0  9999"
line3 = "2 36287   1.4745   3.9768 0004214 156.8560 216.8921  1.00270561 31144"
sat = ephem.readtle(line1, line2, line3)

me.date = '2018/7/14'#ephem.now()
sat.compute(me)

print(sat.az * 180.0 / 3.1416) #卫星的方位角
print(sat.alt * 180.0 / 3.1416 ) #卫星的仰角
print(sat.range_velocity) #卫星相对于观察者的运动速率,为正,表示卫星正在远离观察者。

输出为:

/home/wy/PycharmProjects/wP2/venv/bin/python /home/wy/.PyCharmCE2018.1/config/scratches/wyEPH1.py
131.486721673
38.9986189838
-4.07362747192

Process finished with exit code 0

表示卫星仰角为39度,方位角为131.5度。这是个GEO卫星,所以改变时间,结果变化不大。但是因为星历有时效性,时间设的和星历时间太远,则程序计算误差极大(部分原因是卫星本身会进行轨道调整)。再设的过大,程序不会计算。

如2018年7月14日download的星历,设时间为‘2008/7/10’,会报错:

me.date = '2008/7/14'#ephem.now()
/home/wy/PycharmProjects/wP2/venv/bin/python /home/wy/.PyCharmCE2018.1/config/scratches/wyEPH1.py
Traceback (most recent call last):
  File "/home/wy/.PyCharmCE2018.1/config/scratches/wyEPH1.py", line 13, in
    sat.compute(me)
ValueError: TLE elements are valid for a few weeks around their epoch, but you are asking about a date 3651 days from the epoch

Process finished with exit code 1

3、卫星轨道参数来源

卫星轨道来源其实有很多,主要有两个:

(1)彗星、小行星等自然天体轨道

International Astronomical Union (IAU)的Minor Planet Center (MPC),以接收和分发自然天体轨道为目的,网站:

https://www.minorplanetcenter.net/iau/Ephemerides/Soft03.html

例如:https://www.minorplanetcenter.net/iau/Ephemerides/Comets/Soft03Cmt.txt

# From MPC106342
C/1995 O1 (Hale-Bopp),e,89.0947,283.1330,130.8144,183.1685,0.0003976,0.99490338,0.0000,03/29.3733/1997,2000,g -2.0,4.0

其格式为xephem格式,需要用readdb函数读取:

ephwy = ephem.readdb("C/1995 O1 (Hale-Bopp),e,89.0947," + \
                     "283.1330,130.8144,183.1685,0.0003976,0.99490338,0.0000," + \
                     "03/29.3733/1997,2000,g -2.0,4.0")
ephwy.compute('2018/7/14')
print(ephwy.name)
print("%s %s" % (ephwy.ra, ephwy.dec))
print("%s %s" % (ephem.constellation(ephwy), ephwy.mag))

输出为:

C/1995 O1 (Hale-Bopp)
0:30:39.87 -85:43:48.2
('Oct', 'Octans') 22.21


(2)人造卫星、船、器

两行轨道数据(TLE,Two-Line Orbital Element),由美国celestrak发明创立,是用于描述太空飞行体位置和速度的表达式。

http://celestrak.com/NORAD/elements/

例如:

http://celestrak.com/NORAD/elements/beidou.txt

最后一行(2018.07.14基线)

BEIDOU-3 M8             
1 43246U 18029B   18194.72004803 -.00000064  00000-0  10000-3 0  9991
2 43246  55.0642  39.6410 0004409 332.7876  76.6516  1.86232943  1964
第0行,将第1行视为0行,是 卫星通用名称,最长为24个字符。
第1行和第2行是标准的卫星星历格式(TLE格式),每行69个字符,包括0~9,A~Z(大写)、空格、点和正/负号。

卫星星历编号含义:

第1行:

(1)43246U。43246是北美防空司令部(NORAD)自己给的卫星编号。U代表不保密。C、S都是NORAD自己才能看到,是保密的。 

(2)18029B。国际编号,18表示2018年发射,029表示是这一年的第29次发射,B则表示是一箭多星,依次有A、B、C....  。北斗的MEO卫星都是一箭双星,所以只有A、B。

(3)18194.72004803。表示这组轨道数据的时间点,18是2018年,194表示第194天,也就是7月14日。72004803表示这一天里的时刻。

(4).00069181  13771-5  44016-2。为轨道模型参数。

(5)0。为轨道模型类型,SGP4/SDP4轨道模型。

(6)999。表示是该空间飞行器的第999组TLE参数,我错略把各种卫星看了下,发现都是999。

(7)7。为校验位。

第2行:

(1)43246。NORAD卫星编号。

(2)55.0642。轨道倾角。

(3)39.6410。升交点赤经。

(4)0004409。轨道偏心率,实际值为0.0004409。

(7)332.7876。近地点幅角。

(8)76.6516。平近点角。表示这组TLE对应的时刻时,卫星在轨道的什么位置。

(9)1.86232943。每天环绕地球的圈数,其倒数就是周期。

(10)196。发射以来飞行的圈数,可以推算,196/1.86232943=105.24454天就是多少时间之前发射的。

查下新闻就知道:2018年3月30日1时56分,中国在西昌卫星发射中心用长征三号乙运载火箭(及远征一号上面级),以“一箭双星”方式成功发射第三十、三十一颗北斗导航卫星。这两颗卫星属于中圆地球轨道卫星,是中国北斗三号第七、八颗组网卫星。是吻合的。

(11)4 。校验位。


这个东西强大到发射后几天就有数据,而且精确度极高,但是使用时务必注意其中的时间都是UTC时间,中国用的是UTC+8,因此时间加8小时才能对应上。

python pyephem库 卫星轨道计算及两行轨道参数TLE_第1张图片

你可能感兴趣的:(python)