北斗星历解析及实时卫星位置解算实现

2022-06-06 02:57刘永强郭小伟杨喜兵
现代导航 2022年2期
关键词:北斗星坐标系北斗

刘永强,郭小伟,杨喜兵

北斗星历解析及实时卫星位置解算实现

刘永强,郭小伟,杨喜兵

(中国电子科技集团公司第二十研究所,西安 710068)

利用C语言编程进行北斗卫星星历数据的实时读取,更新结构体的卫星轨道参数,从而实现北斗卫星位置的解算,并与武汉大学数据中心提供的北斗精密星历作比较,对解算的卫星位置结果进行评估,最大误差不超过3.5米,满足实际应用需要。

北斗卫星定位;卫星位置解算;星历解析;BDS

0 引言

北斗卫星导航定位系统(BeiDou Navigation Satellite System,BDS)是我国一项重要的基础设施建设。2020年7月31日,我国已经全面建成北斗导航定位系统,可为全球范围内的各类用户提供安全可靠的定位服务[1]。卫星导航定位是通过空间交汇原理实现的,因此卫星定位的前提是能够计算得到准确的卫星位置。精密星历给出的卫星位置虽然精度高,但只能事后获得,而在实时定位中需通过广播星历给出的卫星轨道信息计算得到卫星位置。

本文基于C语言实现北斗星历的读取解析以及北斗卫星的位置计算,为基于北斗导航系统的精确定位提供基础。用数据模拟软件回放NMEA格式的历史数据,用消息接收线程实时读取北斗星历相关的原始数据,将其解析并保存在结构体数组中,计算并输出实时卫星位置。具体的星历数据解析及位置计算的实现流程如图1所示。

图1 北斗星历数据解析及位置计算的实现流程

该工作有两方面的益处,一方面可以为北斗卫星定位算法提供可靠的卫星位置信息;另一方面C语言方便实现在嵌入式开发中的代码复用。

1 北斗卫星星历数据解析

卫星的轨道信息通过广播导航电文的形式发送给用户,获取轨道信息后,便可根据已知的轨道模型实现对实时位置的精确计算[2]。本文使用NovAtel OEM-6接收机进行数据采集,记录北斗的原始星历数据BDSEPHEMERISA,一颗卫星对应一条log文件,包含卫星的轨道参数信息,解析得到轨道参数信息即可计算卫星的实时位置。

1.1 星历数据格式

接收机串口输出的北斗星历数据如图2所示,“#BDSEPHEMERISA”是星历数据的标识头,参数的具体对应关系如表1所示。

图2 北斗星历数据

表1 星历参数

1.2 解析过程

1.2.1 卫星星历结构体

参考RINEX导航文件的读取,设置星历数据的结构体如图3所示。用于保存卫星广播的相关轨道参数信息,进行卫星位置的实时解算。特别地,每颗卫星对应一个结构体进行星历数据的保存,因此,需要从星历数据的头文件先读到可见卫星的数目,并动态分配内存,创建结构体数组,用于所有可视的轨道参数信息。

图3 星历数据存储结构体

1.2.2 解析函数

当串口读到数据时,识别语句标识头是否为BDSEPHEMERISA,当识别到BDSEPHEMERISA,则进入北斗星历数据的解析函数,按逗号识别数据的位置,截取子串进行数据的读取,根据1.1节所示的星历数据格式读取各个轨道参数信息,并将字符串转化成浮点数存入星历的结构体中,供卫星位置计算读取调用。北斗星历数据具体的解析流程如图4所示。

图4 北斗星历数据的解析流程

2 北斗卫星位置计算方法

北斗卫星导航北斗卫星导航系统是混合星座系统,有三种不同类型的卫星,分别为地球静止轨道(Geostationary Earth Orbit,GEO)卫星、中圆轨道(Medium Earth Orbit,MEO)卫星和倾斜地球同步轨道(Inclined Geosynchronous Orbit,IGSO)卫星,其中IGSO和MEO卫星的卫星位置算法与GPS卫星相同,而GEO卫星不同[3]。北斗卫星在CGCS2000大地坐标系中的瞬时位置,是利用北斗卫星广播星历提供的1个参考时刻、6个对应于参考时刻的开普勒轨道根数、9个轨道摄动修正量,按照一定的公式计算的,以下是利用卫星的轨道参数计算卫星位置的过程。在计算归化时间的时候,由于观测时刻卫星钟参考时间都为公历记法,即年、月、日、时、分、秒,而星历参考历元为BDT的周内秒计数,需要通过儒略历统一时间,由于BDS和GPS的时间系统不统一,需要把BDS归化时间减去14 s来纳入GPS时。

