Nmea протокол обработка исходный код. Описание NMEA протокола

Возникла у меня необходимость тестировать приложение, использующее данные GNSS по протоколу NMEA. Связано было с тем, что работал над проектом программы навигации самолета, тестировать в воздухе дорого естественно, на земле ездить на машине с GNSS приемником не особо удобно, вот и хотелось сидя за столом иметь на виртуальном параллельном порту данные протокола NMEA с якобы перемещающегося оборудования. Сначала искал разный софт думал, найду что то подходящее, но большинство платное и управление эмуляции данных не совсем удобное, хотя и эмулируют практически все параметры стандарта NMEA. Но мне надо было что-то простенькое эмулирующее координаты, скорость, в принципе не более того и требовалось достаточно удобное и логичное управление. Вот и пришлось написать приложение подобного рода на C#.

Fly_nmea


NMEA («National Marine Electronics Association») - полное название «NMEA 0183» - текстовый протокол связи морского (как правило, навигационного) оборудования между собой.
Данные передаются в виде предложений. Формат предложений следующий:
$AAAAA[, <данные> ]*hh , где:
$ - символ начала предложения (код 24h);
AAAAA - Пяти-символьный адрес (имя) предложения;
[, <данные> ] - список полей данных разделенных запятыми (код 2Сh);
* - признак контрольной суммы (код 2Ah);
hh - контрольная сумма.

Пример предложения:
GGA – Данные определения места по GPS
Время место и данные относящиеся к обсервации.
$GPGGA,hhmmss.sss,llll.ll,a,yyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxx*hh

Мне требовалось эмулировать четыре строки:

  • GLL – Координаты места
  • GSV – Видимые спутники
  • RMC – Рекомендуемый минимальный набор данных по GPS и ГЛОНАСС
  • GSA – Фактор ухудшения точности, используемые для навигации спутники
