卫星黑客利器:OpenATS新版本更新

2020-07-23 15:21:10 浏览数 (1)

一、卫星追踪背景以及测控网简单介绍

随着卫星互联网在全球的加速布局以及我国今年正式将卫星互联网纳入新基建范畴,卫星互联网迎来大规模布局和加速发展,特别是以低轨卫星星座StarLink为代表的大型卫星互联网星座。由于卫星的特殊用途和优势,卫星网络是国家战略通信资源,背后离不开军事和国家安全的背景。

卫星轨道的种类和区分在我前几篇文章中略有提及,感兴趣的可以去我历史文章翻阅一下,在此就不详细介绍。低轨卫星的轨道高度一般较低,这也是降低通信延迟的一个理想轨道。但根据天体运动等物理学我们可以得知,距离我们地球越近的卫星,它就需要更高的运动速度来摆脱地球的引力,当近似接近地表时,速度必须达到第一宇宙速度7.9km/s才能摆脱地心对它的引力而不会掉下来。所以低轨卫星的在轨相对速度一般为7km/s左右,较快的速度带来的一个最直接需求就是需要天线精确追踪指向卫星,这就是卫星天线带有追踪功能的根本原因。其实除了相对静止卫星的其它卫星,几乎都需要追踪系统来支持。卫星距离我们较远,少则几百公里,天线较多采用高增益的抛物面天线,抛物面天线的波束窄,如果想要达到精准指向,系统精度要求非常高。常见的追踪方式有脉冲追踪、信标追踪等,OpenATS采用的是星历追踪。

追踪天线涉及技术较多,价格也是非常昂贵,1m直径的天线动辄几十万起步,能让爱好者自己制作追踪系统是当初制作OpenATS的主要原因。本人是做卫星安全研究方向,OpenATS已经在我的工作研究中发挥了非常大的作用,不玩天线的“卫星黑客”其实都是噱头。前期的OpenATS国内有一些无线电爱好者、学校学生已经在用来追踪卫星或者是空间站通信等用途。卫星通信行业的人应该熟悉,低轨卫星过境时间非常短,最短的几分钟左右,如果想长时间进行数据接收或者是稳定测控任务,需要在全国各地分布搭建接收站和测控站。

国际上著名航天大国都在不同国家部署自己的深空测控站以支持航天任务:

美国NASA的深空测控网(DSN)主要由3个大的站点组成,位于加州的戈尔德斯通站(北纬35°25′36″,西经116°53′24″)、西班牙的马德里站(北纬40°25′53″,西经4°14′53″)和澳大利亚的堪培拉站(南纬35°24′05″,东经148°58′54″)。刚好经度间隔120°左右,可以错开接收来自深空网络的探测器、卫星信息,例如火星探测器,NASA DSN隶属于JPL管理。

澳大利亚堪培拉的70m直径深空天线,也是唯一可以向旅行者2号发送命令的天线

ESA(欧空局)的深空测控站主要有澳大利亚新诺舍站(南纬31°2′53.61″,东经116°11′29.4″)、西班牙塞夫雷罗斯站(北纬40°27′9.68″,西经4°22′3.18″)、阿根廷延马拉圭站(南纬35°46′33.63″,西经69°23′53.51″)。

ESA 塞夫雷罗斯测控站

我国测控领域有长春、闽西、厦门、渭南、南宁、青岛和喀什测控站,当然还有测控船的支持例如“远望号”测控船。央视直播火箭发射的时候会喊道:“青岛测控站雷达跟踪正常,遥测信号正常。”类似这样的话语,这些不同地区的测控站肩负着跟火箭和卫星进行通信、下发指令的任务。我国深空测控站有著名的喀什3个35m天线阵列组成的测控站(北纬38°26′34.7″,东经76°43′40.3″)、佳木斯66m天线测控站(北纬46°29′37″,东经130°46′12″)以及远在阿根廷萨帕拉的35m天线测控站(南纬38°11′28.9″,西经70°8′58.2″),前阵子刚将西安测控中心的天线进行升级,也是为了今年火星任务做支持。

