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 !!!
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por