一、GPGSV简介
GPGSV是GPS接收器预期接收到的卫星信号的信息,是GPS卫星定位中的重要组成部分。GPGSV指令为可选指令,其作用为返回所有可用卫星的信息,包括可见卫星数量、卫星的PRN号、仰角、方位角和信噪比等信息。
二、GPGSV指令格式
如下所示:
$GPGSV,3,1,09,02,31,193,46,04,69,240,32,05,46,046,37,08,17,21,23*70 $GPGSV,3,2,09,10,14,335,,13,05,143,,16,24,301,27,23,03,261,*73 $GPGSV,3,3,09,27,09,210,*4F
以上指令分为3行,每行最多能够包含4个卫星的信息。其中:
- GPGSV:指令头,表示GPS卫星可见性数据;
- 3:当前数据包的总页数;
- 1:本数据包在总页数中的页数;
- 09:搜锁星的卫星总数;
- 02:第1个卫星的PRN号(伪随机噪声序列的标识符);
- 31:当前卫星距离候选接收器的高度角(俯仰角);
- 193:当前卫星距离候选接收器的方位角;
- 46:当前卫星的信号强度(dBHz)。
三、GPGSV字段详解
1. GPGSV指令头
每一个GPGSV指令的第一个词汇都是指令头,它告诉的是这个语句传送的是卫星信息。
$GPGSV
如果是GLONASS卫星将会是$GLGSV。
2. 目前已搜到卫星数量和页码
在$GPGSV语句中,第二个和第三个字段告诉你这是多少卫星的数据和当前在哪页。
3,1
目前已搜到卫星数量为3,这是一个多页数据,当前页是第一页。
3. 可视卫星数量
第四个字段是可视卫星的数量。下面是一个例子:
3,1,09
这句话告诉你,当前卫星的总数是9。
4. 卫星详细信息
后面的每四个字段是卫星详细信息,依次为PRN号、俯仰角、方位角和信噪比。
02,31,193,46 04,69,240,32 05,46,046,37 08,17,21,23
这四个字段的信息说明了接收机所接收到的卫星信息,其中PRN号是伪随机噪声序列的唯一标识符,它唯一地标识了一个卫星。PRN号是从1到32的值,表示GPS卫星的数量。GPS接收器收到越多的卫星,定位精度就越高。
四、GPGSV使用示例
我们可以通过以下代码示例来使用GPGSV指令来获取可见卫星的PRN号、仰角、方位角和信噪比等信息:
import serial # 打印GPGSV信息 def print_gpgsv(data): if data[0] == '$' and data[7:10] == "GSV": gpgsv = data.strip().split(",") num_msg = int(gpgsv[1]) num_sat = int(gpgsv[2]) t_msg = (num_msg-1)*4 + num_sat + 3 if num_msg == 1: print("总共有{0}颗卫星:".format(num_sat)) index = 4 for i in range(num_sat): prn = "PRN: " + gpgsv[index] el = " 仰角: " + gpgsv[index+1] az = " 方位角: " + gpgsv[index+2] sn = " 信噪比: " + gpgsv[index+3] print(prn + el + az + sn) index += 4 return True else: return False if __name__ == '__main__': # 连接串口设备 ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5) while True: data = ser.readline().decode() if print_gpgsv(data): break ser.close()
五、总结
GPGSV是GPS接收器预期接收到的卫星信号的信息,在GPS卫星定位中具有非常重要的作用。从GPGSV指令格式和字段详解,我们可以了解到卫星数量、当前页码、可视卫星数量以及各个卫星的基本信息,包括PRN号、仰角、方位角和信噪比。在实际应用中,我们可以通过GPGSV指令获取这些信息,并进行后续的处理和分析,以获得更精准和稳定的定位结果。