알파카농장

Extended Kalman Filter(EKF) - (1) 본문

카테고리 없음

Extended Kalman Filter(EKF) - (1)

갱파카 2021. 6. 25. 01:05

여러분들은 EKF를 아시나요? 전 EKF가 영어로 바뀐지 모른 채로 '달'을 쳤을 때 보이는 단어라고만 줄곧 생각해왔는데..^^ 이제 저에게 EKF는 Extended Kalman Filter의 약자가 되었답니다.

 

EKF를 이해하기 위해서는 우선적으로 Kalman Filter에 대한 개념이 필요해요.

 

이 블로그는 Matlab의 Understanding-Kalman-Filter 영상에 대한 정리입니다.

Part 1-5까지는 KF와 EKF 그 외 필터들에 대한 설명이고, 6-7은 matlab에서 시뮬링크로 구현해보는 법

https://kr.mathworks.com/videos/understanding-kalman-filters-part-1-why-use-kalman-filters--1485813028675.html

 

Understanding Kalman Filters, Part 1: Why Use Kalman Filters? Video

Discover common uses of Kalman filters by walking through some examples. A Kalman filter is an optimal estimation algorithm used to estimate states of a system from indirect and uncertain measurements.

kr.mathworks.com

 

우선, 칼만 필터는 시스템의 상태를 측정할 수 없을 때 측정하기 위해 사용합니다. 즉, indirectly하게 값을 측정한다는 것이죠. 예를 들자면, 자동차의 위치 값을 측정하기 위한 상황을 가정해봅시다.

 

차량의 절대 위치 값을 측정할 수 있는 GPS는 꽤 믿을만한 센서입니다. 하지만, 터널에 들어갔을 때를 상상해본다면 GPS 값만으로는 차량의 위치나 상태를 측정할 수 없다는 결론이 지어질 겁니다. 결국 다른 센서를 통해 차량의 상태를 추정해야 하는 것인데 이럴 때 Kalman Filter를 사용하는 겁니다. 차량의 heading 값(yaw), 가속도를 알 수 있는 IMU. 가속도를 2번 적분하면 위치를 추정할 수 있는데 적분 과정에서 오차가 발생하여 드리프트가 생깁니다. 또, 차량의 속도, 가속도를 알 수 있는 Odometer는 타이어 압력과 길의 상태에 영향을 많이 받습니다. 즉, 상대적인 위치를 측정하는 센서들은 (Local State) 업데이트가 약 100hz 정도로 매우 빠른 편에 속하지만, 드리프트가 발생합니다. 반면에 GPS의 경우는 차량의 절대적인 위치(Global State)를 알 수 있어서 매우 신뢰성이 있지만 업데이트 속도가 약 10Hz 정도이고 노이즈에 예민하다는 점에서 보정이 필요합니다. 하지만 각각의 문제점이 있는 3개의 값에 대해 Kalman Filter로 fusion을 해준다면 정말 정확한 차량의 state 정보를 얻을 수 있습니다.

 

step 1

 

step 2

칼만 필터는 내부 상태를 추정하는 state estimator를 사용해야 합니다. state estimator가 하는 일은 값을 추정하는 건데, 우리는 실제값인 x와 추정값인 x^(x_hat)의 차이를 줄여야만 합니다. error = x - x^(잔차) 에 대한 값은 feedback Loop를 통해 다시금 estimator에게 정보를 흘려줍니다. 

여기 다이어그램에서 input, output들을 확인해 볼 수 있는데,

 

input : u,
output : y (실제 데이터로부터 얻은 값),
우리가 추정해야 하는 상태 : x^,
추정한 상태로부터 얻어진 값 :  y^.
 

x-x^ = error rate라고 한다면, step 1의 전체 식에서 error rate로 치환되는 부분이 많기 때문에

error = (A - KC)error로 바꿀 수 있고, 전체 식에 지수 e를 취해준다면 (A-KC)가 0보다 작을 때 error rate가 0이 되고 x^이 x로 수렴하는 것을 확인해 볼 수 있습니다. 결국 control gain 값인 K값을 tuning함으로써 error rate를 줄일 수 있다는 결론이 도출됩니다. optimal한 K를 빠르게 구하면 구할 수록 x^은 x로 빠르게 수렴하며, 이 k값은 Kalman Filter를 통해 얻을 수 있습니다.

 

즉, 칼만 필터를 사용하는 이유는 "x^(prediction)을 x(measurement)로 수렴시키기 위한 optimal한 K값을 구하기 위해서" 라고 할 수 있겠네요.

 

그럼 이제, 칼만 필터가 도대체 어떻게 작동하는지 이해해보도록 할까요?

 

다이어그램을 살펴보면 car dynamics는 실제 차에서 측정되는 "실제 값" 즉, measurement를 의미하고, Car model은 차의 state를 예측하기 위한 prediction model이라고 볼 수 있습니다. 그래프에서 첫번째 파란색 plot이 의미하는 바는 자동차가 이 분포의 평균 주위에 있을 가능성이 높다는 것을 의미합니다. 다음 time 단계에서 prediction의 불확실성이 증가하면 더 납작한 모양의(variance가 큰) 분포가 그려집니다. variance가 커졌다는 것은 time인 k-1과 k 사이에 자동차가 움푹 들어간 곳을 넘어갔거나 바퀴가 약간 미끄러져 noise가 생겼을 수도 있다는 것을 의미합니다. 따라서 model을 통해 prediction한 값과 실제 measurement의 차이가 발생할 수 있습니다. (이 잔차를 최대한 줄여야 함). 결국 분산은 noise 측정에 대한 uncertainty를 나타낸다고 볼 수 있습니다.

 

그래프의 우측을 보면 predicted state estimate와 measurement에 대한 x, y 값이 다른 걸 확인해볼 수 있는데 이 두 가지에 대한 state가 적절히 섞여야 optimal한 state라고 볼 수 있습니다. small variance는 특별한 장애물 없이 잘 주행하고 있다는 것을 의미합니다.

 

predicted state estimate graph * measurement graph ==> scaling ==> Optimal state estimate

 

 

졸려서 더 못쓰겠음.. 연구하는 거 블로그에 매일 올려야지..

내일 다시 ekf(2) 올리겠습니다.. 다들 굿밤