丁 鑫,陶庭葉,陶征廣,何 蓉
(合肥工業大學 土木與水利工程學院,合肥 230009)
近年 20 年來,全球衛星導航系統(global navigation satellite system, GNSS)發展迅速,其應用也越來越廣泛。要想實現高精度導航定位功能,高精度導航定位軟件是不可或缺的一部分。然而,現有的高精度導航定位軟件分為科研型和商業型2 種,后者代碼不開源,不利于學習、交流和使用,為了解決這一問題,RTKLIB 軟件開始進行開源發布并不斷更新,它是 1 個使用 GNSS 進行標準和精密定位的開源程序包,由1 個可移植的程序庫和使用該庫的命令用戶界面(command user interface,CUI)和圖形用戶界面(graphical user interface, GUI)應用程序組成[1]。對于從事 GNSS 研究的人員來說,RTKLIB 是重要的學習資料,然而對于初學者來說,面臨的問題是入門難度較大。為了幫助初學者理解、學習和使用該軟件,本文首先介紹了RTKLIB 軟件各版本的關鍵信息以及與RTKLIB 有關的研究現狀,然后以RTKLIB 2.4.2 的RTKPOST為例,闡述了軟件結構和調用方法,同時也將調用軟件的標準單點定位解算結果與 RTKLIB 軟件和gLAB(GNSS-Lab tool suite)軟件的標準單點定位解算結果進行對比分析。
RTKLIB 在開源之前有4 個版本,其中V.0.0.0(2006 年 4 月)為第 1 個版本的實時動態差分(real-time kinematic, RTK)程序,使用C 語言編寫;V.1.0.0(2007 年1 月)是1 個簡單的后處理應用程序;V.1.1.0(2007 年 3 月),添加了 Windows 圖形用戶界面應用程序;V.2.1.0(2008 年7 月),添加了一些應用程序,支持中程距離的 RTK 解算。RTKLIB 在開源發布以后,也已經有了多個版本的更新,其中 V.2.2.0(2009 年 1 月),添加了實時應用程序,支持通過互聯網進行國際海運事業無線電技術委員會(Radio Technical Commission for Maritime Services, RTCM) 網絡傳輸的協議(networked transport of RTCM via internet protocol,NTRIP);V.2.2.1(2009 年 5 月),RTCM 及網絡 RTK(network RTK, NRTK);V.2.2.2(2009 年 9 月),修復了多個程序缺陷(bug),提供英文手冊;V.2.3.0(2009 年12 月),支持格洛納斯衛星導航系統(global navigation satellite system, GLONASS)數據;V.2.4.0(2010 年8 月),對于實時和后處理,都增加了精密單點定位動態(precise point positioning kinematic,PPP-Kinematic)模式和 PPP 靜態(PPP-Static)模式,自動通過FTP 下載精確的星歷表以支持長基線RTK;V.2.4.1 (2011 年6 月),支持日本準天頂衛星系統(quasi-zenith satellite system, QZSS)的數據;V.2.4.2 (2013 年 4 月),支持伽利略衛星導航系統(Galileo navigation satellite system, Galileo)和北斗衛星導航系統(BeiDou navigation satellite system,BDS)的數據、PPP 整周模糊度解,但是Windows應用程序的構建環境從 Turbo C++更改為 C++Builder XE2 或XE3,不再支持Turbo C++。最新版本的RTKLIB 需要從GitHub 上下載,其中ver.2.4.2 pXX 是穩定版本,ver.2.4.3 bXX 是開發或beta 版本。
目前,國內外的研究者對于RTKLIB 的研究主要集中在以下3 個方面:
1)分析評估[2-5]。通過與同類軟件的實驗分析對比,評估RTKLIB 的定位性能,如文獻[2]選取了在全球范圍內分布的76 個國際GNSS 服務組織(International GNSS Service, IGS)觀測站的數據,采用RTKLIB、gLAB 和G-Nut 這3 款開源精密單點定位軟件進行靜態模擬動態 PPP 解算,將不同軟件解算的對流層延遲和坐標與 IGS 提供的參考值進行比較,評估其對流層解算精度、收斂時間以及收斂后的坐標解算精度的差異;文獻[4]利用RTKLIB 進行靜態精密單點定位數據處理,采用事后、快速、超快速3 種星歷及鐘差產品對某IGS 站單天觀測值進行解算,并將處理結果和準確值進行對比;文獻[5]對比分析了RTKLIB 在不同星歷產品、不同濾波方式、不同觀測時間條件下的靜態單點定位精度優劣,提出事后精密星歷結合組合濾波方法,并給出 RTKLIB 靜態精密單點定位的更優解算策略。
2)功能改進[6-7]。在RTKLIB 源代碼的基礎上,進行2 次開發,改進現有功能,以便滿足具體的科學研究和工程應用,如文獻[6]開發了 1 款新的GNSS 分析軟件(GNSS analysis software for multiconstellation and multi-frequency precise positioning,GAMP),它雖然是基于RTKLIB 的 2 次開發,但是具有許多改進,比如周跳探測、接收機時鐘跳變修復和 GLONASS 偽距頻率間偏差處理等,可以基于非差、非組合觀測值實現多 GNSS 的精密單點定位;文獻[7]提出利用對流層延遲模型 UNB3替代 RTKLIB 軟件中現有的 Saastamoinen 模型,以提高對流層延遲的計算精度。
3)擴展應用。利用RTKLIB 的數據解算功能,將 RTKLIB 應用到相關的科學研究和工程實踐中去[8-12],如文獻[8]根據 GNSS 數據預處理軟件(translation, editing and quality checking, TEQC)和RTKLIB 軟件在全球定位系統(global positioning system, GPS)觀測數據質量檢核方面的功能各有優勢和不足的特點,將 TEQC 與 RTKLIB 軟件 2 者結合起來應用,對 GPS 觀測數據進行全面、直觀的分析;文獻[12]將RTKLIB 應用到開發低成本接收機的工作中去,并獲得較好的定位性能。
本文將以 RTKLIB 2.4.2 中的后處理程序RTKPOST 為例來敘述其軟件結構。RTKPOST 目前支持 9 種定位模式[13],分別是 Single、DGPS/DGNSS、Kinematic、Static、Moving-Base、Fixed、PPP Kinematic、PPP Static、PPP Fixed,不同的定位模式適用的范圍也不相同,如表1 所示,表1 中的SBAS 表示星基增強系統。

