12

我做了很多位置感知计算,通常包含 GPS。我有自己的小型简单 NMEA 解析器,它没有做任何特别的事情 - 只是将 GPS 特定的句子转换为可用的数字、标志等。

但是,在 GPSD 和 Gypsy 等项目上进行了很多积极的开发。如果 GPS 是一件简单的事情,这些项目早就完成了,只是进入了维护模式。

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

2 回答 2

9

来自GPSD 负责人的一篇优秀文章

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

-亚当

于 2009-02-25T19:26:24.237 回答
3

我曾在 NMEA 工作过,我的经验是:

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

除了上面亚当戴维斯提到的主题:

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

你可以查看 SIRF 和UBLOX 协议规范,看看它们有哪些巨大的章节,来描述它们如何解释 NMEA 协议。

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

于 2012-03-18T11:59:24.150 回答