Venho tentando aplicar o filtro de Kalman para corrigir ruídos de um sensor infravermelho, mas não encontrei algo na internet que de pra entender de verdade como se deve aplicar esse filtro.

Tenho abaixo o exemplo de um filtro de kalman, mas não sei como colocar isso no código  do Arduíno:

void kalman_update(kalman_type* pKalman, float currMeas)
{
pKalman->meas = currMeas;

//prediction update
pKalman->p = pKalman->p + pKalman->q;

//measurement update
pKalman->k = pKalman->p / (pKalman->p + pKalman->r);
pKalman->stt = pKalman->stt + pKalman->k * (currMeas - pKalman->stt);
pKalman->p = (1 - pKalman->k) * pKalman->p;
}

O operador -> é um ponteiro, estudei como funciona os ponteiros e tal, mas também não consegui entender ele nesse código.

Se alguém conseguir mudar o código acima, retirando os ponteiros, ou encontrar um tutorial sobre filtro de kalman que seja fácil de entender, já é de grande ajuda. 

Desde já obrigado galera !!!

 

Exibições: 566

Responder esta

Respostas a este tópico

Olá Ewerton!

Na verdade, o operador -> não é um ponteiro.

Ele indica um membro de uma struct em C que está apontada.

Uma Struct é uma estrutura de dados que representa um conjunto de valores, ou seja formada por diversos membros.

Para indicar um membro de uma struct, usamos o separador -> quando existe um ponteiro para ela

ou usamos o separador . (ponto) quando é uma variável comum.

Pelo exemplo, a struct é formada pelos valores p,q,k,r e stt.

O algoritmo que você postou  faz algumas operações simples com esses valores  e só.

Existe um ponteiro pKalman que aponta para essa struct, por isso o valores vão se refletir nessa variável.

Para entender o que o algoritmo faz, basta retirar o prefixo pKalman-> e tratar tudo como variáveis simples.

Eu estou calmo, mas não conheço nada de Kalman.

Vou pesquisar mais e te falo.

Ewerton, só complementando:

O símbolo -> é usado também em algumas linguagens C++ e PHP, como separador para indicar um membro de uma classe (objeto) em linguagens orientada a objetos. Um método ou propriedade de classe

Mas no caso desse exemplo que você passou, o autor deve ter feito o seguinte:

- Criou uma estrutura de dados, como um array de structs;

- Cada struct possui os campos p,q,k,r e stt

- A função recebe um ponteiro para um elemento do array e realiza alguns cálculos, gravando novamente no array

Isso significa que a função provavelmente é somente uma parte do cálculo do filtro de Kalman

Bom dia ,

Favor informar o que faz um filtro de Kalman.

Informe o link de onde tirou o seu exemplo. 

Talvez, assim a gente possa ajudá-lo. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço