我正在从发送时间戳而没有毫秒的设备解析NMEA GPS数据。据我所知,这些设备在发送带有.000时间戳的句子时会使用特定的触发点 - 在GGA句子中支付$。
所以我正在解析GGA句子,并在收到$时采用时间戳(我使用串口波特率补偿在同一操作中读取的任何其他字符)。
根据这些信息,我计算了用于校正系统时间的偏移量,但是当我将设置的时间与某些NTP服务器进行比较时,我将得到250ms的恒定差异 - 当我手动纠正时,我在偏差范围内20毫秒,这对我的申请来说没问题。
但是我当然不确定这个偏移的来源,以及它是否特定于我正在使用的GPS鼠标或我的系统。我使用了错误的$字符,还是有人知道应该如何处理?我知道这个问题非常模糊,但任何可能导致这种偏移的提示都会非常有用!
以下是我设备上的一些示例数据,我将采用$字符作为时间偏移标记:
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003538.000,A,5046.8555,N,00606.2913,E,0.00,22.37,160209,,,A*58
-> $ <- GPGGA,003539.000,5046.8549,N,00606.2922,E,1,07,1.5,249.9,M,47.6,M,,0000*5C
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPGSV,3,1,10,09,77,107,17,12,63,243,30,05,51,249,16,14,26,315,20*7E
$GPGSV,3,2,10,30,24,246,25,17,23,045,22,15,15,170,16,22,14,274,24*7E
$GPGSV,3,3,10,04,08,092,22,18,07,243,22*74
$GPRMC,003539.000,A,5046.8549,N,00606.2922,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003540.000,5046.8536,N,00606.2935,E,1,07,1.5,249.0,M,47.6,M,,0000*55
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003540.000,A,5046.8536,N,00606.2935,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003541.000,5046.8521,N,00606.2948,E,1,07,1.5,247.8,M,47.6,M,,0000*5E
答案 0 :(得分:2)
您必须考虑GPS设备中正在发生的事情:
GPS设备具有相对较慢的CPU(与现代计算机相比),因此您观察到的这种延迟是设备必须在生成位置和开始传输数据的时刻之间进行处理的结果。
从2005年起,消费级GPS接收器的延迟时间为Here is one analysis。在那里,您可以找到特定NMEA句子的延迟测量结果。