Обчисліть максимальну швидкість із даних GPS


10

У мене є необроблені GPS-адреси для доріжки, і мені потрібно отримати максимальну швидкість. Прості методи (обчисліть швидкість між 2 балами, візьміть макс) дадуть безглузді великі цифри через неточність GPS, точка стрибає навколо. Чи можете ви запропонувати хороший готовий алгоритм для вирішення цього питання?


Якщо точка стрибає навколо, ви говорите, що у вас є більше одного пункту? Основна частина вашого питання звучить так, ніби ви зацікавлені у відображенні даних у режимі реального часу, а не після обробки (для точності).
Бред Несом

Якщо у вас є "сировинні" місця розташування 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 та обертовості основного шляху.


2

Це не готовий сценарій чи алгоритм. Що я робив на зображенні нижче, показуючи середню швидкість (в км / год):

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

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


Чи можете ви пояснити, як можна отримати швидкість за допомогою растрового подання послідовності локацій?
whuber

Ви можете синтезувати інформацію про швидкість із точок треку GPX за допомогою gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Потім імпортуйте ці дані у векторні точки та перетворіть у растр у GRASS. Я використав кілька GPX для цього зображення. Використовуючи r.neighbors, я отримую середню швидкість.
maning

Велике спасибі за пояснення. Але якщо gpsbabel обчислив швидкість, то чому ви використовуєте r.neighbors? Хіба це не міг би змішати швидкості по одному маршруту зі швидкістю по будь-яким іншим маршрутам, які є достатньо близькими до мережі? Крім того, усереднення швидкості є упередженим, коли час збору GPS нерівномірно розподілений. Наприклад, якщо ви подорожуєте 60 метрів за 60 секунд, ви пройшли один метр за секунду, але якщо він розбитий на 10 метрів за 1 секунду плюс 50 метрів за 59 секунд (через позиційну помилку +9 м в середині точки), середня швидкість обчислює до 5,4 м / с: валова завищення.
whuber

@whuber, ти маєш рацію. Для цієї карти я шукаю не індивідуальну швидкість, а сукупну швидкість у часі. Усі мої композиції знаходяться в інтервалі 1 секунду.
maning

+1 для творчого рішення. (Мені подобається знаходити растрові рішення для очевидно векторних проблем, але добре знати їх обмеження.)
whuber

1

Оскільки ваші дані GPS неточні, ви зможете оцінити максимальну швидкість.

Можна спробувати обчислити її, обчисливши швидкість не на сегментах, а на поліліній (середня швидкість), щоб мінімізувати ефект неточностей.

Ви спробували спочатку очистити свої дані (наприклад, Дуглас-Пекер), щоб зберегти лише найбільш релевантні пункти?


1
Дуглас-П’юкер не дуже очищає дані - він просто видаляє очки, намагаючись зберегти початкову форму, тому насправді це може навіть зробити помилки виглядати гіршими.
JaakL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.