Neste post será apresentada uma técnica de detecção de velocidade a partir dos dados de um acelerômetro
Detecção de deslocamento e velocidade usando acelerômetro.
A aceleração é a taxa de mudança de velocidade de um objeto. E a velocidade é a taxa de mudança de posição do mesmo objeto. Em outras palavras, a velocidade é a derivada da posição e a aceleração é a derivada da velocidade:
Assim como para ter o valor da velocidade, é possível através da integração
Neste caso, a integração pode ser vista como o calculo da área da curva, criada a partir da amostragem dos dados do acelerômetro.
A amostragem pode criar intervalos em pequenas áreas. Para que a coerência entre os dados seja adequada, a taxa de amostragem deve ser a mesma. O tempo da amostragem é a base de cada area enquanto o valor do acelerômetro é a altura.
Contudo, devido a amostragem discreta, existe um erro acumulativo no cálculo da integral
Esse erro é devido a amostragem, como mostrado na Figura 1. Uma maneira de lidar com ele é usando o método de aproximação de primeira ordem. Considerando que o resultado da integração é composto de duas áreas, Area 1 e Area 2.
A primeira área é associada o valor da amostragem (um quadrado). A segunda área é um triângulo, formado pelo valor da amostragem anterior (n-1) e a atual (n) divida por dois. Com isso a área pode ser calculada em cada intervalo com a equação.
Onde T é o tempo da amostragem. Com esta aproximação o erro é menor. Contudo, os dados amostrados no acelerômetro ainda não são adequados para medir a movimentação. Logo a seguir são colocados quais condições devem ser atendidas.
Considerações para a construção de um algoritmo de estimativa de movimentação.
– O sinal do acelerometro não é livre de ruídos e deve ser filtrado. O filtro recomendado é o de médias móveis (moving average); seu valor deve ser processado após a coleta de vários valores
– Mesmo com a filtragem, alguns ruidos pode surgir devido a implementações ruins. A taxa de amostragem pode ser ajustada para ignorar alguns valores. (tipicamente ± 2 passos de amostras a cada 16 amostras).
– A calibração inicial é necessária e deve ser a mais acurada possível
– O valor real da aceleração é dado pela amostragem menos o valor calibrado. Com isso a aceleração terá valores negativos e positivos
– Uma alta frequencia de amostragem implica em uma redução nos erros acumulados
-O intervalo entre as amostragem deve sempre ser o mesmo. Contudo, uma interpolação entre os valores é recomendável para resultados mais precisos.
A partir dessas condições, a seguir será mostrado como efetuar o cálculo passo a passo.
Calibração
Em alguns modelos de acelerômetros, os valores retornados pelas medidas são sempre positivos, mesmo se a aceleração for negativa ou positiva. Neste caso e necessário efetuar um ajuste de referencial, através de uma calibração.
A calibração acontece quando o acelerômetro não esta movimentando. O conjunto de valores medidos serão considerados como o zero. Valores menores serão associados a desaceleração, com referencial negativo e valoras maiores, com referencial positivo serão associados a aceleração.
Abaixo um código exemplo de calibração, usado no acelerômetro MMA7260QT 3-Axis [1] sendo executado com o acelerômetro em repouso.
[sourcecode language=”java”]
void Calibrate(void){
unsigned int count1;
count1 = 0;
do{
ADC_GetAllAxis();//Função que atualiza os valores dos eixos X e Y
sstatex = sstatex + Sample_X; //Acumula as amostras no eixo X
sstatey = sstatey + Sample_Y;//Acumula as amostras no eixo Y
count1++;
}while(count1!=0x0400);//Amostragem de 1024 Hz
sstatex=sstatex>>10;//Normaliza e guarda o referencial de calibração
sstatey=sstatey>>10;//Normaliza e guarda o referencial de calibração
}[/sourcecode]
Após a calibração, as medidas do acelerômetro estarão coerentes com o ambiente de testes.
Como mostrado na Figura 3, a área A1 indica uma aceleração positiva, e a área A2 mostram as medidas de uma aceleração negativa.
Filtragem
Um filtro passa baixa é uma maneira de remover parte dos ruídos gerados na medida do acelerômetro. A redução é necessária em algoritmos de detecção de posição e velocidade pois reduz os erros acumulados.
Uma média móvel pode ser aplicada para reduzir. A filtragem consiste nesse caso na redução do conjunto de medidas em uma média acumulada
[sourcecode language=”java”]
void Filter(void)
{
do{
accelerationx[1]=accelerationx[1] + Sample_X;
accelerationy[1]=accelerationy[1] + Sample_Y;
count2++;}while (count2!=0x40);//executa 64 amostras
accelerationx[1]= accelerationx[1]>>6;
accelerationy[1]= accelerationy[1]>>6;
}
[/sourcecode]
Ajustes e controle
Em alguns casos, mesmo após a calibração, dependendo da precisão do acelerômetro, medidas espúrias são geradas. Para isso, é necessário uma etapa de controle para filtrar mais uma vez os dados.
if ((accelerationx[1] <=3)&&(accelerationx[1] >= -3)) //Janela de controle aplicada sobre o eixo X
{accelerationx[1] = 0;}
[/sourcecode]
Integração
Após a calibração e filtragem, a Fórmula 1 pode ser aplicada localmente em cada conjunto de amostras, permitindo com isso a partir da aceleração encontrar a velocidade. No caso do deslocamento/posição, o mesmo pode ser encontrando integrando mais uma vez.
//primeira integração eixo X
velocityx[1] = velocityx[0] + accelerationx[0] + ((accelerationx[1] – accelerationx[0])>>1)
//segunda integração eixo Y
positionX[1] = positionX[0] + velocityx[0] + ((velocityx[1] – velocityx[0])>>1);
[/sourcecode]
Detecção de parada
Para detectar a parada, é necessário considerar o momento inercial nas medidas do acelerômetro. Por exemplo, uma medida de movimentação de um objeto, pode ser descrita pelo gráfico a seguir. É acelerado até um determinado instante e em seguida a força contrária é aplicada para sua parada. Ao fim do movimento, algumas leituras do acelerômetro são geradas.
Uma maneira de lidar é contabilizar quantas vezes os valores oscilam ao redor do zero
if (accelerationx[1]==0) { countx++;}
else { countx =0;}
if (countx>=25)//apos 25 medias iguais a zero, considere a parada
{
velocityx[1]=0;
velocityx[0]=0;
} [/sourcecode]
Conclusão
O uso do acelerômetro para inferência de movimentação é possível desde que se considere os problemas com relação a calibração e filtragem das medidas. Contudo, o erro cumulativo não permite que os acelerômetros tenham a precisão adequada para uma série longa de medidas. Para uma detecção mais precisa, é recomendado o uso do GPS. O acelerômetro pode ser usado inclusive como apoio na detecção da movimentação e indicação da posição atual, no momento que a identificação do GPS falhar, mas as informações prévias de localização já serem conhecidas.
Referencias:
[1] FreeScale Application Notes: AN3397, AN4068, AN4399
One thought on “Acelerômetros: Uso Em Celulares E Detecção De Velocidade. Parte 2”