Skip to content
Урок 3. NMEA: градусы, минуты и почему нельзя делить на 100

Урок 3. NMEA: градусы, минуты и почему нельзя делить на 100

Урок 3. NMEA: градусы, минуты и почему нельзя делить на 100

Паспорт урока

ПараметрЗначение
Место в модулеBeaconRadio, модуль 2 «Физика и данные», урок 3 из 7
Длительность45 мин
Возраст12–16
ОборудованиеGPS-модуль + монитор порта (либо распечатки строк NMEA), карта
Предварительные знанияУроки 1–2; десятичные дроби
ПредметМатематика (единицы измерения), география, информатика

Образовательные цели

ЦельБлумМиллерЧем доказывается
3.1Переводить координаты NMEA в десятичные градусыприменятьпоказывает какПеревод с проверкой по карте
3.2Определять созвездие по талкеру строки NMEAпониматьзнаетРазбор $GP/$GL/$GA/$GN
3.3Оценивать цену ошибки в единицах измеренияоцениватьзнает какРасчёт сдвига в километрах
3.4Читать поле качества фикса и понимать его ограниченияанализироватьзнает какРазбор значения «6 = экстраполяция»

Сценарий занятия (45 минут)

ВремяБлокЧто делает педагогЧто делают ученики
0–5RetrievalМини-квиз по урокам 1–2Пишут, разбор
5–12Живые данныеПоказывает поток NMEA с модуляЧитают строки, находят координату
12–20Ловушка«Переведите 5537.838 в градусы»Большинство делит на 100 — ошибка
20–30ТеорияГрадусы-минуты, талкеры, качество фиксаРазбирают формат
30–40ПрактикаПереводы, проверка по картеРешают задачи
40–45Итог и ДЗФиксацияЗаписывают

Блок 1. Живые данные (5–12 мин)

Демонстрация

Подключить GPS-модуль и показать поток строк в мониторе порта:

$GPGGA,123519.00,5537.838,N,03736.200,E,1,08,1.1,150.4,M,,,,*47
$GPRMC,123519.00,A,5537.838,N,03736.200,E,0.02,,120726,,,A*62
$GLGSV,2,1,06,65,45,120,38,66,30,200,35*6A

«Модуль каждую секунду выдаёт такие строки. Это язык NMEA — стандарт, на котором все GPS-приёмники мира разговаривают с устройствами. Найдите здесь координаты.»

Ученики находят 5537.838,N и 03736.200,E.

Постановка задачи

«Отлично. Мы в Москве, широта примерно 55,7°. В строке — 5537.838. Переведите это в градусы.»


Блок 2. Ловушка (12–20 мин)

Что произойдёт

Подавляющее большинство разделит на 100 и получит 55,37°. Число выглядит правдоподобно — рядом с ожидаемым 55,7.

Не поправлять сразу. Дать проверить по карте.

Проверка по карте

«Откройте карту и найдите точку 55,37° и 37,36°. Где вы оказались?»

Точка окажется примерно в 30 км южнее нужного места — в другом населённом пункте.

Разбор ошибки

«Число выглядело правильным. Формула казалась очевидной. Результат — промах на 30 километров. Для маячка человека с деменцией это означает, что помощь поедет не туда. Почему деление на 100 неверно?»

Методическая ценность этой ошибки. Пусть ученики совершат её сами и проверят по карте. Ошибка, пойманная собственной проверкой, запоминается несопоставимо лучше предупреждения «не делите на 100». Это и есть «желательная трудность» из главы 6 дорожной карты педагога.

Блок 3. Теория (20–30 мин)

3.1. Базовый уровень (12–14 лет)

Градусы и минуты — как часы.

Время мы пишем не десятичной дробью: 1 час 30 минут — это не «1,30 часа», а 1,5 часа. Потому что в часе 60 минут, а не 100.

С углами то же самое: в одном градусе 60 минут. Запись 5537.838 означает 55 градусов и 37,838 минуты. Чтобы получить десятичные градусы, минуты делят на 60, а не на 100.

Формула:

градусы=55+37,83860=55+0,6306=55,6306°\text{градусы} = 55 + \frac{37{,}838}{60} = 55 + 0{,}6306 = \mathbf{55{,}6306°}

