4 pontos por GN⁺ 21 일 전 | 1 comentários | Compartilhar no WhatsApp
  • O filtro de Kalman é um algoritmo ótimo de estimação de estado que estima o estado de um sistema e prevê o futuro em ambientes com muito ruído
  • Usando como exemplo um radar de rastreamento de aeronaves, o texto explica como a precisão aumenta ao repetir as etapas de previsão e atualização com medições de distância e velocidade
  • Em cada etapa, calcula-se o vetor de estado, a matriz de covariância e o ganho de Kalman (Kalman Gain) para combinar de forma ponderada os valores medidos e previstos
  • Considerando ao mesmo tempo a incerteza da medição e a incerteza do modelo, o material mostra numericamente que o erro de estimação (incerteza) diminui com o tempo
  • Com exemplos numéricos intuitivos e cálculos passo a passo, oferece uma base de entendimento para projetar e implementar o filtro diretamente

Introdução ao filtro de Kalman

  • O Kalman Filter é um algoritmo de estimação de estado que estima e prevê o estado de um sistema em ambientes onde há incertezas, como ruído de medição ou fatores externos

    • É usado como ferramenta essencial em várias áreas, como rastreamento de objetos, navegação, robótica e controle
    • Por exemplo, pode ser aplicado para reduzir o ruído na trajetória do mouse e obter movimentos mais suaves, detectar tendências em dados financeiros e fazer previsões meteorológicas
    • O material aponta que muitos recursos educacionais se concentram na derivação matemática e carecem de exemplos práticos, por isso este conteúdo oferece uma explicação intuitiva centrada em exemplos numéricos
    • Também aborda casos em que um filtro mal projetado falha no rastreamento e apresenta formas de corrigir isso
    • O objetivo é estabelecer a compreensão necessária para que o leitor consiga projetar e implementar seu próprio filtro de Kalman

Trilha de aprendizado

  • Visão geral em uma única página: apresenta de forma breve os conceitos centrais e as principais fórmulas, exigindo apenas conhecimentos básicos de estatística e álgebra linear
  • Tutorial web gratuito: tutorial online com exemplos numéricos passo a passo para desenvolver a intuição, sem exigir conhecimento prévio
  • Kalman Filter from the Ground Up (livro): 14 exemplos numéricos completos, filtros não lineares (Extended/Unscented) e fusão de sensores, com código em Python e MATLAB

