首页 > 解决方案 > Linux GPSD 比 GPS 鼠标的原始数据更准确

问题描述

我买了一个便宜的 USB GPS 鼠标,想用树莓派读取位置信息。GPS 鼠标的原始(串行)数据如下所示:

$GPRMC,130312.00,A,4751.29758,N,01208.72343,E,0.067,,140721,,,A*7E 
$GPVTG,,T,,M,0.067,N,0.125,K,A*24 
$GPGGA,130312.00,4751.29758,N,01208.72343,E,1,08,1.46,450.1,M,45.7,M,,*5F 
$GPGSA,A,3,08,21,27,32,22,01,10,03,,,,,2.79,1.46,2.37*07 
$GPGSV,3,1,10,01,41,288,36,03,17,228,21,08,66,190,24,1
0,31,054,08*7B 
$GPGSV,3,2,10,14,17,316,13,21,66,300,37,22,41,231,29,24,00,026,*74 
$GPGSV,3,3,10,27,38,157,17,32,41,096,27*7D 
$GPGLL,4751.29758,N,01208.72343,E,130312.00,A,A*67

它使用 NMEA 协议,此处记录:https ://www.ifm.com/download/files/nmea_protocol_cr3102/$file/nmea_protocol_cr3102.pdf

例如,在最后一行的 $GPLL 之后,有纬度和经度,以度、分和秒为单位。所以从这些数据中我们可以读到:
lat: 47°51'29.758''
lon: 12°08'7.2343''

这些值可以很容易地转换为十进制度数,方法是将分除以 60 加到度数上,然后将秒除以 60*60 加到该结果中。所以十进制坐标是:
lat: 47.8582661111°
lon: 12.1353428611°

有一个众所周知的 Linux 软件包 GPSD。Is 有一些演示程序可以直观地显示数据。如果我CGPS -s在终端窗口中运行,我会得到以下数据:
lat: 47.85485133°
lon: 12.14536133°

问题是两个结果差异很大,测试表明数据CGPS -s更准确。但这怎么可能?我正在读取原始数据并且结果比也只能读取原始数据的包更差。这两个结果都不是很准确,但是来自的数据CGPS -s要准确得多。

有人知道为什么会这样以及我该如何解决吗?谢谢!

标签: clinuxraspberry-pigpsgpsd

解决方案


您对 NM​​EA 数据的解释不正确。NMEA 使用度加十进制分钟,而不是度/分/秒。当你看到

$GPGGA,130312.00,4751.29758,N,01208.72343,E

这实际上是北纬 47 度 51.29758 分和东经 12 度 8.72343 分。转换为十进制度,它是 47.854959,12.145390,或多或少如cgps所说。


推荐阅读