2009-02-16 127 views
5

我正在解析发送时间戳毫秒毫秒的设备的NMEA GPS数据。据我所知,这些设备在使用.000时间戳发送句子时会使用特定的触发点 - afaik GGA语句中的$。GPS时间同步

因此,我解析GGA语句,并在接收到$(我补偿在使用串口波特率的同一操作中读取的任何其他字符)时获取时间戳。

从这些信息我计算了纠正系统时间的偏移量,但是当我将比较时间设置为某些NTP服务器时,我会得到一个250ms的恒定差异 - 当我手动更正此偏移时, 20ms,这对我的应用程序来说没问题。

但是当然我不确定这个偏移量来自哪里,以及它对于我正在使用的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 

回答

2

你必须要考虑到的事情是,在GPS设备是怎么回事:

  • 接收卫星信号并计算位置,速度和时间。
  • 制备NMEA消息,并把它转换成串行端口缓冲器
  • 发送消息

GPS设备具有相对慢的CPU(相对于现代计算机),因此该等待时间所观察是处理的结果是,设备必须在产生位置和开始传输数据的时刻之间做。

Here is one analysis从2005年起消费级GPS接收机的延迟。您可以找到特定NMEA句子的延迟测量值。

+0

好吧,所以我读到,启用PPS信号是一些GPS设备中的专有功能,它可以提供毫秒级的精度 - 一般情况下0.25秒的偏移量,正如您发布的文章中所建议的,接缝为好猜:)谢谢! – VolkA 2009-02-16 03:02:45