operator01.jpg



안녕하세요? 교주 LGS입니다.

이번 시간에는 공대생이라면 한번쯤 들어 봤을만한 Kalman Filter(칼만 필터)에 대해서 이야기를 풀겠습니다.

Kalman filter의 수식은 아래와 같습니다. =(=^ㅅ^=)=  쉽죠?? 는 개뿔!!

아래 수식만 보고 오홋!! 칼만 필터라는 것이 이런 것이구만!! 하고 이해하신 분은 어서 저에게 연락을... ^^


Kalman_img06.png

Kalman filter를 이해하기 위해서는 약간의 사전 지식이 필요합니다요.

Kalman filter는 Optimal Observer design과 관련된 내용으로 State Space에 대한 이해와 Observer에 대한 이해가 선행되어야 합니다.

또한 칼만 필터는 확률 이론을 기반으로 하므로 통계/확률에 대한 이해도 필요합니다. -_-;;


[잡음(noise)이 포함된 센서로부터 측정된 값(z)]과 [부정확한 수학식(State Space Model)으로부터 계산되어진 값(x- priori state)]을 가지고

좀더 정확하게 실제의 값을 계산(추측)해내는 것이 Kalman filter의 핵심입니다.

Kalman filter가 얼마나 성공했냐하면 어러분들이 사용하는 모든 핸드폰, 모든 네비게이션(GPS)에 칼만 필터가 현재 사용되고 있습니다.

칼만 필터가 닐 암스트롱이 달에 갈 때 타고간 아폴로 11호에도 쓰였다니까요!! 칼만 필터 때문에 암스트롱 형님이 지구로 돌아올 수 있었다는 말씀!!

그럼 본격적으로 Kalman filter에 대해 알아봅시다요~ =(=^ㅅ^=)=


Kalman_img08.png