Эмуляция организована в следующем порядке:
  • мы задаем начальные координаты в системе WGS-84
  • далее переходим в плоскую проекцию, например Меркатора(для преобразования координат использовал готовую библиотеку на C# )
  • зная плоские координаты x, y, h реализуем физику движения самолета по изменяемым параметрам через графический интерфейс, таких как: крен, тангаж, скорость
  • конвертируем плоские координаты в координаты B, L, H системы WGS-84
  • формируем пакет сообщений стандарта NMEA из требуемых четырех строк
  • отправляем их на виртуальный параллельный порт
Fly_nmea + Android Sensor
Для более удобного тестирования я еще наладил прием данных с Android сенсоров (углы наклона). Android по UDP отсылает две строки типа:
  • «Angle:\t236.04152\t-1.0\t-3.0»
  • «Acc:\t-0.46309182\t-0.14982383\t-10.56939»
На приложении эмуляции я их принимаю и исходя из углов наклона меняю параметры:
  • Тангаж
В приложении эмуляции можно переключится с управления через интерфейс программы на Android Sensor.
Подключение Fly_nmea
Для эмуляции COM портов пригодится еще Virtual Serial Ports Emulator, потребуется настроить связь двух виртуальных COM портов например: COM1 <-> COM6, и программа Fly_nmea будет отсылать данные на COM6, а на COM1 программа использующая NMEA протокол будет их забирать.

Заключение

В целом я больше потратил времени на поиск подобного софта, и не найдя что меня бы полностью удовлетворило быстрее написал его сам. По мимо проекта над которым я работал, так же удалось вполне удачно подключить эмулятор к программам, понимающим NMEA протокол таким как: 2Gis и SAS planet.



FlyNMEA и android sensor(проект по передаче данных с сенсоров по UDP)

NMEA 0183 (от «National Marine Electronics Association ») - стандарт определяющий текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой. Стал особенно популярен в связи с распространением GPS-приёмников , использующих этот стандарт.

Общий вид строк в NMEA 0183

  • символ «$» или «!» (hex 24 или hex 21)
  • 5-буквенный идентификатор сообщения. Первые две буквы - идентификатор источника сообщения, следующие три буквы - идентификатор формата сообщения, согласно протоколу NMEA 0183 определённой версии.
  • список данных (буквы, цифры и точки), разделённых запятыми. Если какие-либо данные отсутствуют внутри строки, запятые всё равно ставятся (например «,»). Некоторые поля в конце строки могут отсутствовать вовсе.
  • символ «*».
  • восьмибитная XOR -сумма всех символов (включая «,» и «^») в строке между «$» и «*» приведенная к двум ASCII-символам в верхнем регистре для 16-ричного представления байта (0–9, A–F).
  • (hex 0D, hex 0A).

Максимальная длина сообщения ограничена 82 символами (NMEA 0183 rev 3.0)

Стандарт описывает более 250 идентификаторов NMEA-последовательностей. Стандарт определяет скорости обмена данными в 4800 бод. (Для скоростей в 38400 бод и выше есть расширенный стандарт NMEA-0183-HS).

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

RMC-строка (частный пример)

$GPRMC,hhmmss.sss,A,GGMM.MM,P,gggmm.mm,J,v.v, b.b, ddmmyy, x.x, n,m*hh

Значение полей:

  • «GP» - идентификатор источника; в приведенном примере это GPS, «GL» - ГЛОНАСС , «GA» - Галилео , «GN» - ГЛОНАСС+GPS и т. п.
  • «RMC» - «Recommended Minimum sentence C»
  • «hhmmss.sss» - время фиксации местоположения по Всемирному координированному времени UTC : «hh» - часы, «mm» - минуты, «ss.sss» - секунды. Длина дробной части секунд варьируется. Лидирующие нули не опускаются.
  • «A» - статус: «A» - данные достоверны, «V» - недостоверны.
  • «GGMM.MM» - широта. 2 цифры градусов(«GG»), 2 цифры целых минут, точка и дробная часть минут переменной длины. Лидирующие нули не опускаются.
  • «P» - «N» для северной или «S» для южной широты.
  • «gggmm.mm» - долгота. 3 цифры градусов(«ggg»), 2 цифры целых минут, точка и дробная часть минут переменной длины. Лидирующие нули не опускаются.
  • «J» - «E» для восточной или «W» для западной долготы.
  • «v.v» - горизонтальная составляющая скорости относительно земли в узлах . Число с плавающей точкой. Целая и дробная части переменной длины.
  • «b.b» - путевой угол (направление скорости) в градусах . Число с плавающей точкой. Целая и дробная части переменной длины. Значение равное 0 соответствует движению на север , 90 - восток , 180 - юг , 270 - запад .
  • «ddmmyy» - дата : день месяца, месяц, последние 2 цифры года (ведущие нули обязательны).
  • «x.x» - магнитное склонение в градусах (часто отсутствует), рассчитанное по некоторой модели. Число с плавающей точкой. Целая и дробная части переменной длины.
  • «n» - направление магнитного склонения: для получения магнитного курса магнитное склонение необходимо «E» - вычесть, «W» - прибавить к истинному курсу.
  • «m» - индикатор режима: «A» - автономный, «D» - дифференциальный, «E» - аппроксимация , «N» - недостоверные данные (часто отсутствует, данное поле включая запятую отсутствует в старых версиях NMEA).
  • «hh» - контрольная сумма.
  • - байт равен 0x0D.
  • - байт равен 0x0A.

Примеры RMC-строки

Пример 1

$GPRMC,125504.049,A,5542.2389,N,03741.6063,E,0.06,25.82,200906,*17

Значение полей:

  • 12 часов 55 минут 4,049 секунд UTC
  • «A» - достоверно
  • широта 55° 42,2389", северная
  • долгота 37° 41,6063", восточная
  • скорость 0,06 узлов

NMEA (National Marine Electronics Association) 2000 - это стандарт передачи данных оборудования навигации, связи и других информационных сетей.

В большинстве случаев NMEA2000 используется в морском деле. В основе этого протокола лежит протокол передачи данных CAN (Controller Area Network), использующийся, в основном, в судовой автоматике.

Национальная Ассоциация Морской Электроники (англ. National Marine Electronics Association — NMEA) разработала специальный протокол для обеспечения совместимости морского от разных производителей.

С момента создания протокол NMEA претерпел несколько модификаций, связанных с добавлением новых полей и сообщений. Текущей версией, которую поддерживают большинство приемников, является версия 2.3 , хотя уже опубликовано описание новой версии 3.0 .

Сообщения NMEA

NMEA 2000 описывает не только данные, полученные с , но и измерения , , барометров и других навигационных устройств, использующихся на морских судах. Интерфейс обмена данными большинства портативных GPS-приемников реализован в соответствии с NMEA-спецификацией. Большинство навигационных программ, которые обеспечивают отображение данных в реальном времени, поддерживают и «понимают» NMEA протокол. Эти данные содержат полные навигационные измерения GPS-приемника - позицию, скорость и время.

Полная спецификация NMEA сообщений отсутствует в свободном доступе и ее нельзя официально скачать в электронном виде. Отдельные ее разделы, общее описание NMEA протокола и наиболее популярных сообщений можно найти в Интернете. Официально приобрести NMEA документацию можно на сайте //www.nmea.org/.

Исходящие сообщения NMEA

Все NMEA сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое отдельное сообщение не зависит от других и является полностью «завершенным». NMEA cообщение включает:

  • заголовок,
  • набор данных, представленных ASCII символами,
  • поле «чексуммы» для проверки достоверности переданной информации.

Заголовок

Как правило, заголовок состоит из пяти символов. Первые два символа определяют тип сообщения, а оставшиеся три - его название. Например, заголовок GPS NMEA сообщений начинается с «GP». Сообщения, которые не описаны в спецификации NMEA, но реализованы в GPS-приемниках в соответствии с общими правилами, имеют префикс «Р», дополненный тремя символами, уникальными для каждой компании. Например, NMEA сообщения имеют префикс «PGRM», Magellan - «PMGN».

Данные

Каждое NMEA сообщение начинается с «$», заканчивается «\n» (перевод строки) и не может быть длиннее 80 символов. Все данные содержатся в одной строке и отделены друг от друга запятыми. Информация представлена в виде ASCII текста и не требует специального декодирования. Если данные не умещаются в выделенные 80 символов, то они «разбиваются» на несколько сообщений. Такой формат позволяет не ограничивать точность и количество символов в отдельных полях данных. Например, дробная часть значения координат может быть представлена тремя или четырьмя знаками после запятой, но это никак не должно повлиять на работу программного обеспечения, которые выделяет нужные данные из сообщения по номеру поля.

Поле "чексуммы"

В конце каждого NMEA сообщения содержится поле «чексуммы», отделенное от данных символом «*». При необходимости оно может использоваться для проверки целостности и достоверности каждого принятого сообщения.

Входящие сообщения NMEA

Протокол NMEA 2000 поддерживает не только исходящие, но и входящие сообщения, с помощью которых, например, можно обновить или добавить путевые точки маршрута. Эти сообщения должны быть сформированы в строгом соответствии с форматом NMEA, в противном случае, они будут проигнорированы .

Список сообщений

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

AAM - Прибытие в путевую точку
ALM – Данные альманаха
АPA – Данные автопилота «А»
APB – Данные автопилота «В»
BOD – Азимут на пункт назначения
DTM – Используемый датум
GGA – Информация о фиксированном решении
GLL – Данные широты и долготы
GSA – Общая информация о спутниках
GSV – Детальная информация о спутниках
MSK – Передача управлению базовому приемнику
MSS – Статус базового приемника
RMA – Рекомендованный набор данных системы «Loran»
RMB – Рекомендованный набор навигационных GPS данных
RMC – Рекомендованный минимальный набор GPS данных
RTE – Маршрутная информация
VTG – Вектор движения и скорости
WCV – Данные скорости вблизи путевой точки
WPL – Данные путевой точки
XTC – Ошибка отклонения от трека
XTE – Измеренная ошибка отклонения от трека
ZTG – UTC время и оставшееся время до прибытия в точку назначения
ZDA – Дата и время

Некоторые из NMEA сообщений могут содержать одинаковые поля данных, либо полностью содержать данные других, меньших по размеру, NMEA сообщений.

1. GGA – информация о фиксированном решении.

Самое популярное и наиболее используемое NMEA сообщение с информацией о текущем фиксированном решении – горизонтальные координаты, значение высоты, количество используемых спутников и тип решения.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,*47 где:

GGA – NMEA Заголовок

123519 – UTC время 12:35:19

4807.038, N – Широта, 48 градусов 7.038 минуты северной широты

01131.000, Е – Долгота, 11 градусов 31.000 минуты восточной долготы

1 – тип решения*, StandAlone решение

08 – количество используемых спутников

0.9 – геометрический фактор, HDOP

545.4, М – высота над уровнем моря в метрах

46.9, М – высота геоида над эллипсоидом WGS 84

[пустое поле] – время прошедшее с момента получения последней DGPS поправки. Заполняется при активизации DGPS режима

[пустое поле] – идентификационный номер базовой станции. Заполняется при активизации DGPS режима.

* Типы решений:

2. GSA – общая информация о спутниках

Это NMEA сообщение содержит список спутников, используемых в подсчете позиции и значения геометрических факторов DOPs, определяющих точность подсчете позиции. Параметры DOP определяются геометрическим расположением спутников на небе. Чем лучше «распределены» на небе спутники, тем меньше DOP и тем лучше точность позиции. Минимальное значение PDOP (= 1) соответствует ситуации, когда один спутник находится строго над пользователем, а другие 3 равномерно распределены вокруг на уровне горизонта. Значение PDOP вычисляется, как квадратный корень из суммы квадратов HDOP и VDOP.

$GPGSA,A,3,04,05,09,12,24,2.5,1.3,2.1*39 где:

GSA – NMEA заголовок

А – тип выбора между 2D и 3D решениями, Автоматический (A-auto, M-manual)

3 – тип решения, 3D решение (1 – нет решения, 2 – 2D решение, 3 – 3D решение)

04,05… – PRN коды используемых в подсчете позиции спутников (12 полей)

2.5 – пространственный геометрический фактор, PDOP

1.3 – горизонтальный геометрический фактор, HDOP

2.1 – вертикальный геометрический фактор, VDOP

3. GSV – Детальная информация о спутниках

Это NMEA сообщение содержит детальную информацию для всех отслеживаемых навигатором GPS спутников. Исходя из ограничения в 80 символов в составе одного NMEA сообщения могут передаваться данные только для 4-х спутников. Соответственно для 12 спутников требуется 3 сообщения GSV. Поле SNR (Signal to Noise Ration) содержит значения уровней, принимаемых со спутников, навигационных сигналов. Теоретически его значение может варьироваться от 0 до 99 и измеряется в dB. Фактически уровень сигнала лежит в диапазоне 25 …35 dB. Здесь стоит отметить, что данный параметр не является абсолютным и не подходит для сравнения чувствительности приемников разных моделей и производителей. В GPS навигаторах могут использоваться различные алгоритмы вычисления уровня принимаемого сигнала, что приводит к разным результатам при равной степени чувствительности приемников. Для каждого видимого GPS спутника передается набор информации, включающий уровень сигнала, угол возвышения и азимут спутника. Количество этих «наборов» определяется общем количеством видимых спутников, значение которого передается в отдельном поле.

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75 где:

GSV – NMEA заголовок

2 – количество сообщений GSV в пакете

1 – номер сообщения в пакете (от 1 до 3)

08 – количество видимых спутников

01 – номер спутника

40 – угол возвышения, в градусах

083 – азимут в градусах

46 – SNR, уровень сигнала

Это NMEA сообщение содержит весь наборы, так называемых «PVT» данных. «PVT» - общепринятое сокращение от «position, velocity, time» (позиция, скорость, время).

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A где:

RMC – NMEA заголовок 123419 – UTC время, 12:34:59

А – статус (А- активный, V- игнорировать)

NMEA 0183 – текстовый протокол связи, используемый в приемных модулях GPS. Этот стандарт был создан для связи морского навигационного оборудования. Протоколом предусмотрена передача текстовых команд и сообщений посредством ASCII символов. Таким образом, для приема сообщений достаточно использовать последовательный интерфейс UART, при этом все сообщения можно передавать непосредственно на компьютер, используя для этого COM-порт, но не забывая о необходимости преобразования уровней сигналов.

Модуль GPS передает сообщения разного формата, содержащие различный набор данных: широта и долгота, скорость, курс, время, количество спутников и т.д. Сообщения передаются последовательно и делятся на несколько видов, формат каждого вида сообщений содержит в своих полях строго определенную информацию. Рассмотрим подробней общую структуру сообщений, которые выдает модуль GPS.

$ - с этого символа начинается каждое сообщение

Далее следует идентификатор из 5 текстовых символов. Первые две буквы обозначают тип навигационной системы, например «GP» - GPS или «GL» - Глонасс и т.д. Следующие 3 символа – это идентификатор формата сообщения, который полностью определяет содержимое последующих переданных данных. Например «RMC» - это рекомендованный минимум данных, в котором содержится информация о времени и дате, широте и долготе, скорости, курсе и магнитном отклонении в градусах (может отсутствовать). Или «GSA» , здесь будут переданы данные о спутниках. Структура основных типов сообщений будет рассмотрена ниже.

Затем следует «,» - запятая, после которой уже непосредственно идет тело сообщения с различными данными, которые отделяются друг от друга такой же запятой. Если передаваемое число не целое, то разделителем между целой и дробной частями служит точка «.» .

Конец тела сообщения обозначается символом «*» . Далее следует контрольная сумма всех символов, содержащихся между «$» и «*», то есть всего тела сообщения, включая и сами данные и идентификаторы в начале сообщения. Контрольная сумма вычисляется как XOR (исключающее ИЛИ) всех шестнадцатеричных кодов ASCII символов сообщения.

И в самом конце каждого сообщения обязательно следуют символы перевода строки

Рассмотрим назначение и структуру различных типов сообщений.

RMC – рекомендованный минимум навигационных данных. Сообщение содержит минимально необходимое количество информации. Это данные о широте и долготе, дате и времени, скорости. Для многих задач большего и не надо, например, в модуле Quectel L50 я отключил передачу всех других типов сообщений, поскольку информация о спутниках и уровне их сигналов мне абсолютно не нужна. А прием излишней информации требует усложнения программы обработки этих данных. Структура сообщения такая:

$GPRMC, hhmmss.sss ,A, ddmm.mmmm ,N, ddmm . mmmm , E ,v.v, c . c , ddmmyyyy ,x.x,n, m *hh

Это сообщение содержит следующие данные:

  • GPRMC – спутниковая система GPS, идентификатор сообщения RMC
  • hhmmss.sss – время (по Гринвичу), где hh – часы, mm – минуты, ss.sss – секунды
  • A – данные достоверны или V – данные недостоверны. Символ A в сообщении будет при уверенном приеме сигналов со спутников, необходимом для вычисления данных о местоположении. Символ V будет, когда приемник не увидит спутников или когда количество найденных спутников недостаточно для уверенного расчета координат. Например, если вы включите модуль GPS где-то панельном доме и на удалении от окон, скорее всего вы увидите символ V в принятом сообщении.
  • ddmm.mmmm – широта, градусы и минуты
  • N или S – север или юг. Полушарие, в котором вы находитесь. Если вы находитесь в Австралии, то покажет S . У меня в Екатеринбурге модуль GPS выдает N .
  • ddmm.mmmm – долгота, градусы и минуты
  • E или W – западное или восточное полушарие
  • v.v – скорость в узлах
  • c . c – курс над землей в градусах. При движении строго на север будет 0 градусов.
  • ddmmyyyy – дата
  • x.x – магнитное склонение
  • n – направление магнитного склонения. По этим двум последним параметрам ничего разъяснить не смогу. Например, мой модуль GPS Quectel L50 при приеме в квартире на окне эти данные не показывал вовсе, просто пропускал.
  • m – режим навигации: N – недостоверные данные, A – автономный, D – дифференциальный

Вот пример сообщения RMC:

$GPRMC,105954.000,A,3150.6731,N,11711.9399,E,0.00,96.10,250313,A*53

  • Время по Гринвичу 10ч 59м 54сек
  • A – данные достоверны
  • Широта 31 градус и 50.6371 минут
  • N – северная
  • Долгота 117 градусов 11.9399 минут
  • E – восточная
  • Скорость 0.00 узлов
  • Курс 96.1 градусов
  • Дата 25 марта 2013 года
  • Данные о магнитном склонении отсутствуют
  • Режим – автономный
  • Контрольная сумма символов сообщения 0×053

Здесь необходимо отметить один нюанс. Данные о широте и долготе содержат дробную часть минут, которая вовсе не соответствует количеству «секунд», поскольку является десятичной дробью. Те программы для работы с GPS, которые я пробовал, показывают координаты на карте точно. Но если ввести эти числа в строку поиска Google maps, то местоположение на карте получится в нескольких километрах от действительного. При вводе полученных координат в этом случае необходимо поделить дробную часть широты и долготы на 60, чтобы перевести эти числа в «секунды». При первом подключении модуля Quectel L50 и вводе полученных координат широты и долготы в строку поиска Google maps, я получил положение на карте со значительной погрешностью, на карте обозначилось место где-то в районе Уралмаша.

Вот еще некоторые типы сообщений, используемые в данном протоколе:

  • VTG - истинное направление курса и скорость относительно земли
  • GGA - данные о последнем определении местоположения
  • GSA - данные об активных спутниках
  • GSV - данные о видимых спутниках, их положении и номерах, а также уровне сигнала
  • GLL - данные о широте, долготе и времени
  • ZDA - данные о времени и дате

Я не стал подробно разбирать из чего состоит каждое сообщение, ссылка на документ с описанием протокола приведена в конце статьи. Конкретный тип GPS модуля может передавать не все данные из приведенных. Можно отключить или включить передачу различных типов данных, а также настроить период их выдачи. Для настройки модуля существуют специальные команды, которые начинаются с идентификатора $PSRFxxx , где xxx определяет тип и формат команды, точно так же как в исходящих сообщениях.

Например, команда $PSRF100,0,9600,8,1,0*0C задает протокол обмена и настраивает параметры последовательного порта.

  • $PSRF100 – идентификатор команды собственного протокола SIRF
  • 0 – бинарный протокол SIRF, 1 – протокол NMEA
  • 9600 – скорость бит/сек
  • 8 бит данных
  • 1 стоп-бит
  • 0 – проверка на четность отключена

Команда $PSRF103,00,00,02,01*26 настраивает параметры вывода различных типов сообщений модуля:

  • $PSRF103 – идентификатор команды собственного протокола SIRF
  • далее после запятой идут две цифры, которые определяют тип настраиваемого сообщения:00 - GGA
    01 - GLL
    02 - GSA
    03 - GSV
    04 - RMC
    05 - VTG
  • следующие две цифры настраивают порядок выдачи сообщений, например:00 - периодически
    01 - по запросу
  • следующие цифры задают период выдачи сообщений в секундах:00 = Off (сообщения отключены)
    1-255 – интервал между сообщениями данного типа в секундах
  • далее включается/отключается передача контрольной суммы в сообщении NMEA, передаваемом модулем:00 – передача контрольной суммы отключена
    01 – контрольная сумма передается
  • после символа “*”, как и в исходящем сообщении NMEA, передаются контрольная сумма и символы перевода строки.

Вот и все, что хотелось вкратце изложить о протоколе NMEA 0183 и командах управления модулем на чипсете SIRF. Более подробно расшифровка всех этих сообщений и команд приведена, например, в описании протокола модуля Quectel L50, который можно загрузить по ссылке ниже.

Описание NMEA протокола.

Реализация в приемниках Garmin и GlobalSat

Введение

Национальная Ассоциация Морской Электроники (National Marine Electronics Association - NMEA) разработала специальный протокол для поддержания совместимости морского навигационного оборудования различных производителей. Этот NMEA протокол описывает не только данные, полученные с GPS приемников, но и измерения сонаров, радаров, электронных компасов, барометров и других навигационных устройств, использующихся на морских судах. Интерфейс обмена данными большинства портативных GPS приемников реализован в соответствии с NMEA спецификацией. Большинство навигационных программ, которые обеспечивают отображение данных в реальном времени, поддерживают и «понимают» NMEA протокол. Эти данные содержат полные навигационные измерения GPS приемника – позицию, скорость и время. Все NMEA сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое отдельное сообщение не зависит от других и является полностью «завершенным». NMEA cообщение включает заголовок, набор данных, представленных ASCII символами, и поле «чексуммы» для проверки достоверности переданной информации. Заголовок стандартных NMEA сообщений состоит из 5 символов, из которых два первых определяют тип сообщения, а оставшиеся три – его название. Например, все GPS NMEA сообщения имеют префикс «GP». Сообщения, которые не описаны в спецификации NMEA, но реализованы в GPS приемниках в соответствии с общими правилами, имеют префикс «Р», дополненный тремя символами, уникальными для каждой компании. Например, «собственные» NMEA сообщения Garmin имеют префикс «PGRM», Magellan – «PMGN» Каждое NMEA сообщение начинается с «$», заканчивается «\n» («перевод строки») и не может быть длиннее 80-и символов. Все данные содержаться в одной строке и отделены друг от друга запятыми. Информация представлена в виде ASCII текста и не требует специального декодирования. Если данные не умещаются в выделенные 80 символов, то они «разбиваются» на несколько NMEA сообщений. Такой формат позволяет не ограничивать точность и количество символов в отдельных полях данных. Например, дробная часть значения координат может быть представлена 3 или 4 знаками после запятой, но это никак не должно повлиять на работу программного обеспечения, которые выделяет нужные данные из сообщения по номеру поля. В конце каждого NMEA сообщения содержится поле «чексуммы», отделенное от данных символом «*». При необходимости оно может использоваться для проверки целостности и достоверности каждого принятого сообщения. NMEA протокол поддерживает не только исходящие, но и входящие сообщения, с помощью которых, например, можно обновить или добавить путевые точки маршрута. Эти сообщения должны быть сформированы в строгом соответствии с форматом NMEA, в противном случае, они будут просто проигнорированы GPS приемником. Стоит отметить, что не все навигационные программы и модели приемников поддерживают этот режим, так как используют для загрузки точек и маршрутов фирменные протоколы производителей – Garmin, Magellan и т.д. С момента создания, NMEA протокол претерпел несколько модификаций, связанных с добавлением новых полей и сообщений. Текущей версией, которую поддерживают большинство приемников, является версия 2.3, хотя уже опубликовано описание новой версии 3.0. Полная спецификация NMEA сообщений отсутствует в свободном доступе и ее нельзя официально скачать в электронном виде, Отдельные ее разделы, общее описание NMEA протокола и наиболее популярных сообщений можно найти в Интернете. Официально приобрести NMEA документацию можно на сайте http://www.nmea.org/ .

Список сообщений

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

    AAM – Прибытие в путевую точку

    ALM – Данные альманаха

    АPA – Данные автопилота «А»

    APB – Данные автопилота «В»

    BOD – Азимут на пункт назначения

    DTM – Используемый датум

    GGA – Информация о фиксированном решении

    GLL – Данные широты и долготы

    GSA – Общая информация о спутниках

    GSV – Детальная информация о спутниках

    MSK – Передача управлению базовому приемнику

    MSS – Статус базового приемника

    RTE – Маршрутная информация VTG – Вектор движения и скорости

    WCV - Данные скорости вблизи путевой точки

    WPL – Данные путевой точки

    XTC – Ошибка отклонения от трека

    XTE – Измеренная ошибка отклонения от трека

    ZTG – UTC время и оставшееся время до прибытия в точку назначения

    ZDA – Дата и время.

Некоторые из NMEA сообщений могут содержать одинаковые поля данных, либо полностью содержать данные других, меньших по размеру, NMEA сообщений.

GGA - информация о фиксированном решении.

Самое популярное и наиболее используемое NMEA сообщение с информацией о текущем фиксированном решении – горизонтальные координаты, значение высоты, количество используемых спутников и тип решения.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,*47

GGA – NMEA Заговолок

123519 –UTC время 12:35:19

4807.038, N – Широта, 48 градусов 7.038 минуты северной широты

01131.000, Е – Долгота, 11 градусов 31.000 минуты восточной долготы

1 - тип решение, StandAlone решение

08 – количество используемых спутников

0.9 – геометрический фактор, HDOP

545.4, М – высота над уровнем моря в метрах

46.9, М – высота геоида над эллипсоидом WGS 84

[пустое поле] – время прошедшее с момента получения последней DGPS поправки. Заполняется при активизации DGPS режима

[пустое поле] – идентификационный номер базовой станции. Заполняется при активизации DGPS режима.

GSA – общая информация о спутниках.

Это NMEA сообщение содержит список спутников, используемых в подсчете позиции и значения геометрических факторов DOPs, определяющих точность подсчете позиции. Параметры DOP определяются геометрическим расположением спутников на небе. Чем лучше «распределены» на небе спутники, тем меньше DOP и тем лучше точность позиции. Минимальное значение PDOP (= 1) соответствует ситуации, когда один спутник находится строго над пользователем, а другие 3 равномерно распределены вокруг на уровне горизонта. Значение PDOP вычисляется, как квадратный корень из суммы квадратов HDOP и VDOP.

$GPGSA,A,3,04,05,09,12,24,2.5,1.3,2.1*39

    GSA – NMEA заголовок

    А – тип выбора между 2D и 3D решениями, Автоматический (A-auto, M-manual)

    3 – тип решения, 3D решение (1 – нет решения, 2 – 2D решение, 3 – 3D решение)

    04,05… - PRN коды используемых в подсчете позиции спутников (12 полей)

    2.5 – пространственный геометрический фактор, PDOP

    1.3 – горизонтальный геометрический фактор, HDOP

    2.1 – вертикальный геометрический фактор, VDOP

GSV - Детальная информация о спутниках

Это NMEA сообщение содержит детальную информацию для всех отслеживаемых навигатором GPS спутников. Исходя из ограничения в 80 символов в составе одного NMEA сообщения могут передаваться данные только для 4-х спутников. Соответственно для 12 спутников требуется 3 сообщения GSV. Поле SNR (Signal to Noise Ration) содержит значения уровней, принимаемых со спутников, навигационных сигналов. Теоретически его значение может варьироваться от 0 до 99 и измеряется в dB. Фактически уровень сигнала лежит в диапазоне 25 …35 dB. Здесь стоит отметить, что данный параметр не является абсолютным и не подходит для сравнения чувствительности приемников разных моделей и производителей. В GPS навигаторах могут использоваться различные алгоритмы вычисления уровня принимаемого сигнала, что приводит к разным результатам при равной степени чувствительности приемников. Для каждого видимого GPS спутника передается набор информации, включающий уровень сигнала, угол возвышения и азимут спутника. Количество этих «наборов» определяется общем количеством видимых спутников, значение которого передается в отдельном поле.

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75

    GSV – NMEA заголовок

    2 – количество сообщений GSV в пакете

    1 – номер сообщения в пакете (от 1 до 3)

    08 – количество видимых спутников

    01 – номер спутника

    40 – угол возвышения, в градусах

    083 – азимут в градусах

    46 – SNR, уровень сигнала

Это NMEA сообщение содержит весь наборы, так называемых «PVT» данных. «PVT» - общепринятое сокращение от «position, velocity, time» (позиция, скорость, время).

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

    RMC – NMEA заголовок

    123419 – UTC время, 12:34:59

    А – статус (А- активный, V- игнорировать)

    4807.038,N – Широта, 48 градусов 07.038 минут северной широты

    01131.000,Е – Долгота, 11 градусов 31.000 минута восточной долготы

    022.4 – Скорость, в узлах

    003.1,W – Магнитные вариации

GLL - данные широты и долготы

NMEA сообщение со значением координат широты и долготы, и времени когда было вычислено это решение.

$GPGLL,4916.45,N,12311.12,W,225444,A,*31

    GLL – NMEA заголовок

    4916.46,N – широта, 49 градусов 16.45 минут северной широты

    12311.12,W-долгота, 123 градуса 11.12 минут западной долготы

    225444 – Время фиксации в шкале времени UTC, 22:54:44

ВOD - Азимут на пункт назначения

Это NMEA сообщение указывает азимут на точку назначения в режиме навигации.

$GPBOD,045.,T,023.,M,DEST,START*01

    BOD – NMEA заголовок

    045.,T – истинное направление на точку

    023.,M – магнитное направление на точку

    DEST – идентификационный номер конечной точки

    START – идентификационный номер начальной точки

$GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20

    RMB – NMEA заголовок

    А – Тип данных, (А – активные, V - игнорировать)

    0.66,L – отклонение от трека. Параметра определен в морских милях. (L –влево, R-вправо)

    003 - идентификационный номер начальной точки

    004 - идентификационный номер конечной точки

    4917.24,N – значение широты конечной точки, 49 градусов 17.24 минуты северной широты

    12309.57,W – значение долготы конечной точки, 123 градуса 09.57 минут западной долготы

    001.3 – расстояние до точки, в морских милях

    000.5 – скорость, в узлах

    V – информация о прибытии (А – прибытие, V – точка еще не достигнута)

RTE – Маршрутная информация

NMEA сообщение RTE выводит список путевых точек активного маршрута. Есть два типа сообщений RTE. В первом случае, отображаются все точки маршрута. Во втором, только список оставшихся точек, которые еще предстоит посетить при движении по маршруту. Учитывая, что в NMEA протоколе есть ограничение, по которому длина сообщение не должна превышать 80 символов, сообщение RTE может состоять из нескольких строк.

$GPRTE,2,1,c,0,W3IWI,DRIVWY,32CEDR,32-29,32BKLD,32-I95,32-US1,BW-32,BW-198*69

    RTE – NMEA заголовок

    2 – общее количество сообщений для отображения полного списка данных

    1 – номер сообщения из общего списка

    с – тип RTE сообщения (с – полный список точек маршрута, w – список точек, которые еще предстоит посетить)

    0 – идентификатор маршрута

    W3IWI,DRIVWY,.. - список путевых точек

Особенности Garmin

Приемники Garmin поддерживают большинство сообщений NMEA, содержащие GPS измерения, координаты и время – GGA, GLL, GSA, GSV, RMC. А также навигационные сообщения – RMB, BOD

Для вывода этих сообщений необходимо в настройках приемника изменить интерфейс с «Garmin» на «NMEA» и возможно установить нужную скорость. Эту же скорость необходимо установить в навигационной программе в настройках последовательного порта к которому подключается навигатор.

К сожалению, приемники с USB –портом не поддерживают NMEA протокол, ограничивая его настройки только протоколом «Garmin»

Для вывода информации поступающей в последовательный порт компьютера можно воспользоваться терминальной программой Windows, либо одной из навигационных программ поддерживающих такую возможность.

Ниже представлен список NMEA сообщений приемника Garmin eMap, которые содержаться в составе одной эпохи.

$GPRMC,135412,A,5522.8973,N,03710.1401,E,0.0,0.0,190507,9.3,E,A*1F

$GPRMB,A,,A,A*0B

$GPGGA,135412,5522.8973,N,03710.1401,E,1,04,5.4,205.2,M,15.8,M,*4A

$GPGSA,A,3,08,13,23,25,5.7,5.4,1.0*3C

$GPGSV,3,1,11,02,15,267,00,03,11,085,45,04,05,236,00,08,39,233,00*77

$GPGSV,3,2,11,10,32,308,00,13,63,109,43,16,17,037,00,23,31,111,38*77

$GPGSV,3,3,11,24,09,343,00,25,66,077,44,27,69,229,00*46

$GPGLL,5522.8973,N,03710.1401,E,135412,A,A*43

$GPBOD,T,M,*47

$PGRME,19.1,M,15.2,M,25.3,M*15

$ PGRMZ,673, f,3*19

$ PGRMM, WGS 84*06

В дополнение к стандартным NMEA сообщениям, в приемниках Garmin реализован собственный набор сообщений, каждое из которых в заголовке содержит префикс «GRM», идентификатор «М» или «Z», определяющий тип данных, и один символ для названия.

PGRME – оценка ошибки позиционирования

$PGRME,15.0,M,45.0,M,25.0,M*1C

    15.0,М – оценка горизонтальной ошибки позиционирования, в метрах

    45.0,М – оценка вертикальной ошибки, в метрах

    25.0,М – эквивалентная сферическая ошибка позиционирования

PGRMZ – измерения высоты

$PGRMZ,93,f,3*21

    93,f – значение высоты, в фунтах

    3 - условия измерения позиции (2 – высота, определенная пользователем,

    3 – высота, вычисленная GPS)

PGRMM – текущий датум

$PGRMM,NAD27 Canada*2F

    NAD27 Canada – название текущего горизонтального датума

Особенности Sirf

GPS чипы компании «Sirf» используются в различном навигационном GPS оборудовании, начиная от обычных плат, заканчивая портативными и автомобильными GPS навигаторами. Но в отличие от навигаторов, они поддерживают только NMEA сообщения связанные с GPS измерениями, вычислением позиции и времени – GGA, GLL, GSA, GSV, RMC, VTG, ZDA.

«Sirf» поддерживает также несколько «входящих» NMEA сообщений, предназначенных для конфигурации и настройки различных параметров. В дополнение, в «Sirf» реализован собственный бинарный протокол, который позволяет изменить значительно больше настроек. Эти 5 «входящих» NMEA сообщений в соответствии с правилами начинают с префикса $PSFR. Все сообщения содержат фиксированный набор данных и заканчиваются символом «\n» (перевод строки)

Для конфигурации параметров «Sirf» используется специальная программа «SirfTech». Настройка параметров NMEA сообщение осуществляется в отдельном пункте меню.

$GPGGA,100643.000,5522.9036,N,03710.1282,E,1,07,1.6,209.9,M,14.9,M,0000*52

$GPGSA,A,3,31,01,23,20,11,30,14,2.1,1.6,1.4*35

$GPGSV,3,1,12,20,84,187,41,01,49,067,46,23,46,238,45,31,45,073,50*7B

$GPGSV,3,2,12,11,25,194,34,13,16,240,04,15,319,30,17,14,273,21*7A

$GPGSV,3,3,12,30,10,026,33,14,05,063,22,05,04,009,25,25,03,195,*7F

$GPRMC,100643.000,A,5522.9036,N,03710.1282,E,0.16,119.11,200507,*0D

Как видно из приведенного примера, «заводские» установки содержат меньшее количество NMEA сообщений по сравнению с настройками Garmin. При необходимости этот набор можно расширить, установив период в недостающих NMEA сообщений.

$GPGGA,100833.000,5522.9076,N,03710.1270,E,1,07,1.3,222.4,M,14.9,M,0000*53

$GPGLL,5522.9076,N,03710.1270,E,100833.000,A*34

$GPGSA,A,3,31,01,23,20,11,30,17,2.1,1.3,1.6*31

$GPGSV,3,1,12,20,84,180,43,01,49,067,47,23,47,238,45,31,45,072,49*77

$GPGSV,3,2,12,11,24,193,26,13,16,240,26,04,15,319,24,17,13,273,31*78

$GPGSV,3,3,12,30,10,025,26,14,04,064,22,25,04,195,05,04,008,21*7C

$GPRMC,100833.000,A,5522.9076,N,03710.1270,E,0.18,4.86,200507,*00

$GPVTG,4.86,T,M,0.18,N,0.3,K*60

$GPZDA,100834.000,20,05,2007,*5A

PSFR100, PSFR102 – конфигурация последовательных портов

NMEA сообщение под номером 100 служит для установки порта А, сообщение 102 – порта В. Сообщение 100 имеет дополнительное поле, которое позволяет переключить интерфейс в бинарный Sirf протокол.

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

$PSRF100,0,9600,8,1,0*0C

$PSRF102,9600,8,1,0*3C

    PSRF100 – NMEA заголовок

    0 – параметр, указывающий в каком режиме был изменен протокол (0-Sirf, 1-NMEA)

    9600 – скорость порта (4800, 9600, 19200, 38400)

    8 – биты данных (7, 8)

    1 – стоп-биты (0,1)

    0 – парность (0 – нет, 1-нечетная, 2-четная)

PSFR101, PSFR104 – инициализация параметров приемника

NMEA сообщения под номерами 101 и 104 предназначены для инициализации параметров, предназначенных для GPS приема. Определение этих параметров может ускорить время захвата GPS спутников. Сообщение 101 устанавливает текущие координаты в формате XYZ, сообщение 104 – в формате BLH (долгота, широта).

$PSRF101,-2686700,-4304200,3851624,95000,497260,921,12,3*22

$PSRF104,37.3875111,-121.97232,0,95000,237759,922,12,3*3A

    PSRF101 – NMEA заголовок

    37.3875111 – широта в градусах

    121.97232 – долгота в градусах

    0 – высота, в метрах

    95000 – сдвиг часов

    237759 – GPS время, в секундах

    922 – номер GPS недели

    12 – количество каналов

    3 – тип инициализации данных (1 – горячий старт, 2 – теплый старт, 3 – инициализация данных, 4 – холодный старт с полной очисткой данных, 8 – холодный старт с восстановлением заводских настроек)

PSFR103 – конфигурация генерации NMEA сообщений

Это NMEA сообщение позволяет установить или запросить период генерации каждого «исходящего» NMEA сообщения.

$PSRF103,05,00,01,01*20

    PSRF103 – NMEA заголовок

    05 – название сообщения

    01 – период, в секундах (0-255)

    01 – наличие чексуммы (0- да, 1 - нет)

Результаты эксперимента

В условия нормальной видимости спутников, приемник Garmin eMap выдает следующий набор NMEA сообщений:

$GPRMC,104644,A,5522.8965,N,03710.1389,E,0.0,0.0,200507,9.3,E,A*16

$GPRMB,A,,A,A*0B

$GPGGA,104644,5522.8965,N,03710.1389,E,1,07,1.2,186.6,M,15.8,M,*44

$GPGSA,A,3,01,04,13,16,20,23,31,2.1,1.2,1.7*35

$GPGSV,3,1,10,01,34,070,48,04,28,311,40,11,10,190,00,13,32,249,41*7E

$GPGSV,3,2,10,16,11,111,40,20,68,142,50,23,64,247,49,25,21,196,00*70

$GPGSV,3,3,10,30,05,012,00,31,36,055,52*7D

$GPGLL,5522.8965,N,03710.1389,E,104644,A,A*40

$GPBOD,T,M,*47

$PGRME,6.0,M,7.7,M,9.8,M*29

$PGRMZ,612,f,3*1E

$PGRMM,WGS 84*06

$GPRTE,1,1,c,*37

Из анализа сообщений видно, что в на текущий момент приемником отслеживается 10 (GSV) спутников, из которых 7 (GGA) используются в подсчете позиции. Горизонтальная ошибка позиционирования при этом равняется 6 метрам (RME), а индикатор типа решения – 1 (GGA)

Если создать условиях, при которых GPS сигнал не будет приниматься, то сообщения GGA будут содержать «пустые» поля, а индикатор типа решения примет значение 0 (GGA)

$GPGGA,0,00,M,M,*66

$GPGSA,A,1,,*1E

В «нормальном» режиме сообщения RMB и BOD содержат пустые поля. После того, как в качестве конечной точки назначения была выбрана путевая точка «Дорога», эти поля «наполнились» данными. Как следует из анализа сообщение, расстояние до точки – 1.620 миль, азимут движения - 6.3 градуса (BOD). При этом, азимут сообщений BOD и RMB отличается на 0.1 градус.

$GPRMB,A,0.00,R,Дорога,5524.501,N,03710.445,E,1.620,6.4,V,A*59

$GPBOD,6.3,T,357.0,M,Дорога,*74

После того, как для навигации был выбран маршрут «Home» в списке сообщения RTE отобразился список всех путевых точек маршрута. А в сообщении RMВ – идентификационные номера начальной и конечной (очередной) точек маршрута.

$GPRTE,1,1,c,HOME,SLOBODA,IERUSALIM,INSTITUT*01

$GPRMB,A,9.99,R,SLOBOD,IERUSAL,5555.237,N,03649.976,E,34.346,340.6,V,A*1F

Заключение

В большинстве случаев, пользователю не нужно, да и не интересно знать, какие данные и в каких полях передаются. Большинство навигационных программ «разбирают» данные NMEA сообщений и представляют их в удобном для пользователя виде – графики, схемы, таблицы и т.п.

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

Но все же, для глубокого анализа GPS данных, формат NMEA не предназначен, так как не содержит так называемые «сырые» измерения – псевдодальности, фазы, допплер. Каждый производитель навигационной аппаратуры имеет свой «открытый» или «закрытый» протокол, который выводит эту информацию

NMEA – это простой и понятный формат, который позволяет не только обеспечить обмен данными между GPS приемниками и навигационными программами, но и дает пользователям некоторое представление о принципах работы спутниковой навигационной аппаратуры.

Внимание!

В качестве исходного материала использована статья с сайта " GPS portal "



 

Возможно, будет полезно почитать: