Calcular la velocidad máxima a partir de datos GPS

10

Tengo ubicaciones de GPS sin procesar para una pista y necesito obtener la velocidad máxima. Los métodos simples (calcular la velocidad entre 2 puntos, tomar el máximo) darán grandes números sin sentido debido a la inexactitud del GPS, el punto está saltando. ¿Puedes sugerir un buen algoritmo listo para resolver esto?

JaakL
fuente
Si el punto es saltar, ¿estás diciendo que tienes más de un punto en una ubicación? La mayor parte de su pregunta suena como si estuviera interesado en mostrar datos en tiempo real y no en el procesamiento posterior (para mayor precisión).
Brad Nesom
Si tiene las ubicaciones gps 'en bruto', entonces debe, por todos los medios, tener la velocidad sobre el suelo en nudos, que es un elemento estándar en la cadena NMEA RMC.
nagytech

Respuestas:

13

Para obtener velocidad debes tener tiempo, por supuesto. Por lo tanto, puede ordenar sus puntos por tiempo en una hoja de cálculo como la moda, con columnas {Tiempo, X, Y}, aumentando el tiempo.

Aquí hay un ejemplo donde la unidad GPS casi completó un circuito en sentido antihorario:

Mapa de un viaje

Estos puntos no se obtuvieron a intervalos iguales de tiempo. Por lo tanto , es imposible desde el mapa solo estimar velocidades. (Sin embargo, para ayudarlo a visualizar este viaje, me aseguré de recopilar los valores gps a intervalos casi iguales, para que pueda ver que el viaje comenzó rápido y lento en dos puntos intermedios y al final).

Debido a que está interesado en la velocidad, calcule las distancias entre filas sucesivas, así como las diferencias de tiempo. La división de distancias por diferencias de tiempo proporciona estimaciones de velocidad instantáneas. Eso es todo al respecto. Veamos una gráfica de esas estimaciones versus tiempo:

Trama de velocidad vs. tiempo

Los puntos rojos trazan las velocidades, mientras que la curva gris es suave, únicamente para guiar la vista. El tiempo de la velocidad máxima, y ​​la velocidad máxima en sí, son claras en el gráfico y se obtienen fácilmente de los datos hasta ahora si está utilizando una hoja de cálculo o funciones simples de resumen de datos en un SIG. Sin embargo, estas estimaciones de velocidad son sospechosas porque los puntos gps claramente tienen algún error de medición.

Una forma de lidiar con el error de medición es acumular las distancias entre múltiples períodos de tiempo y usarlas para estimar los tiempos. Por ejemplo, si los datos de {Diferencia de tiempo, Distancia} calculados previamente son

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

entonces los tiempos transcurridos y las distancias totales durante dos períodos de tiempo se obtienen agregando cada par de filas sucesivas:

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

Calcule las velocidades para los tiempos y distancias acumulados.

Uno puede llevar a cabo este cálculo para cualquier cantidad de períodos de tiempo, logrando trazados cada vez más uniformes y confiables a costa de promediar las estimaciones de velocidad durante períodos de tiempo más largos. Aquí hay gráficos de los mismos datos calculados para 3 y 5 períodos de tiempo, respectivamente:

Gráfica de velocidad vs. tiempo, cálculo de 3 intervalos

Gráfica de velocidad vs. tiempo, cálculo de 5 intervalos

Observe cómo la velocidad máxima disminuye con la cantidad de suavizado. Esto siempre sucederá. No hay una respuesta correcta única: cuánto suaviza depende de la variabilidad en las mediciones y de qué períodos de tiempo desea estimar las velocidades. En este ejemplo, podría informar una velocidad máxima tan alta como 2.5 (basada en puntos GPS sucesivos), pero sería poco confiable debido a los errores en las ubicaciones del GPS. Puede informar una velocidad máxima tan baja como 2.1 en función de la suavidad de cinco períodos.


