Как можно съесть слона? По кусочку за раз

К сожалению, полная спецификация NMEA сообщений отсутствует в свободном доступе и ее нельзя официально скачать в электронном виде, Отдельные ее разделы, общее описание NMEA протокола и наиболее популярных сообщений можно найти в Интернете. Официально приобрести NMEA документацию можно на сайте http://www.nmea.org/.
читать дальше. Многабукаф
Каждое отдельное сообщение не зависит от других и является полностью «завершенным». 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 протокол нашел применение не только морской аппаратурой, но и в геодезических, бытовых и авиационных 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 сообщений.
Содержание NMEA сообщенийСодержание NMEA сообщений
GGA - информация о фиксированном решении.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 решение
0 – нет решения,
1 – StandAlone,
2 – DGPS,
3 – PPS,
4 – фиксированный RTK,
5 – не фиксированный RTK,
6 – использование данных инерциальных систем,
7 – ручной режим,
8 – режим симуляции
08 – количество используемых спутников
0.9 – геометрический фактор, HDOP
545.4, М – высота над уровнем моря в метрах
46.9, М – высота геоида над эллипсоидом WGS 84
[пустое поле] – время прошедшее с момента получения последней DGPS поправки. Заполняется при активизации DGPS режима
[пустое поле] – идентификационный номер базовой станции. Заполняется при активизации DGPS режима.
GSA – общая информация о спутниках.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 - Детальная информация о спутниках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, уровень сигнала
RMC - рекомендованный минимальный набор GPS данных RMC - рекомендованный минимальный набор GPS данных
Это 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 – Скорость, в узлах
084.4 – Направление движения, в градусах
230394 – Дата, 23 марта 1994 года
003.1,W – Магнитные вариации
GLL - данные широты и долготы 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
А – Тип данных, (А – активные, V - игнорировать)
RMB – рекомендованный набор навигационных GPS данных RMB – рекомендованный набор навигационных GPS данных
NMEA сообщение содержит рекомендованный минимальный набор данных для навигации «по маршруту» или «на точку» в режиме «Goto».
$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 – расстояние до точки, в морских милях
052.5 – направление на точку
000.5 – скорость, в узлах
V – информация о прибытии ( А – прибытие, V – точка еще не достигнута)
Пример NMEA сообщений от моей блохи (u-blox)Пример NMEA сообщений от моей блохи (u-blox)
$GPRMC,,V,,,,,,,,,,N*53
$GPVTG,,,,,,,,,N*30
$GPGGA,,,,,,0,00,99.99,,,,,,*48
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,4,1,16,03,,,26,04,,,21,08,,,25,10,,,26*71
$GPGSV,4,2,16,11,,,21,13,,,27,14,,,20,16,,,26*78
$GPGSV,4,3,16,18,,,21,19,,,27,20,,,29,23,,,27*73
$GPGSV,4,4,16,24,,,29,25,,,27,27,,,26,28,,,21*79
$GPGLL,,,,,,V,N*64
Видим 16 спутников со слабым приёмом (SNR, уровень сигнала) - подключал без активной антенны и в помещении с железобетонными перекрытиями.
Другой пример, когда есть фикс:
$GPRMC,164722.00,A,4959.57695,N,03615.36607,E,0.922,94.44,240613,,,A*50
$GPVTG,94.44,T,,M,0.922,N,1.708,K,A*07
$GPGGA,164722.00,4959.57695,N,03615.36607,E,1,06,1.30,110.0,M,17.0,M,,*56
$GPGSA,A,3,29,21,05,31,16,25,,,,,,,2.60,1.30,2.25*0E
$GPGSV,3,1,12,02,06,056,,05,35,065,24,10,01,025,,12,02,148,*72
$GPGSV,3,2,12,13,01,352,,16,14,316,17,18,02,182,,21,45,224,32*7B
$GPGSV,3,3,12,25,36,162,25,29,76,069,24,30,54,294,,31,24,251,15*72
$GPGLL,4959.57695,N,03615.36607,E,164722.00,A,A*61
появилось больше информации по спутниках, время (16:47:22), координаты (долгота/широта) и прочее

Как я уже говорил, есть замечательная библиотека NMEA library для комфортного разбора сообщений NMEA.
UPD. +++ ссылочка на описание NMEA сообщений +++