Filtragem Bayesiana (Bayesian Filtering)

Visão geral

A filtragem bayesiana (Bayesian filtering) é o arcabouço padrão para estimação recursiva de estado (recursive state estimation) em sistemas dinâmicos (dynamical systems). Um robô tipicamente tem um estado latente (não observado)—por exemplo, posição, velocidade, orientação, vieses de sensores—que evolui ao longo do tempo, enquanto sensores fornecem observações parciais e ruidosas (noisy, partial observations) desse estado. A filtragem bayesiana mantém uma crença (belief) (uma distribuição de probabilidade) sobre o estado atual e a atualiza online à medida que novos controles e medições chegam.

Esse arcabouço sustenta muitas capacidades centrais em robótica:

  • Rastreamento (tracking): estimar o estado de objetos em movimento (ou do próprio robô).
  • Localização (localization): estimar a pose do robô em um mapa conhecido.
  • Fusão de sensores (sensor fusion): combinar IMU, GPS, odometria de rodas, câmeras, LiDAR etc.
  • Módulos de front-end (front-ends) para SLAM (Simultaneous Localization and Mapping) e pilhas de navegação (veja SLAM, Percepção → Planejamento → Controle).

Filtros comuns—filtro de Kalman (Kalman filter), filtros de Kalman estendido/unscented (Extended/Unscented Kalman filters) e filtros de partículas (Particle filters)—são melhor compreendidos como diferentes formas de representar e computar a mesma recursão da filtragem bayesiana.

Configuração do problema: estados, controles, observações

Sejam:

  • (x_t): estado latente no tempo (t) (por exemplo, pose do robô ((x,y,\theta)), velocidades, vieses)
  • (u_t): entrada de controle (ou incremento de odometria) aplicada entre (t-1) e (t)
  • (z_t): medição no tempo (t) (por exemplo, leitura de GPS, observação de marco)

Um modelo probabilístico de espaço de estados (state-space model) típico define:

  1. Modelo de movimento (transição) (motion (transition) model)
    [ p(x_t \mid x_{t-1}, u_t) ] capturando a dinâmica e o ruído de processo (process noise) (por exemplo, escorregamento de rodas).

  2. Modelo de medição (observação) (measurement (observation) model)
    [ p(z_t \mid x_t) ] descrevendo como sensores se relacionam com o estado e o ruído de medição (measurement noise).

Suposições-chave (frequentemente usadas)

  • Dinâmica de Markov de primeira ordem (first-order Markov dynamics): o futuro depende do passado imediato (e do controle)
    [ p(x_t \mid x_{0:t-1}, u_{1:t}) = p(x_t \mid x_{t-1}, u_t) ]
  • Independência condicional das medições (conditional independence of measurements) dado o estado atual
    [ p(z_t \mid x_{0:t}, z_{1:t-1}) = p(z_t \mid x_t) ]

Essas suposições nem sempre são perfeitamente verdadeiras, mas são extremamente eficazes na prática.

A crença: o que o filtro mantém

A saída do filtro é a crença sobre o estado: [ bel(x_t) ;;=;; p(x_t \mid z_{1:t}, u_{1:t}) ] Isso é uma distribuição de probabilidade completa, não apenas uma estimativa pontual. A partir da crença, você pode computar:

  • Estimativa MMSE (MMSE estimate) (média a posteriori): (\hat{x}_t = \mathbb{E}[x_t])
  • Estimativa MAP (MAP estimate) (moda): (\hat{x}_t = \arg\max_x p(x \mid \cdot))
  • Incerteza (covariância, intervalos de credibilidade, estrutura multimodal)

A recursão do filtro de Bayes (previsão + atualização)

A filtragem bayesiana procede em dois passos a cada instante: prever usando o modelo de movimento e, em seguida, atualizar usando a medição.

1) Previsão (atualização no tempo)

Dada a crença anterior (bel(x_{t-1})), preveja o prior para (x_t): [ \overline{bel}(x_t) = p(x_t \mid z_{1:t-1}, u_{1:t}) = \int p(x_t \mid x_{t-1}, u_t); bel(x_{t-1}); dx_{t-1} ]

Intuição: “Onde eu poderia estar após me mover, considerando o ruído do movimento?”

2) Correção (atualização por medição)

Incorpore a nova medição (z_t) via a regra de Bayes (Bayes’ rule): [ bel(x_t) = p(x_t \mid z_{1:t}, u_{1:t}) \propto p(z_t \mid x_t); \overline{bel}(x_t) ] com normalização: [ bel(x_t) = \eta; p(z_t \mid x_t); \overline{bel}(x_t) ] onde (\eta) garante que a crença integre para 1.

Intuição: “Dentre as possibilidades previstas, quais são consistentes com o que meus sensores acabaram de ver?”

