Calculer la vitesse maximale à partir des données GPS

10

J'ai des emplacements GPS bruts pour une piste et j'ai besoin d'obtenir une vitesse maximale. Des méthodes simples (calculer la vitesse entre 2 points, prendre au maximum) donneront de grands nombres sans signification en raison de l'inexactitude du GPS, le point saute. Pouvez-vous suggérer un bon algorithme prêt à l'emploi pour résoudre ce problème?

JaakL
la source
Si le point saute, dites-vous que vous avez plus d'un point à un endroit? La majeure partie de votre question semble vous intéresser à afficher des données en temps réel et non au post-traitement (pour plus de précision).
Brad Nesom
Si vous avez les emplacements GPS «bruts», vous devriez, par tous les moyens, avoir la vitesse sur le fond en nœuds, ce qui est un élément standard dans la chaîne NMEA RMC.
nagytech

Réponses:

13

Pour obtenir de la vitesse, vous devez bien sûr avoir le temps . Ainsi, vous pouvez ordonner vos points par le temps dans une feuille de calcul comme la mode, avec des colonnes {Time, X, Y}, en augmentant le temps.

Voici un exemple où l'unité GPS a presque terminé un circuit dans le sens antihoraire:

Carte d'un voyage

Ces points n'ont pas été obtenus à intervalles de temps égaux. Par conséquent, il est impossible à partir de la carte seule d'estimer les vitesses. (Pour vous aider à visualiser ce voyage, cependant, je me suis assuré de collecter les valeurs GPS à des intervalles presque égaux, afin que vous puissiez voir que le voyage a commencé rapidement et ralenti à deux points intermédiaires et à la fin.)

Parce que vous êtes intéressé par la vitesse, calculez les distances entre les rangées successives ainsi que les différences de temps. La division des distances par les différences de temps donne des estimations de vitesse instantanées. C'est tout ce qu'on peut en dire. Regardons un graphique de ces estimations en fonction du temps:

Graphique vitesse / temps

Les points rouges tracent les vitesses tandis que la courbe grise est un lisse brut, uniquement pour guider l'œil. L'heure de la vitesse maximale et la vitesse maximale elle-même sont claires à partir du graphique et facilement obtenues à partir des données jusqu'à présent si vous utilisez un tableur ou de simples fonctions de résumé des données dans un SIG. Cependant, ces estimations de vitesse sont suspectes car les points GPS contiennent clairement une erreur de mesure.

Une façon de faire face aux erreurs de mesure consiste à accumuler les distances entre plusieurs périodes et à les utiliser pour estimer les temps. Par exemple, si les données {Différence horaire, Distance} précédemment calculées sont

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

puis les temps écoulés et les distances totales sur deux périodes sont obtenus en ajoutant chaque paire de rangées successives:

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

Recalculez les vitesses pour les temps et distances accumulés.

On peut effectuer ce calcul pour n'importe quel nombre de périodes, en obtenant des tracés toujours plus fluides et plus fiables au prix de la moyenne des estimations de vitesse sur des périodes plus longues. Voici des tracés des mêmes données calculées pour 3 et 5 périodes, respectivement:

Graphique de la vitesse en fonction du temps, calcul de 3 intervalles

Graphique de la vitesse en fonction du temps, calcul à 5 ​​intervalles

Remarquez comment la vitesse maximale diminue avec la quantité de lissage. Cela arrivera toujours. Il n'y a pas de réponse correcte unique: combien vous lissez dépend de la variabilité des mesures et des périodes de temps que vous souhaitez estimer les vitesses. Dans cet exemple, vous pourriez signaler une vitesse maximale pouvant atteindre 2,5 (sur la base de points GPS successifs), mais elle serait quelque peu peu fiable en raison des erreurs dans les positions GPS. Vous pouvez signaler une vitesse maximale aussi faible que 2,1 sur la base du lissage sur cinq périodes.