Сравнение с ошибочным ответом:

СпособРезультатОшибка
Правильно (÷ 60)55,6306°
Ошибочно (÷ 100)55,3784°28,9 км

3.2. Углублённый уровень (14–16 лет)

Шаг 1. Структура записи NMEA.

Формат координаты: ГГММ.МММ для широты и ГГГММ.МММ для долготы.

ЧастьПример (широта)Значение
Градусы55целые градусы (2 цифры)
Минуты37.838минуты с дробью

Долгота имеет три цифры градусов (03736.200 = 037° 36,200′), потому что долгота изменяется от 0 до 180°.

Общая формула:

D=градусы+минуты60D = \text{градусы} + \frac{\text{минуты}}{60}

Шаг 2. Расчёт цены ошибки.

Один градус широты ≈ 111 км. Ошибка составила:

55,630655,3784=0,2522°×111 км/°28,0 км55{,}6306 - 55{,}3784 = 0{,}2522° \times 111\ \text{км/°} \approx \mathbf{28{,}0\ \text{км}}

Шаг 3. Талкеры — кто дал решение.

Первые две буквы после $ говорят, какая система выдала данные:

ТалкерСистемаСтрана/регион
$GPGPSСША
$GLГЛОНАССРоссия
$GAGalileoЕвросоюз
$GB / $BDBeiDouКитай
$GNсмешанное решениенесколько систем сразу

Важное правило разбора. Сравнивать надо тип сообщения (три буквы после талкера: GGA, RMC, GSV), а не весь префикс целиком. Строка $GNGGA \text{и} $GPGGA — это одно и то же сообщение GGA, просто от разных источников решения. Ошибка «искать строго $GPGGA» приводит к тому, что программа не видит данных на приёмниках со смешанным решением.

Талкер $GL (ГЛОНАСС) сыграет ключевую роль на уроке 5 — по нему обнаруживается спуфинг.

Шаг 4. Качество фикса (поле 6 сообщения GGA).

ЗначениеСмыслМожно ли доверять
0нет решениянет
1обычный GPSда
2дифференциальный (DGPS)да, точнее
4 / 5RTK (сантиметровая точность)да, очень точно
6экстраполяция (dead reckoning)осторожно!

Ловушка значения 6. Режим dead reckoning означает, что модуль не видит спутников и вычисляет положение по последней известной скорости и направлению. Формально «фикс есть», а фактически это предположение, которое с каждой секундой всё дальше от реальности.

Если программа проверяет только «фикс ≠ 0», она примет экстраполяцию за настоящее решение. Правильная проверка учитывает конкретное значение поля.

Шаг 5. Контрольная сумма строки.

Каждая строка NMEA заканчивается * и двумя шестнадцатеричными цифрами — это XOR всех байтов между $ и *. Тот же принцип, что CRC из урока 2, только проще. Битые строки нужно отбрасывать.


Блок 4. Практические задачи (30–40 мин)

Уровень A (12–14 лет)

A1. Переведите 5540.500,N в десятичные градусы.

Решение

55 градусов + 40,500 минут.

55+40,560=55+0,675=55,6750°55 + \frac{40{,}5}{60} = 55 + 0{,}675 = \mathbf{55{,}6750°}

A2. Переведите 03736.200,E в десятичные градусы. Не забудьте: у долготы три цифры градусов.

Решение

037 градусов + 36,200 минут.

37+36,260=37+0,6033=37,6033°37 + \frac{36{,}2}{60} = 37 + 0{,}6033 = \mathbf{37{,}6033°}

A3. Почему минуты делят на 60, а не на 100?

Ответ

Потому что в одном градусе 60 минут — так же, как в часе 60 минут. Это не десятичная система, и деление на 100 даёт неверный результат.

Уровень B (14–15 лет)

B1. Ученик перевёл 5537.838 делением на 100 и получил 55,3784°. На сколько километров он промахнулся? (1° широты ≈ 111 км)

Решение

Правильное значение: 55 + 37,838/60 = 55,6306°.

Разница: 55,6306 − 55,3784 = 0,2522°.

0,2522°×111 км°28 км0{,}2522° \times 111\ \frac{\text{км}}{°} \approx \mathbf{28\ \text{км}}

