Николай Павлов Все проекты

N / 01 Car GNSS Bridge

Навигация,
которая не теряет
машину.

Когда спутниковый сигнал пропадает, приложение продолжает определять положение по данным автомобиля, карте дорог и знакомым Wi-Fi-точкам.

Car GNSS Bridge 0.26.74 Geely Monjaro ECARX · Android 9

Принцип работыОценка движения
Позиция автомобиля при потере спутниковой опоры На условной карте зелёным показан пройденный путь, бронзовым — продолжение по данным движения. Это иллюстрация принципа, а не запись поездки.
Поездка продолжаетсяПоложение оценивается по данным движения и автономной карте.

Условная схема, не запись реального маршрута.

Geely Monjaro · 97 секунд о работе системы

От спутника до навигатора

0:00 / 1:37

От спутниковой координаты — к расчёту движения и передаче позиции в навигатор. Голос сопровождает каждый шаг. Условная поездка: показан принцип работы, а не запись измерений. Приложение только читает данные автомобиля.

Сюжет и расшифровка
  1. Приёмник определяет координату. Пока спутниковый сигнал устойчив, внешний приёмник определяет положение автомобиля. Вместе с координатой приложение получает время измерения и оценку его качества.
  2. Координата проходит проверку. Но принять координату сразу нельзя. Сначала приложение проверяет, насколько она свежая и согласуется ли с движением автомобиля. Проверенная точка становится опорой.
  3. Движение продолжается без GNSS. Теперь сигнал пропадает, а автомобиль продолжает ехать. Последняя проверенная точка сохраняется: от неё приложение рассчитывает дальнейшее движение по данным автомобиля.
  4. Колёса измеряют. Руль прогнозирует. Для этого колёсная одометрия даёт пройденный путь и изменение курса. Положение руля помогает предсказать поворот. Вместе эти данные позволяют непрерывно обновлять расчётную позицию.
  5. RoadLock связывает путь с дорогой. Чтобы траектория оставалась связана с дорогой, Роудлок сопоставляет курс, пройденное расстояние и связи дорожного графа. Когда движение подтверждает ветвь, путь продолжается вдоль неё.
  6. Навигатор получает расчётную позицию. Полученную координату, скорость и курс приложение передаёт в службу геолокации Андроид. Оттуда их получает навигатор, поэтому сопровождение поездки продолжается и без спутникового сигнала.
  7. Спутниковая опора возвращается. Когда спутники снова доступны, приложение сначала проверяет новое измерение. В это время расчёт движения продолжается. Если проверка пройдена, новая координата снова становится спутниковой опорой. Сигнал может пропасть. Навигация продолжает работать.

01

Когда навигатор теряет машину

В Москве я всё чаще сталкивался с навигационными помехами: маршрут остаётся на экране, а точка автомобиля замирает или перескакивает на соседнюю улицу. Я решил продолжить расчёт позиции даже после потери спутников.

Так появилось приложение Car GNSS Bridge. При потере GNSS оно продолжает определять положение по данным автомобиля и карте дорог, затем передаёт координату в Android. Привычный навигатор строит маршрут и показывает манёвры.

Трек городской поездки: серым — участки со спутниками, оранжевым — где приёмник замолчал и машину вела карта
Реальный журналОранжевым показаны участки поездки без спутниковой опоры.

02

Несколько источников. Одна позиция.

Внешний GNSS-приёмник даёт спутниковую координату. Автомобиль — скорость, данные четырёх колёс, угол руля и передачу. Карта хранит форму дорог и связи между ними. Знакомые Wi-Fi-точки помогают уточнять положение.

Приложение работает на штатной магнитоле Geely Monjaro с ECARX и Android 9. Автомобильные данные используются только для чтения: рулём, тягой и тормозами оно не управляет.

Для тестов я использовал двухантенный UM982, подключённый по USB. Подойдёт и обычный одноантенный GNSS-приёмник с выдачей координат NMEA: курс с двух антенн приложению не нужен.

Готовая позиция поступает в навигатор через системный канал Android Location — вместе со скоростью и направлением движения.

