Atualmente, estou trabalhando em um dispositivo que usa sempre um acelerômetro 3D (usando escala + -2g) e giroscópio 3D (usando escala + -250g) -sensor.
Eu posso ler todos os vetores possíveis (X, Y, Z) e sua aceleração (g) e taxa angular (dps) e também o ângulo em que o dispositivo está atualmente. Mas meu problema é que, quando o dispositivo está inclinado (0g quando não está inclinado), a aceleração está entre (para baixo) 0g -> - 1g ou entre (para cima) 0g -> 1g, dependendo do ângulo do dispositivo atualmente. Abaixo está uma foto que, espero, apaga a idéia.
O dispositivo estará localizado em um carro e deve medir a aceleração quando o carro estiver diminuindo a velocidade (freio). No entanto, se o dispositivo já estiver inclinado, o acelerômetro medirá algumas acelerações causadas pela inclinação, o que torna difícil dizer se o dispositivo tem realmente alguma aceleração ou se é apenas a inclinação que está causando a aceleração.
Os eixos X e Y produzem 0g e o eixo Z é 1g quando o dispositivo não tem inclinação e está em uma superfície plana. A inclinação faz com que a leitura do eixo X vá em direção a 1g se a inclinação estiver em direção a cima e a -1g em posição descendente. O + -1g é atingido quando o dispositivo está a 90 * graus da posição original
Eu estive pensando como eliminar essa aceleração que causa a inclinação e medir apenas a aceleração real do dispositivo, mas simplesmente não consigo sair desse problema com os seguintes dados que eu posso produzir.
Basicamente, acho que se eu pudesse medir a aceleração do eixo X (imagem) mesmo se o sensor estiver inclinado como na imagem.
Espero que esta mensagem não seja muito difícil de entender devido às minhas habilidades em inglês e à maneira como estou tentando explicar meu problema.
fonte
Respostas:
Apenas um esboço de uma solução.
Leve em consideração todos os 3 eixos.
A aceleração devido à gravidade, independentemente da inclinação, sempre será 1G, como uma soma vetorial de X, Y, Z, independentemente da inclinação. Você pode visualizar a aceleração em repouso ou em movimento constante como um ponto em uma esfera com raio 1G. (Se você estiver perfeitamente horizontal, esse ponto será (0, 0, -1), ou seja, diretamente abaixo de você).
A aceleração devido à frenagem distorcerá a própria esfera; a soma vetorial de X, Y, Z não será mais 1G.
então
A menos que você também esteja girando ou derrapando, precisará de informações do volante e do ABS para ter certeza; isso se torna um problema de fusão de dados. Essa abordagem fornecerá uma estimativa de aceleração. Para verificar a sanidade e refinar essa estimativa, combine-a com outras fontes de dados (também não confiáveis), como na resposta de Phil Frost, usando um filtro Kalman.
fonte
Seu principal erro é não tratar a aceleração como um único vetor. Quando o carro estiver parado, esse vetor sempre será 1 g para cima. Não olhe apenas para o componente X dos dados brutos do acelerômetro. Faça a matemática de vetor real.
Não. Esse é o ponto. O que você está dizendo pode ser verdade para o componente X da saída do acelerômetro, mas não é verdade para a aceleração quando o carro está parado.
A aceleração ideal medida será sempre a aceleração real do carro (em relação à terra), mais a aceleração de 1 g devido à gravidade. O último está sempre na direção ascendente. Se você conhece a orientação do carro, pode subtrair esse 1 g devido à gravidade para encontrar a aceleração que está procurando.
Observe que há um erro considerável nessas leituras, especialmente em sensores MEMS baratos. Embora você possa ter uma boa idéia sobre eventos de curto prazo, como aceleração forte ou frenagem forte, esses dados não são bons o suficiente para fazer navegação inercial por mais de alguns segundos.
fonte
Como outras respostas afirmaram, o acelerômetro fornece um vetor tridimensional que é a soma da gravidade e outras acelerações no carro devido ao motor, freios ou outras forças que atuam no carro. Seu objetivo é subtrair a aceleração gravitacional da saída do acelerômetro para encontrar as outras forças restantes.
Para uma melhor precisão, você não pode supor que a gravidade esteja sempre "baixa" em relação ao acelerômetro. Por exemplo, o carro pode estar em uma colina. Todos os seus cálculos devem ser feitos com matemática vetorial tridimensional e você deve ter alguma estimativa da orientação do carro para saber a direção do vetor gravitacional a subtrair.
Um filtro Kalman é uma abordagem comum aqui. A idéia é pegar todos os dados que você tiver, que possam alterar a orientação do carro, realizar uma média ponderada das medições, combinar isso com o que você sabe sobre a física que atua no carro, para chegar a uma estimativa probabilística do nova orientação do carro e para que lado está "para baixo".
Quanto mais dados você tiver, e com mais precisão for possível modelar a física do carro, mais precisa essa estimativa poderá se tornar.
Por exemplo, se você tem um giroscópio e mede o carro levantando, pode prever que o vetor de gravidade irá girar em direção à parte traseira do carro. No curto prazo, digamos, quando o carro começar a subir uma colina, isso pode ajudar o vetor de gravidade a assumir rapidamente a orientação correta.
Você também pode assumir que o carro, em média, não estará travando ou acelerando. Assim, uma saída filtrada passa-baixa do acelerômetro pode alimentar a estimativa de qual direção "para baixo" é. Isso fornece uma medição a longo prazo, não sujeita a deriva inercial.
A combinação de dados do acelerômetro e do giroscópio para estimar a direção da gravidade fornece uma estimativa mais precisa do que qualquer uma das medições.
Você também pode incorporar o que sabe sobre o possível envelope operacional do veículo. Por exemplo, o carro não pode subir ou descer ladeiras muito íngremes; portanto, quando o acelerômetro indica ângulos extremos, você pode pesá-lo menos, assumindo que a maior parte de sua produção seja devida a freios ou motor, e não à gravidade.
Você sabe que se o motorista pisar no freio, isso moverá o vetor de aceleração e você pode subtraí-lo do componente estimado "inativo".
Ou, se você tiver dados de GPS e mapa, poderá incorporar uma estimativa da inclinação do carro com base na localização. Se você tiver dados de alta precisão, poderá saber exatamente em que colina o veículo está. Se você tiver apenas dados de baixa precisão, isso ainda poderá ser útil. Por exemplo, se o carro estiver no Kansas, as colinas são improváveis. Se o carro estiver em São Francisco, as colinas são mais prováveis e você poderá dar menos peso ao acelerômetro.
Se você tiver dados sobre o consumo e a velocidade do combustível, sabendo que mais combustível é consumido ao subir, você pode usar isso para estimar que o carro é levantado ou diminuído com base na eficiência do combustível.
E assim por diante. Quanto mais você souber, melhor será sua estimativa.
fonte
Você precisaria de um algoritmo de fusão e usaria sensores de acelerômetro 3D, giroscópio 3D e magnético 3D. Com este algoritmo de fusão, você obtém a atitude, a gravidade da Terra ajuda como referência para detectar os ângulos do horizonte - inclinação / guinada / rotação. Os outros dois sensores mag / gyro ajudam a filtrar o movimento dinâmico. Como seu carro também vira à esquerda / direita, .. a força centrífuga será adicionada. Depois de ter a atitude, você pode subtrair o vetor gravitacional e desmontar a aceleração resultante nos três eixos.
fonte
Como uma abordagem muito básica, você pode usar um filtro passa-alto para eliminar a parte constante da aceleração (que corresponde à gravidade) e manter a parte variável da qual é devida à dinâmica do carro. Suponha que
raw
é um vetor que contém suas medidas X, Y e Z eacc
é a aceleração do carro sem gravidade. EntãoOs componentes individuais de
acc
ainda são afetados pela inclinação, mas a norma do vetor não é:Obviamente, esse método não é muito preciso, especialmente se a inclinação mudar a uma taxa alta. Isso é o mais longe que a matemática ingênua faz. Se você precisar de uma precisão melhor, saiba como usar um filtro Kalman.
fonte
A resposta está na definição precisa de "desaceleração" .
Da sua pergunta:
No entanto, desacelerar não é igual à frenagem . Existem duas definições possíveis:
Essa diferença é significativa em subidas e descidas. Em descidas, a velocidade do carro aumentará se os freios não forem aplicados. E em subidas, a velocidade pode diminuir mesmo quando não está freando.
Acontece que detectar 1. é significativamente mais difícil que 2. Vamos definir os eixos em relação à orientação do carro: X: direção frente-trás, Y: direção esquerda-direita, Z: direção cima-baixo. Todos os eixos alinhados ao carro.
Soluções:
Para a definição 1., a melhor abordagem é assumir que a velocidade do carro só pode mudar na direção X. Então a aceleração medida a = g + v, onde g é a aceleração devido a forças que combatem a gravidade, e v é a aceleração devido à mudança de velocidade. Você pode assumir que o comprimento de g é sempre igual a 9,8 m / s² e que v está sempre na direção X. Então (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , o que fornece v_x = a_x - sqrt ((9,8m / s²) ² - g_y² - g_z²) . Isso funcionará apenas enquanto | v | é menor que | g |, ou em outras palavras, a aceleração devida ao motor ou aos freios é menor que 1G. Deve ser uma suposição bastante segura, a menos que seu carro tenha um foguete.
Para a definição 2., você pode apenas pegar a leitura do eixo x diretamente. Se o carro não estiver acelerando ou freando, a única força de combate à gravidade que atua nele é a força normal da superfície da estrada. Essa força está sempre na direção z em relação ao carro, portanto, não altera a leitura do eixo x. Os freios e o motor atuam apenas na direção x e serão diretamente visíveis nesta leitura.
fonte
Parece que você está usando um dispositivo de "exagero" para o seu aplicativo. Você deve usar um dispositivo que meça apenas a aceleração x & y, assim, a inclinação não terá efeito mensurável. Embora a aceleração total possa ser menor ou maior, devido à inclinação, o dispositivo medirá apenas os componentes x e y da aceleração no plano em que o veículo está.
fonte