汪 亮,李子申,周 凱,張少添,袁 洪
(1. 中國科學院光電研究院,北京 100094; 2.中國科學院大學,北京 100049)
基于智能終端的高精度定位是未來實現大眾高精度位置服務的重要手段。在硬件設備允許的情況下,早期的Android系統支持輸出經度、緯度和高程等位置信息,并提供相關的應用程序開發接口(Application Programming Interface,API)。2016年5月18日,Android 7.0(Nougat)系統公開亮相于Google I/O開發者大會,Google宣布自Android 7.0(API level 24)系統開始,新增了輸出全球導航衛星系統(Global Navigation Satellite System,GNSS)的原始觀測值的API—Android Location API (android.location)[1]。對于GNSS開發者來說,這是首次能夠從Android智能終端系統獲取GNSS載波和碼的觀測數據以及導航電文等信息,Android系統GNSS原始數據的開放為Android位置服務的應用帶來了重要機遇。
現有的衛星導航定位方法主要包括差分定位和非差定位兩大類,相應的代表性技術分別為基于載波相位的實時動態定位(Real-Time Kinematic,RTK)技術和精密單點定位(Precise Point Positioning,PPP)技術[2-3]。針對Android終端如何實現高精度定位處理的現有研究[4-17],主要集中于對其觀測數據特性的分析以及進行差分定位處理方面,實驗結果絕大部分以事后處理為主,基于實時PPP手段實現智能終端實時高精度定位的研究則明顯較少。基于差分定位技術實現智能終端高精度位置服務密切依賴于地面基準站(網)的支持,難以直接實現大眾高精度位置服務的大規模應用。相對而言,基于PPP非差方式的定位技術,不受地面基準站的限制,只需通過網絡實時接收精密衛星軌道和鐘差以及電離層等改正信息即可實現全球尺度的高精度定位,適合以智能手機為主的大眾高精度位置服務的大規模應用。因此,本文針對基于Android智能終端開放的GNSS原始數據如何實現實時非差精密定位進行了研究,在Android智能終端上實現了實時PPP高精度定位,并開發了智能終端實時PPP定位原型軟件,顯著提升了智能終端的定位精度。
早期Android系統中的位置服務主要是通過android.gsm.location這一應用程序開發接口完成的,雖然可以通過一些基本的Android指令配置GNSS芯片,但開發者也只能獲得GNSS芯片上報給操作系統的位置、速度和時間(Position Velocity and Time, PVT)解算結果等信息。從Android 7.0(API level 24)系統開始及之后的系統中,Android系統引入了新的Location API(android.location),提供了關于GNSS原始觀測數據的相關類,主要包括:1) GNSS Clock類,該類提供了用于計算信號接收時刻的GNSS芯片時間以及鐘偏等信息;2) GNSS Navigation Message類,該類提供了所有衛星系統的導航電文等相關信息;3) GNSS Measurement類,該類提供了衛星信號的發射時間以及與計算載波相位和多普勒等觀測量的相關信息。關于GNSS Clock、GNSS Measurement以及GNSS Navigation Message類中的數據成員以及含義具體可參見文獻[1]和Android源碼,本文不做詳細介紹。
由于偽距和載波相位等觀測量并沒有直接在Android Location API中給出,使用這些API提供的GNSS原始測量信息進行定位解算的前提是計算出定位解算所需的偽距、載波相位、多普勒等觀測量信息。例如,GNSS Clock可以計算出信號接收時間,GNSS Measurement提供衛星信號發射時間,由這2個信息便可以計算得到偽距。下面對GNSS偽距、載波相位、多普勒等原始觀測量的計算方法做簡要介紹。
根據Android Location API,GNSS偽距的計算可以表示為
(1)
式中,tRx和tTx為在同一時間系統下的信號接收和發射時間,tTx可直接由GNSS Measurement類中的ReceivedSvTimeNanos成員獲得,為
tTx=ReceivedSvTimeNanos[ns]
(2)
對全球定位系統(Global Positioning System,GPS)、北斗衛星導航系統(BeiDou Navigation Satellite System,BDS)和GALILEO而言,ReceivedSv-TimeNanos為相應的周內秒時間(Time of Week,TOW);對GLONASS而言,其為相應的天內秒時間(Time of Day,TOD)。需要注意的是,若要獲得有效的信號發射時間,需要根據該類中成員State的相應值來判斷當前衛星信號的跟蹤狀態。其中,要求GPS和BDS滿足STATE_TOW_DECODED,GLONASS滿足STATE_GLO_TOD_DECODED,而GALILEO滿足STATE_TOW_DECODED和STATE_GAL_E1C_2ND_CODE_LOCK,具體可參看Android源碼中的定義。
GNSS系統時間可以通過Location API中的內部硬件時鐘以及硬件時鐘和GPS起始時間之間的偏差等信息計算。早期的Android版本對硬件層進行了封裝,在Android 7系統的GNSS Clock類中對硬件時鐘進行了開源,支持輸出自GPS初始至今的納秒數。根據硬件時鐘可以換算得到當前GPS時間,信號接收時刻的完整GPS時間tRxGPS可按式(3)計算得到
tRxGPS=TimeNanos-(FullBiasNanos(1)+
BiasNanos(1))[ns]
(3)
式中,TimeNanos為接收機內部時鐘(ns),BiasNanos為接收機時鐘納秒以內偏差(ns),FullBiasNanos為接收機內部時鐘與GPS起始時間之間的差異(ns)。將其換算到當前周內秒時間,則為:
tRx=tRxGPS-weekNumberNanos[ns]
(4)
式中,weekNumberNanos為自GPS時間起始時刻開始至當前周的總納秒數。這樣,在求得tRx和tTx后便可求得偽距值。需要注意的是,這里tRx表示相對于GPS的信號接收時間,而tTx給出的是各自系統下的信號發射時間。因此,對非GPS而言,需要將tTx與tRx轉換到一致的時間系統下,詳細的偽距計算與時間轉換可查閱文獻[1]。
在Android Location API中,載波相位的測量值是由變量AccumulatedDeltaRangeMeters以m為單位給出的,將其除以波長便可得到以cycle為單位的載波相位測量值CarrierPhaseCycles,具體為
AccumulatedDeltaRangeMeters=k*CarrierPhaseCycles
(5)
這里,k表示由信號中心頻率f確定的一個常量,即波長(k=c/f)。載波相位測量值的有效性是由AccumulatedDeltaRangeState一值給出的,以告訴用戶是否發生了周跳和相位重置等信息,相應的狀態有4種,分別是:ADR_STATE_UNKNOWN、ADR_STATE_VALID、ADR_STATE_RESET以及ADR_STATE_CYCLE_SLIP。
由衛星與接收機間的相對運動導致的多普勒頻移可以從PseudorangeRate-MetersPerSecond獲得,這個變量給出的是偽距率(m/s),當該變量為正值時,表示衛星正在遠離接收機。偽距率PseudorangRateMetersPerSecond和多普勒頻移DopplerShiftHz之間的關系可以由式(6)表示,據此可求得多普勒頻移觀測量
PseudorangRateMetersPerSecond=
-k*DopplerShiftHz
(6)
深入分析Android系統獲得的GNSS原始觀測數據質量,是基于智能終端實現高精度定位的基礎。針對此,使用Nexus-9 Pad(以下簡稱Nex9)采集了不同場景下的實驗數據,包括:空曠環境下的靜態實驗以及一般城市道路環境下的車載動態實驗。其中,靜態實驗數據采集于中國科學院光電研究院科研樓頂,周邊視野開闊,無明顯遮擋,測試時長約為250min。車載動態實驗數據采集于北京市海淀區城市道路,實驗路線為光電院-鄧莊南路-友誼路-北清路-G7高速-光電院,測試終端安裝于試驗車頂,測試時長約90min,其中試驗車輛在實驗開始前的35min內處于靜止狀態。
下面從信號載噪比C/N0值、偽距殘差特性以及載波相位測量性能3個方面對上述采集的GNSS原始數據基本特性進行分析。
圖1中給出了靜態實驗場景下Nex9的GPS衛星C/N0值的大小分布及其與高度角之間的關系。從圖1中可以看出,智能終端的衛星C/N0值絕大多數分布在25~40dB·Hz范圍內,少數歷元部分衛星的C/N0值低于25dB·Hz。同時,其C/N0值與衛星高度角之間的相關性并不明顯,在衛星高度角較低(<30°)時,其C/N0值仍然較高。另外,從圖1中還能看到,智能設備的C/N0值變化劇烈,許多衛星在部分時段即使其高度角在不斷升高,但其C/N0值卻急劇降低。智能終端的這種C/N0特性主要跟其采用小型化、低成本與線極化工作方式的接收天線密切相關,這給其后續信號捕獲和跟蹤環路的工作性能帶來了巨大挑戰,進而影響了偽距和載波相位的測量性能以及最終的定位性能。

