邢偉坡 于臻 徐斌 王玉林
摘? 要:近年來,Android高精度定位技術(shù)迅速發(fā)展,相繼提供了訪問GNSS原始數(shù)據(jù)的API和Wifi往返時(shí)延定位技術(shù)RTT,定位精度可達(dá)到1米級。本文系統(tǒng)介紹了Android平臺 RTT技術(shù)和基于GNSS原始觀測量的定位技術(shù),為基于Android平臺的航海導(dǎo)航應(yīng)用開發(fā)提供借鑒。
關(guān)鍵詞:Android,GNSS,RTT
0 引 言
Android智能終端定位服務(wù)動(dòng)態(tài)定位精度通常在10 m左右。2016年,谷歌在“I/O大會”上,宣布Android操作系統(tǒng)自7.0版本開始,開放GNSS 原始觀測量的訪問接口,開發(fā)者可以通過這些接口訪問GNSS原始觀測量。谷歌這一舉措意義重大,開發(fā)者可以使用偽距、多普勒頻率及載波相位等原始觀測數(shù)據(jù)實(shí)現(xiàn)RTK、PPP高精度定位,從而拓展高精度GNSS 的實(shí)現(xiàn)空間和應(yīng)用領(lǐng)域。2018年,谷歌在Android P引入了Wifi RTT定位技術(shù),能夠在室內(nèi)提供高精度定位。雖然智能終端在定位精度方面永遠(yuǎn)不會超越高端的大地測量儀器,但由于智能終端應(yīng)用的普遍性,這可能會促進(jìn)以前無法想象的新應(yīng)用程序的出現(xiàn)。
1 Wifi往返時(shí)延定位技術(shù)[1]
1.1? ?原理
Wifi往返時(shí)延定位技術(shù)(Wifi RTT)是基于WiFi射頻信號傳播時(shí)間實(shí)現(xiàn)定位的技術(shù)。2018年,谷歌基于IEEE 802.11mc測距協(xié)議在Android 9.0加入了RTT定位技術(shù)。RTT主要用于Android智能終端的室內(nèi)定位,定位精度可達(dá)1~2 m。Wifi RTT定位原理如下:
首先,智能終端掃描標(biāo)準(zhǔn)的Wifi信號,發(fā)現(xiàn)附近的Wifi接入點(diǎn),并根據(jù)Wifi信標(biāo)幀和探測幀特定比特位確定Wifi接入點(diǎn)是否支持RTT,以選擇其中的某些Wifi接入點(diǎn)實(shí)現(xiàn)測距。測距時(shí),智能終端向接入點(diǎn)發(fā)送請求,接入點(diǎn)在響應(yīng)時(shí)啟動(dòng)一個(gè)Ping-Pong協(xié)議。發(fā)送至智能終端的ping稱為精確時(shí)間測量數(shù)據(jù)包,返回Wifi接入點(diǎn)的pong是認(rèn)可上述數(shù)據(jù)包數(shù)據(jù)。智能終端和接入點(diǎn)都記錄信號的離開和到達(dá)時(shí)間,但智能終端要計(jì)算總體的往返時(shí)間需要所有的4個(gè)時(shí)間數(shù)據(jù)。因此,Wifi接入點(diǎn)再次向智能終端發(fā)送一個(gè)數(shù)據(jù)包,這個(gè)數(shù)據(jù)包包含了Wifi接入點(diǎn)記錄的時(shí)間信息。智能終端根據(jù)4個(gè)時(shí)間數(shù)據(jù)計(jì)算出信號的往返時(shí)間,再乘以光速就可求得距離。執(zhí)行上述測距過程次數(shù)越多,測距的精度越高。一般情況下,需要8次,這樣系統(tǒng)可計(jì)算距離平均值和誤差。在獲得距離數(shù)據(jù)后,就可以利用類似于GPS單點(diǎn)定位的方法,根據(jù)3個(gè)以上獨(dú)立的接入點(diǎn)的距離數(shù)據(jù)采用最小二乘法計(jì)算得到智能終端的位置。
目前,Wifi RTT技術(shù)存在一些問題。測量得到的距離會有固定的誤差,有時(shí)能達(dá)半米;還會存在多路徑效應(yīng),使測量的距離變長。這些問題可采用天線分集技術(shù)解決。
Wifi RTT定位需要Wifi接入點(diǎn)支持IEEE 802.11mc協(xié)議。2018年底Google Wifi開始默認(rèn)支持RTT定位。韓國也開始了支持RTT Wifi的大規(guī)模建設(shè)。
1.2? RTT定位實(shí)現(xiàn)
WifiRttManager類提供了實(shí)現(xiàn)RTT定位的主要API。實(shí)現(xiàn)RTT定位時(shí),首先判斷智能終端是否支持Wifi RTT定位,應(yīng)利用getPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)方法判斷;再利用WifiManager.startScan方法掃描周圍的Wifi接入點(diǎn);然后將掃描結(jié)果添加到RangingRequest.Builder構(gòu)建RangingRequest實(shí)例。此時(shí)就可調(diào)用WifiRttManager.startRanging方法進(jìn)行測距,RangingResultCallback參數(shù)返回測距結(jié)果,如圖1所示。
2 GPS原始觀測量[1-2]
谷歌自Android操作系統(tǒng)自7.0版本開始開放了訪問GNSS原始數(shù)據(jù)的API。GNSS原始觀測量可通過GnssClock和GnssMeasurement類來獲取,共28種,詳見表1。
在使用智能終端獲取載波相位數(shù)據(jù)時(shí),需將周期性定位(cycle duty)模式關(guān)閉。當(dāng)利用智能終端導(dǎo)航時(shí),位置點(diǎn)會連續(xù)移動(dòng),用戶會認(rèn)為GPS在連續(xù)工作。實(shí)際上為了節(jié)省電量,在一秒鐘時(shí)間內(nèi)GPS打開幾分之一秒,然后其他時(shí)間關(guān)閉,如此循環(huán)。GPS采用周期性定位的工作方式。在利用智能終端進(jìn)行載波相位測量時(shí),要連續(xù)、不間斷地跟蹤載波相位信號,需將周期性定位模式關(guān)閉。自Android 9.0開始為開發(fā)者提供了有關(guān)API,由開發(fā)者選擇是否關(guān)閉周期性定位。
2.1 GPS原始觀測數(shù)據(jù)獲取
要獲取GNSS原始測量數(shù)據(jù),需調(diào)用LocationManager的registerGnssMeasurementsCallback方法注冊類型為GnssMeasurementsEvent.Callback的GPS測量回調(diào)函數(shù)。開發(fā)者需重寫onGnssMeasurementsReceived方法,獲取GNSS原始觀測數(shù)據(jù)。
2.2? 偽距計(jì)算
偽距是GPS定位中最重要的基本參數(shù)之一。為了縮短首次定位時(shí)間,智能終端在TOW(GPS周時(shí))未解碼前大量使用GNSS測量值,這些測量值在傳統(tǒng)GNSS定位中認(rèn)為是無效的。因此,智能終端并未顯式提供偽距值,需根據(jù)偽距定義計(jì)算。
偽距ρ=c×(tAu-tTs)
上式中c表示光速,tAu表示用戶接收機(jī)測量的導(dǎo)航信號到達(dá)時(shí)間;tTs表示未改正的衛(wèi)星信號發(fā)射時(shí)間。
衛(wèi)星信號發(fā)射時(shí)間tTs可通過GnssMeasurement.getReceivedSvTimeNanos方法獲得,該值是相對于當(dāng)前GPS周的周時(shí)。
GNSS接收機(jī)測量的衛(wèi)星信號到達(dá)時(shí)間tAu計(jì)算方法如下:
tAu=tmesurement-(tfullbias+tbias)-tweeknumbernanos
上式中tAu表示衛(wèi)星信號到達(dá)GNSS接收機(jī)的GPS周時(shí);tmesurement是GNSS接收機(jī)測量時(shí)刻,tmesurement=TimeOffsetNanos+TimeNanos;tfullbias是接收機(jī)時(shí)鐘相對于GPS時(shí)間整納秒偏差,值為FullBiasNanos;tbias接收機(jī)時(shí)鐘相對于GPS時(shí)間的亞納秒偏差,值為BiasNanos;tmesurement-(tfullbias+tbias)是測量時(shí)刻的GPS時(shí)間,起算點(diǎn)為1980年1月6日UTC 0時(shí);tweeknumbernanos表示當(dāng)前GPS周起算點(diǎn),值為604 800×109×floor(FullBiasNanos×10-9/604 800)。
2.3? 基于原始觀測數(shù)據(jù)的高精度定位
開發(fā)者可利用Android移動(dòng)終端輸出的GNSS原始觀測數(shù)據(jù)實(shí)現(xiàn)精密單點(diǎn)定位(PPP)、偽距差分、實(shí)時(shí)動(dòng)態(tài)載波相位差分測量(RTK)等高精度定位。法國航天局基于Android智能終端開發(fā)了具有精密單點(diǎn)定位功能的App,定位精度達(dá)到了分米級;《基于Android智能移動(dòng)終端的高精度差分軟件設(shè)計(jì)》[3]在Android智能移動(dòng)終端開發(fā)了高精度動(dòng)態(tài)定位軟件,軟件基于原始測量值,利用RTK參考基站的差分信息實(shí)現(xiàn)了RTK定位,定位精度在2 m以內(nèi)。
3 結(jié)論
本文總結(jié)了近年來Android系統(tǒng)RTT、GPS高精度定位技術(shù)原理及實(shí)現(xiàn)。目前,Android定位服務(wù)無論是室內(nèi)還是在室外,定位精度均可達(dá)到1m級,較之前定位精度有了大幅提高,將在智能交通、社交網(wǎng)絡(luò)、虛擬網(wǎng)絡(luò)等領(lǐng)域得到廣泛應(yīng)用。
參考文獻(xiàn)
[1] how to achive 1-meter accuracy in android. Frank Van Diggelen. GPS World,2018.
[2] Precise Positioning Using Raw GPS Measurements from Android Smartphones. Simon Banville.GPS Word,2016.
[3] 基于Android智能移動(dòng)終端的高精度差分軟件設(shè)計(jì).楊春媚等.電腦知識與技術(shù),2018,Vol(14):100-103.
作者簡介:
邢偉坡,碩士研究生,從事海洋測繪研究,18920280537