Geely Monjaro · 97 секунд о работе системы
От спутника до навигатора
От спутниковой координаты — к расчёту движения и передаче позиции в навигатор. Голос сопровождает каждый шаг. Условная поездка: показан принцип работы, а не запись измерений. Приложение только читает данные автомобиля.
Сюжет и расшифровка
- Приёмник определяет координату. Пока спутниковый сигнал устойчив, внешний приёмник определяет положение автомобиля. Вместе с координатой приложение получает время измерения и оценку его качества.
- Координата проходит проверку. Но принять координату сразу нельзя. Сначала приложение проверяет, насколько она свежая и согласуется ли с движением автомобиля. Проверенная точка становится опорой.
- Движение продолжается без GNSS. Теперь сигнал пропадает, а автомобиль продолжает ехать. Последняя проверенная точка сохраняется: от неё приложение рассчитывает дальнейшее движение по данным автомобиля.
- Колёса измеряют. Руль прогнозирует. Для этого колёсная одометрия даёт пройденный путь и изменение курса. Положение руля помогает предсказать поворот. Вместе эти данные позволяют непрерывно обновлять расчётную позицию.
- RoadLock связывает путь с дорогой. Чтобы траектория оставалась связана с дорогой, Роудлок сопоставляет курс, пройденное расстояние и связи дорожного графа. Когда движение подтверждает ветвь, путь продолжается вдоль неё.
- Навигатор получает расчётную позицию. Полученную координату, скорость и курс приложение передаёт в службу геолокации Андроид. Оттуда их получает навигатор, поэтому сопровождение поездки продолжается и без спутникового сигнала.
- Спутниковая опора возвращается. Когда спутники снова доступны, приложение сначала проверяет новое измерение. В это время расчёт движения продолжается. Если проверка пройдена, новая координата снова становится спутниковой опорой. Сигнал может пропасть. Навигация продолжает работать.
01
Когда навигатор теряет машину
В Москве я всё чаще сталкивался с навигационными помехами: маршрут остаётся на экране, а точка автомобиля замирает или перескакивает на соседнюю улицу. Я решил продолжить расчёт позиции даже после потери спутников.
Так появилось приложение Car GNSS Bridge. При потере GNSS оно продолжает определять положение по данным автомобиля и карте дорог, затем передаёт координату в Android. Привычный навигатор строит маршрут и показывает манёвры.
02
Несколько источников. Одна позиция.
Внешний GNSS-приёмник даёт спутниковую координату. Автомобиль — скорость, данные четырёх колёс, угол руля и передачу. Карта хранит форму дорог и связи между ними. Знакомые Wi-Fi-точки помогают уточнять положение.
Приложение работает на штатной магнитоле Geely Monjaro с ECARX и Android 9. Автомобильные данные используются только для чтения: рулём, тягой и тормозами оно не управляет.
Для тестов я использовал двухантенный UM982, подключённый по USB. Подойдёт и обычный одноантенный GNSS-приёмник с выдачей координат NMEA: курс с двух антенн приложению не нужен.
Готовая позиция поступает в навигатор через системный канал Android Location — вместе со скоростью и направлением движения.
03
Скорость — из автомобиля
Скорость всегда берётся из автомобильного канала, даже при хорошем GNSS. Если вычислять её по разности координат, скачки спутниковой точки превращаются в ложные ускорения.
При проверке каждый пятый такой расчёт расходился с автомобильной скоростью больше чем на 20 км/ч. Поэтому на стоянке приложение передаёт навигатору нулевую скорость, а в движении — измеренную автомобилем.
04
Колёса и руль помогают определить курс
После потери GNSS последняя проверенная координата становится началом счисления пути — dead reckoning. Скорость и время дают пройденное расстояние. Курс определяет, в какую сторону перенести точку.
Разность вращения колёс показывает поворот автомобиля. Угол руля даёт его предсказание по кинематической модели. Приложение сопоставляет оба канала: предсказание не должно противоречить измерению.
Направление относительно севера задаёт GNSS-хорда — смещение между двумя доверенными координатами. В режиме RoadLock, после выбора дороги, дополнительной опорой служит её направление.
Даже небольшая постоянная ошибка курса постепенно уводит расчётную траекторию вбок. Поэтому одного счисления для долгой поездки недостаточно.
05
Когда координате можно доверять
Приложение проверяет возраст спутниковой координаты, качество приёма и согласованность с движением автомобиля. Получить сообщение от приёмника ещё не значит получить пригодную позицию.
После потери GNSS расчёт продолжается по движению и карте. Когда сигнал возвращается, новая координата проходит проверку, прежде чем стать опорой.
Для проверки нужны независимые данные: колёса, руль и монотонные часы. Само счисление тоже накапливает ошибку, поэтому его расхождение с GNSS не может быть единственной причиной отвергнуть спутниковую точку.
06
RoadLock: движение вдоль дороги
RoadLock сопоставляет движение с дорожной сетью и откладывает пройденный путь вдоль выбранной дороги. Пока участок выбран верно, ошибка курса не уводит метку поперёк него.
Расстояние по-прежнему приходит из автомобильной одометрии. Карта задаёт форму пути, а курс помогает выбрать продолжение на перекрёстке.
Как выбирается ветка
На развилке измеренный колёсами поворот сравнивается с поворотом каждой ветви. В режиме «ведёт» выбирается лучшее совпадение, только если оно заметно лучше второго варианта.
Если однозначного выбора нет, приложение возвращается к свободному счислению и записывает причину. Так неоднозначный выбор не закрепляется в дальнейшей траектории.
Когда GNSS работает и RoadLock удерживает дорогу, навигатор получает спутниковую точку, спроецированную на неё. Проверки достоверности используют исходное измерение.
07
Карта доступна без интернета
Данные OpenStreetMap преобразованы в дорожный граф: участки дорог и соединения между ними. Он хранится в магнитоле и доступен RoadLock без сетевых запросов во время поездки.
Москва и область входят в приложение и занимают 39 МБ. Другие регионы России и соседних стран скачиваются заранее; доступны 17 стран, пауза и продолжение загрузки.
Граф записан в компактном бинарном формате и читается через отображение файла в память — memory mapping. Приложение получает нужные участки карты по мере движения.
08
Wi-Fi помогает уточнить позицию
При хорошем GNSS приложение связывает видимые Wi-Fi-точки с проверенной координатой. При потере сигнала узнаёт сохранённое окружение и после проверки может однократно скорректировать смещение. Затем расчёт снова продолжается по движению и карте.
Теперь карта Wi-Fi-ориентиров общая для всех автомобилей. Точка из чужих наблюдений попадает в неё после подтверждения двумя машинами из разных сетей. Названия сетей не публикуются, адреса точек закодированы.
Где пропадает сигнал
В поездках по центру Москвы приёмник сообщал о глушении по 20–42 минуты подряд. Такие наблюдения пополняют общую карту помех с участками около 450 × 450 метров.
Приложение предупреждает о зонах глушения впереди. Эта карта помогает подготовиться к потере сигнала, но не участвует в расчёте координат.
09
Повторить поездку и проверить расчёт
Журнал сохраняет входные данные, решения приложения и переданную навигатору позицию. Replay — повторное воспроизведение записи — позволяет проверить тот же тоннель или развязку без новой поездки.
Калибровка теперь выполняется на стенде по записанным поездкам. Новые параметры принимаются, только если сохраняют или улучшают результат на других записях, которые не участвовали в подборе.
Диагностика показывает не только итоговую координату, но и источник данных, их возраст и причину каждого решения. Это помогает найти, где именно возникла ошибка.
10
Приложение на штатном экране
В версии 0.26.74 главный экран стал проще: спутники над машиной, шесть показателей и кнопка запуска. Подробная диагностика и настройка навигации находятся в отдельных разделах.
Есть и «Локация стоянки». При переключении в P приложение передаёт место серверу, а бот присылает его в привязанный чат Telegram. Привязка выполняется по QR-коду на магнитоле.
11
Навигация продолжается
В моих городских поездках приложение поддерживало навигационную позицию более 30 минут без GNSS. Новые проверки позволили оценить и точность:
- В стендовых прогонах RoadLock удерживал верную дорогу 92–100 % времени без GNSS. Критерий проверки — расстояние до эталонной траектории не более 60 метров.
- В поездках 15–18 сентября при возвращении GNSS метка оставалась на той же дороге; медианное отставание составляло 26 метров.
Точность зависит от маршрута и доступных данных. На сложной развязке выбор дороги может оказаться неверным, поэтому приложение проверяет свои решения и сохраняет их в журнале.
Главное в этой работе — возможность повторить ошибку и проверить исправление на реальных поездках. Именно так отдельные алгоритмы стали работающей навигационной системой.
Приложение бесплатное и обновляется само. Поддержать проект можно в настройках.