Pseudocódigo genérico do filtro de Bayes

Initialize bel(x0)

For t = 1, 2, ...
  # Predict
  bel_bar(xt) = ∫ p(xt | x_{t-1}, ut) * bel(x_{t-1}) dx_{t-1}

  # Update
  bel(xt) = η * p(zt | xt) * bel_bar(xt)
End

Essa é a solução geral. Diferentes filtros surgem de como a crença é representada e de como as integrais/produtos são computados.

Exemplo prático 1: rastreamento 1D com sensores ruidosos

Imagine um robô se movendo ao longo de uma linha com estado (x_t = [\text{position}, \text{velocity}]^\top). Ele recebe:

  • controle/odometria indicando aceleração (ruidosa)
  • um sensor de distância fornecendo medições de posição (ruidosas)

Um filtro de Bayes irá:

  • prever uma distribuição sobre posição/velocidade com base na distribuição anterior e no modelo de aceleração
  • atualizar essa distribuição, reponderando-a de acordo com a verossimilhança (likelihood) da posição observada

Se os modelos de movimento e de medição forem lineares e o ruído for gaussiano, a crença permanece gaussiana a cada passo—é exatamente nesse caso que o filtro de Kalman é ótimo.

Representando a crença: por que existem filtros diferentes

A recursão do filtro de Bayes é geral, mas crenças podem ser complicadas. Representações comuns incluem:

  • Gaussiana (Gaussian) ( \mathcal{N}(\mu, \Sigma) ): eficiente, mas unimodal (um único pico)
  • Mistura de gaussianas (mixture of Gaussians): pode representar multimodalidade, mas é mais custosa
  • Partículas (amostras) (particles (samples)): flexível, pode representar formas arbitrárias e crenças multimodais
  • Grades discretas (discrete grids): usadas em “localização por grade (grid localization)” para espaços de baixa dimensão

A escolha depende de:

  • modelos lineares vs. não lineares
  • ruído gaussiano vs. não gaussiano
  • incerteza unimodal vs. multimodal
  • orçamento computacional e restrições de tempo real

Filtro de Kalman: o caso especial linear-gaussiano

O filtro de Kalman (Kalman filter, KF) é o filtro de Bayes quando:

  • A dinâmica é linear: [ x_t = A x_{t-1} + B u_t + w_t,\quad w_t \sim \mathcal{N}(0, Q) ]
  • As medições são lineares: [ z_t = H x_t + v_t,\quad v_t \sim \mathcal{N}(0, R) ]
  • A crença inicial é gaussiana.

Então a crença permanece gaussiana, totalmente representada pela média (\mu_t) e pela covariância (\Sigma_t).

Equações do KF (visão geral)

Previsão [ \mu^-t = A\mu{t-1} + Bu_t,\quad \Sigma^-t = A\Sigma{t-1}A^\top + Q ]

Atualização [ K_t = \Sigma^-_t H^\top (H\Sigma^-_t H^\top + R)^{-1} ] [ \mu_t = \mu^-_t + K_t(z_t - H\mu^-_t) ] [ \Sigma_t = (I - K_t H)\Sigma^-_t ]

Exemplo prático: fusão IMU + GPS (conceitualmente)

  • Use o modelo de movimento para propagar o estado em alta taxa (integração da IMU).
  • Use atualizações de GPS para corrigir deriva quando disponível.
  • O KF fornece uma forma fundamentada de ponderar IMU vs. GPS com base em (Q) e (R).

Em sistemas reais, a integração da IMU é não linear (orientação em variedades (manifolds)), levando a variantes EKF/UKF.

Filtro de Kalman estendido (EKF): modelos não lineares via linearização

Muitos modelos de robótica são não lineares:

  • atualização de pose para um robô de tração diferencial
  • projeção de câmera
  • medições de marcos em distância-rumo (range-bearing)

O filtro de Kalman estendido (Extended Kalman filter, EKF) assume que a crença é gaussiana, mas usa uma expansão de Taylor de primeira ordem (first-order Taylor expansion) para aproximar funções não lineares:

  • Transição não linear: (x_t = f(x_{t-1}, u_t) + w_t)
  • Medição não linear: (z_t = h(x_t) + v_t)

O EKF computa jacobianos (Jacobians):

  • (F_t = \frac{\partial f}{\partial x}) na estimativa atual
  • (H_t = \frac{\partial h}{\partial x}) na estimativa prevista

Então ele aplica atualizações no estilo Kalman usando essas aproximações lineares.

Pontos fortes e limitações

  • Prós: rápido, amplamente usado, funciona bem quando as não linearidades são moderadas e a incerteza não é muito grande.
  • Contras: a linearização pode ser imprecisa; pode divergir com não linearidades fortes ou inicialização ruim.

