Рассчитать максимальную скорость по данным GPS

10

У меня есть сырые места GPS для трека, и мне нужно набрать максимальную скорость. Простые методы (рассчитайте скорость между 2 точками, возьмите макс.) Дадут бессмысленные большие числа из-за неточности GPS, точка скачет вокруг. Можете ли вы предложить хороший готовый алгоритм для решения этой проблемы?

JaakL
источник
Если точка скачет вокруг, вы говорите, что у вас есть более одной точки в локации? Большая часть вашего вопроса звучит так, как будто вы заинтересованы в отображении данных в реальном времени, а не в постобработке (для точности).
Брэд Несом
Если у вас есть «сырые» местоположения GPS, то вы должны обязательно иметь скорость над землей в узлах, которая является стандартным элементом в строке NMEA RMC.
nagytech

Ответы:

13

Конечно, чтобы набрать скорость, нужно успеть . Таким образом, вы можете упорядочить свои точки по времени в электронной таблице, например, со столбцами {Time, X, Y}, увеличив время.

Вот пример, где устройство GPS почти завершило цепь против часовой стрелки:

Карта поездки

Эти точки не были получены через равные промежутки времени. Поэтому на одной карте невозможно оценить скорость. (Однако, чтобы помочь вам визуализировать эту поездку, я позаботился о том, чтобы собирать значения GPS почти с одинаковыми интервалами, чтобы вы могли видеть, что поездка началась быстро и замедлилась в двух промежуточных точках и в конце.)

Поскольку вас интересует скорость, вычислите расстояния между последовательными рядами, а также разницу во времени. Разделение расстояний на разницу во времени дает мгновенные оценки скорости. Это все, что нужно сделать. Давайте посмотрим на график зависимости этих оценок от времени:

График зависимости скорости от времени

Красные точки отображают скорости, в то время как серая кривая - грубая плавность, исключительно для того, чтобы направлять взгляд. Время максимальной скорости и сама максимальная скорость понятны из графика и легко получаются из данных до сих пор, если вы используете электронную таблицу или простые функции сводки данных в ГИС. Однако эти оценки скорости являются подозрительными, поскольку в точках GPS явно присутствует некоторая ошибка измерения.

Один из способов справиться с ошибкой измерения - это накопить расстояния между несколькими периодами времени и использовать их для оценки времени. Например, если ранее вычисленные данные {Разница во времени, Расстояние}

d(Time) Distance
0.90        0.17
0.90        0.53
1.00        0.45
1.10        0.29
0.80        0.11

затем истекшее время и общее расстояние за два периода времени получаются путем сложения каждой пары последовательных строк:

d(Time) Distance
1.80        0.70
1.90        0.98
2.10        0.74
1.90        0.40

Пересчитайте скорости для накопленных времен и расстояний.

Этот расчет можно выполнить для любого числа периодов времени, получая все более плавные и надежные графики за счет усреднения оценок скорости за более длительные периоды времени. Вот графики тех же данных, рассчитанные для 3 и 5 периодов времени соответственно:

График зависимости скорости от времени, 3 интервала расчета

График зависимости скорости от времени, 5 интервальных расчетов

Обратите внимание, как максимальная скорость уменьшается с величиной сглаживания. Это всегда будет происходить. Единого правильного ответа не существует: насколько вы сглаживаете, зависит от изменчивости измерений и от того, в какие периоды времени вы хотите оценить скорости. В этом примере вы можете сообщить о максимальной скорости до 2,5 (на основе последовательных точек GPS), но она будет несколько ненадежной из-за ошибок в местоположениях GPS. Вы можете сообщить о максимальной скорости до 2,1 на основе пятипериодного сглаживания.


Это простой метод, но не обязательно лучший. Если мы разложим ошибку местоположения GPS на компонент вдоль пути и другой компонент, перпендикулярный пути, мы увидим, что компоненты вдоль пути не влияют на оценки общего пройденного расстояния (при условии, что путь достаточно хорошо выбран: то есть вы не "срезать углы"). Компоненты, перпендикулярные пути увеличениявидимые расстояния. Это потенциально смещает оценку вверх. Тем не менее, когда типичное расстояние между показаниями GPS является большим по сравнению с типичной ошибкой расстояния, смещение является небольшим и, вероятно, компенсируется крошечными покачиваниями на трассе, которые не фиксируются последовательностью GPS (то есть некоторая обрезка углов всегда сделано). Поэтому, вероятно, не стоит разрабатывать более сложную систему оценки, чтобы справиться с этими присущими отклонениями, если только частота дискретизации GPS не очень мала по сравнению с частотой, с которой "колеблется" трасса или ошибка измерения GPS велика.

Для записи мы можем показать истинный, правильный результат, потому что это симулированные данные:

График истинной скорости в зависимости от времени

Сравнение этого с предыдущими графиками показывает, что в этом конкретном случае максимум исходных скоростей переоценил истинный максимум, в то время как максимум пятипериодных скоростей был слишком низким.

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

Whuber
источник
2

Это не готовый скрипт или алгоритм. То, что я сделал на изображении ниже, показывает среднюю скорость (в км / ч):

  1. Запустите фильтр gpsbabel непосредственно в файле GPX.
  2. Конвертируйте файл GPX в растровые точки в GRASS.
  3. Выполнить, r.neighborsчтобы получить среднюю скорость для указанного окна растра.

моя средняя скорость езды на велосипеде

Манинг
источник
Не могли бы вы уточнить, как можно получить скорость из растрового представления последовательности местоположений?
whuber
Вы можете синтезировать информацию о скорости из трековых точек GPX, используя gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Затем импортируйте эти данные как векторные точки и преобразуйте их в растр в GRASS. Я использовал несколько GPX на этом изображении. Используя r.neighbors, я получаю среднюю скорость.
Манинг
Большое спасибо за объяснение. Но если gpsbabel вычислил скорость, почему вы используете r.neighbors? Не будет ли это потенциально смешивать скорости вдоль одного маршрута со скоростями вдоль любых других маршрутов, которые достаточно близки к сетке? Кроме того, усреднение по скорости смещается, когда время сбора GPS распределено неравномерно. Например, если вы путешествуете 60 метров за 60 секунд, вы проходите один метр в секунду, но если он разбит на 10 метров за 1 секунду плюс 50 метров за 59 секунд (из-за ошибки позиционирования +9 м в средней точке), средняя скорость составляет 5,4 м / с: грубая завышенная оценка.
whuber
@ whuber, ты прав. Для этой карты я ищу не индивидуальную скорость, а совокупную скорость во времени. Все мои треки с интервалом в 1 секунду.
Манинг
+1 за креативное решение. (Мне нравится находить растровые решения для, по-видимому, векторных проблем, но хорошо знать их ограничения.)
whuber
1

Поскольку ваши данные GPS неточны, вы сможете оценить только максимальную скорость.

Вы можете попытаться рассчитать его, рассчитав скорость не по сегментам, а по полилиниям (средняя скорость), чтобы минимизировать влияние неточностей.

Пытались ли вы сначала очистить свои данные (например, Дуглас-Пекер), чтобы сохранить только самые важные данные?

BGervais
источник
1
Дуглас-Пекер на самом деле не очищает данные - он просто удаляет точки, пытаясь сохранить исходную форму, поэтому на самом деле ошибки могут даже выглядеть хуже.
JaakL