Estou apenas pensando em voz alta e ainda não joguei com uma API de acelerômetro do Android, então tenha paciência comigo.
Em primeiro lugar, tradicionalmente, para obter navegação a partir de acelerômetros, você precisaria de um acelerômetro de 6 eixos. Você precisa de acelerações em X, Y e Z, mas também de rotações Xr, Yr e Zr. Sem os dados de rotação, você não tem dados suficientes para estabelecer um vetor, a menos que presuma que o dispositivo nunca muda sua atitude, o que seria bastante limitante. Ninguém lê o TOS de qualquer maneira.
Ah, e você sabe que o INS muda com a rotação da Terra, certo? Então, tem isso também. Uma hora depois e você está misteriosamente escalando uma inclinação de 15 ° para o espaço. Isso supondo que você tenha um INS capaz de manter a localização por tanto tempo, o que um telefone ainda não pode fazer.
Uma maneira melhor de utilizar acelerômetros - mesmo com um acelerômetro de 3 eixos - para navegação seria conectar-se ao GPS para calibrar o INS sempre que possível. Onde o GPS é insuficiente, o INS elogia muito bem. O GPS pode atirar em você de repente a 3 quarteirões de distância porque você se aproximou demais de uma árvore. O INS não é ótimo, mas pelo menos sabe que você não foi atingido por um meteoro.
O que você poderia fazer é registrar os dados do acelerômetro do telefone, e muitos deles. Como semanas no valor. Compare-os com dados GPS bons (quero dizer, realmente bons) e use datamining para estabelecer correlação de tendências entre os dados do acelerômetro e os dados GPS conhecidos. (Dica profissional: você vai querer verificar o almanaque do GPS para dias com boa geometria e muitos satélites. Alguns dias você pode ter apenas 4 satélites e isso não é suficiente) O que você pode fazer é descobrir isso quando uma pessoa está caminhando com o telefone no bolso, os dados do acelerômetro registram um padrão muito específico. Com base no datamining, você estabelece um perfil para aquele dispositivo, com aquele usuário, e que tipo de velocidade aquele padrão representa quando ele tinha dados de GPS para acompanhá-lo. Você deve ser capaz de detectar curvas, subir escadas, sentar (calibração para tempo de velocidade 0! ) e várias outras tarefas. A maneira como o telefone está sendo segurado precisa ser tratada como entradas de dados separadas inteiramente. Sinto o cheiro de uma rede neural sendo usada para fazer a mineração de dados. Em outras palavras, algo cego para o que as entradas significam. O algoritmo procuraria apenas tendências nos padrões, sem realmente prestar atenção às medições reais do INS. Tudo o que saberia éhistorically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.
E isso moveria a peça para frente de acordo. É importante que seja totalmente cego, porque apenas colocar um telefone no bolso pode ser orientado em uma das 4 orientações diferentes, e 8 se você trocar de bolso. E também há muitas maneiras de segurar o telefone. Estamos falando de muitos dados aqui.
Obviamente, você ainda terá muita deriva, mas acho que terá melhor sorte dessa forma, porque o dispositivo saberá quando você parar de andar, e a deriva posicional não se perpetuará. Ele sabe que você está parado com base em dados históricos. Os sistemas INS tradicionais não possuem esse recurso. A deriva se perpetua em todas as medições futuras e se compõe exponencialmente. A exatidão iníqua, ou ter uma navegação secundária para verificar em intervalos regulares, é absolutamente vital com o INS tradicional.
Cada dispositivo e cada pessoa teria que ter seu próprio perfil. São muitos dados e muitos cálculos. Todo mundo anda em velocidades diferentes, com passos diferentes, e coloca seus telefones em bolsos diferentes, etc. Certamente, para implementar isso no mundo real, seria necessário que o processamento de números fosse feito no lado do servidor.
Se você usou o GPS para a linha de base inicial, parte do problema é que o GPS tende a ter suas próprias migrações ao longo do tempo, mas são erros que não se perpetuam. Coloque um receptor em um local e registre os dados. Se não houver correções WAAS, você pode obter facilmente correções de localização em direções aleatórias 30 metros ao seu redor. Com WAAS, talvez até 6 pés. Você pode realmente ter mais sorte com um sistema RTK submétrico em uma mochila para pelo menos obter o algoritmo da RNA.
Você ainda terá deriva angular com o INS usando meu método. Isto é um problema. Mas, se você foi tão longe para construir uma ANN para derramar dados de GPS e INS entre n usuários e realmente conseguiu fazê-lo funcionar até este ponto, obviamente não se importa com o big data até agora. Continue seguindo esse caminho e use mais dados para ajudar a resolver a tendência angular: as pessoas são criaturas de hábitos. Praticamente fazemos as mesmas coisas como andar nas calçadas, através de portas, subir escadas, e não fazemos coisas malucas como atravessar estradas, paredes ou sacadas.
Então, digamos que você esteja pegando uma página do Big Brother e começando a armazenar dados sobre para onde as pessoas estão indo. Você pode começar a mapear por onde as pessoas deveriam andar. Pode-se apostar que, se o usuário começar a subir escadas, ele estará na mesma base da escada que a pessoa à sua frente subiu. Depois de 1000 iterações e alguns ajustes de mínimos quadrados, seu banco de dados sabe muito bem onde essas escadas estão com grande precisão. Agora você pode corrigir a deriva angular e a localização quando a pessoa começa a andar. Quando ela atinge essas escadas, ou vira no corredor, ou desce uma calçada, qualquer desvio pode ser corrigido. Seu banco de dados conteria setores que são avaliados pela probabilidade de uma pessoa caminhar até lá ou de que esse usuário já tenha passado por lá. Bancos de dados espaciais são otimizados para isso usandodivide and conquer
para alocar apenas setores que sejam significativos. Seria como aqueles projetos do MIT em que o robô equipado com laser começa com uma imagem preta e pinta o labirinto na memória tomando cada volta, iluminando onde estão todas as paredes.
Áreas de alto tráfego obteriam pesos maiores, e áreas onde ninguém nunca esteve teriam peso zero. As áreas de maior tráfego têm maior resolução. Você basicamente acabaria com um mapa de todos os lugares que alguém esteve e o usaria como um modelo de previsão.
Eu não ficaria surpreso se você pudesse determinar que lugar uma pessoa ocuparia em um teatro usando esse método. Com usuários suficientes indo ao teatro e resolução suficiente, você teria dados mapeando cada linha do teatro e a largura de cada linha. Quanto mais pessoas visitam um local, maior a fidelidade com a qual você pode prever que essa pessoa está localizada.
Além disso, recomendo fortemente que você obtenha uma assinatura (gratuita) da revista GPS World se estiver interessado na pesquisa atual sobre esse tipo de coisa. Todo mês eu geek com isso.