具体的解算流程如图5所示,包括:

6)计算摄动改正项

8)计算卫星在轨道面坐标系中的位置;

9)计算MEO/IGSO卫星在CGCS2000坐标系中的坐标[4];

以上的计算过程都与GPS的计算相同,这里不再赘述,而GEO的计算则与GPS略有不同,要先计算在自定义坐标系中的坐标,再经旋转得到GEO卫星在CGCS2000的位置。

10)计算GEO卫星在CGCS2000坐标系中的位置坐标,先计算历元升交点的赤经(惯性系)如式(1)所示:

再计算GEO卫星在自定义坐标系中的坐标,如式(2)所示:

最后再经旋转计算GEO卫星在CGCS2000坐标系中的坐标,如式(3)所示:

北斗卫星位置计算的具体流程如图5所示。

3 实验验证

要想对广播星历的精度进行评定,需要有更高精度的评价基准,精密星历中含有更为精确的北斗卫星位置坐标,故通过与精密星历对比评估计算结果的精度。精密星历是按15 min间隔给出卫星的三维坐标,从武汉大学数据中心得到精密星历.SP3文件,用拉格朗日插值得到每个历元的精确北斗卫星位置作为参考[5],解算结果与参考卫星位置对比即可得到对应的误差结果。

如表2所示,列出了2018年6月22日7:15:00时刻卫星在地心地固坐标系下的参考位置以及通过读取BDSEPHEMERISA的星历数据计算得到的卫星位置。其中,3号星是GEO卫星,其余是MEO/IGSO卫星。

表2 卫星参考位置及解算值(单位:m)

表3和图6是解算得到的卫星位置相较于卫星参考位置偏差的绝对值。三个方向的最大偏差为3.495 m,最小偏差为0.349 m,每个方向偏差的均值都在1.5 m左右。其中,3号星是GEO卫星,在三个方向的误差相较于其他卫星误差最大,其最大偏差不到3.5 m,相较于卫星坐标的量级,最大误差完全可以接受,其余IGSO和MEO卫星的误差基本在2 m以内,可以满足实时卫星定位的需求。

表3 卫星位置结果误差统计(单位:m)

图6 卫星位置误差

4 结论

在利用卫星进行导航定位时,卫星位置要作为已知参数参与接收机的位置解算,因此在实时定位过程中,准确的卫星位置对定位结果至关重要。本文利用C语言实时读取北斗的星历信息并进行卫星位置的解算,解算结果与提供的精密星历相比较,结果证明MEO和IGSO误差普遍在2 m以内,GEO误差在3.5 m以内,可以满足后续接收机位置解算的需要。下一步拟考虑基于机器学习算法实现卫星运行轨道的预测,并解算卫星位置。

[1] 王洵,欧志伟,柳井明,等. 交通运输行业北斗系统国际化应用综述[J]. 卫星应用, 2021(4):12-16.

[2] 李燕. 基于北斗卫星系统精确定位的关键技术研究[D]. 合肥:合肥工业大学,2019.

[3] 祝会忠,郭钰铂,张凯,等. GEO对BDS精密单点定位的影响分析[J]. 测绘科学,2020(10):1-9.

[4] 李振昌,李仲勤. 基于Matlab的北斗卫星位置计算及精度分析[J]. 兰州交通大学学报, 2017,36(4):100-104.

[5] 杨晓昆,徐沛虎,胡强. 北斗GEO导航卫星广播星历拟合算法设计[J]. 现代导航,2017(4):263-267.

Realization of BDS Ephemeris Division and Real-Time Satellite Position Calculation

LIU Yongqiang, GUO Xiaowei, YANG Xibing

Real-time reading of Beidou satellite ephemeris is realized in the paper, the satellite orbit structure parameters are updated by C language programming to calculate the Beidou satellite position. The calculation results were compared with the precise ephemeris provided by IGS data center of Wuhan University to evaluate the real-time satellite position results. The maximum error is no more than 3.5 meters, which meets the needs of practical application.

Beidou Satellite Positioning; Satellite Position Calculation; Ephemeris Analysis; BDS

TN957

A

1674-7976-(2022)-02-109-05

2022-01-25。刘永强(1995.01—),甘肃庆阳人,硕士,主要研究方向为卫星定位研究。

猜你喜欢
北斗星坐标系北斗
天上有颗北斗星
北斗时钟盘
独立坐标系椭球变换与坐标换算
“北斗”离我们有多远
石吟
坐标系背后的故事
三角函数的坐标系模型
大风吹
求坐标系内三角形的面积