GNSS-приёмник, данные движения автомобиля и локальная карта помогают приложению передать единую позицию в Android-навигатор
АнимацияПриёмник, автомобиль и карта дают данные для одной позиции.

03

Скорость — из автомобиля

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

При проверке каждый пятый такой расчёт расходился с автомобильной скоростью больше чем на 20 км/ч. Поэтому на стоянке приложение передаёт навигатору нулевую скорость, а в движении — измеренную автомобилем.

График: тёмная линия скорости из шины идёт гладко, светлая линия скорости из разности координат бьётся всплесками
Реальный журналОдна поездка: скорость из автомобиля и из разности координат.

04

Колёса и руль помогают определить курс

После потери GNSS последняя проверенная координата становится началом счисления пути — dead reckoning. Скорость и время дают пройденное расстояние. Курс определяет, в какую сторону перенести точку.

Разность вращения колёс показывает поворот автомобиля. Угол руля даёт его предсказание по кинематической модели. Приложение сопоставляет оба канала: предсказание не должно противоречить измерению.

Колёса измеряют поворот, руль предсказывает его; GNSS-хорда и направление выбранной дороги дают опору курса
АнимацияКолёса измеряют поворот, модель руля предсказывает его.

Направление относительно севера задаёт GNSS-хорда — смещение между двумя доверенными координатами. В режиме RoadLock, после выбора дороги, дополнительной опорой служит её направление.

Даже небольшая постоянная ошибка курса постепенно уводит расчётную траекторию вбок. Поэтому одного счисления для долгой поездки недостаточно.

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

05

Когда координате можно доверять

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

После потери GNSS расчёт продолжается по движению и карте. Когда сигнал возвращается, новая координата проходит проверку, прежде чем стать опорой.

Для проверки нужны независимые данные: колёса, руль и монотонные часы. Само счисление тоже накапливает ошибку, поэтому его расхождение с GNSS не может быть единственной причиной отвергнуть спутниковую точку.

Непрерывная поездка: сначала координата от GNSS, после потери сигнала — расчёт по движению и карте, после проверки восстановленного GNSS — новая спутниковая опора
АнимацияПереход к счислению и возврат к проверенной GNSS-позиции.

06

RoadLock: движение вдоль дороги

RoadLock сопоставляет движение с дорожной сетью и откладывает пройденный путь вдоль выбранной дороги. Пока участок выбран верно, ошибка курса не уводит метку поперёк него.

Расстояние по-прежнему приходит из автомобильной одометрии. Карта задаёт форму пути, а курс помогает выбрать продолжение на перекрёстке.

Одинаковый пройденный путь в одном масштабе: свободное счисление уводит точку от дороги при ошибке курса, RoadLock переносит её вдоль выбранного ребра
АнимацияОдин пройденный путь: свободное счисление и движение по карте.

Как выбирается ветка

На развилке измеренный колёсами поворот сравнивается с поворотом каждой ветви. В режиме «ведёт» выбирается лучшее совпадение, только если оно заметно лучше второго варианта.

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

Когда GNSS работает и RoadLock удерживает дорогу, навигатор получает спутниковую точку, спроецированную на неё. Проверки достоверности используют исходное измерение.

Выбор ветви основан на курсе и повороте автомобиля, пройденном расстоянии и связях дорожного графа; показаны две гипотезы и подтверждение одной после наблюдения движения
АнимацияПоворот автомобиля сравнивается с геометрией ветвей.
Схема: четыре состояния коридора — ведёт счисление, ищет ребро, ведёт карта, сдаётся — и возврат из последнего в первое
СхемаПоиск дороги, сопровождение и возврат к счислению.

07

Карта доступна без интернета

Данные OpenStreetMap преобразованы в дорожный граф: участки дорог и соединения между ними. Он хранится в магнитоле и доступен RoadLock без сетевых запросов во время поездки.

Москва и область входят в приложение и занимают 39 МБ. Другие регионы России и соседних стран скачиваются заранее; доступны 17 стран, пауза и продолжение загрузки.

