Calcola la velocità massima dai dati GPS


10

Ho posizioni GPS non elaborate per una traccia e devo ottenere la massima velocità. Metodi semplici (calcolare la velocità tra 2 punti, prendere il massimo) daranno grandi numeri insignificanti a causa di imprecisione GPS, il punto sta saltando. Puoi suggerire un buon algoritmo pronto per risolvere questo problema?


Se il punto sta saltando, stai dicendo che hai più di un punto in una posizione? La maggior parte della tua domanda sembra che tu sia interessato a visualizzare dati in tempo reale e non a postelaborare (per accuratezza).
Brad Nesom,

Se si hanno posizioni gps 'grezze', allora si dovrebbe assolutamente avere la velocità fuori terra in nodi che è un elemento standard nella stringa RMC NMEA.
nagytech,

Risposte:


13

Per ottenere la velocità devi avere tempo, ovviamente. In questo modo puoi ordinare i tuoi punti nel tempo in un foglio di calcolo come la moda, con colonne {Tempo, X, Y}, aumentando il tempo.

Ecco un esempio in cui l'unità GPS ha quasi completato un circuito in senso antiorario:

Mappa di un viaggio

Questi punti non sono stati ottenuti a intervalli di tempo uguali. Pertanto è impossibile dalla sola mappa stimare la velocità. (Per aiutarti a visualizzare questo viaggio, però, mi sono assicurato di raccogliere i valori gps a intervalli quasi uguali, quindi puoi vedere che il viaggio è iniziato velocemente e ha rallentato in due punti intermedi e alla fine.)

Poiché sei interessato alla velocità, calcola le distanze tra le file successive e le differenze di tempo. La divisione delle distanze per differenze di tempo fornisce stime della velocità istantanee. Questo è tutto quello che c'è da fare. Diamo un'occhiata a un grafico di tali stime rispetto al tempo:

Diagramma della velocità rispetto al tempo

I punti rossi tracciano le velocità mentre la curva grigia è liscia, solo per guidare l'occhio. Il tempo della massima velocità e la massima velocità stessa sono chiari dalla trama e ottenuti prontamente dai dati finora se si utilizza un foglio di calcolo o semplici funzioni di riepilogo dei dati in un GIS. Tuttavia, queste stime di velocità sono sospette perché i punti GPS presentano chiaramente un errore di misurazione.

Un modo per far fronte all'errore di misurazione è accumulare le distanze tra più periodi di tempo e utilizzarli per stimare i tempi. Ad esempio, se i dati {Differenza oraria, Distanza} precedentemente calcolati sono

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

quindi si ottengono i tempi trascorsi e le distanze totali in due periodi di tempo aggiungendo ciascuna coppia di file successive:

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

Ricalcola le velocità per i tempi e le distanze accumulate.

È possibile eseguire questo calcolo per un numero qualsiasi di periodi di tempo, ottenendo grafici sempre più fluidi e affidabili al costo di calcolare la media delle stime di velocità per periodi di tempo più lunghi. Ecco i grafici degli stessi dati calcolati per 3 e 5 periodi di tempo, rispettivamente:

Grafico della velocità rispetto al tempo, calcolo a 3 intervalli

Grafico della velocità rispetto al tempo, calcolo a 5 intervalli

Notare come la velocità massima diminuisce con la quantità di livellamento. Questo accadrà sempre. Non esiste una risposta univoca e corretta: quanto si livella dipende dalla variabilità delle misurazioni e da quali periodi di tempo si desidera stimare le velocità. In questo esempio potresti segnalare una velocità massima di 2,5 (basata su punti GPS successivi), ma sarebbe in qualche modo inaffidabile a causa degli errori nelle posizioni GPS. È possibile segnalare una velocità massima pari a 2,1 sulla base del regolare periodo di cinque periodi.