(a)

(b)圖1 靜態場景下Nex9的GPS衛星C/N0值分布(a)及其與高度角的關系(b)Fig.1 Probability density distribution ofC/N0(a) andC/N0vs.elevation (b) for GPS satellites of Nex9 in static scenario
一般說來,衛星的高度角越低,其信號在大氣層中傳播的路徑就越長,所受到的電離層延遲效應和對流層延遲效應的影響也就越大,同時也越容易受到多路徑效應的影響,于是其測量值的誤差相應地也就越大。另外,對于一般的測量和導航用戶而言,其碼偽距測量誤差主要以由熱噪聲引起的碼相位測量噪聲為主。通常C/N0值越高,由熱噪聲引起的碼相位測量誤差就越小,偽距測量精度就越高;反之,C/N0值越低則偽距測量誤差就越大。為分析智能終端偽距測量性能,利用一臺高精度測量型接收機(天寶NetR9)采用超短基線(約15cm)方法對Nex9靜態觀測數據進行評估。由于高精度測量接收機和天線具有良好的多路徑抑制效果和較低的測量噪聲,因此,與其相關的殘余誤差可以忽略不計,單差殘差可認為主要是由于智能終端本身的測量性能造成的。
圖2中給出了靜態實驗場景中Nex9的GPS衛星偽距單差殘差與高度角之間的關系,以及G12衛星的偽距單差殘差隨衛星高度角的變化情況示例。從圖2中可以看到,偽距殘差與衛星高度角二者之間并無明顯相關性,甚至當衛星高度角較高時其偽距殘差依然較大,當衛星高度角處于70°~80°時的偽距殘差明顯較高度角為50°時的要大。以G12衛星為例可以看到,在3.5h左右的時段內其高度角為整個實驗時段內最高(35°~38°),但是對應的偽距殘差絕對值反而增大到30m以上;而在2.0h左右的時段內其衛星高度角最低(10°左右),但此時的偽距殘差基本上為10m以內。

