Calcular velocidade máxima a partir de dados GPS

10

Eu tenho locais GPS brutos para uma pista e preciso obter a velocidade máxima. Métodos simples (calcular a velocidade entre 2 pontos, levar no máximo) fornecerão números grandes sem sentido devido à imprecisão do GPS, o ponto está saltando. Você pode sugerir um bom algoritmo pronto para resolver isso?

JaakL
fonte
Se o ponto está saltando, você está dizendo que tem mais de um ponto em um local? A maior parte da sua pergunta parece que você está interessado em exibir dados em tempo real e não em pós-processamento (para precisão).
precisa
Se você tiver os locais dos gps 'brutos', deverá, em todos os aspectos, ter a velocidade acima do solo em nós, que é um elemento padrão na cadeia NMEA RMC.
Nagytech

Respostas:

13

Para ganhar velocidade, você deve ter tempo, é claro. Assim, você pode ordenar seus pontos por hora em uma planilha como moda, com colunas {Time, X, Y}, aumentando o tempo.

Aqui está um exemplo em que a unidade GPS quase completou um circuito no sentido anti-horário:

Mapa de uma viagem

Esses pontos não foram obtidos em intervalos iguais de tempo. Portanto , é impossível apenas do mapa estimar as velocidades. (Para ajudar você a visualizar essa viagem, lembrei-me de coletar os valores dos gps em intervalos quase iguais, para que você possa ver que a viagem começou rapidamente e diminuiu em dois pontos intermediários e no final.)

Como você está interessado em velocidade, calcule as distâncias entre linhas sucessivas e as diferenças de horário. Dividir distâncias por diferenças de tempo fornece estimativas instantâneas de velocidade. É tudo o que há para isso. Vejamos um gráfico dessas estimativas versus o tempo:

Gráfico de velocidade versus tempo

Os pontos vermelhos traçam as velocidades, enquanto a curva cinza é suave, apenas para guiar o olho. O tempo da velocidade máxima e a velocidade máxima propriamente dita são claros na plotagem e são facilmente obtidos a partir dos dados até o momento, se você estiver usando uma planilha ou funções simples de resumo de dados em um GIS. No entanto, essas estimativas de velocidade são suspeitas porque os pontos de GPS claramente apresentam algum erro de medição.

Uma maneira de lidar com o erro de medição é acumular as distâncias entre vários períodos e usá-las para estimar os tempos. Por exemplo, se os dados {Diferença horária, Distância} calculados anteriormente forem

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

os tempos decorridos e as distâncias totais em dois períodos são obtidos adicionando cada par de linhas sucessivas:

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

Recompute as velocidades para os tempos e distâncias acumulados.

Pode-se realizar esse cálculo por qualquer número de períodos, obtendo parcelas cada vez mais suaves e confiáveis, com o custo de calcular a velocidade estimada em períodos mais longos. Aqui estão gráficos dos mesmos dados calculados por 3 e 5 períodos, respectivamente:

Gráfico de velocidade versus tempo, cálculo de 3 intervalos

Gráfico de velocidade versus tempo, cálculo de 5 intervalos

Observe como a velocidade máxima diminui com a quantidade de suavização. Isso sempre vai acontecer. Não existe uma resposta correta única: o quanto você suaviza depende da variabilidade nas medições e de quais períodos de tempo você deseja estimar as velocidades. Neste exemplo, você pode relatar uma velocidade máxima tão alta quanto 2,5 (com base em sucessivos pontos de GPS), mas seria algo pouco confiável devido aos erros nos locais de GPS. Você pode relatar uma velocidade máxima tão baixa quanto 2,1 com base no bom período de cinco períodos.