O EKF é comum em localização, odometria visual-inercial (visual-inertial odometry) e como componente em alguns pipelines de SLAM.

Filtro de Kalman unscented (UKF): modelos não lineares sem jacobianos

O filtro de Kalman unscented (Unscented Kalman Filter, UKF) também mantém uma crença gaussiana, mas aproxima transformações não lineares usando pontos sigma (sigma points):

  • pontos escolhidos deterministicamente ao redor da média
  • passados por (f(\cdot)) e (h(\cdot))
  • recombinados para estimar a média/covariância transformadas

O UKF frequentemente se sai melhor do que o EKF para certas não linearidades e evita jacobianos manuais, ao custo de um pouco mais de computação.

Filtro de partículas: filtragem bayesiana não paramétrica

Um filtro de partículas (Particle Filter, PF) (também conhecido como Monte Carlo sequencial (Sequential Monte Carlo)) representa a crença com amostras ponderadas: [ bel(x_t) \approx {(x_t^{(i)}, w_t^{(i)})}_{i=1}^N ]

Isso é especialmente útil quando crenças são multimodais, como na localização global (“Eu posso estar em qualquer um desses lugares no mapa”).

Esboço do algoritmo de PF

  1. Amostrar / propagar: sorteie novas partículas usando o modelo de movimento
    (x_t^{(i)} \sim p(x_t \mid x_{t-1}^{(i)}, u_t))
  2. Ponderar: compute a verossimilhança sob o modelo de medição
    (w_t^{(i)} \propto p(z_t \mid x_t^{(i)}))
  3. Normalizar pesos
  4. Reamostrar (resample) para concentrar partículas em regiões de alta probabilidade

Exemplo prático: localização global em um mapa conhecido

Com um mapa de grade de ocupação (occupancy grid map) 2D e varreduras de LiDAR:

  • Comece com partículas espalhadas pelo mapa (pose inicial desconhecida).
  • A previsão espalha partículas de acordo com a incerteza da odometria.
  • A atualização pontua partículas com base em quão bem a varredura esperada daquela pose casa com a varredura real.
  • Com o tempo, partículas se concentram ao redor da pose verdadeira; múltiplas hipóteses podem ser acompanhadas até a ambiguidade se resolver.

Filtros de partículas são centrais na Localização de Monte Carlo (Monte Carlo Localization, MCL) e são intimamente relacionados a pilhas de robótica usadas em implantações reais.

Para uma análise mais aprofundada, veja Filtro de Partículas.

Como filtros comuns se encaixam no arcabouço geral de filtragem bayesiana

Todos esses filtros implementam os mesmos dois passos—prever e atualizar—fazendo escolhas diferentes de modelagem/aproximação:

  • Filtro de Kalman: filtro de Bayes exato para modelos linear-gaussianos
  • EKF: filtro de Bayes aproximado (crença gaussiana + linearização)
  • UKF: filtro de Bayes aproximado (crença gaussiana + transformação por pontos sigma)
  • Filtro de partículas: filtro de Bayes aproximado (crença baseada em amostras, distribuições flexíveis)

Um modelo mental útil:

  • Se você espera uma única hipótese e incerteza quase gaussiana → KF/EKF/UKF
  • Se você espera múltiplas hipóteses ou ruído não gaussiano → filtro de partículas (ou modelos de mistura)

Aplicações práticas em robótica

Rastreamento de objetos em movimento

Em sistemas de percepção, filtros estimam estados de objetos como ((x,y,v_x,v_y)) a partir de detecções ruidosas. Um filtro de Kalman (ou variantes) é amplamente usado em pipelines de rastreamento multiobjeto; ele fornece:

  • suavização temporal das detecções
  • previsão durante detecções perdidas
  • estimativas de incerteza usadas para associação de dados (data association) (frequentemente junto a algoritmos de atribuição)

Isso se conecta a ideias de inferência probabilística também usadas em Modelos Ocultos de Markov (estados discretos) e redes bayesianas dinâmicas (dynamic Bayesian networks).

Localização do robô

Localização é a aplicação canônica de filtragem bayesiana:

  • Estado: pose do robô (e possivelmente velocidade/vieses)

  • Modelo de movimento: odometria de rodas, integração de IMU

  • Modelo de medição: casamento de varreduras (scan matching) de LiDAR, observações de marcos, GPS

  • Localização com EKF: comum quando o mapa é representado como marcos e as medições são distância-rumo.

  • Localização com filtro de partículas (MCL): comum com LiDAR + mapas de ocupação e incerteza global.

Localização é um bloco de construção de SLAM e de pilhas de navegação (veja Planejamento de Movimento, Controle).

Fusão de sensores