(a)

(b)圖2 靜態實驗中Nex9的GPS偽距單差殘差隨衛星高度角的變化(a)以及G12衛星示例(b)Fig.2 Single-differenced pseudorange residuals of GPS satellitesagainst the elevation (a) and an example of G12 satellite (b) forNex9 in static scenario
圖3中給出了靜態實驗場景中Nex9的GPS衛星偽距單差殘差與C/N0值之間的關系,以及G12衛星的偽距單差殘差隨C/N0的變化情況示例。從圖3中可以直觀地看到,隨著C/N0值的升高,其對應的偽距殘差也整體上隨之減小,當C/N0值最大時對應的偽距殘差也整體上最小,表明此時偽距測量精度整體上最高;而當C/N0值較低時其偽距殘差也隨之較大,其較大的偽距殘差也更集中在當C/N0低于25dB·Hz的情形下。同樣,以G12衛星為例,其在3.5h左右的C/N0值降低至25dB·Hz以下時對應的偽距殘差絕對值增大到30m以上;而當C/N0值升高時,對應的偽距殘差也隨之減小,這很好地說明了偽距測量誤差與C/N0之間的強相關性。

(a)

(b)圖3 靜態實驗中Nex9的GPS偽距單差殘差隨C/N0的變化(a)以及G12衛星示例(b)Fig.3 Single-differenced pseudorange residuals of GPS satellitesagainst theC/N0(a) and an example of G12 satellite (b) forNex9 in static scenario
Android系統在給出載波相位觀測量AccumlatedDeltaRangeMeters的同時,給出其狀態標記AccumlatedDeltaRangeState以告訴用戶是否發生了周跳或相位重置等。另外,由于智能終端內置GNSS芯片的連續工作將會增加耗電量縮短續航時間,生產商在Android系統里普遍采用一種名叫Duty Cycle(稱為工作周期或者占空比)的技術來降低GNSS芯片功耗。Duty Cycle機制即為在一個時間周期(1s)內,對GNSS信號的跟蹤只開啟一小段時間,然后隨即關閉。Duty Cycle機制的存在直接影響GNSS芯片對載波相位測量的連續性,這將在很大程度上限制基于載波相位的RTK和PPP高精度定位的應用實現。關于Duty Cycle機制的更多介紹具體可參見文獻[1]。根據Google給出的相關信息可知,Nex9(非蜂窩版)這一款智能終端沒有開啟Duty Cycle控制機制,因此,其GNSS芯片可以向用戶提供連續的載波相位測量結果。
以GPS衛星為例,圖4中給出了車載動態實驗中Nex9各GPS觀測衛星的載波相位跟蹤狀態,具體包括Phase Valid和Cycle Slip兩種,其中,Phase Valid(連續有效)對應狀態值為ADR_STATE_VALID,Cycle Slip(發生周跳)對應狀態值為ADR_STATE_RESET 或ADR_STATE_CYCLE_SLIP。
表1中給出了車載動態實驗(純車載動態時段)中Nex9的GPS和GLONASS可觀測衛星的載波相位周跳比以及相應的平均周跳比的統計結果,其中,周跳比的定義是發生周跳的歷元個數與實際的觀測值歷元總數的比值。