Questo è un metodo semplice ma non necessariamente il migliore. Se scomponiamo l'errore di localizzazione GPS in un componente lungo il percorso e un altro componente perpendicolare al percorso, vediamo che i componenti lungo il percorso non influiscono sulle stime della distanza totale percorsa (a condizione che il percorso sia sufficientemente ben campionato: vale a dire, tu non "tagliare gli angoli"). I componenti perpendicolari all'aumento del percorsole distanze apparenti. Questo potenzialmente pregiudica la stima verso l'alto. Tuttavia, quando la distanza tipica tra le letture GPS è grande rispetto al tipico errore di distanza, la distorsione è piccola ed è probabilmente compensata dai piccoli movimenti nel percorso che non sono catturati dalla sequenza GPS (ovvero, alcuni tagli d'angolo sono sempre fatto). Pertanto, probabilmente non vale la pena sviluppare uno stimatore più sofisticato per far fronte a questi pregiudizi intrinseci, a meno che la frequenza di campionamento GPS sia molto bassa rispetto alla frequenza con cui il percorso "si muove" o l'errore di misurazione GPS è grande.

Per la cronaca, possiamo mostrare il risultato vero e corretto , poiché si tratta di dati simulati:

Grafico della velocità reale rispetto al tempo

Il confronto con i grafici precedenti mostra che in questo caso particolare il massimo delle velocità grezze sopravvalutava il massimo reale mentre il massimo delle velocità a cinque periodi era troppo basso.

In generale, quando i punti GPS vengono raccolti ad alta frequenza, la massima velocità raw sarà probabilmente troppo alta: tende a sovrastimare il massimo reale. Dire di più in ogni caso pratico richiederebbe un'analisi statistica più completa della natura e delle dimensioni degli errori GPS, della frequenza di raccolta GPS e della tortuosità del percorso sottostante.


2

Questo non è uno script o un algoritmo già pronti. Cosa ho fatto nell'immagine qui sotto mostrando la velocità media (in km / h):

  1. Esegui un filtro gpsbabel direttamente sul file GPX.
  2. Converti il ​​file GPX in punti raster in GRASS.
  3. Esegui r.neighborsper ottenere la velocità media per una finestra raster specificata.

la mia velocità media in bicicletta


Potresti chiarire come è possibile ottenere la velocità da una rappresentazione raster di una sequenza di posizioni?
whuber

Puoi sintetizzare le informazioni sulla velocità dai punti di traccia di un GPX usando gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Quindi importare questi dati come punti vettoriali e convertirli in raster in GRASS. Ho usato più GPX su questa immagine. Usando r.neighbors, ottengo la velocità media.
Maning

Mille grazie per la spiegazione. Ma, se gpsbabel ha calcolato la velocità, perché usi r.neighbors? Questo non mescolerebbe potenzialmente le velocità lungo una rotta con le velocità lungo altre rotte sufficientemente vicine alla griglia? Inoltre, la media della velocità è distorta quando i tempi di raccolta del GPS sono distribuiti in modo non uniforme. Ad esempio, se percorri 60 metri in 60 secondi, sei andato un metro al secondo, ma se è suddiviso in 10 metri in 1 secondo più 50 metri in 59 secondi (a causa di un errore posizionale di +9 m in un punto medio), la velocità media viene calcolata a 5,4 m / s: una sovrastima lorda.
whuber

@whuber, hai ragione. Per questa mappa, non sto cercando la velocità individuale ma una velocità aggregata nel tempo. Tutte le mie tracce sono in un intervallo di 1 secondo.
Maning

+1 per una soluzione creativa. (Mi piace trovare soluzioni raster per problemi apparentemente vettoriali, ma è bene conoscerne i limiti.)
whuber

1

Poiché i tuoi dati GPS non sono accurati, sarai solo in grado di stimare la velocità massima.

Puoi provare a calcolarlo calcolando la velocità non sui segmenti ma sulle polilinee (velocità media), per ridurre al minimo l'effetto delle imprecisioni.

Hai provato prima a pulire i tuoi dati (ad esempio Douglas-Peucker) per conservare solo i punti più rilevanti?


1
Douglas-Peucker non pulisce realmente i dati: rimuove solo i punti mentre cerca di mantenere la forma originale, quindi potrebbe persino peggiorare gli errori.
JaakL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.