表1 RTKPOST 定位模式
在 RTKPOST 中,postpos 函數的功能是進行后處理定位,圖1~圖3 展示了postpos 函數中的函數調用關系。

圖1 postpos 函數調用關系
圖1 表示 postpos 函數主要分為3 個部分:第1 部分是打開處理測段,包括讀取衛星天線參數、讀取接收機天線參數、讀取不同類型碼觀測量硬件延遲偏差(differential code bias,DCB)參數、讀取電離層數據文件、打開大地水準面數據、讀取地球自轉參數(Earth rotation parameter,ERP)數據;第2 部分是基準站處理,包括讀取精密星歷等、流動站處理(a)、釋放精密星歷等;第3 部分是關閉處理測段,包括關閉大地水準面數據、關閉解狀態文件。
流動站處理(a)過程如圖 2 所示,包括調用execses 函數,執行處理測段,具體包括讀取觀測值和導航數據、設置天線參數、讀取海洋潮汐荷載參數、獲取流動站/參考站的固定位置、打開解狀態文件、寫文件頭到輸出文件、打開輸出文件追加內容,處理定位(b)(或者處理定位(b),打開輸出文件追加內容,組合前向/后向解)、釋放觀測值和導航數據等函數。

圖2 流動站處理過程
處理定位(b)過程如圖3 所示,包括初始化RTK結構體、輸入觀測值數據、精密定位、輸出解到輸出文件、釋放RTK 結構體。

圖3 處理定位過程
在處理定位中,首先要輸入 1 個歷元的觀測值,然后調用rtkpos 函數進行精密定位。該函數主要包括標準單點定位 pntpos (c)、精密單點定位pppos (d)、相對定位relpos (e),其中:pntpos 函數計算接收機的位置、速度、鐘偏差;pppos 函數利用1 臺接收機獲取高精度的定位結果;relpos 函數將2 臺接收機的同步觀測值進行組合處理,獲取1 臺接收機相對于另1 臺接收機的坐標和速度。
標準單點定位pntpos 函數(c),如圖4 所示,適用于Single 定位模式。

圖4 單點定位pntpos
圖4 中:satposs 計算衛星位置、速度、鐘偏差;estpos 使用偽距觀測值估計接收機位置;estvel 使用多普勒頻移觀測值估計接收機速度。
精密單點定位 pppos 函數(d),如圖 5 所示,適用于 PPP Kinematic、PPP Static、PPP Fixed 3 種定位模式。其中:satposs 計算衛星的位置和鐘偏差;res_ppp 計算相位和碼殘差;filter 利用卡爾曼濾波進行狀態更新;pppamb 用于解算整周模糊度。

