趣味GPS
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
简介
GPS的全称是全球定位系统(the Global Positioning System)。它属于美国政府,并由洛杉矶的联合项目办公室(JPO, Joint Program Office)管理。
1957年,苏联发射第一颗人造卫星。为了确定卫星的位置,多个地面基站同时观测卫星发出的电波,并据此计算从基站到卫星的距离。这个想法很快被美国人发展下去: 既然多个地面基站可以确定空中的卫星位置,那么空中的多个基站也就可以确定地面上的位置了。GPS卫星组成的网络就构成这样的一个空中基站网络。地面上的使用者只需要接收来自多个GPS卫星的信号,就可以计算出自己所在的位置。第一颗GPS卫星发射于1978年2月22日,最早的GPS系统只进行二维定位,但很快,GPS系统允许包括高度在内的三维定位。
出埃及记,上帝是GPS?
GPS产生的初期主要是由美国国防部赞助。显而易见,这样一个全天候,不受天气干扰的全球定位系统,有着极为重要的军事意义。GPS系统第一次大显身手也是在海湾战争。当时的GPS系统还没有完成,所以美国空军调整了GPS卫星的轨道,以便更好的服务于海湾地区。有一些部队,比如坦克部队,并没有使用过GPS接收器,甚至于用胶布把GPS接收器固定在车内。即使如此,GPS系统还是发挥了它重要的导航功能,特别在难以识别地貌特征的沙漠地区。可以说,GPS系统重塑了现代战争的形式。
1983年的韩国空难,促使里根总统决定将GPS系统开放给民用。但很快,五角大楼意识到,通过一些GPS接收技术,民用码和军用码可以产生几乎相同的定位精度。出于军事考虑,民用码中被刻意引入误差(selective availability)。1996年,克林顿总统签署法令,停止对民用码的干扰。GPS设备和技术开始在民用领域蓬勃发展,并带动了技术本身的快速进步。
GPS系统已经渗入到我们的生活。在IT领域,移动端革命与GPS系统正在紧密融合。从IPhone 3G开始,IPhone中开始内置GPS接收器。GPS接收系统成为智能手机、平板电脑甚至笔记本的电脑的必然配置。GPS定位与软件融合,构成了一个完美而廉价的导航和定位系统。以地理定位为基础的移动应用,比如Google Map,Foursquare,Waze,都产生了巨大的成功。而以地理定位系统为基础的真人游戏,更是冲击着人们的想象力。
Foursquare
Ingress,基于GPS的游戏 地址http://v.youku.com/v_show/id_XNDc1NjUxNTI0.html
基本原理
如果在平面上,已知两个点的坐标位置[$(x_1, y_1),(x_2, y_2)$],并且知道这两个点到某个未知的距离[$r_1, r_2$],那么可以确定未知点的坐标位置。未知点的坐标为[$(x,y)$],我们实际上有两个方程,来解出[$x, y$]两个未知数。
$$(x - x_1)^2 + (y - y_1)^2 = r_1^2$$
$$(x - x_2)^2 + (y - y_2)^2 = r_2^2$$
从几何上来说,我们可以从已知点画两个半径分别为[$r_1,r_2$]的圆,它们的交点就是未知点的位置。
(这样的点实际上有两个,但在GPS情况下,未知点在卫星的下方,所以很容易选择正确的解。)
两圆相交
如果在三维空间,已知三个点的坐标位置,并且知道这三个点到未知点的距离[$r_1, r_2, r_3$],那么就可以有三个方程,用来解三个未知数[$(x, y, z)$],这样我们就可以确定未知点的左边位置。
从几何上来说,我们可以从已知点画三个半径为[$r_1, r_2, r_3$]的球,这三个球的交点即未知点的位置。
三球相交
对于GPS来说,卫星的坐标位置是已知的。卫星在某个时间t向地面广播信号。接收器在T时间接收到信号。电磁波信号在空间中的传播速度近似于真空中的光速c。因此,[$c(T - t)$]就获得了从卫星到接收器的距离。
在GPS卫星中,安装有准确而昂贵的原子钟,所以可以比较准确的或者t。而GPS接收器使用的通常是廉价的石英钟,这大大减少了接收设备的成本,但也因此造成T误差较大。由于无法准确的获知T,所以通常将T当做一个未知项。这样,在GPS应用中,要求至少四个已知点,即接收四颗卫星的信号,得到四个方程,解出四个未知数[$(x, y, z, T)$]。
如果一个卫星可以接收到更多颗卫星信号,就可以解出更多的相对较小的误差项,因此获得更好的定位精度。通常使用最小方差(Least Square)或者卡曼滤波(Karman Filter)的方法,来获得最终解。
卫星网络
GPS的卫星网络最初设计为24颗卫星。这24颗卫星分布在6个轨道上,每个轨道上有4颗卫星。全球的任意一点都可以在任意时刻接收到至少4颗卫星的信号。 现在的GPS卫星网络超过了24颗卫星,因此有的轨道上是5颗卫星。
地球上一点可观测到的卫星数
根据开普勒定律,卫星的轨道都是一个椭圆形。GPS轨道的偏心率仅为0.01,所以可以近似为一个圆形(圆形的偏心率为0)。轨道的半长轴大约为26560公里,大约为4个地球半径(地球半径约为6371公里)。下图显示了GPS轨道与地球半径的比例:
GPS卫星的轨道周期大约为11小时58分钟。GPS卫星的周期是特意选择的,以便吻合地球自转和公转周期,从而让同一卫星在每一天的同一时间出现在天空的同一位置。我们可以用地表路径的方式,来表示卫星的位置。取卫星和地心的连线,该连线与地表的交点可以绘制在下面的地图中:
GPS卫星的地面投影图
每个卫星的轨道平面倾角都是55度,即卫星轨道平面与赤道面的夹角为55度。在北极的接收者看来,一颗卫星最多也只能上升到距离天顶35度的距离。因此,在高纬度地区,GPS的精度要差于赤道附近。下图显示了轨道侧面与赤道的角度:
共计有6个轨道平面,所以每个轨道平面转过了60度(360/6)。
GPS信号
GPS卫星像广播一样,不断向外发送信号。GPS接收器是一个被动的接收装置,用于接收GPS卫星发出的信号,并反演接收器所在位置。GPS信号的基础是简谐的载波(carrier wave)。卫星播放两个频率的信号: L1载波,1575.42MHz,波长19厘米; L2载波,1227.60MHz,波长24.4厘米。同时拥有两个波段的信号,可以抵消掉一个重要的误差,即电离层造成的延迟。由于电离层造成的延迟与频率相关,因此可以通过两个不同频率波的差异,来反映出电离层的状况。
(新一代的GPS卫星将带有第三个波段L5)
载波与码
在载波上,可以加载-1和1的二值码(binary code)。在接收到信号时,可以利用信号处理技术,将载波和码分开。这些码是伪随机性质的,并在一定位数后重复自己。在接收到卫星发出的码时,接收器本身也使用自己的时钟产生相应的码。通过比较两个序列,可以知道卫星信号延迟的位数,从而计算卫星与接收器的距离。
一种码是C/A码(coarse aquisition),只存在于L1波段(但新一代的GPS卫星将在两个波段同时加载C/A码)。C/A码的信号速率为1.023Mbps。也就是说,每一位持续约1ms。另一个码是P码,信号速率为10.23Mbps,同时存在于L1和L2波段。后来P码被加密为专用的Y码(Anti-Spoofing)。C/A码可以被任意用户使用,也比较容易处理,但精度相对较差。P(Y)码必须经过特别的许可才能使用。在没有干扰的情况下,C/A码和P码的精度差距并不大。
此外,在L1和L2波段上,还加载有GPS的航行信息(navigation message),它也是二值码,用于说明GPS卫星的位置。
除了使用加载的C/A码或者P码定位之外,还可以使用载波的相位(phase)定位。相位可以理解为间歇运动经历的周期数。简谐波在到达接收器之前经历了x个周期,x是一个实数。通过测量x,再乘以波长,就可以更加精确的获得从卫星到接收器的距离。然而,载波相位的处理比较复杂。相位本身会随着周期重复。也就是说,我们只能测量x的小数位。相同测量值,可能相差整数个波长。为了确定x的整数位,相位定位需要更加复杂的技术手段,因此它主要用于高精度的定位。
GPS的发展
GPS有其它定位技术无可比拟的优势,但也有自身的弱点。由于需要接收卫星发射的信号,所以GPS技术很难用于隧道或者室内作业。此外,GPS的计算相对比较复杂,有时会难以应对有实时需求的情境。因此,GPS技术也经常与其它定位技术相结合,以提供覆盖面更广,更精确,也更快速的定位。
一个例子是汽车驾驶导航。汽车导航系统可以由两套独立系统构成。一套是GPS系统,它依赖于GPS信号,无法在一些特定地形下导航(比如隧道)。一套是由里程表和陀螺仪构成的传统导航系统,里程表负责记录距离,陀螺仪负责记录方向。然而这两个装置都可能在长时间的运作下积累误差。这两者融合,可以在有GPS信号时,用GPS导航,并对里程表和陀螺仪进行校准;在没有GPS信号时,使用传统导航系统。这样的混合导航系统,将有能力满足未来自动驾驶的需求。再一个例子是将GPS技术和激光定位结合,避免城市的高楼大厦对GPS信号的遮掩。这对城市建筑作业有重要的意义。
自动驾驶
IPhone的GPS系统则融合了蜂窝网络和WiFi。蜂窝基站和一些Wifi拥有自己准确的位置信息,可以通过探测IPhone信号的方向,可以粗略的获得IPhone在网络中的方位。这也是你在IPhone定位一开始,看到的大圆圈的原因。蜂窝网络的基站安装有时间同步系统,可以减少接收时间T包含的误差。在这些信息的帮助下,IPhone可以更加快速,精准的进行GPS定位,圆圈迅速缩小,形成准确的位置。
除了导航和定位功能外,GPS系统还可以基于多普勒原理,通过测量电波的频率变化,来测量GPS接收器的运动速度。
GPS信号在穿越大气层的时候,会受到电离层和对流层的影响。利用广泛覆盖的GPS网络,来观测电离层和对流层的大气状况,也是气候变化和日地环境的一个全新研究方法。美国、欧洲和日本的研究和应用处于领先地位。
Ionosphere: 电离层; Troposphere: 对流层
由于GPS技术的巨大潜力,各国也在争相发展自己的定位系统,比如俄国的GLONASS已经形成了全球定位的卫星网络,再比如中国的北斗系统,利用静地卫星提供区域定位。
几十年的时间,GPS技术从萌发到渗入到生活的各个角落,可以说是技术发展史上的一个奇迹 (1978年才发射了第一颗GPS卫星,GPS技术比计算机都要新)。可以相信,GPS技术会继续影响我们的生活。
我将在博客中继续关注和深入介绍GPS技术,欢迎交流!
附录,部分代码
GPS轨道半径示意图:
# By Vamei
import numpy as np
import matplotlib.pyplot as plt
r1 = 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 Vamei
import numpy as np
import matplotlib.pyplot as plt
r1 = 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()
如果你喜欢这篇文章,欢迎推荐。