1

在解析 GPS 接收器的 NMEA 输出时,我得到以下几行:

$GPGSV,4,1,16,02,17,228,35,03,04,048,37,05,59,285,29,06,02,030,34*73
$GPGSV,4,2,16,07,58,061,46,08,80,159,40,09,11,227,32,10,51,167,47*77
$GPGSV,4,3,16,13,15,089,38,15,00,279,,16,00,018,,26,34,279,42*7A
$GPGSV,4,4,16,28,20,154,39*4C

据我了解,来自网络上的各种来源(例如这里),这是错误的。根据第 3 个数字,应该有 16 颗卫星,这对于我之前遇到的所有 GPS 接收器都是如此,但是这句话中的句子只包含 13 颗卫星的数据。

这是一个错误吗?还是我错误地阅读了规范?

4

2 回答 2

7

Nmea 是一种弱指定的文件格式。GPS 芯片制造商提供他们如何解释 NMEA 规范的文档。
例如,ublox 和 Sirf 各有一个大约 40 页的章节,描述如何解释 NMEA 格式。

因此,如果您写“或者我是否错误地阅读了规范?”,那么问题是您正在阅读哪个规范。GPS芯片制造商的那个?NMEA 0183 规范不包含足够的信息来正确解析句子。

特别是在您的情况下:NMEA 协议没有描述如何处理空值和无效值。

在您的情况下,接收器理论上预计会看到 16 颗卫星,但只找到了 13 颗。我希望丢失的 3 颗卫星将有空的“,,,,,,,”。但显然制造商决定停止并附加校验和字符串。(它根本没有指定必须为丢失的 3 个 sats 打印出空分号。

不幸的是,您必须为每个 CHPS 芯片制造商编写 NMEA 解析器。
因此我总是推荐使用芯片制造商协议的二进制格式。(例如,uBlox 二进制文件或 Sirf 二进制文件,因为它们是完全指定的)。

您可以进一步查看 GpsBable 的文档:它们显示了不同的制造商如何产生不同的 GSV 数据集。

更新:
正如您现在所说,它是一个 ublox 接收器:

答案是,是的,NMEA 语句是有效的。查看 ublox 协议规范。我使用 ublox 5 的规范:在描述 GSV 句子的页面上查看“消息结构”:

{,sv,elv,az,cno}*cs

花括号包含重复的序列。下面看看“1..4”:这意味着 1,2,3 或 4 个块。没有写“4”,它的“1..4”因此卫星信息是可选的,并且不能为空。

如果您进一步查看 ublox 给出的示例,那么您会看到,最后一条 GPGSV 消息包含少于 4 颗卫星,正如您在问题中所显示的那样。

于 2013-03-14T18:02:32.830 回答
0

是的,这是不一致的;最后一条消息应该描述了不止一颗卫星(实际上是四颗),以便将广告中的 16 颗加起来。GPS 接收器应该至少报告卫星 ID (PRN),即使它们在天空中的观察方向和 SNR 当时是未知的,例如:{,01,,,}。

话虽如此,最好编写能够容忍格式错误消息的程序;在这种情况下,将视图中的卫星数量更新为 13 颗。

(我检查了校验和,它们没问题。)

于 2015-05-16T21:49:48.093 回答