Локальная дорожная карта хранится на устройстве и доступна приложению во время поездки без подключения к сети
АнимацияКарта загружается заранее. В поездке интернет для неё не нужен.

Граф записан в компактном бинарном формате и читается через отображение файла в память — memory mapping. Приложение получает нужные участки карты по мере движения.

Схема записи в файле карты: тип, класс, слой, номер узла A, номер узла B, затем первая точка и дельты остальных
СхемаБинарный формат дорожного графа.

08

Wi-Fi помогает уточнить позицию

При хорошем GNSS приложение связывает видимые Wi-Fi-точки с проверенной координатой. При потере сигнала узнаёт сохранённое окружение и после проверки может однократно скорректировать смещение. Затем расчёт снова продолжается по движению и карте.

Теперь карта Wi-Fi-ориентиров общая для всех автомобилей. Точка из чужих наблюдений попадает в неё после подтверждения двумя машинами из разных сетей. Названия сетей не публикуются, адреса точек закодированы.

Где пропадает сигнал

В поездках по центру Москвы приёмник сообщал о глушении по 20–42 минуты подряд. Такие наблюдения пополняют общую карту помех с участками около 450 × 450 метров.

Приложение предупреждает о зонах глушения впереди. Эта карта помогает подготовиться к потере сигнала, но не участвует в расчёте координат.

09

Повторить поездку и проверить расчёт

Журнал сохраняет входные данные, решения приложения и переданную навигатору позицию. Replay — повторное воспроизведение записи — позволяет проверить тот же тоннель или развязку без новой поездки.

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

Поездка, запись наблюдений, повторное воспроизведение и проверка доработок образуют цикл улучшения системы
АнимацияЗапись поездки, повторный расчёт и сравнение результатов.

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

10

Приложение на штатном экране

В версии 0.26.74 главный экран стал проще: спутники над машиной, шесть показателей и кнопка запуска. Подробная диагностика и настройка навигации находятся в отдельных разделах.

Главный экран приложения: купол неба со спутниками четырёх систем, плитки скорости, точности, курса, спутников, глушения и источника точки, большая кнопка «Остановить»
Эмулятор · 0.26.74Главный экран в эмуляторе. Скорость и курс берутся из реального автомобиля.
Настройки: слева рейка разделов — Приёмник, Навигация, Общие карты, Журнал поездок, Обновления, Состояние, Тонкая настройка, Поддержать автора; справа раздел «Навигация» с коридором из четырёх положений
Эмулятор · 0.26.74Подключение приёмника, режимы RoadLock и диагностика.
Экран «Приём»: небо со спутниками, сигнал каждого спутника, AGC по частотам и история за десять минут
Эмулятор · 0.26.74Спутники, уровень сигнала и признаки глушения.
Экран «Карта»: граф дорог вокруг машины, её трек и легенда слоёв
Эмулятор · 0.26.74Дорожный граф, трек и решения RoadLock. На снимке — имитируемые GNSS-данные.

Есть и «Локация стоянки». При переключении в P приложение передаёт место серверу, а бот присылает его в привязанный чат Telegram. Привязка выполняется по QR-коду на магнитоле.

11

Навигация продолжается

В моих городских поездках приложение поддерживало навигационную позицию более 30 минут без GNSS. Новые проверки позволили оценить и точность:

  • В стендовых прогонах RoadLock удерживал верную дорогу 92–100 % времени без GNSS. Критерий проверки — расстояние до эталонной траектории не более 60 метров.
  • В поездках 15–18 сентября при возвращении GNSS метка оставалась на той же дороге; медианное отставание составляло 26 метров.

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

Яндекс.Навигатор на приборной панели: машина на своей полосе, построенный маршрут
Дорожное фотоЯндекс.Навигатор получает координату от приложения.

Главное в этой работе — возможность повторить ошибку и проверить исправление на реальных поездках. Именно так отдельные алгоритмы стали работающей навигационной системой.

Приложение бесплатное и обновляется само. Поддержать проект можно в настройках.

Изображение проекта