Este é um método simples, mas não necessariamente o melhor. Se decompormos o erro de localização do GPS em um componente ao longo do caminho e outro componente perpendicular ao caminho, veremos que os componentes ao longo do caminho não afetam as estimativas da distância total percorrida (desde que o caminho seja suficientemente bem amostrado: ou seja, você não "corte cantos"). Os componentes perpendiculares ao caminho aumentamas distâncias aparentes. Isso potencialmente influencia a estimativa para cima. No entanto, quando a distância típica entre as leituras do GPS é grande em comparação com o erro típico de distância, o desvio é pequeno e provavelmente é compensado pelos pequenos movimentos no caminho que não são capturados pela sequência do GPS (ou seja, algum corte de canto é sempre feito). Portanto, provavelmente não vale a pena desenvolver um estimador mais sofisticado para lidar com esses vieses inerentes, a menos que a frequência de amostragem do GPS seja muito baixa em comparação com a frequência com que o caminho "mexe" ou o erro de medição do GPS é grande.

Para o registro, podemos mostrar o resultado correto e verdadeiro , porque estes são dados simulados:

Gráfico da verdadeira velocidade versus tempo

A comparação com as plotagens anteriores mostra que , nesse caso em particular, o máximo das velocidades brutas superestimou o máximo verdadeiro, enquanto o máximo das velocidades de cinco períodos era muito baixo.

Em geral, quando os pontos de GPS são coletados com alta frequência, a velocidade bruta máxima provavelmente será muito alta: tende a superestimar o máximo verdadeiro. Dizer mais do que isso em qualquer instância prática exigiria uma análise estatística mais completa da natureza e tamanho dos erros do GPS, da frequência de coleta do GPS e da tortuosidade do caminho subjacente.

whuber
fonte
2

Este não é um script ou algoritmo pronto. O que fiz na imagem abaixo mostrando a velocidade média (em km / h):

  1. Execute um filtro gpsbabel diretamente no arquivo GPX.
  2. Converta o arquivo GPX em pontos raster no GRASS.
  3. Execute r.neighborspara obter a velocidade média de uma janela raster especificada.

minha velocidade média de ciclismo

maning
fonte
Você poderia esclarecer como é possível obter velocidade a partir de uma representação raster de uma sequência de locais?
whuber
Você pode sintetizar informações de velocidade a partir dos pontos de controle de uma GPX usando gpsbabel. gpsbabel.org/htmldoc-development/filter_track.html . Importe esses dados como pontos vetoriais e converta-os em varredura no GRASS. Eu usei vários GPX nesta imagem. Usando r.neighbors, eu recebo a velocidade média.
maning 17/03/11
Muito obrigado pela explicação. Mas, se o gpsbabel calculou a velocidade, por que você usa r.neighbors? Isso não potencialmente misturaria velocidades ao longo de uma rota com velocidades em outras rotas suficientemente próximas da grade? Além disso, a média da velocidade é enviesada quando os tempos de coleta do GPS são desigualmente espaçados. Por exemplo, se você percorrer 60 metros em 60 segundos, subiu um metro por segundo, mas se for dividido em 10 metros em 1 segundo mais 50 metros em 59 segundos (devido a um erro de posição de + 9 m no ponto médio), a velocidade média calcula até 5,4 m / s: uma superestimação bruta.
whuber
@ Whuber, você está correto. Para este mapa, não estou procurando velocidade individual, mas uma velocidade agregada ao longo do tempo. Todas as minhas faixas estão no intervalo de 1 segundo.
maning 17/03/11
+1 para uma solução criativa. (. I como encontrar soluções raster a problemas vetor aparentemente, mas é bom saber suas limitações)
whuber
1

Como seus dados de GPS são imprecisos, você só poderá estimar a velocidade máxima.

Você pode tentar calculá-lo calculando a velocidade não em segmentos, mas em polilinhas (velocidade média), para minimizar o efeito de imprecisões.

Você já tentou limpar seus dados primeiro (Douglas-Peucker, por exemplo) para manter apenas os pontos mais relevantes?

BGervais
fonte
1
O Douglas-Peucker realmente não limpa os dados - apenas remove os pontos enquanto tenta manter a forma original; portanto, pode até fazer com que os erros pareçam piores.
JaakL