自己编写NMEA解析器还是使用开源GPS解析器?

12

我经常进行位置感知计算,通常会使用GPS。我有自己的一个简单的NMEA解析器,它不做任何特殊处理 - 只是将GPS特定的语句转换为可用的数字、标志等。

然而,像GPSD和Gypsy这样的项目正在进行大量的活跃开发。如果GPS很简单的话,这些项目早就完成了并进入维护模式了。

  • 他们知道/做了什么我不知道的事情,因此我的代码没有考虑到?
2个回答

9

来自GPSD负责人的优秀文章

  • NMEA标准没有提供完整的TPV(时间,位置,速度)元组,也没有提供错误、大地水准面和磁偏角等信息。
  • 由于不同的值在不同的句子中,并且没有定义顺序,因此您不能轻松地知道哪个速度与哪个位置报告相对应。
  • 某些值未完全给出(即,在更常见和可用的句子中,年份仅有两位数字)。
  • 没有标准化的方法确定供应商、型号、固件。
  • 没有标准化的方法更改设置(通信速度、报告的句子、每秒钟的样本数等)。
  • 高级使用和更快速地报告的不兼容二进制协议。
  • 由于USB串口桥和蓝牙串口桥的有趣竞争条件,更改速度是一个非常棘手的问题。

-Adam


3

我有使用NMEA的经验:

NMEA格式设计不够完善。具备GPS接收器直接访问能力的专业应用程序应该避免使用NMEA,而应该考虑GPS设备特定的二进制格式。

除了Adam Davis提到的话题之外:

  • 如何处理无效属性未定义:例如,如果车辆静止不动,特别是自GPS接收器启动以来没有移动,则方向属性无效;大多数接收器会输出一个空属性“,,”。但这是未定义的。
  • 时间字段:一些供应商在秒后使用小数部分。它是否允许并不完全指定?有些设备这样做,而其他设备则不这样做。(进一步说,GGA句子在第二个后面定义了两位数字,RMC句子使用整数秒)
  • RMC,GSV等句子的顺序因接收器而异。这导致了知道位置固定何时完成的问题。您可以检查新的时间戳是否到达,然后您就知道位置已经完成,但是这样您将失去一秒钟的实际时间行为。或者您了解您的接收器,并知道哪个是固定的最后一句话。或者您进行一些“人工智能”来分析前十秒钟的顺序,然后您就知道哪个是最后一个。
你可以查看SIRF和UBLOX协议规范,了解它们所描述的如何解释NMEA协议的大量章节。
如果有人知道一个真正好的用Java或Objective-C编写的NMEA解析器/编写器,它是开源的,而且不受GPL许可证的限制,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接