圖5 精密單點定位pppos
相對定位 relpos 函數(e),如圖 6 所示,適用于 DGPS/DGNSS、Kinematic、Static、Moving-Base、Fixed 5 種模式。

圖6 相對定位relpos
圖6 中:satposs 計算衛星位置和鐘偏差;zdres計算流動站或基準站的非差殘差項;udstate 實時更新狀態;ddres 計算雙差殘差項;filter 利用卡爾曼濾波進行狀態更新;resamb_LAMBDA 估計整周模糊度解。若定位模式是Moving-Base,則除了使用標準單點定位估計流動站的位置/速度外,還需要使用標準單點定位估計基準站的位置/速度。
本文將按照圖7 所示的方法步驟調用、優化并修改 RTKLIB 源代碼,實現 Single 模式下的標準單點定位功能,最終形成1 款軟件(以下簡稱“調用軟件”)。

圖7 函數調用方法
具體地說:首先調用 RTKLIB 源代碼,在VS2013 環境下重新編譯RTKLIB,并調用postpos函數;然后優化參數,包括重新設置文件選項、處理選項和解選項,以達到較好的解算效果,其中,文件選項包括衛星/接收機天線相位中心變化文件、衛星位置文件、大地水準面數據文件、電離層文件、地球定向參數文件、不同類型碼觀測量硬件延遲偏差文件、海洋潮汐荷載系數文件等,處理選項包括定位模式、使用的載波頻率數、解類型(濾波器類型)、接收機動力學模型、地球潮汐改正、使用的導航衛星系統、截止高度角、衛星星歷/鐘差、模糊度解模式、GLONASS 模糊度解模式、最小固定計數、最小鎖定計數、電離層選項、對流層選項、定位選項、濾波器迭代次數、插入參考站觀測值、星基增強系統(satellite-based augmentation system,SBAS)衛星選擇、碼/相位誤差比值、測量值誤差因子、過程噪聲標準差、衛星鐘穩定度、模糊度解驗證閾值、幾何精度衰減因子(geometric dilution of precision,GDOP)拒絕閾值、基線長度約束、與接收機無關的交換格式 (receiver independent exchange format,RINEX)選項等,解選項包括解格式、時間系統、時間格式、小數點后時間數字的位數、緯度/經度格式、輸出文件頭、輸出處理選項、參考基準面、高程、大地水準面模型、靜態解模式、解統計級別、調試跟蹤級別等;最后修改源代碼,包括修改estpos 函數,使其能夠根據偽距殘差的大小變化適當增加或減少迭代次數,而不是執行最大迭代次數,新增ScreenSolution 和InsertSolution 函數,其中ScreenSolution 函數主要根據有效衛星數量ns、位置方差-協方差陣的6 個元素qr[0]~qr[5]和齡差 age 的數值,并利用動態確定的閾值來篩選有效解,而 InsertSolution 函數將滿足篩選條件的解算結果輸入到SQL Server 數據庫中,便于后續的計算、處理和分析工作。

圖8 調用軟件界面
調用軟件實現單點定位的界面如圖8 所示。其中主菜單欄有 3 項內容,分別為文件、功能和幫助,如圖9 所示。

圖9 主菜單欄介紹
目前,廣泛使用的開源軟件有RTKLIB、G-Nut和gLAB,且已有相關文獻對其定位性能進行了初步分析[2-5,14-15],其中 gLAB 由西班牙加泰羅尼亞科技大學天文與測量研究組聯合開發,界面友好、解算結果穩定可靠,并且可以方便地在Linux 和Windows 操作系統上運行。為了驗證調用軟件的定位性能,本文還使用了 RTKLIB 軟件和 gLAB 軟件進行標準單點定位解算,并將 3 種軟件的解算結果進行對比分析。隨機地選取全球范圍內2019 年9 月 1 日(年積日第 244 天)BJFS、HKSL、INVK等16 個IGS 跟蹤站的觀測數據進行解算,以IGS站周解坐標為參考,分別將調用軟件、RTKLIB 軟件和gLAB 軟件解算的坐標與其求差,得到坐標分量(X、Y、Z)方向的誤差,進一步地定量分析定位結果,統計不同IGS 站坐標分量(X、Y、Z)方向的誤差序列的均方根(root mean square,RMS)值,如表2 所示。

