Aprendendo Filtro de Kalman desde o básico
(kalmanfilter.net)- O Kalman Filter é um algoritmo que estima o estado atual e prevê o futuro em sistemas com ruído de medição e fatores externos desconhecidos, usado em áreas como rastreamento, navegação, robótica e controle
- O exemplo de radar unidimensional mede a distância (r) e a velocidade (v) de uma aeronave, tratando estado e incerteza juntos com o vetor de estado (\boldsymbol{x}=[r, v]^T) e as matrizes de covariância (\boldsymbol{P}, \boldsymbol{R}, \boldsymbol{Q})
- As medições iniciais são distância de 10.000 m e velocidade de 200 m/s; aplicando um intervalo de amostragem de 5 segundos e um modelo de velocidade constante, a próxima posição prevista é 11.000 m
- A etapa de predição propaga o estado com a matriz de transição de estado (\boldsymbol{F}) e calcula a covariância com (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T+\boldsymbol{Q}), refletindo o efeito de que a incerteza da velocidade e o ruído de processo aumentam a incerteza da posição
- A etapa de atualização não confia cegamente na nova medição nem a descarta; ela combina predição e medição com pesos por meio do Kalman Gain, reduzindo a incerteza da estimativa, e depois o filtro repete predição e atualização
O problema tratado pelo Kalman Filter
- O Kalman Filter é um algoritmo que realiza estimação de estado e previsão futura em sistemas com incerteza
- Lida com situações em que há ruído de medição ou fatores externos desconhecidos influenciando o sistema
- É usado como ferramenta essencial em rastreamento de objetos, navegação, robótica e controle
- Na estimativa da trajetória de um mouse de computador, pode reduzir tremores da mão e ruído para produzir um caminho de movimento mais estável
- Na análise de mercados financeiros, é aplicado para detectar tendências de preços de ações em dados de mercado com ruído; na meteorologia, para previsão do tempo
- Este tutorial constrói intuição por meio de exemplos numéricos, em vez de colocar matemática complexa primeiro
- Também inclui um exemplo de um Kalman Filter mal projetado que não consegue rastrear corretamente um objeto
- O objetivo é chegar a um nível em que seja possível entender os conceitos e a matemática, além de projetar e implementar diretamente
Roteiro de aprendizagem
- O roteiro de aprendizagem oferecido é dividido em três etapas
- Visão geral em uma única página: explica os conceitos centrais e as equações essenciais sem derivações, assumindo conhecimento básico de estatística e álgebra linear
- Tutorial web gratuito baseado em exemplos: em tutorial, constrói intuição com exemplos numéricos e aborda passo a passo até a derivação das equações do Kalman Filter
- Livro: Kalman Filter from the Ground Up inclui 14 exemplos numéricos totalmente resolvidos, gráficos e tabelas de desempenho, Extended Kalman Filter e Unscented Kalman Filter, fusão de sensores e diretrizes de implementação
Por que a predição é necessária no rastreamento por radar
- Para que um radar rastreie uma aeronave, ele precisa apontar repetidamente um feixe estreito na direção do alvo; portanto, deve prever a posição futura no momento em que enviar o próximo feixe
- Se a predição falhar, o feixe pode apontar para a direção errada e o rastreamento pode ser perdido
- É necessário um modelo dinâmico que represente como a aeronave se move ao longo do tempo
- No exemplo unidimensional simplificado, considera-se apenas o movimento retilíneo da aeronave em direção ao radar ou para longe dele
- O estado é definido como a distância (r) em relação ao radar
- O radar calcula a distância (r) usando o tempo de transmissão e recepção do pulso e a velocidade da luz
- Também é possível medir a velocidade (v) usando o efeito Doppler
- Suponha que, em (t_0), a distância de 10.000 m e a velocidade de 200 m/s foram medidas com acurácia e precisão muito altas
- O intervalo de amostragem é (\Delta t=5s)
- No modelo de velocidade constante, a distância percorrida é (\Delta r=v\cdot\Delta t)
- A posição prevista é (10,000+200\cdot5=11,000m)
Ruído de medição e ruído de processo
- Medições reais de radar não são perfeitas; mesmo que vários radares meçam a mesma aeronave no mesmo instante, os resultados variam um pouco
- Essa variação ocorre por causa do ruído de medição
- É preciso calcular não apenas a estimativa, mas também o quanto essa estimativa é confiável
- O modelo dinâmico também não explica completamente o movimento real
- Mesmo supondo que a aeronave se mova a velocidade constante, fatores externos como vento podem alterar o movimento real
- Esses efeitos imprevisíveis são tratados como ruído de processo
- O Kalman Filter fornece conjuntamente a estimativa do estado atual, a predição do estado futuro e as respectivas incertezas
- É apresentado como um algoritmo ótimo que minimiza a incerteza da estimativa de estado
Representação de estado e inicialização no exemplo do radar
- O estado do sistema no exemplo é um vetor que inclui a distância (r) e a velocidade (v) da aeronave
[ \boldsymbol{x}=\left[\begin{matrix}r\v\\end{matrix}\right] ]
- Vetores são indicados por letras minúsculas em negrito, e matrizes por letras maiúsculas em negrito
- O Kalman Filter é inicializado com a primeira medição
- Em (t_0), as medições são distância de 10.000 m e velocidade de 200 m/s
- O vetor de medição é o seguinte
[ \boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- As medições não são o estado exato do sistema, mas variáveis aleatórias misturadas com ruído
- O desvio-padrão da medição de distância é (4m)
- O desvio-padrão da medição de velocidade é (0.5m/s)
- Como a variância é o quadrado do desvio-padrão, a matriz de covariância de medição (\boldsymbol{R}_0) é a seguinte
[ \boldsymbol{R}_0=\left[\begin{matrix}16&0\0&0.25\\end{matrix}\right] ]
- Neste exemplo, assume-se que os erros de medição de distância e velocidade não estão relacionados entre si, portanto os elementos fora da diagonal da matriz de covariância são definidos como 0
- No momento da inicialização, como há apenas uma única medição, a medição pode ser usada como estimativa inicial do estado
[ \boldsymbol{\hat{x}}_{0,0}=\boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]
- Essa abordagem só é possível na etapa de inicialização
Etapa de predição: propagação do estado e da covariância
- Para prever o próximo estado, usa-se um modelo dinâmico de velocidade constante
[ v_1=v_0=v ]
[ r_1=r_0+v_0\Delta t ]
- A predição de estado em forma matricial é a seguinte
[ {\hat{\boldsymbol{x}}}{1,0}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{0,0} ]
- (\boldsymbol{F}) é a matriz de transição de estado e, quando (\Delta t=5s), o resultado da predição é o seguinte
[ {\hat{\boldsymbol{x}}}_{1,0}
\left[\begin{matrix}1&5\0&1\\end{matrix}\right] \left[\begin{matrix}10,000\200\\end{matrix}\right]
\left[\begin{matrix}11,000\200\\end{matrix}\right] ]
- A extrapolação geral do estado, isto é, a equação de predição, é a seguinte
[ {\hat{\boldsymbol{x}}}{n+1,n}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{n,n}+\boldsymbol{G}\boldsymbol{u}_n ]
- (\boldsymbol{u}_n) é a variável de entrada
- (\boldsymbol{G}) é a matriz de transição de entrada
- No exemplo, não há entrada, portanto (\boldsymbol{u}_n=0)
- A covariância não é calculada simplesmente como (\boldsymbol{F}\boldsymbol{P})
- Isso porque a covariância inclui termos quadráticos de variância e covariância
- Quando não há ruído de processo, a equação de extrapolação da covariância é a seguinte
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T ]
- No exemplo, ao propagar a covariância inicial (\boldsymbol{P}_{0,0}), obtém-se o seguinte resultado
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}22.25&1.25\1.25&0.25\\end{matrix}\right] ]
- A variância da velocidade permanece em (0.25m^2/s^2)
- A variância da distância aumenta de (16m^2) para (22.25m^2)
- A incerteza da velocidade leva, com o passar do tempo, a incerteza na distância
Considerando o ruído de processo
- Só a suposição de velocidade constante não consegue explicar completamente o movimento real da aeronave
- Fatores externos desconhecidos, como vento, podem influenciar a velocidade
- Esses efeitos imprevisíveis são representados pelo ruído de processo (\boldsymbol{Q})
- A equação de predição da covariância incluindo ruído de processo é a seguinte
[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T+\boldsymbol{Q} ]
- No exemplo, assume-se que o desvio-padrão da aceleração aleatória é (\sigma_a=0.2m/s^2)
- A variância é (\sigma_a^2=0.04m^2/s^4)
- Quando (\Delta t=5s), a matriz de ruído de processo é a seguinte
[ \boldsymbol{Q}
\left[\begin{matrix}6.25&2.5\2.5&1\\end{matrix}\right] ]
- A covariância de predição somada ao ruído de processo é a seguinte
[ \boldsymbol{P}_{1,0}
\left[\begin{matrix}28.5&3.75\3.75&1.25\\end{matrix}\right] ]
Etapa de atualização: combinação entre medição e predição
- Em (t_1), a segunda medição é a seguinte
[ \boldsymbol{z}_1= \left[\begin{matrix}11{,}020\202\\end{matrix}\right] ]
- Essa medição tem uma relação sinal-ruído menor e maior incerteza do que a primeira medição devido a um forte pico de ruído
- O desvio-padrão da medição de distância é (6m)
- O desvio-padrão da medição de velocidade é (1.5m/s)
- A matriz de covariância de medição é a seguinte
[ \boldsymbol{R}_1= \left[\begin{matrix}36&0\0&2.25\\end{matrix}\right] ]
- Em (t_1), é possível usar tanto o estado previsto calculado na etapa anterior quanto a nova medição
- Os elementos diagonais da covariância de predição (\boldsymbol{P}_{1,0}) são (28.5), (1.25)
- Os elementos diagonais da covariância de medição (\boldsymbol{R}_1) são (36), (2.25)
- Nesse caso, a incerteza da predição é menor que a incerteza da medição
- O Kalman Filter não usa simplesmente a nova medição nem mantém apenas a predição
- Ele combina predição e medição por uma média ponderada
- Dá maior peso ao lado com menor incerteza
- A combinação em forma unidimensional é a seguinte
[ \hat{x}{1,1}=K_1z_1+(1-K_1)\hat{x}{1,0} ]
- (K_1) é o Kalman Gain e decide quanto peso dar à medição e à predição
- Desde que as hipóteses do modelo estejam corretas, ele minimiza a incerteza da estimativa atualizada
Atualização de estado e innovation
- A equação de atualização de estado em forma matricial é a seguinte
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}) ]
- Em geral, a medição e o estado do sistema podem não representar a mesma grandeza física
- Um termômetro digital mede um sinal elétrico, mas o estado do sistema pode ser a temperatura
- Nesse caso, é necessária uma matriz de observação (\boldsymbol{H}), que transforma o estado previsto para o domínio da medição
- A equação geral de atualização de estado é a seguinte
[ \hat{\boldsymbol{x}}_{1,1}
\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) ]
- (\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) é a innovation ou residual, e representa a nova informação
- No exemplo, como o estado e a medição são ambos distância e velocidade, (\boldsymbol{H}) é a matriz identidade
Cálculo do Kalman Gain
- O Kalman Gain unidimensional é o seguinte
[ K_n=\frac{p_{n,n-1}}{p_{n,n-1}+r_n} ]
- (p_{n,n-1}) é a variância do estado previsto
- (r_n) é a variância da medição
- No Kalman Filter multivariado, o Kalman Gain se torna uma matriz e é dado por
[ \boldsymbol{K}n= \boldsymbol{P}{n,n-1}\boldsymbol{H}^T \left( \boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T+\boldsymbol{R}_n \right)^{-1} ]
- O Kalman Gain em (t_1) calculado no exemplo é o seguinte
[ \boldsymbol{K}_1= \left[\begin{matrix}0.4048&0.6377\0.0399&0.3144\\end{matrix}\right] ]
- A inversa de matriz pode ser calculada com
inv(A)no MATLAB ounumpy.linalg.inv(A)no Python- Em implementações reais, em vez de calcular explicitamente a inversa, geralmente é melhor resolver diretamente o sistema linear, como com
A\bno MATLAB ounumpy.linalg.solve(A, b)no Python
- Em implementações reais, em vez de calcular explicitamente a inversa, geralmente é melhor resolver diretamente o sistema linear, como com
Resultado da atualização e redução da covariância
- No exemplo, a innovation é a seguinte
[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}
\left[\begin{matrix}20\2\\end{matrix}\right] ]
- A correção após aplicar o Kalman Gain é a seguinte
[ \boldsymbol{K}_1 \left[\begin{matrix}20\2\\end{matrix}\right]
\left[\begin{matrix}9.37\1.43\\end{matrix}\right] ]
- A estimativa de estado atualizada é a seguinte
[ \hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}11{,}009.37\201.43\\end{matrix}\right] ]
- Em atualizações de covariância multivariadas, a Joseph form é usada com frequência
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} (\boldsymbol{I}-\boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T ]
- Na literatura, a forma simplificada também aparece com frequência
[ \boldsymbol{P}_{n,n}
(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]
- Em aritmética exata, as duas formas produzem o mesmo resultado
- Em implementação computacional, a Joseph form geralmente é mais estável numericamente
- No exemplo, usando a atualização simplificada da covariância, obtém-se o seguinte resultado
[ \boldsymbol{P}_{1,1}
\left[\begin{matrix}14.57&1.43\1.43&0.71\\end{matrix}\right] ]
- A incerteza da estimativa atualizada é menor que a incerteza da predição e da medição
- Os elementos diagonais da covariância de predição são (28.5), (1.25)
- Os elementos diagonais da covariância de medição são (36), (2.25)
- Os elementos diagonais da covariância atualizada são (14.57), (0.71)
- Teoricamente, uma nova informação reduz a incerteza da estimativa mesmo que sua incerteza seja grande
- Em sistemas reais, pode ser necessário rejeitar medições pouco confiáveis
Próxima predição e loop de repetição
- A etapa de predição da Iteration 1 é realizada da mesma forma que a da Iteration 0
- Porém, o ponto de partida são (\hat{\boldsymbol{x}}{1,1}) e (\boldsymbol{P}{1,1}) atualizados
- A predição de estado é a seguinte
[ \hat{\boldsymbol{x}}_{2,1}
\boldsymbol{F}\hat{\boldsymbol{x}}_{1,1}
\left[\begin{matrix}12,016.5\201.43\\end{matrix}\right] ]
- A predição de covariância é a seguinte
[ \boldsymbol{P}_{2,1}
\boldsymbol{F}\boldsymbol{P}_{1,1}\boldsymbol{F}^\top+\boldsymbol{Q}
\left[\begin{matrix}52.86&7.47\7.47&1.71\\end{matrix}\right] ]
- Se o tempo passar sem uma nova medição, as duas variâncias voltam a aumentar
- A incerteza da velocidade aumenta ainda mais a incerteza da distância, fazendo a variância da distância crescer mais rapidamente
- O Kalman Filter funciona com uma estrutura que, após ser inicializada uma vez no início, repete continuamente predição e atualização
- A predição propaga a estimativa atual e a covariância para o próximo instante usando o modelo de transição de estado
- A atualização combina a nova medição e a predição com o Kalman Gain para renovar o estado atual e a incerteza
1 comentários
Opiniões no Hacker News
Sempre fico esperançoso quando vejo um “tutorial para iniciantes”, mas em geral acabo decepcionado, e desta vez não foi diferente
O começo é bom, mas invariavelmente passa por algum conceito ou termo essencial sem explicá-lo o suficiente. Aqui, parei na parte: “uma variável aleatória é descrita por uma função densidade de probabilidade, e uma função densidade de probabilidade é caracterizada por seus momentos. O momento de um valor de probabilidade é o valor esperado de uma potência da variável aleatória”.
Não sei se é o valor esperado do expoente de um valor de probabilidade, ou o valor esperado de um valor de probabilidade elevado a alguma potência, nem por que a potência, em vez do próprio valor de probabilidade, seria algo especial. É frustrante: parece que os autores, no meio do fluxo de raciocínio, de repente desistem de explicar de forma simples, ou então não entendem direito os conceitos de base e por isso não conseguem explicá-los aos outros. Seria bom se desse para perguntar ao instrutor, como na Udemy, mas no caso de autores de livros não há como obter resposta
Se o autor falha uma única vez em explicar algo de forma suficiente, tudo desmorona, e um loop de feedback ajuda muito. Se não houver, no fim você precisa assumir a responsabilidade e procurar por conta própria as palavras e expressões que não conhece. Procure termos que você não entendeu bem, como “variável aleatória” ou “função densidade de probabilidade”, e complemente com Wikipedia, ChatGPT, livros-texto, vídeos etc. Esse processo é recursivo, então outros conceitos desconhecidos vão aparecer, mas é só continuar descendo. O valor de um tutor também está em conduzir bem essa busca em profundidade. Em uma área nova, é normal gastar mais tempo preenchendo o conhecimento de fundo do que lendo o texto principal, e na próxima vez, em um tema parecido, o processo pode ser mais rápido
Chega a ser estranho eu ter passado pela graduação e pela pós-graduação sem internalizar um conceito tão básico assim
Por isso, a pessoa esquece as coisas que considera óbvias. Sinto um problema parecido nos vídeos do 3blue1brown. Os vídeos são bonitos, mas não necessariamente geram compreensão; quem já sabe assente ao ver conceitos familiares expressos de forma elegante, mas, para alguém como eu, parecem exigir pré-requisitos demais
Para entender o filtro de Kalman, primeiro é preciso conhecer os fundamentos de probabilidade e a importância da distribuição gaussiana. A derivação matemática assume que todas as distribuições de probabilidade envolvidas são gaussianas, e uma distribuição gaussiana fica determinada de forma única quando se conhecem o primeiro e o segundo momentos. No fim, não dá para evitar introduzir momentos, e depois disso vem uma matemática bastante árdua. O filtro de Kalman não é um tema fácil, e Rudolf Kalman disse em uma entrevista que, sem o filtro dele, o pouso dos EUA na Lua teria sido impossível
Sempre achei que começar por um caso univariado simples, depois modificá-lo e generalizá-lo, seria uma boa forma de ensinar o filtro de Kalman
Alguns anos atrás, assisti a uma curta série de palestras do Kalman, e ele enfatizou com muita força a virtude de trabalhar diretamente com os dados observados
Ele achava que assumir primeiro um modelo e tentar ajustá-lo aos dados introduzia viés, e citou como bom exemplo desse princípio o Principia de Newton. A explicação era que Newton não saiu procurando um modelo para explicar as leis de Kepler; em vez disso, usando principalmente argumentos geométricos, derivou a lei da gravitação do inverso do quadrado a partir das leis de Kepler. Ele era um excelente palestrante e tinha opiniões fortes; naturalmente, também explicou a ideia do filtro de Kalman, mas como eu não tinha uso direto para isso no meu trabalho, esqueci os detalhes há muito tempo
Já trabalhei com cientistas e engenheiros que implantaram sistemas muito complexos e conhecidos, e essas pessoas em geral eram céticas em relação a algoritmos da moda e normalmente começavam pelos primeiros princípios. Em 90% dos casos, um filtro de Kalman linear simples, ou até mesmo sem modelo de movimento, era suficiente
Recentemente, um amigo me pediu para implementar um filtro de Kalman para um projeto paralelo. Li vários materiais e este site, mas ainda não sei como implementar
Todos parecem seguir a lógica de “desenhe o resto da coruja”. Seria bom encontrar um material que explique como um programador explicaria, por exemplo usando iteração em arrays em vez de notação sigma. Pelo que entendi, o filtro de Kalman parece uma espécie de média móvel de posição, velocidade e talvez aceleração, e usa esses três valores para estimar o “valor real” em vez do valor informado pelo sensor
Só que antes é preciso escrever a matemática que descreve a dinâmica. O filtro de Kalman é mais ou menos a aplicação do teorema de Bayes a uma dinâmica específica de sistema, repetindo como atualizar a estimativa do estado atual ao receber uma medição e como a dinâmica do sistema afeta a incerteza entre essa medição e a próxima. Primeiro é preciso ter um modelo dinâmico que diga como o objeto rastreado muda ao longo do tempo. Sem isso, a implementação inevitavelmente fica confusa. Ler primeiro sobre filtros de Bayes ou filtros de partículas ajuda a entender o conceito mesmo sem matrizes. Sempre me frustra a ideia de que dá para ser desenvolvedor de software sem saber matemática; talvez isso valha para criar páginas web, mas quanto mais matemática você sabe, muito maior é o conjunto de problemas que consegue modelar e resolver
O importante é estimar com base nesse estado e, depois de receber uma medição, usar as duas informações para ajustar repetidamente o próximo estado. Quando você entende as fórmulas, a parte de codar em si é bem fácil. Este material pode ajudar: http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies
Controles externos e ruído de processo podem ser adicionados, e o estado interno é representado por um vetor de valores. Também é necessário um modelo linear de como o estado interno é convertido em observações, além do ruído de observação.
x é o estado do modelo, F é o modelo linear de transição de estado
x(t+1) = F x(t), Q é a matriz de covariância do ruído de processo, então na práticax(t+1) = F x(t) + N(0,Q), H é o modelo linear de observação, R é a matriz de covariância do ruído de observação, e u e B são, opcionalmente, o vetor de controle externo e a forma como ele atua.N(0,Q)é uma distribuição normal com média 0 e covariância Q.Por exemplo, para um objeto em movimento, o estado do modelo pode ser a posição x e a velocidade v. Com radar e afins, normalmente só se observa a posição e não a velocidade atual, então o modelo de observação fica na forma que extrai apenas a posição. Antes de fazer o filtro de Kalman, essa “coruja” precisa existir, e você precisa defini-la de acordo com o processo em questão. O filtro de Kalman mostra como estimar de forma ótima o vetor de estado real em cada instante quando tanto o modelo de transição de estado quanto as observações incluem ruído. Muitos tutoriais misturam as partes do modelo de processo escolhido com as partes do filtro de Kalman, o que confunde; em exemplos pequenos demais, como um modelo constante unidimensional, o modelo dinâmico desaparece dentro das equações e a confusão até aumenta
Os primeiros capítulos tratam bem de filtros de Kalman e filtros de informação
Quando se sabe que as medições do sensor têm ruído, a ideia é tirar a média de várias amostras para obter uma estimativa mais próxima do valor real; se você souber o nível de ruído do sensor, também tem uma noção de quantas amostras deve promediar. Aqui, dá para pensar que todos os valores sensoriados ou inferidos são estimados como uma distribuição gaussiana parametrizada por média e variância.
Em um sistema físico com aceleração, velocidade e posição, se no tempo t a posição é p e a velocidade é v, então a posição em t+dt é aproximadamente
p+(v*dt). Também dá para atualizar a velocidade com uma estimativa de aceleração e, se for um sistema sob controle, atualizar o modelo de aceleração com a força comandada. Mas, como há incerteza na estimativa inicial, se você apenas fizer esse modelo de processo avançar continuamente, a incerteza continuará crescendo até se tornar inútil.O filtro de Kalman é uma técnica para combinar informações dos sensores e o modelo de processo a fim de estimar melhor a grandeza de interesse do que usando apenas um dos dois. A cada passo de tempo, ele prevê o estado com o modelo de processo com base na estimativa do estado anterior e atualiza a média e a incerteza com a medição atual do sensor. No filtro de Kalman básico, assume-se que o modelo de processo é linear e que todas as estimativas são distribuições gaussianas simples; então, o quanto confiar no modelo ou no sensor é definido por um coeficiente multiplicativo chamado ganho de Kalman
Outra playlist de tutoriais em vídeo passo a passo sobre filtro de Kalman: https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
Depois que você pega a intuição, o filtro de Kalman fica realmente interessante, e filtros de partículas também são divertidos de abordar e visualizar
Tenho este livro e já o usei com bastante sucesso em problemas reais
Mesmo relendo várias vezes, há algumas partes um pouco estranhas de acompanhar, mas, no geral, é muito bom
Outro bom texto relacionado: Is the Kalman filter a low-pass filter? Sometimes!
https://jbconsulting.substack.com/p/is-the-kalman-filter-jus...
Usei para reduzir a trepidação do movimento de uma câmera virtual em um vídeo que recortava a região ao redor do rosto em tempo real. O fluxo de posições de rosto detectadas era enviado a um operador de filtro de Kalman, que retornava um fluxo estável de posições da câmera
Quando os recursos computacionais são limitados, o filtro de Kalman é excelente, mas pessoalmente prefiro modelos mais novos e avançados, como filtros de partículas
A vantagem dos filtros de partículas é que eles conseguem lidar com situações complexas com física não linear e distribuições não gaussianas. Por exemplo, o GPS de um carro pode usar o mapa viário, com base no histórico recente de curvas, para eliminar posições impossíveis. Um filtro gaussiano não consegue fazer esse tipo de tratamento e acaba apenas criando um borrão difuso que cobre alguns quarteirões
Também tenho curiosidade se há modelos mais novos ou avançados recomendáveis, além de filtros de partículas, para processamento offline
Em 2007, eu trabalhava em uma empresa de tecnologia de anúncios, e o CEO e a equipe de pesquisa eram obcecados por filtros de Kalman para otimizar campanhas publicitárias nas redes do Google e do MSN
Pelo que me lembro, funcionava até certo ponto, mas hoje não consigo encontrar o pedido de patente, e a Zeta e o Walmart compraram essa tecnologia
Artigos explicando filtros de Kalman quase sempre começam no estilo: “Como exemplo intuitivo, pense em um termostato. Entendeu? Ótimo! Agora, para deixar isso mais intuitivo, vamos ver álgebra linear avançada”
Fico curioso se alguém já viu uma explicação de filtros de Kalman que não pule direto para a matemática
Se você fecha os olhos e caminha em direção a uma parede, com o passar do tempo fica cada vez menos certo da própria posição; no instante em que seu dedo toca a parede, sua certeza sobre a posição aumenta de repente. A primeira parte é a etapa de predição, e a segunda é a atualização de medição. A álgebra linear é apenas a forma de calcular esses pesos em um sistema dinâmico linear com ruído gaussiano
Filtros de Kalman fazem suposições estatísticas, como distribuição normal, então é preciso conhecer pelo menos estatística e matrizes de média/covariância. Com isso, você deve conseguir acompanhar até antes da seção 4 de https://sites.ualberta.ca/~dwiens/stat679/meinhold&singpurwa.... A partir da seção 4, o texto força os cálculos matemáticos necessários para uma implementação real, e isso não acrescenta muita compreensão adicional
O método de tratar tudo primeiro em uma dimensão e depois expandir para problemas multidimensionais definitivamente ajuda a fixar os conceitos. A playlist do curso parece ser esta: https://youtube.com/playlist?list=PLAwxTw4SYaPkCSYXw6-a_aAoX...
A parte sobre filtros de Kalman começa no vídeo “Tracking Intro - Artificial Intelligence for Robotics”. O curso gratuito também parece estar aqui, mas é preciso fazer login para acessar: https://www.udacity.com/course/intro-to-artificial-intellige...
Como eu não conheço bem Kalman, li os textos introdutórios deste site, mas não achei muito claro
Pensando nos gráficos de exemplo, aquilo me pareceu muito mais com uma média móvel exponencial, que é bem mais fácil de entender. Ao procurar comparações no Google, vi que no Stats Stack Exchange diziam que, para “passeio aleatório + ruído”, a EMA é tão boa quanto Kalman; e um artigo de 2003 de Joseph J. LaViola, da Brown University, mostrou que um algoritmo de suavização exponencial dupla tinha a mesma qualidade que Kalman e Kalman estendido, mas era 135 vezes mais rápido e mais simples.
Como a suavização exponencial dupla é muito mais fácil de entender do que Kalman, se eu assumir que o artigo de LaViola está certo, não pretendo gastar mais esforço tentando entender Kalman