Вывод: для маячка безопасности это означает поиск человека в другом городе.

B2. В строке $GNGGA \text{талкер} — GN. \text{Что} \text{это} \text{означает} \text{и} \text{почему} \text{программа}, \text{ищущая} \text{строго} $GPGGA, не увидит данных?

Ответ

GN означает смешанное решение — приёмник использовал спутники нескольких систем (GPS + ГЛОНАСС + другие) одновременно, что обычно точнее.

Программа, сравнивающая весь префикс $GPGGA, не найдёт совпадения и решит, что данных нет, — хотя они есть и лучшего качества. Правильно сравнивать три буквы типа сообщения (GGA), игнорируя талкер.

B3. Приёмник сообщает качество фикса = 6. Стоит ли использовать эту координату для отправки тревоги?

Ответ

Нет. Значение 6 означает dead reckoning — модуль не видит спутников и экстраполирует положение по последним известным скорости и направлению. Для человека, который упал и лежит, экстраполяция бессмысленна: она продолжит «вести» его по прежнему маршруту.

Для тревоги нужен настоящий фикс (значение 1, 2, 4 или 5). Если его нет — честно отправить флаг gps_valid = 0, чтобы диспетчер знал, что координата не подтверждена.

Уровень C (15–16 лет)

C1. Один градус широты — примерно 111 км везде. А один градус долготы? Объясните разницу и посчитайте для широты Москвы (55,63°).

Решение

Меридианы сходятся к полюсам, поэтому длина градуса долготы зависит от широты:

Lдолготы=111cos(φ)L_{\text{долготы}} = 111 \cdot \cos(\varphi)

Для 55,63°: cos(55,63°) ≈ 0,5646.

L111×0,564662,7 кмL \approx 111 \times 0{,}5646 \approx \mathbf{62{,}7\ \text{км}}

Практическое следствие: одна и та же ошибка в градусах долготы на широте Москвы даёт вдвое меньший сдвиг, чем в широте. А на экваторе они равны. Это важно при оценке точности и при построении карт.

C2. Точность нашего формата — lat × 10⁷, то есть 10⁻⁷ градуса. Сколько это в метрах? Не избыточна ли такая точность?

Решение107°×111000 м°=0,0111 м1,1 см10^{-7}° \times 111\,000\ \frac{\text{м}}{°} = 0{,}0111\ \text{м} \approx \mathbf{1{,}1\ \text{см}}

Точность бытового GPS — единицы метров (2–10 м). Наш формат хранит координату в сотни раз точнее, чем её способен измерить приёмник.

Избыточна ли? Формально да, но это не расточительство: int32 всё равно занимает 4 байта, и меньший множитель (например, 10⁵) не сэкономил бы ни байта, зато потребовал бы думать о потере точности. Множитель 10⁷ — стандарт де-факто, он гарантированно не ограничивает точность и совместим с другими системами.

Вывод: избыточность бесплатна — это хороший инженерный выбор. Избыточность, которая чего-то стоит, требует обоснования.

C3. Предложите проверку правдоподобия координаты, которую можно добавить в прошивку маячка. От каких ошибок она защитит, а от каких нет?

Разбор

Возможные проверки:

  1. Диапазон: широта в пределах [−90, 90], долгота [−180, 180]. Ловит грубые ошибки разбора.
  2. Географическая область: координата внутри ожидаемого региона эксплуатации. Ловит ошибку «делить на 100» и часть спуфинга.
  3. Скорость перемещения: расстояние от предыдущей точки, делённое на время, не превышает разумного (человек не движется быстрее 10 м/с). Ловит скачки и часть спуфинга.
  4. Возраст фикса: не старше порога (урок 4).

От чего не защитит: от согласованного спуфинга, который подставляет правдоподобную близкую точку с реалистичной динамикой. Против него нужна кросс-проверка по созвездиям — урок 5.

Ценный вывод: проверки правдоподобия ловят ошибки своего кода и грубые внешние аномалии, но не защищают от продуманной атаки.


Ответы на вопросы, которые прозвучат

