劉永強(qiáng),郭小偉,楊喜兵
北斗星歷解析及實(shí)時(shí)衛(wèi)星位置解算實(shí)現(xiàn)
劉永強(qiáng),郭小偉,楊喜兵
(中國(guó)電子科技集團(tuán)公司第二十研究所,西安 710068)
利用C語言編程進(jìn)行北斗衛(wèi)星星歷數(shù)據(jù)的實(shí)時(shí)讀取,更新結(jié)構(gòu)體的衛(wèi)星軌道參數(shù),從而實(shí)現(xiàn)北斗衛(wèi)星位置的解算,并與武漢大學(xué)數(shù)據(jù)中心提供的北斗精密星歷作比較,對(duì)解算的衛(wèi)星位置結(jié)果進(jìn)行評(píng)估,最大誤差不超過3.5米,滿足實(shí)際應(yīng)用需要。
北斗衛(wèi)星定位;衛(wèi)星位置解算;星歷解析;BDS
北斗衛(wèi)星導(dǎo)航定位系統(tǒng)(BeiDou Navigation Satellite System,BDS)是我國(guó)一項(xiàng)重要的基礎(chǔ)設(shè)施建設(shè)。2020年7月31日,我國(guó)已經(jīng)全面建成北斗導(dǎo)航定位系統(tǒng),可為全球范圍內(nèi)的各類用戶提供安全可靠的定位服務(wù)[1]。衛(wèi)星導(dǎo)航定位是通過空間交匯原理實(shí)現(xiàn)的,因此衛(wèi)星定位的前提是能夠計(jì)算得到準(zhǔn)確的衛(wèi)星位置。精密星歷給出的衛(wèi)星位置雖然精度高,但只能事后獲得,而在實(shí)時(shí)定位中需通過廣播星歷給出的衛(wèi)星軌道信息計(jì)算得到衛(wèi)星位置。
本文基于C語言實(shí)現(xiàn)北斗星歷的讀取解析以及北斗衛(wèi)星的位置計(jì)算,為基于北斗導(dǎo)航系統(tǒng)的精確定位提供基礎(chǔ)。用數(shù)據(jù)模擬軟件回放NMEA格式的歷史數(shù)據(jù),用消息接收線程實(shí)時(shí)讀取北斗星歷相關(guān)的原始數(shù)據(jù),將其解析并保存在結(jié)構(gòu)體數(shù)組中,計(jì)算并輸出實(shí)時(shí)衛(wèi)星位置。具體的星歷數(shù)據(jù)解析及位置計(jì)算的實(shí)現(xiàn)流程如圖1所示。
圖1 北斗星歷數(shù)據(jù)解析及位置計(jì)算的實(shí)現(xiàn)流程
該工作有兩方面的益處,一方面可以為北斗衛(wèi)星定位算法提供可靠的衛(wèi)星位置信息;另一方面C語言方便實(shí)現(xiàn)在嵌入式開發(fā)中的代碼復(fù)用。
衛(wèi)星的軌道信息通過廣播導(dǎo)航電文的形式發(fā)送給用戶,獲取軌道信息后,便可根據(jù)已知的軌道模型實(shí)現(xiàn)對(duì)實(shí)時(shí)位置的精確計(jì)算[2]。本文使用NovAtel OEM-6接收機(jī)進(jìn)行數(shù)據(jù)采集,記錄北斗的原始星歷數(shù)據(jù)BDSEPHEMERISA,一顆衛(wèi)星對(duì)應(yīng)一條log文件,包含衛(wèi)星的軌道參數(shù)信息,解析得到軌道參數(shù)信息即可計(jì)算衛(wèi)星的實(shí)時(shí)位置。
接收機(jī)串口輸出的北斗星歷數(shù)據(jù)如圖2所示,“#BDSEPHEMERISA”是星歷數(shù)據(jù)的標(biāo)識(shí)頭,參數(shù)的具體對(duì)應(yīng)關(guān)系如表1所示。
圖2 北斗星歷數(shù)據(jù)
表1 星歷參數(shù)
1.2.1 衛(wèi)星星歷結(jié)構(gòu)體
參考RINEX導(dǎo)航文件的讀取,設(shè)置星歷數(shù)據(jù)的結(jié)構(gòu)體如圖3所示。用于保存衛(wèi)星廣播的相關(guān)軌道參數(shù)信息,進(jìn)行衛(wèi)星位置的實(shí)時(shí)解算。特別地,每顆衛(wèi)星對(duì)應(yīng)一個(gè)結(jié)構(gòu)體進(jìn)行星歷數(shù)據(jù)的保存,因此,需要從星歷數(shù)據(jù)的頭文件先讀到可見衛(wèi)星的數(shù)目,并動(dòng)態(tài)分配內(nèi)存,創(chuàng)建結(jié)構(gòu)體數(shù)組,用于所有可視的軌道參數(shù)信息。
圖3 星歷數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)體
1.2.2 解析函數(shù)
當(dāng)串口讀到數(shù)據(jù)時(shí),識(shí)別語句標(biāo)識(shí)頭是否為BDSEPHEMERISA,當(dāng)識(shí)別到BDSEPHEMERISA,則進(jìn)入北斗星歷數(shù)據(jù)的解析函數(shù),按逗號(hào)識(shí)別數(shù)據(jù)的位置,截取子串進(jìn)行數(shù)據(jù)的讀取,根據(jù)1.1節(jié)所示的星歷數(shù)據(jù)格式讀取各個(gè)軌道參數(shù)信息,并將字符串轉(zhuǎn)化成浮點(diǎn)數(shù)存入星歷的結(jié)構(gòu)體中,供衛(wèi)星位置計(jì)算讀取調(diào)用。北斗星歷數(shù)據(jù)具體的解析流程如圖4所示。
圖4 北斗星歷數(shù)據(jù)的解析流程
北斗衛(wèi)星導(dǎo)航北斗衛(wèi)星導(dǎo)航系統(tǒng)是混合星座系統(tǒng),有三種不同類型的衛(wèi)星,分別為地球靜止軌道(Geostationary Earth Orbit,GEO)衛(wèi)星、中圓軌道(Medium Earth Orbit,MEO)衛(wèi)星和傾斜地球同步軌道(Inclined Geosynchronous Orbit,IGSO)衛(wèi)星,其中IGSO和MEO衛(wèi)星的衛(wèi)星位置算法與GPS衛(wèi)星相同,而GEO衛(wèi)星不同[3]。北斗衛(wèi)星在CGCS2000大地坐標(biāo)系中的瞬時(shí)位置,是利用北斗衛(wèi)星廣播星歷提供的1個(gè)參考時(shí)刻、6個(gè)對(duì)應(yīng)于參考時(shí)刻的開普勒軌道根數(shù)、9個(gè)軌道攝動(dòng)修正量,按照一定的公式計(jì)算的,以下是利用衛(wèi)星的軌道參數(shù)計(jì)算衛(wèi)星位置的過程。在計(jì)算歸化時(shí)間的時(shí)候,由于觀測(cè)時(shí)刻衛(wèi)星鐘參考時(shí)間都為公歷記法,即年、月、日、時(shí)、分、秒,而星歷參考?xì)v元為BDT的周內(nèi)秒計(jì)數(shù),需要通過儒略歷統(tǒng)一時(shí)間,由于BDS和GPS的時(shí)間系統(tǒng)不統(tǒng)一,需要把BDS歸化時(shí)間減去14 s來納入GPS時(shí)。
具體的解算流程如圖5所示,包括:
6)計(jì)算攝動(dòng)改正項(xiàng);
8)計(jì)算衛(wèi)星在軌道面坐標(biāo)系中的位置;
9)計(jì)算MEO/IGSO衛(wèi)星在CGCS2000坐標(biāo)系中的坐標(biāo)[4];
以上的計(jì)算過程都與GPS的計(jì)算相同,這里不再贅述,而GEO的計(jì)算則與GPS略有不同,要先計(jì)算在自定義坐標(biāo)系中的坐標(biāo),再經(jīng)旋轉(zhuǎn)得到GEO衛(wèi)星在CGCS2000的位置。
10)計(jì)算GEO衛(wèi)星在CGCS2000坐標(biāo)系中的位置坐標(biāo),先計(jì)算歷元升交點(diǎn)的赤經(jīng)(慣性系)如式(1)所示:
再計(jì)算GEO衛(wèi)星在自定義坐標(biāo)系中的坐標(biāo),如式(2)所示:
最后再經(jīng)旋轉(zhuǎn)計(jì)算GEO衛(wèi)星在CGCS2000坐標(biāo)系中的坐標(biāo),如式(3)所示:
北斗衛(wèi)星位置計(jì)算的具體流程如圖5所示。
要想對(duì)廣播星歷的精度進(jìn)行評(píng)定,需要有更高精度的評(píng)價(jià)基準(zhǔn),精密星歷中含有更為精確的北斗衛(wèi)星位置坐標(biāo),故通過與精密星歷對(duì)比評(píng)估計(jì)算結(jié)果的精度。精密星歷是按15 min間隔給出衛(wèi)星的三維坐標(biāo),從武漢大學(xué)數(shù)據(jù)中心得到精密星歷.SP3文件,用拉格朗日插值得到每個(gè)歷元的精確北斗衛(wèi)星位置作為參考[5],解算結(jié)果與參考衛(wèi)星位置對(duì)比即可得到對(duì)應(yīng)的誤差結(jié)果。
如表2所示,列出了2018年6月22日7:15:00時(shí)刻衛(wèi)星在地心地固坐標(biāo)系下的參考位置以及通過讀取BDSEPHEMERISA的星歷數(shù)據(jù)計(jì)算得到的衛(wèi)星位置。其中,3號(hào)星是GEO衛(wèi)星,其余是MEO/IGSO衛(wèi)星。
表2 衛(wèi)星參考位置及解算值(單位:m)
表3和圖6是解算得到的衛(wèi)星位置相較于衛(wèi)星參考位置偏差的絕對(duì)值。三個(gè)方向的最大偏差為3.495 m,最小偏差為0.349 m,每個(gè)方向偏差的均值都在1.5 m左右。其中,3號(hào)星是GEO衛(wèi)星,在三個(gè)方向的誤差相較于其他衛(wèi)星誤差最大,其最大偏差不到3.5 m,相較于衛(wèi)星坐標(biāo)的量級(jí),最大誤差完全可以接受,其余IGSO和MEO衛(wèi)星的誤差基本在2 m以內(nèi),可以滿足實(shí)時(shí)衛(wèi)星定位的需求。
表3 衛(wèi)星位置結(jié)果誤差統(tǒng)計(jì)(單位:m)
圖6 衛(wèi)星位置誤差
在利用衛(wèi)星進(jìn)行導(dǎo)航定位時(shí),衛(wèi)星位置要作為已知參數(shù)參與接收機(jī)的位置解算,因此在實(shí)時(shí)定位過程中,準(zhǔn)確的衛(wèi)星位置對(duì)定位結(jié)果至關(guān)重要。本文利用C語言實(shí)時(shí)讀取北斗的星歷信息并進(jìn)行衛(wèi)星位置的解算,解算結(jié)果與提供的精密星歷相比較,結(jié)果證明MEO和IGSO誤差普遍在2 m以內(nèi),GEO誤差在3.5 m以內(nèi),可以滿足后續(xù)接收機(jī)位置解算的需要。下一步擬考慮基于機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)衛(wèi)星運(yùn)行軌道的預(yù)測(cè),并解算衛(wèi)星位置。
[1] 王洵,歐志偉,柳井明,等. 交通運(yùn)輸行業(yè)北斗系統(tǒng)國(guó)際化應(yīng)用綜述[J]. 衛(wèi)星應(yīng)用, 2021(4):12-16.
[2] 李燕. 基于北斗衛(wèi)星系統(tǒng)精確定位的關(guān)鍵技術(shù)研究[D]. 合肥:合肥工業(yè)大學(xué),2019.
[3] 祝會(huì)忠,郭鈺鉑,張凱,等. GEO對(duì)BDS精密單點(diǎn)定位的影響分析[J]. 測(cè)繪科學(xué),2020(10):1-9.
[4] 李振昌,李仲勤. 基于Matlab的北斗衛(wèi)星位置計(jì)算及精度分析[J]. 蘭州交通大學(xué)學(xué)報(bào), 2017,36(4):100-104.
[5] 楊曉昆,徐沛虎,胡強(qiáng). 北斗GEO導(dǎo)航衛(wèi)星廣播星歷擬合算法設(shè)計(jì)[J]. 現(xiàn)代導(dǎo)航,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。劉永強(qiáng)(1995.01—),甘肅慶陽人,碩士,主要研究方向?yàn)樾l(wèi)星定位研究。