python pyephem库 卫星轨道计算及两行轨道参数TLE
作者微信公众号:小卫星
操作系统: Ubuntu18.04 LTS
IDE: PyCharm Community 2018.1
Python 2.7
$ pip install pyephem
先找颗卫星,事实上可以用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
Process finished with exit code 1
卫星轨道来源其实有很多,主要有两个:
(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
第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小时才能对应上。