Сверните свой собственный парсер NMEA или используйте парсер GPS с открытым исходным кодом?
Я делаю много вычислений с учетом местоположения, часто включая GPS. У меня есть свой собственный маленький простой парсер NMEA, который не делает ничего особенного - просто преобразует конкретные предложения GPS в полезные числа, флаги и так далее.
однако в таких проектах, как GPSD и Gypsy, ведется активная разработка. Если бы GPS был простым делом, проекты давно бы закончились и просто перешли в режим обслуживания.
- что они знать/делать то, о чем я не знаю, и поэтому мой код не учитывает?
3 ответов
с отличная статья руководством GPSD:
- стандарт NMEA не обеспечивает полный кортеж TPV (время, положение, скорость) с ошибкой, геоидом и магнитным изменением и т. д.
- поскольку разные значения находятся в разных предложениях, и нет определенного порядка, вы не можете легко узнать, какая скорость идет с какой позицией
- некоторые значения не приведены полностью (т. е. год-это две цифры на более общем и доступном предложения)
- нет стандартизированного способа определения поставщика, модели, прошивки
- нет стандартизированного способа изменения настроек (скорость связи, сообщаемые предложения, образцы в секунду и т. д.)
- несовместимые двоичные протоколы для расширенного использования и более быстрой отчетности
- из-за интересных условий гонки для USB-последовательных мостов и bluetooth-последовательных мостов изменение скорости-очень сложная проблема
Адам
Я работал с NMEA, мой опыт:
формат NMEA не очень хорошо разработан. Профессиональные применения, которые имеют сразу доступ к приемнику GPS, должны во избежание NMEA. Они должны учитывать конкретный двоичный формат устройства GPS.
в дополнение к темам, упомянутым Адамом Дэвисом выше:
- его не определено, как бороться с недопустимыми атрибутами: например, если транспортное средство стоит на месте, особенно, если оно не двигалось с тех пор при запуске GPS-приемника атрибут курс / заголовок недопустим; большинство приемников будут выводить пустой атрибут ",". Но это не определено.
- поле времени: некоторые поставщики используют дробную часть после Второй. Его точно не указано(?) если это разрешено или нет; некоторые устройства делают это, другие нет. (Далее: предложение GGA определяет две цифры после Второй, предложение RMC использует интегральные секунды)
- заказ RMC, GSV, etc. предложения отличается от одного приемника к другому. Это приводит к проблеме, чтобы знать, когда исправление позиции завершено. Либо вы проверяете, что прибыл новый штамп времени, тогда вы знаете, что позиция завершена, но тогда вы потеряете одну секунду, с точки зрения поведения в реальном времени. Или вы знаете своего получателя и знаете, что является последним предложением исправления. Или вы делаете какой-то" искусственный интеллект", чтобы проанализировать порядок в первые десять секунд, а затем вы знаете, какой последний.
вы можете посмотреть в SIRF и спецификация протокола UBLOX, и посмотрите, какие огромные главы у них есть, чтобы описать, как они интерпретируют протокол NMEA.
Если кто-то знает действительно хороший парсер / писатель NMEA, написанный на java или Objective-C, то есть с открытым исходным кодом, а не под лицензией GPL, пожалуйста, дайте мне знать.
с таким количеством хороших альтернатив, вы, возможно, не захотите так много беспокоиться.
вот быстрый, оптимизированный микроконтроллер (AVR) библиотека NMEA parser: https://code.google.com/p/avr-nmea-gps-library/
код прямо вперед, поэтому вы можете учиться и адаптироваться, если это вызывает озабоченность.