表2 不同IGS 站坐標分量(X,Y,Z)方向的誤差序列RMS 值
圖10~圖12 分別表示3 種軟件解算坐標分量X、Y、Z方向的誤差序列。由圖 10~圖 12 可知,在X方向上,調用軟件和RTKLIB 軟件相比,除了NKLG 站外,其他各站的調用軟件解算精度均優于RTKLIB 軟件或者2 者相差不大,調用軟件和gLAB 軟件相比,除了ABPO 站外,其他各站的調用軟件解算精度均優于gLAB 軟件或者2 者相差不大,RTKLIB 軟件和 gLAB 軟件相比,除了 ABPO 和 ALBH 站外,其他各站的 RTKLIB 軟件解算精度優于gLAB 軟件或者2 者相差不大;在Y方向上,調用軟件和RTKLIB 軟件相比,除了HLFX 站外,其他各站的調用軟件解算精度均優于RTKLIB 軟件或者2 者相差不大,調用軟件和gLAB 軟件相比,除了ABPO 站外,其他各站的調用軟件解算精度均優于gLAB 軟件或者2 者相差不大,RTKLIB 軟件和gLAB 軟件相比,除了 HKSL、ABPO、ALBH 和 CHUR 站外,其他各站的RTKLIB 軟件解算精度均優于 gLAB 軟件或者 2 者相差不大;在Z方向上,調用軟件和RTKLIB 軟件相比,所有站的調用軟件解算精度都優于RTKLIB 軟件,調用軟件和gLAB 軟件相比,除了PRDS、CHUR 和 SASK 站外,其他各站的調用軟件解算精度度都優于RTKLIB 軟件或者2 者相差不大,gLAB 軟件和 RTKLIB 軟件相比,除了 BJFS、ABPO 和 KERG 站外,其他各站的gLAB 軟件解算精度都優于RTKLIB 軟件或者2 者相差不大。

圖10 3 種軟件解算坐標分量X 方向的誤差序列

圖11 3 種軟件解算坐標分量Y 方向的誤差序列

圖12 3 種軟件解算坐標分量Z 方向的誤差序列
進一步統計出了不同軟件解算坐標分量X、Y及Z方向的誤差序列RMS 值的最小值、最大值和平均值,如表3 所示。從表3 可以看出:在X和Y方向上,調用軟件的標準單點定位精度大約為0.930 1 和1.052 2 m,優于RTKLIB 軟件的1.189 0和1.156 9 m,而RTKLIB 軟件優于gLAB 軟件的1.190 0 和1.338 5 m;在Z方向上,調用軟件的標準單點定位精度大約為1.156 9 m,優于gLAB 軟件的1.328 8 m,而gLAB 軟件優于RTKLIB 軟件的1.540 4 m,總體而言,以上3 款軟件的標準單點定位解算結果均能達到米級的定位精度,其中調用軟件在X、Y及Z方向上定位精度均優于RTKLIB 軟件和 gLAB 軟件。

表3 不同軟件解算坐標分量X、Y 及Z 方向的誤差序列RMS 值的統計信息 單位:m
RTKLIB 作為1 款利用C/C++混合編程的優秀免費開源GNSS 數據處理軟件,功能強大、可視化程度較高,越來越多的研究人員開始了解、學習并使用RTKLIB。本文首先介紹了RTKLIB 各版本的關鍵信息以及與 RTKLIB 有關的研究情況,然后以 RTKLIB 2.4.2 的 RTKPOST 為例闡述了軟件結構和調用方法,為初學者了解和掌握 RTKLIB 提供參考和借鑒,對于初學者具有重要參考意義。同時,也分析了調用軟件的解算結果,選取16 個IGS跟蹤站的數據對調用軟件、RTKLIB 軟件和gLAB軟件解算出的坐標進行精度分析,結果表明,在標準單點定位模式下,X和Y方向解算精度,調用軟件優是最優的,其次是RTKLIB 軟件,最后是gLAB軟件;Z方向解算精度,調用軟件也是最優的,其次是gLAB 軟件,最后是RTKLIB 軟件。總體而言,在標準單點定位模式下,經過優化、修改后的調用軟件,相對于RTKLIB 軟件和gLAB 軟件來說更加穩定、可靠,這也可為 RTKLIB 的應用提供參考。