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

🔍 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()
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)의 개념과 수학적 구조를 정리해드리겠습니다.
✅ 오늘 글이 도움이 되셨다면 좋아요와 공유 부탁드립니다.
반응형
'자율주행' 카테고리의 다른 글
| 🔄 Day 24: EKF로 비선형 상태 추정 실습 (0) | 2025.09.20 |
|---|---|
| 🔄 Day 23: 확장 칼만필터(EKF) 원리 (0) | 2025.09.19 |
| 📐 Day 21: 기본 칼만필터 (선형 KF 수학적 유도) (0) | 2025.09.17 |
| 🤖 Day 20: ROS2에서 간단한 센서 데이터 융합 실습 (0) | 2025.09.16 |
| 🔄 Day 19: 센서 퓨전 개념 (Kalman Filter 소개) (0) | 2025.09.15 |