佳木斯深空站

俄罗斯的深空测控网由乌苏里斯克站(北纬44°1′58.8″,东经131°45′18″)、耶夫帕托利亚站(北纬45°12′59.76″,东经33°21′59.76″)、熊湖站(北纬55°51′56.8″,东经37°57′16.56″)组成。

这些深空测控站分布在全球不同地区的主要目的就是能零盲区地接收、发射测控信号,最大限度的提高捕获卫星、火箭、探测器的能力。最著名、能力最强的的当属NASA深空DSN测控网,以下为NASA的测控站对外实时界面。

是不是非常羡慕人家NASA的呢,没关系了,现在有了OpenATS,你也可以搭建这样的系统,后期可以改进OpenATS做的界面更酷,系统更完善,这些都可以实现。

二、OpenATS的组成和介绍

新的OpenATS为了搭建测控网、接收网而改进,旧版本的OpenATS的搭建需要有较强的动手能力和一些知识储备,随着OpenATS的更新,变得更开放、更先进、更精准,但也更复杂…

先介绍下OpenATS整个系统的架构,简单的组成图可以让使用者更好的理解整个系统。

新的OpenATS整个系统中涉及单片机端、客户端、服务器端、web端几个组成部分。其中除WEB端外全部采用C语言编写,为了有更好的兼容性和计算效率。整个系统全部搭建在Linux环境中,使用者可以把客户端运行在树莓派上等小型Linux计算机,跟单片机组合形成天线控制器。

单片机端的主要任务为接收来自客户端发送的方位角、仰角数据,然后计算转换成相应的脉冲发送给电机驱动器,电机可以使用步进电机或者伺服电机。单片机这部分由原来的OpenATS改造升级而来,更高的处理速度和兼容性。由原来的Arduino换成了STM32 F407,当然这仅仅是我测试的方案,你也可以移植到更快的单片机上,代码开源简单,移植非常容易。

客户端是作为一个非常重要的控制部分,主要任务为接收天线GPS的经纬度、高度、时间等数据,读取最新的TLE卫星星历数据,使用SDP4算法计算出卫星当前的位置(笛卡尔坐标系),再计算卫星相较于天线的方位角和仰角,传送给单片机。客户端还具有websocket接口以及socket接口,将计算出来的数据发送给web前端显示和汇报给网络上的服务器端做远程监测(图片中经纬度是360总部大楼)。

服务端拥有客户端的所有包括卫星追踪、目标追踪等、手动控制等功能外,另一个主要功能就是接收来的所有天线客户端数据,并发送给web控制中心,客户端的通信数据格式:

数据格式分别为:天线ID,天线纬度,天线经度,天线高度,天线方位角,天线仰角,天线状态。其中天线状态如果为0,则为目标追踪模式,如果为数字,则为追踪卫星状态,数字为NORAD卫星编号。

服务端并可以给每个地面站下达追踪某颗卫星指令。服务器端有数据库接口,可以将客户端的数据做记录,方便调取天线历史状态。有感兴趣的组织或者公司也可以在web界面中添加网络摄像头的API,实时监控天线的状态。服务端同时预留了json函数,如果需要修改web传送数据的可以直接调用json函数接口即可。

Web端接收来自服务端软件的websocket打包的JSON数据,数据示例:{ “antennaid”: “BEIJING”,”lat”:39.98138427734375,”lng”:116.48518371582031,”alt”:149.36970520019531,”az”:261.34140014648438,”el”:-44.218364715576172,”status”:28654,”ip”: “127.0.0.1” }分别对应为:天线编号,天线纬度,天线经度,天线高度,天线的方位角,天线的仰角,天线状态,客户端ip地址。经过解析、处理,分别展示在web界面中,让用户可以实时观看所有测控站的情况。服务端预留了接口也可以给每个测控站下达追踪指令进行远程控制,需要的组织或者个人可以自己在Web界面做个接口就OK。Web端暂时的样子如下,随便堆了一个界面,我知道很丑,没把精力放在这上面,别嫌弃后期会改进哈哈。

三、OpenATS的安装、使用方法

OpenATS整个系统的源码已经上传在Github,链接在文章最后。不同的文件夹,分别对应单片机端、客户端、服务端、web端。下载后分别拷贝到不同环境部署。

1、单片机端安装

单片机端是基于原来旧版本的OpenATS升级改造而来,使用者可以直接将源码按照之前文章步骤上传到Arduino中或者STM32中,只需要把相应的步进电机库拷贝到库目录即可。可以根据自己的硬件条件修改代码中脉冲的接口针脚编号、脉冲比例系数等参数。

2、客户端安装

安装客户端首先安装依赖环境,本系统依赖GPSD、libgps-dev(3.20)、nscurses、libwebsockets-dev、gcc、make、wget,需要安装这些依赖环境后直接make就好。建议安装NTPD,将NTPD的授时源设置为本地GPS源,可以校准本地系统的时间还可以做时间服务器对外提供服务。具体设置方法请自行谷歌参考关键词GPS搭建本地NTP服务器,由于我们常用的系统为非实时操作系统,精度可能不会太高,但对于我们来讲足够,至少比NTP网络授时精准几个数量级。

3、服务端安装

服务端安装跟客户端类似,需要以上的依赖环境之外,需要安装mysql数据库或者mariadb数据库,还需要libsqlclient-dev客户端库,当然如果你不需要数据库的支持可以不安装数据库,but 客户端库还是要安装的,要不然编译不过去。

4、web端部署

Web部署相对简单,安装相应的web环境,Apache即可,将web端文件夹下的文件直接拷贝到web目录中即可,修改html主页的服务器地址,这样可以通过websocket获取服务端的信息。

5、配置文件

客户端和服务端都有软件的配置文件,文件名为options.ini,为了方便不太熟悉英文的朋友,含有中文注释,配置文件可以修改接收站默认的经纬度高度等信息,在没有GPS模块的情况下采用配置文件中的经纬度信息。以及默认目标位置信息,天线最大仰角限制参数、是否使用GPSD服务、是否使用GPS时间、GPS以及天线的串口配置信息、目标追踪接收数据接口、网络接口、前端接口、GPS读取/追踪/天线控制速度(单位ms)、TLE卫星星历数据更新地址以及备份地址等等。使用者根据自己需求和系统设计适当修改。

6,OpenATS的命令参数如下:

追踪卫星命令,后面跟卫星名字,例如:openats -s NOAA 18 追踪卫星命令,后面跟卫星的NORAD编号,例如:openats -n 28654 追踪目标命令,后面无需跟参数。 更新、下载TLE数据,无需参数,直接下载SpaceTrack的全部星历数据 显示卫星轨道信息功能,后面跟卫星NORAD编号。 为GPS调试功能,无需参数,将会显示GPS信息用来调试。 为远程控制模式,之后的OpenATS客户端将有服务端下达指令用来统一管理。

注意:即便是普通追踪模式下,OpenATS客户端也会将天线的经纬度以及角度数据发送给服务器端。如果不需要的可以在代码中注释掉相应的线程即可。

使用OpenATS追踪极轨卫星的下行信号,可以看出较大的多普勒频移

四、OpenATS的一些常见问题和注意点

默认编译时带有-g参数,如果出现错误会产生调试文件,如果linux系统未生成错误文件请输入命令:ulimit -c unlimited将系统设置一下,产生错误后请用gdb调试定位错误位置,可以发邮件告知我。

默认配置下OpenATS通过共享内存获取GPSD的经纬度、高度、时间等信息用于计算卫星角度,此为推荐配置,使用者可以通过修改配置文件修改成直接使用GPS串口信息,也可以自己更换GPS解析库,但本人不建议使用,使用GPSD有以下好处:1、GPSD对GPS模块的信息处理技术更加成熟,处理速度约为10ms,精度高稳定性好,如果使用GPS模块原始数据的话会因为数据的漂移导致追踪受到影响。2、GPSD可以同时支持别的软件例如NTPD进行授时服务,可以校准计算机本地的时间让追踪系统达到更精准时间,GPS授时精确度可以达到20~30ns(1ns为十亿分之一秒),经过串口通信、处理,仍然可以保证在百毫秒左右的精度,可以大大减少计算误差。3、GPSD支持$GPHDT测向语句,可以对天线系统的方位角进行初步修正,为今后静中通、动中通做铺垫。今后OpenATS会支持静中通、动中通,通过传感器在单片机上做PID算法实时修正。