A necessidade de prever

  • A necessidade de estimação e previsão de estado é explicada por meio do exemplo de um radar de rastreamento de aeronaves
    • O estado do sistema é a posição da aeronave (distância (r)), e o radar calcula a distância medindo o tempo de reflexão do pulso
    • A velocidade (v) pode ser medida pelo efeito Doppler
  • A previsão da posição após um intervalo de tempo fixo (\Delta t) é feita com um modelo dinâmico
    • Ex.: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
    • (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
  • Em ambientes reais, existem ruído de medição (Measurement Noise) e incerteza de modelo (Process Noise)
    • Mesmo que vários radares meçam ao mesmo tempo, os resultados diferem ligeiramente
    • Fatores externos, como o vento, quebram a suposição de velocidade constante
  • O filtro de Kalman executa ao mesmo tempo a estimação do estado atual e a previsão do estado futuro, fornecendo também a incerteza (variância) de cada estimativa
    • É um algoritmo ótimo que minimiza a incerteza da estimação do estado

Exemplo de filtro de Kalman

  • Um radar unidimensional mede a distância (r) e a velocidade (v) de uma aeronave

    • Vetor de estado (\boldsymbol{x} = [r, v]^T)
    • O sistema é representado com vetores e matrizes
  • Iteration 0 — inicialização e previsão

  • Inicialização

    • O filtro é inicializado com a primeira medição (\boldsymbol{z}_0 = [10{,}000, 200]^T)
    • Incerteza da medição (desvio padrão): distância 4m, velocidade 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
    • Estimativa inicial de estado (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
    • Covariância inicial (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
  • Etapa de previsão

    • Intervalo de tempo (\Delta t = 5s)
    • Matriz de transição de estado (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
    • Estado previsto (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
    • Previsão da covariância (sem ruído de processo): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
    • Adição de ruído de processo ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
    • Covariância prevista final: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
  • Resumo da Iteration 0

    • A primeira medição inicializa o estado e a covariância
    • O modelo de transição de estado é usado para prever o próximo estado e sua incerteza
    • Fórmulas de previsão
      • Previsão do estado: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
      • Previsão da covariância: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
  • Iteration 1 — atualização e previsão

  • Atualização do filtro

    • Segunda medição: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
    • Aumento da incerteza da medição (desvio padrão: distância 6m, velocidade 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
    • Em comparação com a covariância prevista (\boldsymbol{P}_{1,0}), a incerteza da previsão é menor
    • O filtro de Kalman combina medição e previsão como uma média ponderada
      • Peso (K_1): Kalman Gain
      • Equação de atualização do estado: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
      • Matriz de observação (\boldsymbol{H} = \boldsymbol{I})
    • Cálculo do ganho de Kalman: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Resultado: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
    • Inovação (innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
    • Valor de correção: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
    • Estado atualizado: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
  • Atualização da covariância

    • Usa-se a forma simplificada: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
    • Resultado: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
    • Após a atualização, a incerteza é menor do que a incerteza da previsão e da medição → Combinar medição e previsão sempre reduz a incerteza
  • Etapa de previsão

    • Previsão para o próximo instante (t_2)
      • Previsão do estado: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
      • Previsão da covariância: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
    • Com o passar do tempo, se não houver medição, a incerteza volta a aumentar
  • Resumo da Iteration 1

    • Etapa de atualização: combina previsão e medição com o ganho de Kalman
    • Etapa de previsão: leva o estado atualizado ao instante seguinte
    • Fórmulas principais
      • Atualização do estado: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
      • Atualização da covariância (forma de Joseph): (\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)
      • Ganho de Kalman: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})

Resumo do exemplo

  • As três etapas do filtro de Kalman: inicialização → previsão → atualização
  • Depois disso, repete-se o loop de previsão-atualização
  • Sempre que uma nova medição é adicionada, a incerteza diminui e a estimação do estado do sistema se torna gradualmente mais precisa
  • Materiais adicionais de estudo
    • Tutorial online gratuito tutorial: oferece exemplos numéricos passo a passo
    • Livro Kalman Filter from the Ground Up: inclui filtros lineares e não lineares, diretrizes de implementação e código em Python/MATLAB

1 comentários

 
GN⁺ 21 일 전
Comentários do Hacker News
  • Sou o autor. Atualizei recentemente a página inicial do meu tutorial de Kalman Filter. Adicionei um exemplo simples de rastreamento por radar para que mesmo quem só conhece o básico de estatística e álgebra linear consiga entender
    Tentei manter a derivação matemática no mínimo, ao mesmo tempo mostrando de forma intuitiva o ruído das medições, o modelo de previsão e o processo de combinação do filtro. Gostaria de ouvir feedback sobre o nível matemático e a clareza da explicação

    • Dei uma olhada rápida, e a matriz de ruído de processo Q pareceu surgir meio do nada. Imagino que o livro explique isso, mas seria bom ter uma justificativa breve de por que ela assume aqueles valores
    • No geral, estava claro. Só que no começo a distinção entre o modelo do sistema e o próprio filtro de Kalman ficou um pouco ambígua. Até a parte de montar a matriz de estado, achei que ainda era explicação do modelo, mas então isso já emendou nas equações do filtro e fiquei confuso
    • Gostei muito do menu de acessibilidade. Ficou fácil demais ajustar a legibilidade da página
    • Uns 6 meses atrás tentei implementar um filtro de Kalman por conta própria, mas a estrutura muda bastante dependendo do domínio de aplicação, então acabei parando no meio. Estou na expectativa de que este material ajude bastante a ir até o fim
    • A expressão “algoritmo ótimo” no começo do tutorial pareceu um pouco abstrata. Seria bom explicar rapidamente o que isso significa antes de entrar na matemática
  • O guia intuitivo que tenho em mente é o seguinte

    1. Entender mínimos quadrados ponderados e aprender a atualizar uma estimativa existente usando uma nova medição e sua incerteza
    2. Se assumirmos que a média real não muda, esse método funciona bem
    3. Mas, se a média muda, o filtro de Kalman usa um modelo para prever essa mudança
    4. Depois da previsão, voltamos ao mesmo problema de (1)
      No fim, o essencial é o método dos mínimos quadrados, e sob certas hipóteses é possível provar que ele é ótimo
  • O artigo “How a Kalman Filter Works in Pictures” é realmente muito bom

    • Eu também gosto da forma visual de explicar daquele texto. Mas o objetivo do meu tutorial era focar em um exemplo de radar passo a passo, tratando junto a intuição e as armadilhas
    • Mas até essas “explicações simples” às vezes acabam parecendo complexas demais na prática. O filtro de Kalman é, em essência, um tipo de estimador (estimator).
      Por exemplo, um filtro passa-baixa também é um tipo de estimador, mas o filtro de Kalman adiciona a isso um modelo de processo e cálculos de covariância, ajustando-se dinamicamente.
      Ele reflete as relações entre variáveis correlacionadas, como posição e velocidade, de modo que uma medição influencia também a estimativa de outras variáveis.
      Como se baseia em álgebra linear, porém, ele precisa assumir ruído gaussiano, e para problemas não lineares são necessárias variantes como EKF ou UKF
  • Para entender o filtro de Kalman, é preciso conhecer estas quatro coisas

    1. Modelo do sistema
    2. Estado interno
    3. Definição de estimativa ótima
    4. Conceito de covariância
      O filtro é uma solução matemática para estimar de forma ótima o estado interno e a covariância de um sistema com base em medições.
      Acho que o livro de Alex Becker é uma excelente introdução ao tema. Ele tem muitos exemplos e ajuda bem a construir a intuição
    • Obrigado pelo feedback. Estou pensando em um volume 2 para tratar de tópicos mais avançados. Mas quero deixar claro que EKF e UKF são aproximações, então não são soluções completamente ótimas
  • Ao aprender o filtro de Kalman, ele fica muito mais intuitivo quando há duas ou mais entradas com características de ruído diferentes. Mas a maioria dos tutoriais trata apenas de uma entrada

    • No meu livro há um capítulo que introduz o conceito de sensor fusion. Se quiser estudar mais a fundo, recomendo os livros de Bar-Shalom ou Blackman
    • Na verdade, a essência do filtro de Kalman é a estimação de estado (state estimation). Sensor fusion é apenas uma de suas aplicações, e tratar os dois como se fossem a mesma coisa pode causar confusão
  • O filtro de Kalman é bastante usado na prática também. Por exemplo, a Sendspin o usa para sincronização de alto-falantes
    Você pode consultar a demo ao vivo e a documentação de implementação

  • Fiquei curioso se o conceito de filtro de Kalman poderia ser aplicado também a depoimentos humanos

    • É uma ideia interessante. Dá para ver observações humanas como sensores com ruído. Mas o filtro de Kalman padrão assume ruído gaussiano sem viés, então no caso humano é questionável se essa hipótese se sustenta
  • Em thekalmanfilter.com também dá para ver uma explicação simples

  • Este texto pareceu uma propaganda de livro caro. Já existe muito material gratuito, por exemplo Kalman and Bayesian Filters in Python e afins. Fiquei curioso para saber qual seria o diferencial deste livro

    • Boa pergunta. O conteúdo principal sobre o filtro de Kalman está disponível gratuitamente. No livro, porém, trato mais de tuning, considerações de projeto e exemplos adicionais
    • O livro do Roger Labbe e os notebooks Jupyter são realmente excelentes. Eles ajudam muito não só a entender o filtro de Kalman, mas também a abordagem geral de problemas de estimação
    • Já vi muitos outros materiais, mas este livro é recomendável porque a explicação dos detalhes é muito caprichada. O tutorial gratuito também pode ser visto aqui
    • O material linkado é um clássico
    • Não há tantos materiais bons assim. Dos que vi, poucos são realmente bem-feitos. É um material em que dá para sentir o esforço de apresentar um novo jeito de entender o filtro de Kalman