滚动您自己的NMEA解析器或使用开源GPS解析器?

时间:2009-02-25 19:25:59

标签: gps parsing nmea

我做了很多位置感知计算,经常使用GPS。我有自己的一个简单的NMEA解析器,它没有做任何特殊的事情 - 只需将GPS特定的句子转换为可用的数字,标志等等。

然而,在GPSD和Gypsy等项目上进行了大量积极的开发。如果GPS是一件简单的事情,项目很久以前就已经完成,并且只是进入维护模式。

  • 他们知道/做什么,我不知道,因此我的代码没有考虑?

3 个答案:

答案 0 :(得分:9)

GPSD导致的excellent article

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

- 亚当

答案 1 :(得分:3)

我曾与NMEA合作,我的经验是:

NMEA格式设计不合理。 可直接访问GPS接收器的专业应用程序应避免使用NMEA。他们应该考虑GPS设备的特定二进制格式。

除上述Adam Davis提到的主题外:

     
  • 未定义如何处理无效属性:例如如果车辆静止不动,特别是如果自启动GPS接收器后没有移动,则航线/航向属性无效;大多数接收器将输出一个空属性“,,”。但这是未定义的。  
  • 时间字段:某些供应商在第二个之后使用小数部分。如果允许或不允许,则不完全指定(?);有些设备会这样做,有些则没有。 (另外:GGA句子在第二个之后定义两个数字,RMC句子使用积分秒)
  • RMC,GSV等句子的顺序因接收者而异。 这导致了解定位定位何时完成的问题。要么你检查一个新的时间戳到了,那么你就知道这个位置是完整的,但是就实时行为而言,你会失去一秒钟。或者你知道你的接收器,并知道哪个是修复的最后一句话。或者你做一些“人工智能”来分析前十秒的顺序,然后你知道哪一个是最后一个。

你可以查看SIRF和UBLOX protocol specification,看看他们有多大的章节来描述他们如何解释NMEA协议。

如果有人知道用java或Objective-C编写的非常好的NMEA解析器/编写器,这是开源的而不是GPL许可证,请告诉我。

答案 2 :(得分:0)

有这么多好的选择,你可能不想打扰那么多。

这是一个快速,微控制器(AVR)优化的NMEA解析器库:https://code.google.com/p/avr-nmea-gps-library/

代码很简单,所以如果这是一个问题,你可以学习和适应。