趣味GPS
作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請(qǐng)保留這段聲明。謝謝!
?
簡(jiǎn)介
GPS的全稱(chēng)是全球定位系統(tǒng)(the Global Positioning System)。它屬于美國(guó)政府,并由洛杉磯的聯(lián)合項(xiàng)目辦公室(JPO, Joint Program Office)管理。
1957年,蘇聯(lián)發(fā)射第一顆人造衛(wèi)星。為了確定衛(wèi)星的位置,多個(gè)地面基站同時(shí)觀測(cè)衛(wèi)星發(fā)出的電波,并據(jù)此計(jì)算從基站到衛(wèi)星的距離。這個(gè)想法很快被美國(guó)人發(fā)展下去: 既然多個(gè)地面基站可以確定空中的衛(wèi)星位置,那么空中的多個(gè)基站也就可以確定地面上的位置了。GPS衛(wèi)星組成的網(wǎng)絡(luò)就構(gòu)成這樣的一個(gè)空中基站網(wǎng)絡(luò)。地面上的使用者只需要接收來(lái)自多個(gè)GPS衛(wèi)星的信號(hào),就可以計(jì)算出自己所在的位置。第一顆GPS衛(wèi)星發(fā)射于1978年2月22日,最早的GPS系統(tǒng)只進(jìn)行二維定位,但很快,GPS系統(tǒng)允許包括高度在內(nèi)的三維定位。
?
?出埃及記,上帝是GPS?
GPS產(chǎn)生的初期主要是由美國(guó)國(guó)防部贊助。顯而易見(jiàn),這樣一個(gè)全天候,不受天氣干擾的全球定位系統(tǒng),有著極為重要的軍事意義。GPS系統(tǒng)第一次大顯身手也是在海灣戰(zhàn)爭(zhēng)。當(dāng)時(shí)的GPS系統(tǒng)還沒(méi)有完成,所以美國(guó)空軍調(diào)整了GPS衛(wèi)星的軌道,以便更好的服務(wù)于海灣地區(qū)。有一些部隊(duì),比如坦克部隊(duì),并沒(méi)有使用過(guò)GPS接收器,甚至于用膠布把GPS接收器固定在車(chē)內(nèi)。即使如此,GPS系統(tǒng)還是發(fā)揮了它重要的導(dǎo)航功能,特別在難以識(shí)別地貌特征的沙漠地區(qū)。可以說(shuō),GPS系統(tǒng)重塑了現(xiàn)代戰(zhàn)爭(zhēng)的形式。
1983年的韓國(guó)空難,促使里根總統(tǒng)決定將GPS系統(tǒng)開(kāi)放給民用。但很快,五角大樓意識(shí)到,通過(guò)一些GPS接收技術(shù),民用碼和軍用碼可以產(chǎn)生幾乎相同的定位精度。出于軍事考慮,民用碼中被刻意引入誤差(selective availability)。1996年,克林頓總統(tǒng)簽署法令,停止對(duì)民用碼的干擾。GPS設(shè)備和技術(shù)開(kāi)始在民用領(lǐng)域蓬勃發(fā)展,并帶動(dòng)了技術(shù)本身的快速進(jìn)步。
GPS系統(tǒng)已經(jīng)滲入到我們的生活。在IT領(lǐng)域,移動(dòng)端革命與GPS系統(tǒng)正在緊密融合。從IPhone 3G開(kāi)始,IPhone中開(kāi)始內(nèi)置GPS接收器。GPS接收系統(tǒng)成為智能手機(jī)、平板電腦甚至筆記本的電腦的必然配置。GPS定位與軟件融合,構(gòu)成了一個(gè)完美而廉價(jià)的導(dǎo)航和定位系統(tǒng)。以地理定位為基礎(chǔ)的移動(dòng)應(yīng)用,比如Google Map,Foursquare,Waze,都產(chǎn)生了巨大的成功。而以地理定位系統(tǒng)為基礎(chǔ)的真人游戲,更是沖擊著人們的想象力。
Foursquare
?
Ingress,基于GPS的游戲 地址http://v.youku.com/v_show/id_XNDc1NjUxNTI0.html
?
?
基本原理
如果在平面上,已知兩個(gè)點(diǎn)的坐標(biāo)位置[$(x_1, y_1),(x_2, y_2)$],并且知道這兩個(gè)點(diǎn)到某個(gè)未知的距離[$r_1, r_2$],那么可以確定未知點(diǎn)的坐標(biāo)位置。未知點(diǎn)的坐標(biāo)為[$(x,y)$],我們實(shí)際上有兩個(gè)方程,來(lái)解出[$x, y$]兩個(gè)未知數(shù)。
$$(x - x_1)^2 + (y - y_1)^2 = r_1^2$$
$$(x - x_2)^2 + (y - y_2)^2 = r_2^2$$
從幾何上來(lái)說(shuō),我們可以從已知點(diǎn)畫(huà)兩個(gè)半徑分別為[$r_1,r_2$]的圓,它們的交點(diǎn)就是未知點(diǎn)的位置。
(這樣的點(diǎn)實(shí)際上有兩個(gè),但在GPS情況下,未知點(diǎn)在衛(wèi)星的下方,所以很容易選擇正確的解。)
兩圓相交
如果在三維空間,已知三個(gè)點(diǎn)的坐標(biāo)位置,并且知道這三個(gè)點(diǎn)到未知點(diǎn)的距離[$r_1, r_2, r_3$],那么就可以有三個(gè)方程,用來(lái)解三個(gè)未知數(shù)[$(x, y, z)$],這樣我們就可以確定未知點(diǎn)的左邊位置。
從幾何上來(lái)說(shuō),我們可以從已知點(diǎn)畫(huà)三個(gè)半徑為[$r_1, r_2, r_3$]的球,這三個(gè)球的交點(diǎn)即未知點(diǎn)的位置。
?
三球相交
?
對(duì)于GPS來(lái)說(shuō),衛(wèi)星的坐標(biāo)位置是已知的。衛(wèi)星在某個(gè)時(shí)間t向地面廣播信號(hào)。接收器在T時(shí)間接收到信號(hào)。電磁波信號(hào)在空間中的傳播速度近似于真空中的光速c。因此,[$c(T - t)$]就獲得了從衛(wèi)星到接收器的距離。
在GPS衛(wèi)星中,安裝有準(zhǔn)確而昂貴的原子鐘,所以可以比較準(zhǔn)確的或者t。而GPS接收器使用的通常是廉價(jià)的石英鐘,這大大減少了接收設(shè)備的成本,但也因此造成T誤差較大。由于無(wú)法準(zhǔn)確的獲知T,所以通常將T當(dāng)做一個(gè)未知項(xiàng)。這樣,在GPS應(yīng)用中,要求至少四個(gè)已知點(diǎn),即接收四顆衛(wèi)星的信號(hào),得到四個(gè)方程,解出四個(gè)未知數(shù)[$(x, y, z, T)$]。
?
如果一個(gè)衛(wèi)星可以接收到更多顆衛(wèi)星信號(hào),就可以解出更多的相對(duì)較小的誤差項(xiàng),因此獲得更好的定位精度。通常使用最小方差(Least Square)或者卡曼濾波(Karman Filter)的方法,來(lái)獲得最終解。
?
衛(wèi)星網(wǎng)絡(luò)
GPS的衛(wèi)星網(wǎng)絡(luò)最初設(shè)計(jì)為24顆衛(wèi)星。這24顆衛(wèi)星分布在6個(gè)軌道上,每個(gè)軌道上有4顆衛(wèi)星。全球的任意一點(diǎn)都可以在任意時(shí)刻接收到至少4顆衛(wèi)星的信號(hào)。 現(xiàn)在的GPS衛(wèi)星網(wǎng)絡(luò)超過(guò)了24顆衛(wèi)星,因此有的軌道上是5顆衛(wèi)星。
?地球上一點(diǎn)可觀測(cè)到的衛(wèi)星數(shù)
根據(jù)開(kāi)普勒定律,衛(wèi)星的軌道都是一個(gè)橢圓形。GPS軌道的偏心率僅為0.01,所以可以近似為一個(gè)圓形(圓形的偏心率為0)。軌道的半長(zhǎng)軸大約為26560公里,大約為4個(gè)地球半徑(地球半徑約為6371公里)。下圖顯示了GPS軌道與地球半徑的比例:
GPS衛(wèi)星的軌道周期大約為11小時(shí)58分鐘。GPS衛(wèi)星的周期是特意選擇的,以便吻合地球自轉(zhuǎn)和公轉(zhuǎn)周期,從而讓同一衛(wèi)星在每一天的同一時(shí)間出現(xiàn)在天空的同一位置。我們可以用地表路徑的方式,來(lái)表示衛(wèi)星的位置。取衛(wèi)星和地心的連線,該連線與地表的交點(diǎn)可以繪制在下面的地圖中:
?
GPS衛(wèi)星的地面投影圖
每個(gè)衛(wèi)星的軌道平面傾角都是55度,即衛(wèi)星軌道平面與赤道面的夾角為55度。在北極的接收者看來(lái),一顆衛(wèi)星最多也只能上升到距離天頂35度的距離。因此,在高緯度地區(qū),GPS的精度要差于赤道附近。下圖顯示了軌道側(cè)面與赤道的角度:
共計(jì)有6個(gè)軌道平面,所以每個(gè)軌道平面轉(zhuǎn)過(guò)了60度(360/6)。
?
GPS信號(hào)
GPS衛(wèi)星像廣播一樣,不斷向外發(fā)送信號(hào)。GPS接收器是一個(gè)被動(dòng)的接收裝置,用于接收GPS衛(wèi)星發(fā)出的信號(hào),并反演接收器所在位置。GPS信號(hào)的基礎(chǔ)是簡(jiǎn)諧的載波(carrier wave)。衛(wèi)星播放兩個(gè)頻率的信號(hào): L1載波,1575.42MHz,波長(zhǎng)19厘米; L2載波,1227.60MHz,波長(zhǎng)24.4厘米。同時(shí)擁有兩個(gè)波段的信號(hào),可以抵消掉一個(gè)重要的誤差,即電離層造成的延遲。由于電離層造成的延遲與頻率相關(guān),因此可以通過(guò)兩個(gè)不同頻率波的差異,來(lái)反映出電離層的狀況。
(新一代的GPS衛(wèi)星將帶有第三個(gè)波段L5)?
載波與碼
?
在載波上,可以加載-1和1的二值碼(binary code)。在接收到信號(hào)時(shí),可以利用信號(hào)處理技術(shù),將載波和碼分開(kāi)。這些碼是偽隨機(jī)性質(zhì)的,并在一定位數(shù)后重復(fù)自己。在接收到衛(wèi)星發(fā)出的碼時(shí),接收器本身也使用自己的時(shí)鐘產(chǎn)生相應(yīng)的碼。通過(guò)比較兩個(gè)序列,可以知道衛(wèi)星信號(hào)延遲的位數(shù),從而計(jì)算衛(wèi)星與接收器的距離。
一種碼是C/A碼(coarse aquisition),只存在于L1波段(但新一代的GPS衛(wèi)星將在兩個(gè)波段同時(shí)加載C/A碼)。C/A碼的信號(hào)速率為1.023Mbps。也就是說(shuō),每一位持續(xù)約1ms。另一個(gè)碼是P碼,信號(hào)速率為10.23Mbps,同時(shí)存在于L1和L2波段。后來(lái)P碼被加密為專(zhuān)用的Y碼(Anti-Spoofing)。C/A碼可以被任意用戶(hù)使用,也比較容易處理,但精度相對(duì)較差。P(Y)碼必須經(jīng)過(guò)特別的許可才能使用。在沒(méi)有干擾的情況下,C/A碼和P碼的精度差距并不大。
此外,在L1和L2波段上,還加載有GPS的航行信息(navigation message),它也是二值碼,用于說(shuō)明GPS衛(wèi)星的位置。
?
除了使用加載的C/A碼或者P碼定位之外,還可以使用載波的相位(phase)定位。相位可以理解為間歇運(yùn)動(dòng)經(jīng)歷的周期數(shù)。簡(jiǎn)諧波在到達(dá)接收器之前經(jīng)歷了x個(gè)周期,x是一個(gè)實(shí)數(shù)。通過(guò)測(cè)量x,再乘以波長(zhǎng),就可以更加精確的獲得從衛(wèi)星到接收器的距離。然而,載波相位的處理比較復(fù)雜。相位本身會(huì)隨著周期重復(fù)。也就是說(shuō),我們只能測(cè)量x的小數(shù)位。相同測(cè)量值,可能相差整數(shù)個(gè)波長(zhǎng)。為了確定x的整數(shù)位,相位定位需要更加復(fù)雜的技術(shù)手段,因此它主要用于高精度的定位。
?
GPS的發(fā)展
GPS有其它定位技術(shù)無(wú)可比擬的優(yōu)勢(shì),但也有自身的弱點(diǎn)。由于需要接收衛(wèi)星發(fā)射的信號(hào),所以GPS技術(shù)很難用于隧道或者室內(nèi)作業(yè)。此外,GPS的計(jì)算相對(duì)比較復(fù)雜,有時(shí)會(huì)難以應(yīng)對(duì)有實(shí)時(shí)需求的情境。因此,GPS技術(shù)也經(jīng)常與其它定位技術(shù)相結(jié)合,以提供覆蓋面更廣,更精確,也更快速的定位。
一個(gè)例子是汽車(chē)駕駛導(dǎo)航。汽車(chē)導(dǎo)航系統(tǒng)可以由兩套獨(dú)立系統(tǒng)構(gòu)成。一套是GPS系統(tǒng),它依賴(lài)于GPS信號(hào),無(wú)法在一些特定地形下導(dǎo)航(比如隧道)。一套是由里程表和陀螺儀構(gòu)成的傳統(tǒng)導(dǎo)航系統(tǒng),里程表負(fù)責(zé)記錄距離,陀螺儀負(fù)責(zé)記錄方向。然而這兩個(gè)裝置都可能在長(zhǎng)時(shí)間的運(yùn)作下積累誤差。這兩者融合,可以在有GPS信號(hào)時(shí),用GPS導(dǎo)航,并對(duì)里程表和陀螺儀進(jìn)行校準(zhǔn);在沒(méi)有GPS信號(hào)時(shí),使用傳統(tǒng)導(dǎo)航系統(tǒng)。這樣的混合導(dǎo)航系統(tǒng),將有能力滿足未來(lái)自動(dòng)駕駛的需求。再一個(gè)例子是將GPS技術(shù)和激光定位結(jié)合,避免城市的高樓大廈對(duì)GPS信號(hào)的遮掩。這對(duì)城市建筑作業(yè)有重要的意義。
自動(dòng)駕駛
IPhone的GPS系統(tǒng)則融合了蜂窩網(wǎng)絡(luò)和WiFi。蜂窩基站和一些Wifi擁有自己準(zhǔn)確的位置信息,可以通過(guò)探測(cè)IPhone信號(hào)的方向,可以粗略的獲得IPhone在網(wǎng)絡(luò)中的方位。這也是你在IPhone定位一開(kāi)始,看到的大圓圈的原因。蜂窩網(wǎng)絡(luò)的基站安裝有時(shí)間同步系統(tǒng),可以減少接收時(shí)間T包含的誤差。在這些信息的幫助下,IPhone可以更加快速,精準(zhǔn)的進(jìn)行GPS定位,圓圈迅速縮小,形成準(zhǔn)確的位置。
?
?除了導(dǎo)航和定位功能外,GPS系統(tǒng)還可以基于多普勒原理,通過(guò)測(cè)量電波的頻率變化,來(lái)測(cè)量GPS接收器的運(yùn)動(dòng)速度。
GPS信號(hào)在穿越大氣層的時(shí)候,會(huì)受到電離層和對(duì)流層的影響。利用廣泛覆蓋的GPS網(wǎng)絡(luò),來(lái)觀測(cè)電離層和對(duì)流層的大氣狀況,也是氣候變化和日地環(huán)境的一個(gè)全新研究方法。美國(guó)、歐洲和日本的研究和應(yīng)用處于領(lǐng)先地位。
Ionosphere: 電離層; Troposphere: 對(duì)流層
?
由于GPS技術(shù)的巨大潛力,各國(guó)也在爭(zhēng)相發(fā)展自己的定位系統(tǒng),比如俄國(guó)的GLONASS已經(jīng)形成了全球定位的衛(wèi)星網(wǎng)絡(luò),再比如中國(guó)的北斗系統(tǒng),利用靜地衛(wèi)星提供區(qū)域定位。
幾十年的時(shí)間,GPS技術(shù)從萌發(fā)到滲入到生活的各個(gè)角落,可以說(shuō)是技術(shù)發(fā)展史上的一個(gè)奇跡 (1978年才發(fā)射了第一顆GPS衛(wèi)星,GPS技術(shù)比計(jì)算機(jī)都要新)。可以相信,GPS技術(shù)會(huì)繼續(xù)影響我們的生活。
我將在博客中繼續(xù)關(guān)注和深入介紹GPS技術(shù),歡迎交流!
?
附錄,部分代碼
GPS軌道半徑示意圖:
# By Vameiimport numpy as np import matplotlib.pyplot as pltr1 = 26.56 # GPS radius r2 = 6.371 # Earth radius theta = np.linspace(0, 360, 361) / 180. * np.pi # angles of plotting points# Polar coordinate to Cartesian coordinate x1 = r1*np.cos(theta) y1 = r1*np.sin(theta)x2 = r2*np.cos(theta) y2 = r2*np.sin(theta)fig = plt.figure() ax = plt.subplot(111) ax.set_aspect("equal")plt.plot(x1, y1, color="red", label="GPS") plt.plot(x2, y2, color="blue", label="Earth")plt.title("Earth and GPS orbit, unit: 1000 km")plt.legend()plt.show()
?
GPS軌道傾角示意圖:
# By Vameiimport numpy as np import matplotlib.pyplot as pltr1 = 26.56 # GPS radius r2 = 6.371 # Earth radius theta = np.linspace(0, 360, 361) / 180. * np.pi # angles of plotting points# Polar coordinate to Cartesian coordinate end_x = r1*np.cos(55./180.*np.pi) end_y = r1*np.sin(55./180.*np.pi) x1 = [end_x, -end_x] y1 = [end_y, -end_y]x2 = r2*np.cos(theta) y2 = r2*np.sin(theta)fig = plt.figure() ax = plt.subplot(111) ax.set_aspect("equal")plt.plot([]) plt.plot(x1, y1, color="red", label="GPS profile") plt.plot(x2, y2, color="blue", label="Earth") plt.plot([-r2, r2], [0, 0], color="green", label="equator")plt.title("Earth and GPS orbit, unit: 1000 km")plt.legend()plt.show()
?
轉(zhuǎn)載于:https://www.cnblogs.com/vamei/p/3191053.html
總結(jié)
- 上一篇: Unity的Lerp函数实现缓动
- 下一篇: JS学习笔记6-JavaScript 数