圖4 車載場景(先靜后動)下Nex9各GPS觀測衛星的載波相位跟蹤狀態Fig.4 The carrier phase tracking states for visible GPSsatellites of Nex9 in kinematic scenario(static mode for the first 35min)

衛星周跳比/%衛星周跳比/%G0217.12R0333.15G0512.70R044.97G0624.58R1246.94G0729.43R1321.31G135.34R1831.67G153.38R1910.74G2124.83R204.00G295.61R2142.47G3020.42——平均15.93平均24.41
從圖4中可以看到,當處于動態實驗開始前的UTC 8:30-9:05靜態時段內,Nex9的GPS各衛星載波相位狀態除個別起始歷元外都標記為Valid/連續有效;然而,當從UTC 9:05開始進行動態跑車時,許多歷元各衛星的載波相位被標記為Cycle Slip/發生周跳,這是由于城市動態環境引起的環路跟蹤性能變差和其自身探測到發生周跳的緣故。從表1中給出的周跳比定量統計結果可以看到,城市車載動態環境下Nex9對GPS信號的跟蹤發生載波相位周跳的比例平均為15.9%,部分GPS衛星的周跳比可達20%~30%;而其對GLONASS信號的跟蹤發生載波相位周跳的比例平均為24.4%,部分GLONASS衛星的周跳比可達30%~50%,明顯要高于GPS衛星。從上述現象和結果可以看出,在城市動態場景下,受觀測環境和用戶運動等因素的影響,智能終端GNSS模塊對衛星信號的跟蹤容易發生失鎖,載波相位測量值存在較多的周跳,這給基于載波相位的高精度定位帶來了巨大挑戰。
從第2節對智能終端GNSS原始觀測量的數據質量和特性的分析中可以看到:1)載噪比C/N0通常都較低且波動劇烈,與衛星高度角之間的相關性很弱;2)原始偽距測量噪聲大、精度低、粗差多;3)載波相位觀測量周跳頻繁,這給利用智能終端GNSS數據進行高精度定位帶來了巨大挑戰。本文在深入分析智能終端原始GNSS數據特性的基礎上,融合多模GNSS觀測數據,將實時的精密衛星軌道和鐘差改正產品以及電離層改正產品應用于智能終端非差精密定位中[18-20],并設計了專門針對智能終端數據特性的數據處理與質量控制策略,以及自適應的運動學模型[21],自主研制了面向Android平臺的實時非差精密定位軟件—PPPAnd (PPP for Android),可在智能終端設備上實時實現GPS+GLONASS+BDS+GALILEO四系統融合的偽距單點定位以及精密單點定位。
PPPAnd軟件的設計架構如圖5所示,主要包括UI、數據獲取、數據解析以及定位解算四部分組成。UI部分主要是進行人機交互操作與定位結果的實時顯示。數據獲取部分的主要功能是獲取實時精密定位所需的原始觀測數據、RTCM格式的廣播星歷數據,以及誤差改正數據(即SSR產品)。其中,原始觀測數據使用標準Android Location API從內置GNSS芯片獲取,RTCM數據流則通過網絡按照NTRIP協議由Client從Caster服務器上獲取。數據解析部分的主要功能是將從Android系統獲取的原始觀測信息數據進行解析得到偽距、載波相位、多普勒、載噪比等定位解算所需觀測量,同時,對RTCM電文進行解碼獲得廣播星歷參數以及實時精密衛星軌道和鐘差改正數與電離層參數信息。定位解算部分的功能是實現非差精密定位解算獲得用戶坐標等。

