간단한 레이더 예시로 이해하는 칼만 필터

1 day ago 3
  • 칼만 필터는 잡음이 많은 환경에서 시스템의 상태를 추정하고 미래를 예측하는 최적 상태 추정 알고리듬
  • 항공기 추적 레이더를 예시로, 거리와 속도 측정값을 이용해 예측과 업데이트 단계를 반복하며 정확도를 높이는 과정을 설명
  • 각 단계에서 상태 벡터, 공분산 행렬, 칼만 이득(Kalman Gain) 을 계산해 측정값과 예측값을 가중 결합
  • 측정 불확실성과 모델 불확실성을 함께 고려해, 시간이 지날수록 추정 오차(불확실성)가 감소함을 수치로 제시
  • 직관적 수치 예제와 단계별 계산을 통해 직접 필터를 설계·구현할 수 있는 이해 기반을 제공

칼만 필터 소개

  • Kalman Filter는 측정 잡음이나 외부 요인 등 불확실성이 존재하는 환경에서 시스템의 상태를 추정하고 예측하는상태 추정 알고리듬

    • 물체 추적, 항법, 로보틱스, 제어 등 다양한 분야에서 핵심 도구로 사용
    • 예를 들어, 마우스 궤적의 노이즈를 줄여 부드러운 움직임을 얻거나, 금융 데이터의 추세 탐지, 기상 예측 등에 활용
    • 많은 교육 자료가 수학적 유도에 치중해 실제 예시가 부족하다는 점을 지적하며, 본 자료는 수치 예제 중심의 직관적 설명을 제공
    • 잘못 설계된 경우 필터가 추적에 실패하는 사례도 함께 다루며, 이를 보정하는 방법을 제시
    • 목표는 독자가 직접 칼만 필터를 설계하고 구현할 수 있도록 이해를 확립하는 것

학습 경로

  • 단일 페이지 개요: 핵심 개념과 주요 수식을 간단히 소개하며, 통계와 선형대수의 기초 지식만 요구
  • 무료 웹 튜토리얼: 단계별 수치 예제로 직관을 쌓는 온라인 튜토리얼, 사전 지식 불필요
  • Kalman Filter from the Ground Up (서적): 14개의 완전한 수치 예제, 비선형 필터(Extended/Unscented) 및 센서 융합, Python·MATLAB 코드 포함

예측의 필요성

  • 항공기 추적 레이더 예시를 통해 상태 추정과 예측의 필요성을 설명
    • 시스템 상태는 항공기의 위치(거리 (r))이며, 레이더는 펄스 반사 시간을 측정해 거리 계산
    • 속도 (v)는 도플러 효과로 측정 가능
  • 일정 시간 간격 (\Delta t) 후의 위치 예측은 동적 모델을 통해 수행
    • 예: (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)
  • 실제 환경에서는 측정 잡음(Measurement Noise)과 모델 불확실성(Process Noise)이 존재
    • 여러 레이더가 동시에 측정해도 결과가 약간씩 다름
    • 바람 등 외부 요인으로 속도 일정성 가정이 깨짐
  • 칼만 필터는 현재 상태 추정과 미래 상태 예측을 동시에 수행하며, 각 추정의 불확실성(분산) 을 함께 제공
    • 상태 추정 불확실성을 최소화하는 최적 알고리듬

칼만 필터 예제

  • 1차원 레이더가 항공기의 거리 (r)과 속도 (v)를 측정

    • 상태 벡터 (\boldsymbol{x} = [r, v]^T)
    • 벡터와 행렬을 사용해 시스템을 표현
  • Iteration 0 — 초기화 및 예측

  • 초기화

    • 첫 측정값으로 필터를 초기화 (\boldsymbol{z}_0 = [10{,}000, 200]^T)
    • 측정 불확실성(표준편차): 거리 4m, 속도 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
    • 초기 상태 추정치 (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
    • 초기 공분산 (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
  • 예측 단계

    • 시간 간격 (\Delta t = 5s)
    • 상태 전이 행렬 (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
    • 예측 상태 (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
    • 공분산 예측(프로세스 노이즈 제외): (\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})
    • 프로세스 노이즈 추가 ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
    • 최종 예측 공분산: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
  • Iteration 0 요약

    • 첫 측정으로 상태 및 공분산 초기화
    • 상태 전이 모델을 사용해 다음 상태와 불확실성 예측
    • 예측 수식
      • 상태 예측: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
      • 공분산 예측: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
  • Iteration 1 — 업데이트 및 예측

  • 필터 업데이트

    • 두 번째 측정: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
    • 측정 불확실성 증가 (표준편차: 거리 6m, 속도 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
    • 예측 공분산 (\boldsymbol{P}_{1,0})과 비교 시, 예측 불확실성이 더 작음
    • 칼만 필터는 측정과 예측을 가중 평균으로 결합
      • 가중치 (K_1): Kalman Gain
      • 상태 갱신식: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
      • 관측 행렬 (\boldsymbol{H} = \boldsymbol{I})
    • 칼만 이득 계산: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) 결과: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
    • 혁신(innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
    • 보정값: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
    • 갱신 상태: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
  • 공분산 갱신

    • 단순화된 형태 사용: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
    • 결과: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
    • 갱신 후 불확실성은 예측 및 측정 불확실성보다 작음 → 측정과 예측을 결합하면 항상 불확실성이 감소
  • 예측 단계

    • 다음 시간 (t_2) 예측
      • 상태 예측: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
      • 공분산 예측: (\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})
    • 시간이 지남에 따라 측정이 없으면 불확실성이 다시 증가
  • Iteration 1 요약

    • 업데이트 단계: 예측과 측정을 칼만 이득으로 결합
    • 예측 단계: 갱신된 상태를 다음 시점으로 전달
    • 주요 수식
      • 상태 갱신: (\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}))
      • 공분산 갱신(Joseph form): (\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)
      • 칼만 이득: (\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})

예제 요약

  • 칼만 필터의 세 단계: 초기화 → 예측 → 업데이트
  • 이후에는 예측-업데이트 루프를 반복 수행
  • 새로운 측정이 추가될 때마다 불확실성이 감소하며, 시스템 상태 추정이 점점 정교해짐
  • 추가 학습 자료
    • 무료 온라인 튜토리얼: 단계별 수치 예제 제공
    • 서적 Kalman Filter from the Ground Up: 선형·비선형 필터, 구현 지침, Python/MATLAB 코드 포함
Read Entire Article