由于系统采用高精度追踪,代码中全部采用双精度类型(虽然float够用),获取系统时间为毫秒级(用的ftime()函数),所以对时间要求很高,如果采用GPSD和NTPD协助对系统授时的话,那么时间可以高精度计算卫星位置,但如果采用GPS模块的话,受模块的串口数据频率的影响,计算实时性受到限制,可以使用指令将GPS模块设置串口通信频率大一些如10Hz。这也是不建议直接使用GPS模块采集数据的原因,建议使用GPSD服务。

OpenATS使用的追踪核心技术为卫星TLE星历追踪,通过TLE轨道数据计算出卫星当前的位置,这种追踪优势明显,但缺点也有许多,TLE轨道星历数据由于其根数比较特殊,必须配合SDP4算法导致预报精度有限,当然针对我们来讲足够精确了。TLE精度随着时间的变化误差漂移变大,所以需要经常更新TLE数据保持其精度。TLE分发由北美航空司令部(NORAD)分发,一些军事卫星等敏感卫星不在分发之列。OpenATS运行后会在4小时自动检查我服务器上的数据并更新本地数据,本人的服务器后台每4小时自动从SpaceTrack网站更新数据(NORAD每天更新两次),由于美国政府的规定:TLE数据个人或者组织分发受到限制,还请各位低调使用或者更换别的服务器地址(美国有几个组织提供TLE数据下载)。在此还要感谢“孤独小白”简总赠送的个人网站服务器。

OpenATS的目标追踪功能是一个新亮点,可以用作例如无人机、气球、飞机、火箭等目标物体的追踪,OpenATS启动目标追踪后,会在本地开启TCP监听端口,使用者仅需要将目标物体的GPS数据发送过来即可。GPS数据格式为:LAT:XX.XXXXX LNG:XXX.XXXXX ALT:XXX.XXXXX,注意的是数据格式遵循:“xx.xxxxxxx度”,而非“度分秒”格式,需要注意。玩法例如玩家可以修改一下dump1090等ADS-B软件,可以将飞机的经纬度传送给OpenATS,OpenATS会控制天线一直跟踪飞机。还有一些无人机爱好者也可以利用无人机发送回来的位置数据发送给OpenATS,自动追踪无人机获取更大的航行距离,更多的玩法还请自己想象。例如把天线换成激光炮,再做个多普勒雷达把角度计算出来,就是一个自动防御武器了,仅供参考哈,别来真的。

手动追踪模式时,输入两个角度数据控制天线指向,格式为:方位角 仰角,例如:265.35 46.35则天线指向方位角265.35仰角46.35,非常简单,输入q等命令会退出,天线自动归零。输入”X 修正角度“修正方位角0点位置,输入“Y 修正角度”修正仰角0点位置,用于校准天线0点位置。

非常感谢荷兰射电天文研究所ASTRON项目的天文学家Cees Bassa针对卫星轨道坐标转换的指导,计算卫星卫星角度的核心代码都是采用他的开源作品。最后要说明的是由于本人时间较忙,请使用者需要具有一定的计算机基础,包括一些安装依赖环境、单片机等基本问题,还请自行查找资料解决,暂时不提供技术支持谢谢谅解。同时欢迎关注本人个人公众号以及网站,有最新的信息或者好玩的东西会及时更新上去。

重要提示:根据我国法律规定,任何个人不允许私自搭建卫星接收设施,业余卫星通信需要取得相应的业余无线电操作证书,还请使用的人应用慎重,请勿做违法的事情干扰正常通信,本人对此类事情概不负责。

个人网站:www.chnsatcom.com OpenATS 项目GitHub地址:https://github.com/OpenATS/OpenATS

0 人点赞