Estamos usando um dispositivo de rastreamento GPS montado em veículos e, posteriormente, exibimos os movimentos em nosso aplicativo. No entanto, estamos tendo um pequeno problema com os veículos quando eles NÃO estão em movimento.
Apesar de parado, o dispositivo GPS envia informações com várias posições, às vezes até informa que o veículo está em movimento (de vez em quando informa que o veículo está se movendo rapidamente). O resultado final é uma representação feia do movimento em nossa aplicação e, pior, cálculos incorretos com relação ao tempo em que o veículo estava em movimento e parado. (Também temos algumas análises estatísticas).
Sei que o problema não é novo: o Google Navigation no meu telefone Android também tem problemas quando paro em uma encruzilhada de vez em quando, detectando que agora estou dirigindo na direção oposta (quando, na verdade, estou parado )
Mas realmente precisamos ter algum método para dizer que o veículo não está em movimento, especialmente por períodos prolongados.
O problema é agravado em alguns veículos que são mantidos sob os telhados durante a noite, o que faz com que o GPS fique louco devido a um sinal mais fraco (que ainda é forte o suficiente para conseguir uma posição).
Podemos detectar se o motor do veículo está ligado ou desligado, mas não podemos assumir que ele não está se movendo com o motor desligado (houve incidentes em que um veículo danificado foi rebocado ... e, é claro, há um caso de roubo em potencial que também precisa ser relatado).
Qual é a melhor maneira de abordar esse problema?
EDITAR:
Para adicionar mais algumas informações:
O dispositivo GPS tem um acelerômetro, mas que retorna apenas uma informação binária (em movimento / em movimento) e é sensível demais ou simplesmente não está funcionando.
Temos acesso a coisas como número de satélites ou qualidade, mas não sabemos como utilizar essas informações. Assim minha pergunta. :)
O problema não é detectar se um veículo está em movimento ou não em tempo real. Coletamos os dados e, posteriormente, fazemos algumas análises estatísticas e as exibimos. Mostramos a posição atual do veículo, mas isso é de pouca importância. Então, basicamente, precisamos saber se um veículo estava ou não se movendo olhando dados históricos.
fonte
Respostas:
Os comentários abaixo da sua pergunta trazem alguns pontos positivos, especialmente sobre a interpretação da qualidade dos dados de satélite (número de satélites, intensidade do sinal), e você pode usar essas informações no dispositivo móvel ou no servidor para filtrar valores GPS "ruins". A questão se resume a duas partes: 1) como você define uma leitura espúria do GPS e 2) como você define um estado estacionário.
Vamos começar com alguns parâmetros:
É complicado calcular essas velocidades com precisão. Digamos que você calcule a velocidade como / entre a leitura anterior (em t0) e a leitura atual (em t1). Se o delta do tempo for grande e a unidade contornar uma curva, a distância real percorrida será maior que a distância calculada. Além disso, se você obtiver duas leituras falsas seguidas e estiverem próximas o suficiente uma da outra, poderá obter resultados imprevisíveis.
Depois de ter a velocidade, basta compará-la com os seus parâmetros para ver se a leitura do GPS é falsa ou se a unidade está estacionária.
Você pode fazer uma filtragem mais sofisticada com os filtros Kalman , mas isso pode ser muito mais envolvido.
fonte
Conseguimos ajustar os dados do sensor de movimento.
Usando os dados do sensor de movimento, dados de ignição e velocidade informados pelo rastreador GPS, devemos saber quando um veículo está em movimento ou não com uma precisão muito boa.
Também demos uma olhada no número de satélites, e isso não parecia muito bem. Embora o número de satélites fosse menor para um veículo sob o teto, ele ainda era relativamente alto. 9-10 é o valor usual para esse veículo, enquanto sob o teto ele cai para 7 (mas pode ocasionalmente receber um sinal e subir também). Escusado será dizer que o número de satélites provou ser menos do que útil.
fonte
Você pode usar o número de sats usados para fazer a última correção, não os que estão em exibição. Por exemplo. View = 11, Fix = 5 E use os valores Max DB do sinal do sat mais forte. Tem que ser superior a 30Db para obter um sinal decente.
Os dispositivos que usamos têm um conceito de movimento / não movimento, sensores são: Aceleração, vibração, tensão de entrada, sinal de entrada (do contato da chave), dados GPS. Para relatar posições como iniciar / parar (é baseado em eventos) e eventos de direção / distância, o dispositivo deve estar no modo de movimento (este é um contador de contagem regressiva, configurável).
Os sensores têm a possibilidade de serem combinados. Nenhum evento de direção / distância nem temporizadores estão sendo relatados enquanto o marcador determina não estar no modo de movimento. Quando os sensores envolvidos param de relatar, o temporizador é zerado e, em seguida, um evento de parada é gerado + a unidade é colocada no modo sem movimento. Até a próxima vez. Dessa maneira, é possível separar os valores de aceleração do mecanismo de partida para 'colocá-lo' no modo de movimento e um limite inferior separado para 'mantê-lo em modo de movimento', pois ambos são padrões de aceleração muito distintos.
As unidades que usamos relatam se um ponto foi tomado com dados sat ruins, não sei se o seu hardware faz isso. Temos um SV_Position ou um SV_KeepAlive ou SV_TimeAlive. O Keepalive repetirá o último valor exato, já que o GPS não pode atualizar suas tabelas nem obter uma correção precisa, nem mesmo uma má. O TimeAlive é o que você verá quando atravessar um túnel ou alguém estacionar em uma garagem.
Uma maneira de monitorar também, embora seja um palpite parcial e depende do tipo de ativo que você está rastreando é a fonte de alimentação de tensão. por exemplo. um dispositivo operando a 12.30v é um carro cujo motor não está funcionando. Se você vir um que informa 14.2v, sabe que o alternador está girando. Para veículos de 24V, há um padrão semelhante ao local.
Espero que isso te dê algumas ideias. Tudo depende um pouco da qualidade do hardware. A fonte dos seus dados começa lá e todo o resto depois é tão bom quanto é. Mas eu o encorajo fortemente a usar os recursos das unidades para fazer distinção de qualidade em vez de fazer tudo no servidor (em retrospectiva). Depois de criar 3000 unidades, você precisará de um servidor robusto para analisar constantemente todos os dados de rastreamento, e então perceberá que eles não serão redimensionados.
fonte
Eu tive um problema semelhante ao usar um registrador GPS para rastrear uma scooter. O que fiz foi sobrepor a pista do GPS em uma camada de estrada e excluir manualmente os locais errados em um cruzamento ou semáforo ou próximo a ele. Tenho certeza de que existem ferramentas automatizadas para lidar com isso, provavelmente buffers em torno de cruzamentos e cálculo do tempo mínimo e máximo dentro e fora desse buffer.
fonte
O termo da arte para isso é spidering . Uma abordagem comum é simplesmente amostrar apenas quando a correção estiver a 10 m da correção anterior. Por exemplo, os computadores de mão Garmin registram correções com base na distância, enquanto os relógios de fitness registram correções com base no tempo . Os computadores de mão não têm muita aranha, mas os relógios sim.
fonte