Oblicz maksymalną prędkość na podstawie danych GPS

10

Mam surowe lokalizacje GPS dla śladu i muszę uzyskać maksymalną prędkość. Proste metody (oblicz prędkość między 2 punktami, weź maksimum) dadzą bezsensowne duże liczby z powodu niedokładności GPS, punkt skacze. Czy możesz zasugerować dobry gotowy algorytm, aby rozwiązać ten problem?

JaakL
źródło
Jeśli punkt przeskakuje, czy mówisz, że masz więcej niż jeden punkt w danej lokalizacji? Większość twojego pytania brzmi tak, jakbyś był zainteresowany wyświetlaniem danych w czasie rzeczywistym, a nie przetwarzaniem końcowym (dla dokładności).
Brad Nesom,
Jeśli masz „surowe” lokalizacje GPS, powinieneś, oczywiście, mieć prędkość nad ziemią w węzłach, co jest standardowym elementem w ciągu NMEA RMC.
nagytech

Odpowiedzi:

13

Oczywiście, aby uzyskać prędkość, musisz mieć czas . W ten sposób możesz uporządkować punkty według czasu w arkuszu kalkulacyjnym, takim jak moda, z kolumnami {Czas, X, Y}, zwiększając czas.

Oto przykład, w którym moduł GPS prawie zakończył obwód przeciwny do ruchu wskazówek zegara:

Mapa podróży

Punkty te nie zostały uzyskane w równych odstępach czasu. Dlatego z samej mapy nie można oszacować prędkości. (Aby jednak pomóc ci w wizualizacji tej podróży, upewniłem się, że zbieram wartości GPS w prawie równych odstępach, abyś mógł zobaczyć, że podróż rozpoczęła się szybko i spowolniła w dwóch pośrednich punktach i na końcu.)

Ponieważ interesuje Cię prędkość, oblicz odległości między kolejnymi rzędami, a także różnice czasowe. Dzielenie odległości przez różnice czasowe daje natychmiastowe oszacowania prędkości. To wszystko. Spójrzmy na wykres tych szacunków w funkcji czasu:

Wykres prędkości w funkcji czasu

Czerwone punkty kreślą prędkości, podczas gdy szara krzywa jest prymitywnie gładka, wyłącznie po to, aby poprowadzić oko. Czas maksymalnej prędkości i sama maksymalna prędkość są czytelne z wykresu i łatwo uzyskane z danych do tej pory, jeśli używasz arkusza kalkulacyjnego lub prostych funkcji podsumowania danych w GIS. Jednak te szacunki prędkości są podejrzane, ponieważ punkty GPS wyraźnie zawierają w sobie pewien błąd pomiaru.

Jednym ze sposobów radzenia sobie z błędem pomiaru jest zgromadzenie odległości między wieloma przedziałami czasowymi i wykorzystanie ich do oszacowania czasów. Na przykład, jeśli wcześniej obliczone dane {Różnica czasu, Odległość} to

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

następnie uzyskuje się czasy, które upłynęły, i całkowite odległości w dwóch przedziałach czasowych poprzez dodanie każdej pary kolejnych rzędów:

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

Przelicz prędkości dla skumulowanych czasów i odległości.

Obliczenia można przeprowadzić dla dowolnej liczby okresów, uzyskując coraz płynniejsze i bardziej niezawodne wykresy, kosztem uśrednienia szacunków prędkości w dłuższych okresach. Oto wykresy tych samych danych obliczonych odpowiednio dla 3 i 5 okresów:

Wykres prędkości w funkcji czasu, obliczenie 3 przedziałów

Wykres prędkości w funkcji czasu, obliczenie 5 przedziałów

Zauważ, w jaki sposób maksymalna prędkość spada wraz z wygładzaniem. To zawsze się zdarza. Nie ma jednoznacznej poprawnej odpowiedzi: stopień wygładzenia zależy od zmienności pomiarów i przedziałów czasowych, które chcesz oszacować prędkości. W tym przykładzie możesz zgłosić maksymalną prędkość nawet do 2,5 (w oparciu o kolejne punkty GPS), ale byłoby to nieco zawodne z powodu błędów w lokalizacjach GPS. Możesz zgłosić maksymalną prędkość tak niską jak 2,1 w oparciu o pięciomiesięczne wygładzenie.


