В этой статье мы разберём методы расчета скорости и направления движения в транспортной телематике, а также сравним их точность на реальных данных. Можно было бы назвать эту публикацию аналогичным образом: “Скорость автомобиля: почему значение в навигаторе и стрелка спидометра расходятся?”.
Нельзя обойти тему скорости в рамках цикла наших статей, так как ранее мы выяснили, что одометр транспортного средства считает пробег именно на основе скорости движения. Направление или курс движения - менее важный параметр, который зачастую используется только для визуализации маркера объекта на картографической подложке.
Скорость
Для водителя значение скорости доступно благодаря спидометру на приборной панели. Спидометр в любой машине (независимо от ее марки, модели, цены), не просто может, а должен «врать», причем, обязательно в сторону завышения скорости. В противном случае он будет считаться неисправным. Эти требования определены документами регламентирующими производство автомобилей (вернее, спидометров к ним). Да и сами автопроизводители всегда перестраховываются, исходя из стандартных инженерных соображений.

Требование к введению в спидометры поправки завышающей скорость, для мировых производителей определяется требованием ЕЭК ООН №39, которое много лет работало в России под видом ГОСТ Р41.39-99, а после 2019 года - это требование определено ГОСТ 12936-2017. Конкретная величина завышения скорости спидометром устанавливается техническими стандартами, но в среднем, производители закладывают величину завышения до 10% от фактической скорости. Причем зависимость не линейная, а с ростом скорости растет и величина завышения.
Спидометр вряд ли можно назвать точным измерительным прибором, но это обязательный инструмент для водителя. В любом случае в задачах транспортного мониторинга и аналитики полагаются на спутниковые данные и программные методы. Получение скорости через CAN также возможно, как и показания одометра, но мы уже знаем, что чтение CAN-шины - дополнительная опция в мониторинге транспорта, поэтому данные по CAN не всегда доступны.

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

Скорость может быть скорректирована дополнительными датчиками из инерциального блока (IMU). Автомобильные трекеры, оснащенные IMU, дополнительно используют акселерометр для определения ускорения, что позволяет вычислять скорость более точно в моменты быстрого изменения движения, а также снизить “размотку” во время стоянок. Например, профессиональный GPS-логгер для замера разгона автомобилей Dragy использует всевозможные технические средства, чтобы получить максимально точный результат, что также влияет и на его конечную стоимость.

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

Псевдоскорость можно определить в реальном времени без необходимости точного определения текущих координат объекта. Используя доплеровский сдвиг, ГНСС-приемник рассчитывает относительную скорость по каждому видимому спутнику. Итоговая скорость — это векторная сумма всех скоростей, рассчитанных относительно спутников.
Доплеровский сдвиг основан на эффекте Доплера: частота сигнала, излучаемого спутником, изменяется в зависимости от относительной скорости между спутником и приемником. Навигационный приёмник измеряет разницу между ожидаемой и принятой частотой спутникового сигнала и вычисляет относительную скорость объекта.
Для высокой точности псевдоскорость должна быть уточнена с использованием данных изменения координат и показаний других сенсоров. В итоге такой комбинированный подход из формулы скорость = путь / время, инерциального блока с датчиков ускорения и доплеровского сдвига обеспечивает высокую точность, вплоть до ±0.1 км/ч.
Большинство современных автомобильных трекеров используют метод определения скорости по GPS-координатам, а также коррекции с помощью инерциального блока. При наличии считывателя CAN-шины можно дополнительно получать скорость с автомобиля, например, для использования этих показаний в зонах плохого или отсутствующего спутникового сигнала. Использование доплеровского сдвига доступно только в высокоточных приемниках и дорогостоящих профессиональных трекерах, например, в Dragy, который был упомянут выше. Ниже представлена таблица различным методов, использующихся для определения скорости движения объекта:
Метод | Точность | Особенности |
Спидометр | +5–10% | Завышение по ГОСТ |
CAN (датчик скорости) | ±0.5–1% | Зависит от техсостояния ТС |
ГНСС | ±0.1–1 км/ч | Зависит от стабильности сигнала |
IMU (акселерометр) | Высокая (±0.1 км/ч) | Коррекция резких ускорений |
Псевдоскорость (доплер) | Высокая (±0.1 км/ч) | Реальное время, без координат |
В нашем датасете, к сожалению, нет скорости движения по CAN. Но зато мы можем сравнить скорость, рассчитанную GPS-трекером со скоростью, которую вычислим сами по формуле скорость = путь / время для каждой последовательной пары точек. Для начала посмотрим на все показания скорости по GPS у того же объекта, что мы использовали для анализа высот в прошлой статье:

И отдельно посмотрим на скорости больше нуля, т.к. стоянка для автотранспорта вполне типичное состояние. Например, для легкого автомобиля личного пользования состояние стоянки в большинстве случает может превышать 90% всего времени (режим поездок “работа / дом”). У коммерческой техники, в частности грузового автотранспорта, этот показатель обычно колеблется в районе 50%. Если исключить все точки с нулевой скоростью, результат будет следующий:

Очень типичная картина для автомобиля, учитывая скоростные лимиты в ПДД. Но давайте возьмем выборку побольше, скажем 50 случайных ТС из датасета. Это порядка 20 миллионов точек:


Картина практически никак не изменилась. Половину времени автомобили стоят, а оставшуюся половину по большей части движутся со скорость до 60 км/ч. Ну и лимит в 90 км/ч по трассе с прибавкой в 19 км/ч до получения штрафа по камерам на графике также видно ;) Ниже представлена таблица перцентилей по скорости с шагом 0.05 для всего датасета:

Теперь напишем SQL-запрос, который позволяет посчитать скорость на основе расстояния и времени между парами точек в нашей таблице. Для расчета расстояний используем PostGIS функцию ST_Distance, с которой мы познакомились в предыдущей статье. Здесь мы используем два CTE-запроса, чтобы сначала собрать пары из соседних точек, затем посчитать расстояние между ними, а далее в основном запросе по формуле скорость = путь / время посчитаем среднюю скорость в км/ч:

Теперь перенесем запрос в Jupyter и посмотрим на отклонения и корреляцию:

В результате получаем очень высокую корреляцию и минимальное отклонение, что означает, что расчет скорости в этом GPS-трекере очень близок к нашему расчету. В этом трекере используется модуль SimCom SIM868E, который обновляет ГНСС-данные с частотой 1 Гц (раз в секунду), а взаимодействие выполняются через протокол NMEA (National Marine Electronics Association) с текстовыми сообщениями RMC (Recommended Minimum Specific GNSS Data).
Интересно было бы к этому сравнению добавить скорость по CAN, возможно, в одной из статей за рамками данного цикла так и поступим, но даже без этого можно сделать вывод, что показания скорости по ГНСС достаточно точные при условии стабильного спутникового сигнала и хорошей компонентной базы самого приемника.
Курс
Курс указывает направление движения объекта относительно географического севера. Географический азимут (дирекционный угол) — горизонтальный угол, измеряемый на плоскости по ходу часовой стрелки от 0° до 360° между северным направлением осевого меридиана зоны прямоугольных координат (линией сетки топографической карты) и направлением на ориентир.
В навигационном оборудовании курс вычисляется на основе последовательных координат с использованием тригонометрических формул и обновляется только во время движения. Если объект неподвижен, трекер может возвращать курс последнего движения. На низких скоростях (менее 5 км/ч) курс может быть нестабильным из-за незначительных изменений в координатах.
Аналогичным скорости образом попробуем посчитать программно направление движения и сравнить его со значениями, полученными от самого трекера. Используем встроенную в PostGIS функцию ST_Azimuth:

Функция ST_Azimuth рассчитывает азимут между двумя точками на сферической поверхности с использованием сферической тригонометрии. Она основана на формуле азимута для сферических координат. В случае, если координаты точек совпадают, функция возвращает пустое значение (NULL). Теперь перенесем этот SQL-запрос в Jupyter и визуализируем данные:

На графиках видно, что есть 2 типа областей. В одной области данные очень близки и практически отсутствует шум, в другой - максимальный разброс и никакой корреляции. Найдем участок перехода из одного типа области в другую и посмотрим поближе:

Я дополнительно вывел скорость, т.к. все довольно очевидно. В точках, где скорость нулевая, т.е. объект не двигается, программный расчет азимута невозможен, но GPS-азимут присутствует, т.к. навигационный терминал продолжает фиксировать направление. Как ранее указывалось, это либо просто последнее известное направление, либо его скорректированное значение с помощью того же инерциального блока с акселерометром.
Конкретно у этого трекера отсутствует датчик ускорения и курс во время стоянки колеблется во всем интервале от 0 до 360 градусов. Поэтому в случае невозможности корректировки курса на стороне навигационного оборудования, как минимум, стоит отсекать направление движение при условии нулевой или лучше околонулевой (менее 5 км/ч) скорости.
Мы рассмотрели методы расчета скорости и направления движения в спутниковой навигации и транспортной телематике. Показано, что скорость по ГНСС имеет высокую точность при с��абильном сигнале. Использование дополнительных датчиков позволяет корректировать показания при резких ускорениях. Доплеровский сдвиг отличный способ расчета скорости, но доступен только в дорогостоящем профессиональном оборудовании. Программный расчет азимута требует учета стоянок, где данные становятся некорректными.
А в следующей статье мы разберем флаг валидности, который определяется внутренними алгоритмами трекера, количество видимых спутников при решении навигационной задачи и значение снижения точности в горизонтальной плоскости (HDOP).