Вопрос ученикаКак отвечать
«Зачем такой странный формат, почему не сразу градусы?»NMEA создан в 1980-х для морской навигации, где градусы и минуты — традиция мореходства. Стандарт живёт по инерции, и весь мир к нему адаптировался
«Библиотека же переводит правильно — зачем нам знать?»Чтобы не поверить неверной ручной формуле и понимать, что видите в логе. Ошибка «делить на 100» — одна из самых частых в проектах с GPS
«Почему у долготы три цифры градусов?»Долгота изменяется от 0 до 180°, поэтому нужны три позиции. Широта — только до 90°, хватает двух
«Что если строка пришла битой?»В конце строки есть контрольная сумма после *. Битые строки отбрасывают — библиотека делает это автоматически
«А ГЛОНАСС точнее GPS?»Ни одна система не точнее «вообще»: точность зависит от числа видимых спутников и геометрии. Совместное использование нескольких систем — точнее любой отдельной

Раздаточный лист (для печати)

Урок 3. NMEA — координаты в градусах и минутах

Формат записи:

широта:  ГГММ.МММ    5537.838 = 55° 37,838′
долгота: ГГГММ.МММ   03736.200 = 037° 36,200′

Формула перевода:

D=градусы+минуты60D = \text{градусы} + \frac{\text{минуты}}{60}

⚠ Частая ошибка: делить на 100 вместо 60 → промах ~30 км!

Задания. Переведите:

NMEAГрадусыМинутыДесятичные градусы
5537.838,N
5540.500,N
03736.200,E

Проверка по карте: найдите последнюю точку. Куда попали? __________

Талкеры (кто дал решение):

ТалкерСистема
$GP
$GL
$GA
$GN

Качество фикса (поле 6 в GGA):

016

Почему значению 6 нельзя доверять?

___________________________________________________


Домашнее задание

Обязательная часть

Врайтап по рубрике А. Обязательный пункт: опишите свою ошибку с делением на 100 (если она была) и как вы её обнаружили.

Уровень A

Найти три примера единиц измерения, где деление на 100 было бы ошибкой (время, углы, что-то ещё). Объяснить, почему.

Уровень B

Взять реальные координаты своего дома или школы из карты (в десятичных градусах) и записать их в формате NMEA. Проверить обратным переводом.

Уровень C

Изучить структуру сообщения $GPGSV (информация о видимых спутниках). Объяснить, какие данные оно несёт и почему они понадобятся на следующих уроках.

Ориентир для педагога

GSV содержит: число сообщений в группе, номер сообщения, общее число видимых спутников, а затем для каждого — номер, угол места, азимут и отношение сигнал/шум.

Ключевое для урока 5: поле «общее число видимых спутников» в строке $GLGSV показывает, сколько спутников ГЛОНАСС видит приёмник. Ноль при большом числе GPS-спутников — сигнатура спуфинга.


Итог урока: что записать в журнал

Вывод урока 3

  1. NMEA хранит координаты в формате градусы и минуты: 5537.838 = 55° 37,838′.
  2. Перевод в десятичные градусы: градусы + минуты/60. Не на 100!
  3. Ошибка «делить на 100» даёт промах около 30 км — для маячка безопасности это критично.
  4. Талкер ($GP, $GL, $GA, $GN) показывает, какая система дала решение. Сравнивать надо тип сообщения, а не весь префикс.
  5. Качество фикса = 6 означает экстраполяцию без спутников — такому «фиксу» доверять нельзя.
  6. Цена ошибки в единицах измерения не абстрактна: она измеряется в километрах и в безопасности человека.

Связь с курсом

Что родилось на этом урокеГде станет инструментом
Талкеры созвездийУрок 5 (нулевой ГЛОНАСС — сигнатура спуфинга)
Качество фиксаУрок 4 (дозревание и свежесть)
Цена ошибки в единицахWarWalk (пересчёт координат в расстояния)
Проверка результата по картеЛюбая работа с данными: проверяй результат независимым способом

Чек-лист педагога перед уроком

  • GPS-модуль подключён и выдаёт строки (или распечатаны реальные строки NMEA)
  • Открыта карта для проверки координат
  • Проверено: 5537.838 → 55,6306°, ошибочно → 55,3784°, разница ≈ 28 км
  • Раздаточный лист распечатан
  • Приготовлено: не поправлять ошибку деления на 100 сразу — дать проверить по карте