Подтвердить что ты не робот

Сверните свой собственный парсер NMEA или используйте парсер с открытым исходным кодом GPS?

Я занимаюсь многими вычислениями с учетом местоположения, часто использующими GPS. У меня есть свой собственный простой простой анализатор NMEA, который не делает ничего особенного - просто преобразует специфические предложения GPS в используемые номера, флаги и т.д.

Однако в проектах, таких как GPSD и Gypsy, активно проводится активная разработка. Если бы GPS был простым делом, проекты давно бы закончились и просто перешли в режим обслуживания.

  • Что они знают/делают, о которых я не знаю, поэтому мой код не учитывает?
4b9b3361

Ответ 1

От отличная статья от руководства GPSD:

  • Стандарт NMEA не обеспечивает полный набор TPV (время, положение, скорость) с ошибкой, геоида и магнитной вариацией и т.д.
  • Так как разные значения находятся в разных предложениях, и нет определенного порядка, вы не можете легко узнать, какая скорость идет, какой отчет о местоположении
  • Некоторые значения не указаны полностью (т.е. год составляет две цифры в более распространенных и avilable предложениях)
  • Нет стандартизованного способа определения поставщика, модели, прошивки
  • Нет стандартизованного способа изменения настроек (скорость связи, сообщенные сообщения, выборки в секунду и т.д.).
  • Несовместимые двоичные протоколы для расширенного использования и более быстрой отчетности
  • Из-за интересных условий гонки для USB для последовательных мостов и bluetooth для последовательных мостов, изменение скорости - очень сложная проблема.

-Adam

Ответ 2

Я работал с NMEA, мой опыт:

Формат NMEA плохо разработан. Профессиональные приложения, имеющие прямой доступ к приемнику GPS, должны избегать NMEA. Они должны учитывать конкретный двоичный формат устройства GPS.

В дополнение к темам, упомянутым Адамом Дэвисом выше:

  •  
  • Не определено, как обращаться с недействительными атрибутами: например. Если автомобиль стоит на месте, особенно если он не двигался с момента запуска GPS-приемника, атрибут курса/заголовка недействителен; Большинство получателей выдаст пустой атрибут ",". Но это undefined.  
  • Поле времени: некоторые поставщики используют дробную часть после второй. Его точно не указано (?), Если это разрешено, или нет; некоторые устройства делают это, другие нет. (Далее: предложение GGA определяет две цифры после второго, предложение RMC использует целые секунды)
  • Порядок предложений RMC, GSV и т.д. отличается от одного приемника другим. Это приводит к тому, что проблема заключается в том, чтобы узнать, когда исправление позиции завершено. Либо вы проверяете, что прибыла новая метка времени, то вы знаете, что позиция завершена, но затем вы потеряете одну секунду с точки зрения поведения в реальном времени. Или вы знаете своего получателя и знаете, какое последнее предложение исправить. Или вы делаете "искусственный интеллект" для анализа порядка в первые десять секунд, а затем знаете, что является последним.

Вы можете посмотреть в спецификации SIRF и протокол UBLOX и посмотреть, какие огромные главы у них есть, чтобы описать, как они интерпретируют протокол NMEA.

Если кто-то знает действительно хороший парсер/писатель NMEA, написанный в java или Objective-C, который является открытым исходным кодом, а не под лицензией GPL, сообщите мне.

Ответ 3

С таким количеством хороших альтернатив вам может не нравиться так много.

Вот быстрая, оптимизированная по микроконтроллеру (AVR) библиотека анализатора NMEA: https://code.google.com/p/avr-nmea-gps-library/

Код прямолинейный, поэтому вы можете учиться и адаптироваться, если это вызывает беспокойство.