圖5 Android實時非差精密定位軟件(PPPAnd)設計框架Fig.5 Design scheme of the real-time un-differencedprecise positioning software for Android (PPPAnd)
為測試和驗證智能終端實時非差精密定位性能,分別進行了多種場景下的實際定位實驗,所需的RTCM實時數據流從中國科學院光電研究院的Caster服務器上獲取。其中,廣播星歷使用RTCM3EPH-MGEX數據流,實時精密衛星產品與電離層產品分別為中國科學院自主計算的CAS01和CAS10產品;測試終端為Nex9,測試時將其放置于測量型天線旁邊(車載測試時設備安裝于車頂),并使二者盡可能處于同一水平面上,測試場景如圖6所示。實時定位時使用的衛星系統為GPS和GLONASS雙系統,參考坐標由測量型接收機(NovAtel PP6)數據做事后RTK解算得到,精度統計時忽略測試機與測量型天線二者之間的水平位置偏差(~10cm)。

(a)

(b)圖6 靜態(a)和車載動態(b)測試場景示意圖Fig.6 Test scenarios for the static and kinematic experiments
圖7中給出了實時偽距單點定位結果在水平(H)和垂直(V)方向上的時間誤差序列及統計結果,包括均方根值(Root-Mean-Square, RMS)、68%概率值(CEP68,1σ)和95%概率值(CEP95,2σ)??梢钥吹?,絕大多數歷元的平面定位誤差都在0~2m范圍內波動,高程方向上的定位誤差絕對值在0~3m范圍內,相應的誤差RMS分別為水平方向1.16m和垂直方向1.51m。從概率分布上看,水平和垂直方向上的1σ精度(CEP68)分別可達到1.22m和1.73m,2σ精度(CEP95)分別為1.72m和2.56m。

圖7 實時偽距單點定位誤差序列Fig.7 Time series of the positioning errors ofreal-time single point positioning in static scenario
圖8中給出了實時PPP靜態定位結果在水平(H)和垂直(V)方向上的時間誤差序列及其誤差統計結果(RMS、CEP68和CEP95)??梢钥吹?,經過約500s(8min)的收斂時間后,水平和垂直方向上的定位誤差將穩定地收斂至1m以內,甚至0.5m左右,并且隨著觀測時間的累積,定位誤差亦能收斂至0.2m左右。對整個測試時段內的全部定位解而言,誤差RMS分別為水平方向0.62m和垂直方向0.66m。從概率分布上看,水平和垂直方向上的1σ精度(CEP68)分別可達到0.42m和0.44m,2σ精度(CEP95)分別為1.55m和1.27m。

