不准确的NMEA消息



当我在u-center看纬度和经度时,我得到了非常精确的坐标。但是u-center的文本控制台中的NMEA消息,以及我在VSCode中的Python脚本输出中,偏离了大约0.3度。纬度和经度。

下面是我的代码:

import serial
gps = serial.Serial('com5', baudrate=9600)
while True:
ser_bytes = gps.readline()
decoded_bytes = ser_bytes.decode("utf-8")
data = decoded_bytes.split(",")
if data[0] == '$GNRMC':
lat_nmea = (data[3],data[4])
lat_degrees = float(lat_nmea[0][0:2])
if lat_nmea[1] == 'S':
lat_degrees = -lat_degrees
lat_minutes = float(lat_nmea[0][2:])
lat = lat_degrees + (lat_minutes/60)
lon_nmea = (data[5],data[6])
lon_degrees = float(lon_nmea[0][:3])
if lon_nmea[1] == 'W':
lon_degrees = -lon_degrees
lon_minutes = float(lon_nmea[0][3:])
lon = lon_degrees + (lon_minutes/60)
print("%0.8f" %lat,", " "%0.8f" %lon)

期望输出(如u-center数据视图所示):

-12.63900217, 111.85371867

实际输出(奇怪的是,经度似乎是按照预期打印的,而不是纬度):

-11.36120217, 111.85371867

然而,NMEA消息不匹配上述任何一个值。例如$GNGLL消息:

GNGLL美元,1238.34708 N, 11129.52477 W, 093907.00一个,* 68

任何帮助将不胜感激!谢谢:)

感谢@GiacomoCatenazzi在评论中,以下是按预期打印值的代码:

import serial
gps = serial.Serial('com5', baudrate=9600)
while True:
ser_bytes = gps.readline()
decoded_bytes = ser_bytes.decode("utf-8")
data = decoded_bytes.split(",")
if data[0] == '$GNRMC':
lat_nmea = (data[3],data[4])
lat_degrees = float(lat_nmea[0][0:2])
lat_minutes = float(lat_nmea[0][2:])
lat = lat_degrees + (lat_minutes/60)
lon_nmea = (data[5],data[6])
lon_degrees = float(lon_nmea[0][:3])
lon_minutes = float(lon_nmea[0][3:])
lon = lon_degrees + (lon_minutes/60)
if lat_nmea[1] == 'S':
lat = -lat
if lon_nmea[1] == 'W':
lon = -lon
print("%0.8f" %lat, "%0.8f" %lon)

最新更新