(이미지 출처: http://www.teachenglishinasia.net/blogs/isaiah/using-ktx-korea-10523.html )


자~ 서울역에 서울에서 부산으로 가는 KTX 한대가 서있다고 해봅시다.

정지해있던 KTX가 출발시간이 되어 문을 모두 닫고 이제 막 일정한 가속도로 서서히 가속을 하는 상황입니다.

간략한 그림으로 나타내면 아래와 같이 될 거구요~


Kalman_img01.png

(이미지 출처: http://www.cl.cam.ac.uk/~rmf25/papers/ )


자~ 그럼 위의 상황을 State Space 모델로 modeling 한다면 어떻게 모델링 하면 될까요?

state varible을 x1 = 현재 위치, x2 = 속도 로 잡으면 괞찬은가요? ^^

고등학교때 배운 물리 공식을 사용하여 식을 세워보면...


현재 속도 = 초기속도 + (가속도 * 시간)

현재 위치 = 초기위치 + (초기속도 * 사간) + 0.5*초기가속도 * 시간2


로 쉽게 식을 세울 수 있을 겁니다.

그런데 잘 생각해보시면 위의 모델(수학식)은 이상적(ideal)이 경우에는 KTX의 속도와 위치를 잘 표현할 수 있겠지만

실제 서울역에서 출발하는 KTX에는 우리가 예측할 수 없는 외부적인 요인으로 인해 잡음이 발생합니다.

예를 들어 KTX 모터를 구동하는 전력이 일정하지 않을 수도 있구요, 레일 위에 돌맹이가 있을 수도 있고,  베어링에 녹이 슬었을 수 도, -,.-

바람이 불수도 있고 ... 


현재 속도 = 초기속도 + (가속도 * 시간) + 속도잡음

현재 위치 = 초기위치 + (초기속도 * 사간) + 0.5*초기가속도 * 시간2  + 위치잡음


즉 위의 수식이 실제 상황을 더 잘 표현한다 할 수 있겠죠??

그럼 예측할 수 없는 외부적인 요인(속도잡음, 위치잡음)은 또 어떻게 수식으로 표현하나요? ;; 

예측할 수 없으므로 여기에서 확률이 들어갑니다. 

즉 속도잡음과 위치잡음을 평균이 0이고 표준편차가 각각 σ속도σ위치 인 Normal distribution으로 가정하겠다는 말이죠~ 이해가시나요?

(Kalman filter는 Noise잡음을 normal distribution으로 가정하였으므로 noise가 normal distribution이 아닌 경우에는 성능이 그닥 좋지 않습니다)


그럼 일정 시간에서의 KTX의 위치는 정확히 어디에 있다!! 라고는 말 못하고 ;;

아래 그림과 같이 종모양의 확률 분포(normal distribution)로 어딘가에 있을 겁니다.하고 말할 수 있다는 거죠~

잡음의 평균이 0이므로 확률이 가장 높은(즉 종의 중앙: 평균) 곳은 잡음이 없었을 때 수학식으로부터 계산된 값일 겁니다. 

Kalman_img03.png

(이미지 출처: http://www.cl.cam.ac.uk/~rmf25/papers/ )


물로 최초의 위치도 정확하게는 모릅니다. 켁;;

다만 일정 거리를 주행한 후의 위치보다는 초기의 위치를 더 자신있게 말할 수 있을 겁니다.

(이동하는 동안 어떤 내부/외부 잡음이 더해졌으므로)

아래 그림에서 초기의 종모양의 퍼진 정도가 위의 종모양 보다 더 작은 것에 주목 하세요

Kalman_img02.png

(이미지 출처: http://www.cl.cam.ac.uk/~rmf25/papers/ )


그리고 사실 센서로 측정한 값(KTX의 위치)도 정확한 값이 아닙니다. (센서의 정밀도라든가 잡음 때문에)

센서값 역시 오른쪽의 파란색 종모양(역시 normal distribution)의 확률로 측정이 될 것입니다.

Kalman_img04.png

(이미지 출처: http://www.cl.cam.ac.uk/~rmf25/papers/ )


State variable을 KTX의 위치, 속도로 잡고 State Space Model 형태로 표현을 해보면


Kalman_img18.png

이해하시는데 문제 없으실 거구요~ ^^

w와 v는 각각 process noise와 measurement noise를 말하구요 (위의 그림에서 빨간색, 파란색 종(bell shape))

w,v 모두 평균이 0인 normal distribution 입니다.

일반적인 1D Normal distribution을 변수가 2개, 3개인 2D, 3D multivariate normal distribution으로 확장하면 

variance(분산)은 --> covariance matrix(공분산 행렬)가 됩니다.

(covariance matrix의 대각선 성분이 각 변수의 variance입니다요.)

Kalman_img20.png  

(이미지 출처: http://en.wikipedia.org/wiki/Multivariate_normal_distribution )


Process Noise와 Measurement Noise의 covariance matrix를 각각 Q와 R로 잡겠습니다요.

Kalman_img19.png


만약 모델로부터 예측된 값이 10m 이고 센서로부터 측정된 값이 11m라면 둘중 어떤 값을 사용해야할까요?

부정확한 모델로부터 예측된 값을 써야할까요? 아니면 노이즈가 잔뜩 낀 센서의 값을 써야할까요?

초고정밀의 믿을 수 있는 센서를 쓰면 되지 않냐구요?? ^^ 넵 그래도 되지만 씁...

센서의 정밀도가 올라가면 올라갈 수록 센서의 가격도 정말 무섭게 올라 갑니다 -_-;; 정.말. 무.섭.게. ...;;

그럼 모델링을 진짜 진짜 세밀하게 하면 되지 않나요? 넵 그래도 되지만 씁...

만약 우주의 모든 원자, 전자, 미립자를 모델링한다면 그러면 센서도 필요 없습니다.


잠시 예전에 일기장에 끄적였던 글을 읽어보셔도 좋습니다. ^^


Kalman_img05.png

(이미지 출처: http://www.cl.cam.ac.uk/~rmf25/papers/ )


(각설하고) 우리가 할 수 있는 최선의 방법은 모델로부터 예측된 위치와 잡음이 섞인 센서로부터 측정된 위치를 가지고

가장 그럴싸한(가장 확률이 높은) 실제의 위치를 추정(estimation)하는 것입니다. (초록색 PDF)


두개의 Normal distribution으로부터 최적의 새로운 분포곡선을 구하시려면 단순히 두개의 Normal distribution을 곱하면 됩니다요!! 오홋!!

더욱 더 엘레강스한 점은 두개의 Normal distribution을 곱해도 그 결과 역시 Normal distribution이라는 것입니다. (평균과 분산이 바뀐)

시간이 있으시면 직접해보세요~ ^^ 바로 확인 가능합니다.


Kalman_img10.png 



새로 계산된 식의 형태가 역시 Normal distribution의 형태이므로 계산된 normal distribution을 다음 step에서 

Kalman filter의 식(형태)의 수정 없이 그대로 계속 반복적(recursive)으로 사용할 수 있습니다. 아~ 환타스틱합니다 ㅜㅜ




Kalman_img06.png


자~ 여기에서 잠시 처음 첨부된 수식에 대해 이야기 하겠습니다요~ -,.-

처음 수식에서 x위의 ^(hat 헷 모자)의 의미는 estimated(추정된 값)이라는 의미입니다.

Estimated(추정) 되었다는 말은 실제로는 그 값인지는 모르겠는데 아마도 그 값이 아닐까?? 하고 말그대로 추정(추측)했다는 거구요.

(추정이란 말이 나왔으니 확률/통계가 쓰인 것이 틀림 없습니다. ^^)


x와 P의 오른쪽 위에 있는 - 의 의미는 아직 보정되지 않은 [이전 step (k-1)으로부터]라는 말입니다.

 오른쪽 위에 마이너스 (-) 표시가 있으면 그냥 이전 step의 값(state variable)을 사용하여 여러분이 세운 모델(수학식)로부터 

계산,예측(prediction)된 값이라는 뜻입니다요. 영어로는 priori state 라고 그러구요~

x와 P의 오른쪽 위에 마이너스 (-) 표시가 없으면 예측된 값과 실제 센서의 값을 참고하여 보정된 값을 의미합니다. 

영어로는 posteriori state !!

참고로 Wikipedia 등에 나오는 (http://en.wikipedia.org/wiki/Kalman_filter) Pk|k-1 과 Pk- 는 동일한 녀석 입니다. Pk|k == Pk 이구요.


다시 위의 수식에서 오른쪽 Measurement Udate('Correct')의 (2)번째 식 Update estimate with measurement zk 식을 뜹어 봅시다.

Kalman_img09.png 

 

여러분들의 이해를 돕기위해 H를 I (Identity Matrix)로 놓고 보면 재미있는 사실을 알 수 있습니다. (H가 무엇인지 잠시후에 설명하겠습니다.)

오른쪽 위의 (-) 표시는 k-1 step으로부터 예측(prediction)된 k step의 값을 말한다고 했죠?

Kalman gain K가 1에 가깝다는 말은?? 넵~ ^^ 센서로부터 측정된 값을 100% 신뢰할 수 있다는 말입니다.

즉 State Space로부터 예측된 state variable xk-을 무시하고 100% 신뢰할 수 있는 측정된 값 zk를 state variable로 간주하겠다는 말이죠~


반대로 Kalman gain K가 0에 가깝다는 말은 센서로부터 측정된 state variable값을 전혀 믿지 못하겠다는 말입니다.

즉 신뢰성 없는 센서값은 무시하고 k-1 step의 state variable 값을 사용하여 [State Space 모델]로부터 예측(계산)된 k step의

state variable을 참값(true value)로 생각하겠다~ 이 말이죠!!


칼만 이득(Kalman gain)이 0.7이라고 한다면 

7:3으로 센서값과 예측값을 적당히 섞겠다는 이야기 이구요~ 이해가셨나요? ^^

다음 반복되는 step에서는 위에서 구한 최적의 state variable을 사용하고 각 step마다 위의 과정을 반복합니다.



그렇다면 어떻게 모델 or 센서의 신뢰도를 측정할  수 있을까요? 밑으로 내려가지 전에 잠시 생각해보세요.

그 정답은 바로바로바로 분산(variance) 입니다.  (2D, 3D multivariate normal distribution이라면 covariance matrix !!)


전교에서 1등하는 녀석이 3번 문제의 답이 10이라고 하고 전교 꼴등인 녀석은 11이라고 한다면

처음에 사람들은 모두 3번 문제의 정답은 10이라고 생각할 것입니다.

그런데 사실 알고 보니 3번 문제의 정답은 11이었고 몇번에 걸친 시험에서 전교 1등이하는 말이 틀리고 전교 꼴등이하는 말이 맞았다면

전교 1등이 하는 말의 신뢰성은 떨어질 것이고 꼴등이하는 말을 점점 더 믿게 되겠죠?

만약 전교 1등하는 녀석이 쌩뚱맞게 3번 문제의 정답이 2억이라고 했다면!! 10이라고 말했을 때보다 신뢰성은 더욱 떨어질 것입니다.

즉 error가 크면 클 수록 신뢰성은 더욱 더 떨어집니다.


Kalman_img16.png

Kalman filter는 매번의 측정에서 model과 관측치의 신뢰도(왼쪽 Prediction Part의 Pk error covariance)를 error에 기반해 update 합니다.



위에서 이해를 돕기위해 H를 Identity matrix로 가정하였지만 ... ^^;;

But !!실세계에서는 센서로 측정된 값이 바로 state variable이 되지 않는 경우가 더 많습니다. 

센서 값과 state variable의 도메인(단위)가 맞지 않으면 H matrix로 state variable을 센서의 측정단위로 transformation 해줘야합니다.


H를 identity matrix가 아니라 H (scalar) 라고 하고 μ_fused의 수식을 다시 정리하겠습니다.

우선  μ_fused를 약간 변형하구요. ^^

초등학교 산수니까 이해하시는데에는 문제가 없으시죠~

Kalman_img11.png 


(선형Linear system을 가정하고) H를 곱하면 μ는 Hμ가 될거구요, σ는 Hσ 가 됩니다.

Hμ와 Hσ를 그대로 위의 식에 대입하겠습니다. 아래의 식에서 양변을 H로 나눠주면 짠~


Kalman_img12.png 


σ12를 error covariance matrix Pk-로, σ22를 measurement covariance matrix R로 잡으면 K Kalman gain을 얻을 수 있습니다.

Matrix form과 scalar form을 비교해보세요. =(=^ㅅ^=)=


다시 μ1을 이전 state로부터 계산된 값, μ2를 센서로부터 측정된 값, μ_fused를 최적값이라고 한다면

(2)번째 식 [ Update estimate with measurement zk ]를 얻을 수 있구요.


Kalman_img15.png


Error covariance P에 대해서는

σ_fused를 약간 변형하면 아래와 같이 다시 쓸 수 있고

Kalman_img13.png 


변형된 식에 마찬가지로 H2σ2를 대입하면 

Kalman_img14.png

오~~ 마지막 (3) Update error covariance를 구할 수 있네요.

대충 이론적인 설명은 끝난것 같습니다. ㅋㅋ



다음 시간에는 직접 MATLAB에서 Kalman filter를 실습해보도록하죵~ o(^o^)o

다음 시간에 뵙겠습니다. 꾸벅


덧 1. Kalman Filter에 대해 아주 쉽게 풀어놓은 문서가 있으니 참고하세요 ^^ PDF

덧 2. 스트랑느님도 Kalman filter에 대해서 설명하시는데 내공이 부족한 관계로 일부밖에 이해하지 못하겠습니다요 ^^

        http://www.youtube.com/watch?v=d0D3VwBh5UQ

profile