圖8 實時靜態PPP定位誤差序列Fig.8 Time series of the positioning errors of real-time precise point positioning in static scenario
圖9中給出了在城市道路環境下的實時PPP動態定位結果在水平(H)和垂直(V)方向上的時間誤差序列及其誤差統計結果(RMS、CEP68和CEP95)。其中,用于比對的參考坐標由NovAtel接收機觀測數據做事后RTK解算得到,圖中缺失的部分時段歷元是因為NovAtel接收機數據缺失的緣故。可以看到,絕大多數歷元的平面定位誤差都在0~2.5m范圍內波動,高程方向上的定位誤差絕對值在0~1.5m范圍內波動。對整個測試時段內的全部定位解而言,相應的誤差RMS分別為水平方向1.32m和垂直方向0.81m。從概率分布上看,水平和垂直方向上的1σ精度(CEP68)分別可達到1.54m和0.93m,2σ精度(CEP95)分別為2.19m和1.28m。對比靜態PPP結果可知,實時動態定位結果明顯較差,這主要是因為智能終端GNSS環路對導航信號的跟蹤和測量的性能受城市復雜觀測環境和動態的影響而變差的緣故。另外從結果中可以看到,該組動態實驗的垂直精度優于水平精度,這主要是因為車輛行進過程中高程方向上的運動變化平緩,對其使用運動學模型進行約束的效果較水平方向上的約束效果要好。

圖9 實時車載動態PPP定位誤差序列Fig.9 Time series of the positioning errors of real-time precise point positioning in kinematic scenario
表2匯總給出了3組定位實驗中基于原始數據的解算結果與Android終端PVT Location結果的水平和垂直精度統計對比情況。對于實驗一而言,測試終端的PVT結果的水平和垂直方向誤差RMS統計結果分別為3.88m和6.21m,而基于原始數據解算的靜態SPP解的相應統計精度為1.16m和1.51m,較前者改善程度分別為70.1%和75.7%。對于實驗二而言,測試終端的PVT結果在水平和垂直方向上的RMS精度分別為5.14m和3.61m,而基于原始數據解算的靜態PPP解算精度可達亞米級水平,分別為0.62m和0.66m,較PVT結果分別提高了87.9%和81.7%。在實驗三即車載動態實驗中,測試終端的PVT結果在水平和垂直方向上的RMS精度分別為2.18m和2.33m,而基于原始數據解算的動態PPP解算精度為1.32m和0.81m,較前者分別提高了39.4%和65.2%。

表2 三組實驗中基于原始數據的解算結果與Android終端PVT結果的精度統計對比
本文通過采用Android系統最新開放的GNSS原始測量數據進行實時非差高精度定位,以期達到改善智能終端定位精度的目的。利用實測數據從信號載噪比特性、偽距殘差特性以及載波相位測量性能這3個方面對智能終端GNSS原始數據的基本特性進行了分析。在此基礎上,基于智能終端原始GNSS數據實現了實時非差精密定位,并研制了面向Android系統的實時非差精密定位軟件PPPAnd,開展了多種條件下的實際定位測試。結果表明:1)Android終端PVT結果的平面定位精度(RMS)約為3~5m;2)基于Android終端GNSS原始數據的靜態SPP定位水平精度可達1.2m左右,較PVT結果提高了70%,靜態PPP定位水平精度可達亞米級,較PVT結果提高了88%;3)靜態PPP經過約8min的收斂,其定位誤差將穩定地收斂至1m以內,并且隨著觀測時間的累積定位誤差亦能收斂至0.2m左右;4)動態PPP定位結果的水平精度約為1.3m,較PVT結果提高了39%,改善效果不及靜態場景明顯;5)基于Android終端原始測量數據的實時非差定位結果在高程方向上的定位改善效果最為明顯,較PVT結果平均提高了約74%。