这两天看到各地朋友都为追踪KS-1Q信号付出了辛勤劳动,其中一直提到一款软件叫Orbitron.
由于卫星距地面高度只有几百公里,环绕速度又很快,因此对于每一处测控站,每天只有很短的几段时间能收到下行信号。Orbitron软件可以根据卫星轨道的TLE描述文件,计算卫星的飞行轨迹,再根据观测位置经纬度,计算出卫星过境的时间以及过境时的方向及仰角,为地面人员接收下行信号提供了有力保障。
Orbitron软件自带了联网同步TLE星历功能,并可以通过第三方软件驱动转台,令天线始终指向卫星。使用Orbitron软件,可以实现对单颗卫星的持续跟踪。
网上TLE数据的主要来源是XXXXXXXXXXXXXXX提供的API(必须登陆后使用)。Orbitron软件也支持从XXXXXXXXXXXXXXX更新数据,在Orbitron的设置界面找到space-track按钮,提供登录名和密码即可。如果没有账号可以去space-track网站直接注册一个,可以大大简化数据获取流程。
在使用过程中我也发现一些缺点,首先是没有命令行界面,其次是只能输出纯文本格式(而且缺少分段符)的预测报告,不方便其他程序利用。软件支持用好几种协议对外部设备进行控制,但是软件本身无法被其他软件控制。
除了Orbitron之外我还测试了GPredict。GPredict可以看做是升级版的Orbitron,通过hamlib实现转台控制,可以同时控制多个转台(包括通过TCP遥控),但是每个转台只能对准一颗星,需要手动切换。
我并不清楚科创航天在卫星项目上的目标是什么,只是有一次在宣传资料上看到说要通过多星系统实现全天候覆盖。这就提出了几个要求:
- 一个转台应可以跟踪多颗星,哪颗星过顶就自动对准哪颗,并切换到相应频率
- 整个追踪系统能够被其他程序控制
但是,由于GPredict和Orbitron都不支持被第三方程序控制(除非通过hack的方式),而且也没有直观的方法可以从软件中取出数据(除了手动保存文件,再读取),所以上面这些功能不太好实现。如果要实现这些功能,得修改GPredict软件,然后再重新编译。如果可以直接获得每一颗卫星当前的方向和仰角,那么我们就可以自己写一个简单的控制程序,让转台按照我们指定的规则工作。
要怎么根据TLE计算轨道呢?
搜索"Plan13 github"可以搜到一些项目,有一些爱好者将Plan13项目中用Basic写的轨道计算代码移植到了C语言,并编译到Arduino上,以实现轨道的离线计算。而目前能找到的最老的开源的轨道计算程序,叫"Perdict",是C语言实现的。最后,我找到Andrew West的PredictLib项目,他把Perdict移植到了JavaScript。配合这个库,我用Node写了一个HTTP服务器,可以直接根据卫星的NORAD编号和观察者的经纬度,实时计算卫星的轨道。
项目是开源的,源代码在这里:XXXXXXXXXXXXXXXXXX/ctmakro/http-predict
以下为配置方式(假定你熟悉nodejs):
-
npm install
安装dependencies
-
运行node spaceTrackLoader.js
,批量下载spacetrack数据,并保存成文件。为了成功连接spacetrack,必须在config.js(从config_example.js复制一份)中填写你的spacetrack账号。
-
运行node index.js
,默认监听本机3000端口,浏览器访问<http://localhost:3000>
就可以看到效果。按照提示在地址栏输入查询指令,就可以获得实时的卫星位置,以及一天内的过境预测。这样一来,本机上运行的所有其他程序,都可以通过http协议(所有编程语言都支持)获得任意一颗卫星的实时信息。
经验证,本软件计算结果与Orbitron计算结果吻合。
200字以内,仅用于支线交流,主线讨论请采用回复功能。