Jest to prosta metoda, ale niekoniecznie najlepsza. Jeśli rozkładamy błąd lokalizacji GPS na komponent wzdłuż ścieżki i inny komponent prostopadły do ścieżki, widzimy, że komponenty wzdłuż ścieżki nie wpływają na oszacowanie całkowitej pokonanej odległości (pod warunkiem, że ścieżka jest wystarczająco dobrze próbkowana: to znaczy, że nie „skracaj kątów”). Składniki prostopadłe do ścieżki zwiększają siępozorne odległości. To potencjalnie przesuwa szacunek w górę. Jednak gdy typowa odległość między odczytami GPS jest duża w porównaniu z typowym błędem odległości, odchylenie jest małe i prawdopodobnie jest kompensowane przez małe poruszenia na ścieżce, które nie są przechwytywane przez sekwencję GPS (to znaczy, niektóre cięcia narożne są zawsze zrobione). Dlatego prawdopodobnie nie warto opracowywać bardziej wyrafinowanego estymatora, aby poradzić sobie z tymi nieodłącznymi tendencjami, chyba że częstotliwość próbkowania GPS jest bardzo niska w porównaniu z częstotliwością, z jaką ścieżka „porusza się” lub błąd pomiaru GPS jest duży.

Dla przypomnienia możemy pokazać prawdziwy, poprawny wynik, ponieważ są to dane symulowane:

Wykres rzeczywistej prędkości w funkcji czasu

Porównanie tego z poprzednimi wykresami pokazuje, że w tym konkretnym przypadku maksimum prędkości surowych zawyżało prawdziwe maksimum, podczas gdy maksimum pięciokresowych prędkości było zbyt niskie.

Zasadniczo, gdy punkty GPS są zbierane z wysoką częstotliwością, maksymalna prędkość początkowa będzie prawdopodobnie zbyt wysoka: dąży ona do przeszacowania prawdziwego maksimum. Powiedzenie czegoś więcej w jakimkolwiek praktycznym przypadku wymagałoby pełniejszej analizy statystycznej natury i wielkości błędów GPS, częstotliwości zbierania GPS oraz krętości leżącej u podstaw ścieżki.

Whuber
źródło
2

To nie jest gotowy skrypt ani algorytm. Co zrobiłem na poniższym obrazku pokazującym średnią prędkość (w km / h):

  1. Uruchom filtr gpsbabel bezpośrednio w pliku GPX.
  2. Konwertuj plik GPX na punkty rastrowe w GRASS.
  3. Uruchom, r.neighborsaby uzyskać średnią prędkość dla określonego okna rastrowego.

moja średnia prędkość jazdy na rowerze

grzywka
źródło
Czy możesz wyjaśnić, w jaki sposób można uzyskać prędkość z rastrowej reprezentacji sekwencji lokalizacji?
whuber
Za pomocą gpsbabel możesz zsyntetyzować informacje o prędkości z punktów GPX. gpsbabel.org/htmldoc-development/filter_track.html . Następnie zaimportuj te dane jako punkty wektorowe i przekonwertuj na raster w GRASS. Użyłem wielu GPX na tym obrazie. Używając r.neighbors, otrzymuję średnią prędkość.
obsadzone
Wielkie dzięki za wyjaśnienie. Ale jeśli gpsbabel obliczył prędkość, dlaczego używasz r.neighbors? Czy nie łączyłoby to potencjalnie prędkości na jednej trasie z prędkościami na innych trasach, które są wystarczająco blisko siatki? Ponadto uśrednianie prędkości jest tendencyjne, gdy czasy zbierania GPS są nierównomiernie rozłożone. Na przykład, jeśli pokonujesz 60 metrów w 60 sekund, pokonałeś metr na sekundę, ale jeśli jest on podzielony na 10 metrów w ciągu 1 sekundy plus 50 metrów w 59 sekund (z powodu błędu pozycjonowania +9 m w punkcie środkowym), średnia prędkość oblicza się do 5,4 m / s: przeszacowanie brutto.
whuber
@ whuber masz rację. W przypadku tej mapy nie szukam indywidualnej prędkości, ale łączną prędkość w czasie. Wszystkie moje utwory są w odstępie 1 sekundy.
obsadzone
+1 za kreatywne rozwiązanie. (Lubię znajdować rozwiązania rastrowe do pozornie wektorowych problemów, ale dobrze jest znać ich ograniczenia.)
whuber
1

Ponieważ dane GPS są niedokładne, oszacowanie maksymalnej prędkości będzie możliwe.

Możesz spróbować to obliczyć, obliczając prędkość nie na segmentach, ale na poliliniach (średnia prędkość), aby zminimalizować wpływ niedokładności.

Czy próbowałeś najpierw wyczyścić swoje dane (na przykład Douglas-Peucker), aby zachować tylko najistotniejsze punkty?

BGervais
źródło
1
Douglas-Peucker tak naprawdę nie czyści danych - po prostu usuwa punkty, próbując zachować oryginalny kształt, więc w rzeczywistości może nawet pogorszyć wygląd błędów.
JaakL,