在解析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
Run Code Online (Sandbox Code Playgroud)
据我了解,从网络上的各种来源(例如这里),这是错误的.根据第3个数字,应该有16颗卫星,这对我之前遇到的所有GPS接收机都是如此,但是这个卫星的句子只包含13颗卫星的数据.
这是一个错误吗?或者我是否错误地阅读了规范?
Nmea是一种弱指定的文件格式.GPS芯片制造商提供文件如何解释NMEA规范.
例如,ublox和Sirf各有一章约40页描述如何解释NMEA格式.
因此,如果您写"或者我是否错误地阅读了规范?",那么问题就在于您正在阅读哪种规范.那个GPS芯片制造商?NMEA 0183规范没有足够的信息来正确解析句子.
特别是在你的情况下:NMEA协议不会如何处理空值和无效值.
在你的情况下,接收器预计会看到16颗卫星,但只发现13颗卫星.我预计缺失的3颗卫星会有空的",,,,,,,,".但显然制造商决定停止并附加校验和字符串.(它根本没有说明必须为缺少的3个坐标打印出空分号.
不幸的是,你不得不为每个CHPS芯片制造商编写一个NMEA解析器.
因此,我总是建议使用Chip manufactureres协议的二进制格式.(例如,.g uBlox bianry或Sirf binary,因为这些是完全指定的).
您可以进一步查看GpsBable的文档:它们显示了不同的制造商如何生成不同的GSV数据集.
更新:
正如您现在所说的那样,它是一个ublox接收器:
答案是,是的NMEA句子是有效的.看看ublox协议规范.我使用ublox 5的规范:在描述GSV句子的页面上,查看"消息结构":
{,sv,elv,az,cno}*cs
Run Code Online (Sandbox Code Playgroud)
花括号包含重复的序列.下面看"1..4":这意味着1,2,3或4块.没有写"4",其"1..4"因此卫星信息是可选的,并且不能为空.
如果您进一步查看ublox给出的示例,那么您会看到,最后一条GPGSV消息包含的卫星少于4颗,就像您在问题中显示的那样.
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |