자율주행

🐍 Day 22: Python으로 1D 칼만필터 구현

Tech Knowledge Note 2025. 9. 18. 21:00
반응형

안녕하세요! ✨
앞서 Day 21에서는 칼만필터(Kalman Filter)의 수학적 유도를 정리했습니다.
오늘은 한 단계 더 나아가, Python 코드로 1차원 칼만필터를 직접 구현해보겠습니다.

Python으로 1D 칼만필터 구현


🔍 1D 칼만필터 개념

1차원 칼만필터는 위치 하나의 값만 추정한다고 가정합니다.
예: 센서가 noisy하게 차량 위치를 측정할 때, 칼만필터로 잡음을 줄이고 추정값을 얻을 수 있습니다.


⚙️ Python 코드 예제

 
python
 
import numpy as np
import matplotlib.pyplot as plt

# 측정값(노이즈가 섞인 센서 데이터) 시뮬레이션
np.random.seed(0)
true_value = 10.0
measurements = true_value + np.random.normal(0, 2, 50)  # 평균=10, 표준편차=2 노이즈

# 초기값 설정
x_est = 0.0      # 초기 추정값
P = 1.0          # 초기 공분산
Q = 0.01         # 프로세스 잡음
R = 4.0          # 센서 잡음 (분산)

estimates = []

for z in measurements:
    # 1. 예측 단계 (Prediction)
    x_pred = x_est
    P_pred = P + Q

    # 2. 업데이트 단계 (Update)
    K = P_pred / (P_pred + R)  # 칼만 이득
    x_est = x_pred + K * (z - x_pred)
    P = (1 - K) * P_pred

    estimates.append(x_est)

# 결과 시각화
plt.plot(measurements, 'r.', label='측정값(Measurements)')
plt.plot(estimates, 'b-', label='칼만 추정값(Kalman Estimates)')
plt.axhline(true_value, color='g', label='실제값(True Value)')
plt.legend()
plt.xlabel('Time Step')
plt.ylabel('Value')
plt.title('1D Kalman Filter (Python)')
plt.show()

📊 결과 해석

  • 빨간 점(Measurements): 노이즈가 섞인 센서 측정값
  • 파란 선(Kalman Estimates): 칼만필터가 추정한 값 → 점점 안정됨
  • 초록선(True Value): 실제 값

👉 관측값의 잡음이 큰데도 불구하고, 칼만필터가 점점 실제 값에 가까운 안정된 추정을 제공합니다.


🚘 자율주행 응용

  • GPS 위치 보정: GPS 신호는 순간적으로 튀는 값이 많음 → 칼만필터로 안정화
  • 속도 추정: 휠 속도계와 IMU 데이터를 융합 → 정확한 속도 추정
  • 레이더 추적: 물체 속도와 거리 추정 시 잡음을 줄여 더 정확한 추적 가능

📌 정리

  • Python으로 1D 칼만필터를 구현해보면 동작 원리를 쉽게 이해할 수 있음
  • 핵심: 예측(Prediction) + 업데이트(Update) 반복
  • 자율주행 센서 데이터 필터링에 필수적인 기법
반응형

🚀 다음 글 예고

다음 글에서는 [Day 23: 확장 칼만필터(EKF) 원리] 를 다룹니다.
비선형 시스템에 적용되는 확장 칼만필터(EKF)의 개념과 수학적 구조를 정리해드리겠습니다.


✅ 오늘 글이 도움이 되셨다면 좋아요와 공유 부탁드립니다.


반응형