A filtragem bayesiana é a matemática por trás de “confiar” em sensores com base na incerteza:

  • (Q) (covariância do ruído de processo): o quanto você espera que o modelo derive
  • (R) (covariância do ruído de medição): o quão ruidoso é o sensor

Por exemplo, se o GPS se torna pouco confiável (maior (R)), o filtro automaticamente reduz o peso dele e confia mais na previsão do movimento—até que as atualizações voltem a ser confiáveis.

Considerações de projeto e implementação

Escolhendo o estado

Um filtro é tão bom quanto sua definição de estado. Adições típicas que melhoram dramaticamente o desempenho:

  • vieses de IMU (viés de giroscópio/acelerômetro)
  • fatores de escala ou erros no raio da roda
  • parâmetros de calibração variantes no tempo (em sistemas avançados)

Mas estados maiores aumentam a computação e podem piorar a observabilidade se as medições não restringirem essas variáveis.

Modelando o ruído de forma realista

  • Ruído de processo (Q): frequentemente captura dinâmica não modelada (escorregamento, vento, erro do atuador).
  • Ruído de medição (R): deve refletir o comportamento do sensor; pode ser heteroscedástico (depende de distância, iluminação etc.).

(Q/R) mal especificados são um motivo comum para filtros parecerem “lentos” (confiantes demais no modelo) ou “trêmulos” (confiantes demais nas medições).

Geometria não linear e variedades

A orientação do robô vive em (SO(3)) (rotações 3D), não em (\mathbb{R}^3). Filtrar ângulos de Euler de forma ingênua pode causar singularidades e covariâncias inconsistentes. Muitas implementações práticas de EKF/UKF usam:

  • quaternions ou matrizes de rotação
  • representações de estado de erro (“EKF multiplicativo (multiplicative EKF)”)

Associação de dados

Quando uma medição pode corresponder a múltiplos marcos/objetos, você deve decidir o que casou com o quê antes de atualizar. Uma associação ruim pode corromper a crença. Técnicas incluem seleção por porta (gating) usando elipses de covariância e métodos de associação probabilística.

Degenerescência e reamostragem no filtro de partículas

PFs podem sofrer de degenerescência de pesos (weight degeneracy): após várias atualizações, a maioria das partículas fica com peso próximo de zero. A reamostragem corrige isso, mas pode levar ao empobrecimento amostral (sample impoverishment) (perda de diversidade). Mitigações comuns:

  • reamostragem sistemática/estratificada
  • adição de pequeno ruído (“rugosificação (roughening)”)
  • melhores distribuições de proposta (proposal distributions) (por exemplo, incorporando a medição na proposta)

Exemplo mínimo funcional: um laço simples de filtro de Kalman (estilo Python)

import numpy as np

def kf_step(mu, Sigma, u, z, A, B, H, Q, R):
    # Predict
    mu_pred = A @ mu + B @ u
    Sigma_pred = A @ Sigma @ A.T + Q

    # Update
    S = H @ Sigma_pred @ H.T + R
    K = Sigma_pred @ H.T @ np.linalg.inv(S)
    innovation = z - H @ mu_pred

    mu_new = mu_pred + K @ innovation
    Sigma_new = (np.eye(Sigma.shape[0]) - K @ H) @ Sigma_pred
    return mu_new, Sigma_new

No EKF/UKF/PF, a estrutura permanece “prever e depois atualizar”; apenas difere como você computa a crença prevista e incorpora a medição.

Filtragem vs. suavização (e por que isso pode importar)

A filtragem (filtering) bayesiana estima (p(x_t \mid z_{1:t})) online.

A suavização (smoothing) estima estados passados usando medições futuras, por exemplo: [ p(x_{t-k} \mid z_{1:t}) ] Isso pode melhorar a acurácia quando o processamento offline é permitido (por exemplo, mapeamento, trajetórias pós-processadas). Muitos sistemas de SLAM usam suavização / otimização em grafo de fatores (factor graph optimization) em vez de filtragem pura, mas a filtragem continua essencial para operação em tempo real e como estimativa inicial.

Resumo

A filtragem bayesiana é o maquinário probabilístico central para estimação de estado em tempo real:

  • Manter uma crença sobre o estado latente.
  • Repetir via previsão (modelo de movimento) e atualização (verossimilhança do sensor).
  • Escolher uma representação da crença e uma estratégia de aproximação:
    • Filtro de Kalman para sistemas linear-gaussianos
    • EKF/UKF para sistemas não lineares com incerteza (aprox.) unimodal
    • Filtros de partículas para crenças não gaussianas e multimodais (por exemplo, localização global)

Em robótica, esses métodos são fundamentais para rastreamento, localização e fusão de sensores, e se conectam diretamente a pipelines mais amplos de autonomia como SLAM, Planejamento de Movimento e Controle.