Il s'agit d'une méthode simple mais pas nécessairement la meilleure. Si nous décomposons l'erreur de localisation GPS en un composant le long du chemin et un autre composant perpendiculaire au chemin, nous constatons que les composants le long du chemin n'affectent pas les estimations de la distance totale parcourue (à condition que le chemin soit suffisamment bien échantillonné: c'est-à-dire que vous ne "coupez pas les coins"). Les composantes perpendiculaires à la trajectoire augmententles distances apparentes. Cela peut potentiellement biaiser l'estimation vers le haut. Cependant, lorsque la distance typique entre les lectures GPS est grande par rapport à l'erreur de distance typique, le biais est faible et est probablement compensé pour les minuscules ondulations du chemin qui ne sont pas capturées par la séquence GPS (c'est-à-dire, certaines coupes de coin sont toujours fait). Par conséquent, cela ne vaut probablement pas la peine de développer un estimateur plus sophistiqué pour faire face à ces biais inhérents, à moins que la fréquence d'échantillonnage GPS ne soit très faible par rapport à la fréquence avec laquelle le chemin "oscille" ou l'erreur de mesure GPS est importante.

Pour mémoire, nous pouvons montrer le vrai résultat correct , car ce sont des données simulées:

Graphique de la vitesse réelle en fonction du temps

La comparaison avec les graphiques précédents montre que dans ce cas particulier, le maximum des vitesses brutes surestimait le maximum réel tandis que le maximum des vitesses à cinq périodes était trop faible.

En général, lorsque les points GPS sont collectés à haute fréquence, la vitesse brute maximale sera probablement trop élevée: elle a tendance à surestimer le maximum réel. Dire plus que cela dans n'importe quel cas pratique nécessiterait une analyse statistique plus complète de la nature et de la taille des erreurs GPS, de la fréquence de collecte GPS et du caractère tortueux du chemin sous-jacent.

whuber
la source
2

Ce n'est pas un script ou un algorithme prêt à l'emploi. Ce que j'ai fait dans l'image ci-dessous montrant la vitesse moyenne (en km / h):

  1. Exécutez un filtre gpsbabel directement sur le fichier GPX.
  2. Convertissez le fichier GPX en points raster dans GRASS.
  3. Exécutez r.neighborspour obtenir la vitesse moyenne d'une fenêtre raster spécifiée.

ma vitesse moyenne à vélo

crinière
la source
Pourriez-vous préciser comment il est possible d'obtenir de la vitesse à partir d'une représentation raster d'une séquence d'emplacements?
whuber
Vous pouvez synthétiser les informations de vitesse à partir des points de suivi d'un GPX à l'aide de gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Importez ensuite ces données en tant que points vectoriels et convertissez-les en raster dans GRASS. J'ai utilisé plusieurs GPX sur cette image. En utilisant r.neighbors, j'obtiens la vitesse moyenne.
2011
Merci beaucoup pour l'explication. Mais, si gpsbabel a calculé la vitesse, pourquoi utilisez-vous r.neighbors? Cela ne mélangerait-il pas potentiellement des vitesses le long d'un itinéraire avec des vitesses le long d'autres itinéraires suffisamment proches du réseau? En outre, la moyenne de la vitesse est biaisée lorsque les heures de collecte GPS sont espacées de manière inégale. Par exemple, si vous parcourez 60 mètres en 60 secondes, vous avez parcouru un mètre par seconde, mais s'il est divisé en 10 mètres en 1 seconde plus 50 mètres en 59 secondes (en raison d'une erreur de position de +9 m à mi-parcours), la vitesse moyenne se calcule à 5,4 m / s: une surestimation brute.
whuber
@whuber, vous avez raison. Pour cette carte, je ne recherche pas une vitesse individuelle mais une vitesse globale dans le temps. Toutes mes pistes sont à 1 seconde d'intervalle.
partir du
+1 pour une solution créative. (J'aime trouver des solutions matricielles à des problèmes apparemment vectoriels, mais il est bon de connaître leurs limites.)
whuber
1

Étant donné que vos données GPS sont inexactes, vous ne pourrez estimer que la vitesse maximale.

Vous pouvez essayer de le calculer en calculant la vitesse non pas sur des segments mais sur des polylignes (vitesse moyenne), pour minimiser l'effet des imprécisions.

Avez-vous d'abord essayé de nettoyer vos données (Douglas-Peucker par exemple) pour ne garder que les points les plus pertinents?

BGervais
la source
1
Douglas-Peucker ne nettoie pas vraiment les données - il supprime simplement les points tout en essayant de conserver la forme d'origine, donc en fait, cela pourrait même aggraver les erreurs.
JaakL