Este es un método simple pero no necesariamente el mejor. Si descomponemos el error de ubicación del GPS en un componente a lo largo de la ruta y en otro componente perpendicular a la ruta, vemos que los componentes a lo largo de la ruta no afectan las estimaciones de la distancia total recorrida (siempre que la ruta esté suficientemente muestreada: es decir, usted no "cortar esquinas"). Los componentes perpendiculares a la ruta aumentanLas distancias aparentes. Potencialmente, esto sesga la estimación hacia arriba. Sin embargo, cuando la distancia típica entre las lecturas de GPS es grande en comparación con el error de distancia típico, el sesgo es pequeño y probablemente se compensa por las pequeñas oscilaciones en el camino que no son capturadas por la secuencia de GPS (es decir, algunos cortes de esquina son siempre hecho). Por lo tanto, probablemente no valga la pena desarrollar un estimador más sofisticado para hacer frente a estos sesgos inherentes, a menos que la frecuencia de muestreo del GPS sea muy baja en comparación con la frecuencia con la que la ruta "se mueve" o el error de medición del GPS es grande.

Para el registro, podemos mostrar el resultado verdadero y correcto , porque estos son datos simulados:

Trama de velocidad real versus tiempo

La comparación de esto con las gráficas anteriores muestra que, en este caso particular, el máximo de las velocidades brutas sobreestimó el máximo real, mientras que el máximo de las velocidades de cinco períodos fue demasiado bajo.

En general, cuando los puntos GPS se recopilan con alta frecuencia, la velocidad bruta máxima probablemente será demasiado alta: tiende a sobreestimar el máximo real. Decir más que esto en cualquier caso práctico requeriría un análisis estadístico más completo de la naturaleza y el tamaño de los errores de GPS, de la frecuencia de recopilación de GPS y de la tortuosidad de la ruta subyacente.

whuber
fuente
2

Este no es un script o algoritmo listo para usar. Lo que hice en la siguiente imagen que muestra la velocidad promedio (en km / h):

  1. Ejecute un filtro gpsbabel directamente en el archivo GPX.
  2. Convierta el archivo GPX en puntos ráster en GRASS.
  3. Ejecute r.neighborspara obtener la velocidad promedio para una ventana ráster especificada.

mi velocidad promedio de ciclismo

Maning
fuente
¿Podría aclarar cómo es posible obtener velocidad de una representación ráster de una secuencia de ubicaciones?
whuber
Puede sintetizar información de velocidad desde los puntos de seguimiento de un GPX usando gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Luego importe estos datos como puntos vectoriales y conviértalos a ráster en GRASS. Usé múltiples GPX en esta imagen. Usando r.neighbors, obtengo la velocidad promedio.
Maning
Muchas gracias por la explicación. Pero, si gpsbabel ha calculado la velocidad, ¿por qué usas r.neighbours? ¿No mezclaría potencialmente velocidades a lo largo de una ruta con velocidades a lo largo de cualquier otra ruta que esté suficientemente cerca de la red? Además, el promedio de velocidad está sesgado cuando los tiempos de recolección de GPS están espaciados de manera desigual. Por ejemplo, si viaja 60 metros en 60 segundos, se ha ido un metro por segundo, pero si se divide en 10 metros en 1 segundo más 50 metros en 59 segundos (debido a un error de posición de +9 m en un punto medio), la velocidad promedio se calcula en 5.4 m / s: una sobreestimación bruta.
whuber
@whuber, tienes razón. Para este mapa, no busco velocidad individual sino una velocidad agregada a través del tiempo. Todas mis pistas están en intervalo de 1 segundo.
Maning
+1 para una solución creativa. (Me gusta encontrar soluciones ráster para problemas aparentemente vectoriales, pero es bueno conocer sus limitaciones.)
whuber
1

Como sus datos de GPS son inexactos, solo podrá estimar la velocidad máxima.

Puede intentar calcularlo calculando la velocidad no en segmentos sino en polilíneas (velocidad promedio), para minimizar el efecto de imprecisiones.

¿Has intentado limpiar primero tus datos (Douglas-Peucker, por ejemplo) para mantener solo los puntos más relevantes?

BGervais
fuente
1
Douglas-Peucker no limpia realmente los datos, solo elimina puntos mientras intenta mantener la forma original, por lo que incluso podría empeorar los errores.
JaakL