Протокол обмена сообщениями GPS NMEA 0183 101
С помощью смартфона мы можем определить своё местоположение на Земле с точностью до нескольких метров. Это становится возможным благодаря чипу, который взаимодействует с группой спутников на орбите, — такая система называется Глобальной навигационной спутниковой системой (ГНСС / GNSS). ГНСС — это группа, или созвездие, из 24 и более спутников, которые работают совместно, обеспечивая позиционирование и услуги синхронизации времени по всему миру при любых погодных условиях.
Хотя Глобальная система позиционирования (GPS) Соединённых Штатов является наиболее широко используемой ГНСС в мире, существуют и другие системы, в том числе:
BeiDou Navigation Satellite System (BDS) — Китай.
Navigation Indian Constellation (NavIC) — Индия.
European Global Navigation System (Galileo) — Европа.
Quasi-Zenith Satellite System (QZSS) — Япония.
Globalnaya Navigazionnaya Sputnikovaya Sistema (ГЛОНАСС) — Россия.
Для вычисления положения в трёх измерениях и смещения времени в часах приёмника необходимы данные как минимум от четырёх спутников ГНСС. Это означает, что точность и достоверность данных о положении, скорости и времени возрастают по мере увеличения числа спутников.
Примечание
Как правило, термин «GPS» используется в общем смысле для обозначения оборудования и процесса определения местоположения с помощью ГНСС.
GPS-приёмники взаимодействуют, используя несколько «языков», или протоколов, включая стандартные и нестандартные (то есть проприетарные) форматы сообщений. В этих протоколах информация может передаваться в виде двоичных данных (т.е. единиц и нулей) или с использованием кодировки символов ASCII. Среди всех стандартов сообщений, применяемых с GPS-приёмниками, NMEA 0183 является наиболее широко используемым стандартом.
NMEA — это аббревиатура от National Marine Electronics Association (Национальная ассоциация морской электроники). Эта ассоциация была основана в 1957 году торговцами электроникой с целью повышения технологического уровня и безопасности морской электроники посредством обучения монтажников и разработки интерфейсных стандартов. Протокол обмена сообщениями NMEA 0183 был принят в 1983 году — изначально для сопряжения морского электронного оборудования, однако впоследствии его применение распространилось и на наземную электронику [3].
NMEA 0183 — это простой протокол обмена сообщениями, в котором данные передаются в виде ASCII-строк или «предложений» от одного «говорящего» (talker) к одному или нескольким «слушателям» (listeners) одновременно. Ещё одна характерная особенность протокола NMEA 0183 заключается в том, что он использует электрический стандарт RS-422, хотя совместим и со стандартом RS-232 [3]. Параметры последовательного соединения протокола NMEA 0183 следующие:
Скорость передачи: 4800 бод.
Биты данных: 8.
Чётность: отсутствует.
Стоп-бит: отсутствует.
«Говорящими» (talkers) в NMEA 0183 могут быть, например, спутник, эхолот или компас, а «слушателями» (listeners) — картплоттер, радар или GPS-приёмник, такой как используемый в Arduino MKR GPS Shield.
Протокол NMEA 0183 иногда вызывает путаницу, поскольку существует не одно «предложение», а разные предложения NMEA 0183 с различными возможностями и назначением — как правило, отличается именно информация, которую они могут предоставить. Чтобы разобраться в различных возможностях, назначении и составе предоставляемой информации, необходимо сначала понять их структуру.
Структура предложений GPS NMEA 0183
Все предложения NMEA 0183 начинаются со знака $ и заканчиваются возвратом каретки и переводом строки; каждое поле данных в предложении разделяется запятой:
$aaaaa,df1,df2,df3*hh<CR><LF>
За знаком $ всегда следует адресное поле из 5 символов, а hh — это двухзначная шестнадцатеричная контрольная сумма. Предложение NMEA 0183 может содержать максимум 80 символов, не считая символа возврата каретки и символа перевода строки. Рассмотрим пример предложения GPS NMEA 0183:
$GPGGA,181908.00,3404.7041778,N,07044.3966270,W,4,13,1.00,495.144,M,29.200,M,0.10,0000,*40
В этом предложении NMEA 0183 можно выделить следующую информацию:
GP обозначает позицию GPS (GL означало бы ГЛОНАСС).
181908.00 — это временна́я метка (UTC в часах, минутах и секундах).
3404.7041778 — широта в формате DDMM.MMMMM.
N обозначает северную широту.
07044.3966270 — долгота в формате DDDMM.MMMMM.
W обозначает западную долготу.
4 — индикатор качества (точность).
13 — количество спутников, использованных для определения координат.
1.00 — горизонтальный коэффициент ухудшения точности (HDOP).
495.144 — высота антенны GPS.
M — единица измерения высоты (метры или футы).
29.200 — геоидальное разделение.
M — единица измерения геоидального разделения (метры или футы).
1.0 — возраст поправки (если есть).
0000 — идентификатор станции поправок (если есть).
*40 — контрольная сумма.
$GPGGA является базовым и распространённым предложением NMEA 0183; альтернативные и сопутствующие предложения NMEA 0183 предоставляют аналогичную или дополнительную информацию.
Базовая структура предложения NMEA 0183.
Распространённые предложения GPS NMEA 0183
В таблице ниже описаны некоторые распространённые предложения протокола NMEA 0183, встречающиеся в контексте GPS:
Предложение |
Описание |
|---|---|
|
Данные о времени, положении и типе фиксации. |
|
Широта, долгота, время UTC фиксации позиции и статус. |
|
Режим работы GPS-приёмника, спутники, задействованные в решении определения положения, значения DOP. |
|
Количество видимых спутников, идентификационные номера спутников, угол возвышения, азимут, значения SNR. |
|
Данные о времени, дате, положении, курсе и скорости. |
|
Информация о курсе и скорости относительно земли. |
Важно
Предложение $GPRMC является ключевым, поскольку содержит рекомендуемый минимум навигационных данных, которые должен предоставлять приёмник ГНСС.
Совет
Для извлечения информации о позиции записывайте как минимум одно из следующих предложений NMEA 0183: $GPGGA, $GPGLL, $GPRMC.
Arduino® и протокол обмена сообщениями GPS NMEA 0183
Платы семейства Arduino MKR могут работать с протоколом обмена сообщениями NMEA 0183 с помощью Arduino MKR GPS Shield и библиотеки Arduino_MKR GPS.
Щит MKR GPS Shield.
MKR GPS Shield основан на модуле ГНСС u-blox SAM-M8Q; этот модуль поддерживает одновременный приём сигналов от до трёх систем ГНСС (GPS, Galileo и ГЛОНАСС), а также поддерживает SBAS и QZSS. Кроме того, он одновременно распознаёт несколько созвездий и обеспечивает исключительную точность позиционирования в условиях городской застройки или при слабом сигнале.
MKR GPS Shield предназначен для использования поверх плат семейства MKR, однако его также можно подключить к другим платам Arduino на базе SAM D через контакты UART или I2C (библиотека Arduino_MKR GPS поддерживает оба протокола связи).
Дополнительную информацию можно найти в официальной документации по щиту.
Учебные материалы по MKR GPS Shield
Если вы хотите научиться работать с MKR GPS Shield, ознакомьтесь со следующими руководствами:
Ссылки
[1] «SAM-M8Q Data Sheet», u-blox.com, 2020. [Online]. Available: https://www.u-blox.com/en/docs/UBX-16012619. [Accessed: 05-Oct-2021].
[2] «u-blox 8 / u-blox M8 Receiver Description», u-blox.com, 2021. [Online]. Available: https://www.u-blox.com/en/docs/UBX-16018358. [Accessed: 05-Oct-2021].
[3] «NMEA 0183 Interface Standard», NMEA, 2021. [Online]. Available: https://www.nmea.org/nmea-0183.html. [Accessed: 05-Oct-2021].