본문 바로가기
Control system engineering

[제어시스템공학-10] Extended Kalman Filter(확장칼만필터) 개념

by 노마드공학자 2021. 2. 1.

[제어시스템공학-1] Average Filter(평균필터) https://limitsinx.tistory.com/69

[제어시스템공학-2] Moving Average Filter(이동평균필터) https://limitsinx.tistory.com/70

[제어시스템공학-3] Low Pass Filter(저주파  통과필터) https://limitsinx.tistory.com/71

[제어시스템공학-4] Kalman Filter(칼만필터) 개념정리(1) https://limitsinx.tistory.com/72

[제어시스템공학-5] Kalman Filter(칼만필터) 개념정리(2) https://limitsinx.tistory.com/73

[제어시스템공학-6] Kalman Filter(칼만필터) 구현 - 쉬운예제 https://limitsinx.tistory.com/74

[제어시스템공학-7] Kalman Filter(칼만필터) 구현 - 중간예제 https://limitsinx.tistory.com/75

[제어시스템공학-8] Kalman Filter(칼만필터) 구현 - 어려운예제 https://limitsinx.tistory.com/76

[제어시스템공학-9] Kalman Filter(칼만필터) 구현 - 실전예제 https://limitsinx.tistory.com/77

 

※이 전글에서 정리한 코드/개념은 재설명하지 않으므로, 참고부탁드립니다

※해당 글은 PC에서 보기에 최적화 되어있습니다.


이제까지 상당히 많은 분량을 들여, 선형 칼만필터에 대한 개념과 여러가지 예제들을 구현해보았습니다.

 

하지만, 세상의 시스템은 대부분 비선형(non-linear)하기 때문에 일반적인 칼만필터만으로는 명확한 한계가 있었습니다.

 

따라서 많은 엔지니어들은 이런 선형칼만필터를 비선형 시스템에도 접목하기 위해 신경을 많이썼는데요

 

칼만필터 시리즈중, 가장먼저 항공우주 분야에 최초 실생활 접목되어 NASA에서 이용된 필터인 "EKF(Extended Kalman Filter)"에 대해 정리를 해보겠습니다.

 

EKF의 아이디어 자체는 아주아주 심플합니다!

 

 

"비선형함수가 있니? 그럼 매순간마다 미분해서 선형으로 만들어서 쓰자!"

 

이게 끝입니다.

 

 

칼만필터는 어렵지않아(2019, 김성필)

식을 보시면 더욱 직관적인데요,

 

이전에 선형칼만필터에서 보시던것과 아주 똑같지 않나요??

 

유일한 차이점이라면 "①추정값과 오차공분산예측" 에서 x_k = A*x_k-1 이던것이, x_k = f(x_k-1)로 바뀌었을 뿐입니다.

 

즉, 이것이 바로 비선형이 첨가된거죠

 

기존의 A라는 상수값만 가진 matrix로 완성되는 칼만필터는 모두 "선형"시스템 이였습니다.

 

하지만, 이 A가 이제 f(x) 예를들어, f(x)=x.^2+4x+3 이런식으로 비선형성을 가지게 되는것을 표현한게 "확장칼만필터"입니다.

 

 

놀랍게도 A,H가 f(x)로 바뀌는 부분을 제외하곤 선형칼만필터와 완벽하게 동일한 알고리즘입니다!

 

 

이렇게 놀랍도록 간단한 Extended Kalman Filter(확장칼만필터)가 시중에 어떤 수식으로 알려져있는지 확인해보시겠습니다.

 

출처 : https://www.researchgate.net/figure/Extended-Kalman-Filter-Algorithm_fig5_300067587

 

놀랍게도 위에서 풀어서 엄청쉽게 정리한것을, 학자들이 좋아하는 수식으로 표현하면 이렇습니다 - _-;;

 

이러니 칼만필터를 공부하려는 사람들이 수식만보고 나가떨어지지 않을수가 없습니다..

 

공부를 하다보면 물론, 이 수식들이 definition으론 맞지만, 뭔가 책을 서술하거나 논문을 쓰는사람들은 독자들을 배려하지 않는다는게 느껴집니다. 어떤.. 학자들의 고지식함이랄까?

 

Anyway

 

이전까지 정리해왔던 칼만필터를 모두 이해하셨다면,  EKF는 이것이 끝입니다! A -> f(x), H-> h(x)

 

A를 f(x)로 바꿔주는 방법은 f(x),h(x)를 매 순간마다 미분을 해주어서 선형시스템으로 바꾸어준다! 입니다.

바로 아래그림처럼요!

 

비선형함수 순간 미분
출처 : https://www.pngwing.com/ko/free-png-xgrfv


f(x)와 h(x)를 매순간 미분해준다는건 무슨뜻일까?

 

이것이 EKF의 핵심입니다.

 

선형대수학에서 중요한 개념인 "Jacobian"이 사용되는데요

 

jacobian, 출처 : wikipedia

 

수식적 유도과정은 중요하지 않습니다. 매트랩이나 다른 라이브러리들이 알아서 계산해줄테니까요

 

jacobian의 간단한 의미는! 각변수들에 대해 f와 h를 편미분한다라는것입니다.

 

 

출처 : http://t-robotics.blogspot.com/2013/12/jacobian.html

편미분이 뭔지 간단하게 말씀드리겠습니다.

 

y=x1 + 2* x2 + 3* x3 라는수식이 있다고 가정해보시죠

 

이것은 f(x1,x2,x3)인데 변수가3개나 되니 미분을 하려고하면 어떻게해야할까 참 고민스럽습니다.

 

이때 "에라모르겠다! 각 변수마다 1번씩 모두 미분을 해버리자!" 라고해서 각각을 구해버립니다.

 

그러면 y를 x1에대해 미분한값은 1, x2에 대해 미분한값은 2, x3에대해 미분한값은 3이 나오겠죠

 

이렇게 각각의 존재하는 변수들에 대해 미분을 진행해주는것을 "편미분"이라고 부릅니다.

 

이렇게 편미분을 해주는 이유는

 

x가 x가아니기 떄문입니다! 라고하면 무슨말인지 어리둥절하실겁니다.

 

x=[위치;속도]라는 예제로 저희가 칼만필터를 구현한적이 있죠?

 

이런식으로 x도 state space equation을 어떻게 짜느냐에 따라 내부적으로 여러개의 변수로 나뉘게 됩니다.

 

따라서, 미분을 해줄때도 각각에 대해 진행해줘야한다는거죠! 이게 EKF에서 편미분이 필요한 이유입니다.

 

 

즉, jacobian은 매순간 모든 변수들에 대해 미분을 해주어 선형화된 값을 얻어낸다!

 

 

는것이 핵심입니다.


정리를 하자면,

 

Jacobian으로 비선형함수를 매순간 선형함수로 만들어 칼만필터를 돌려주는것이 Extended Kalman Filter(확장칼만필터)입니다.

 

[일반칼만필터]

이미 선형화된 시스템 -> 칼만필터 적용

 

[확장칼만필터]

비선형화 시스템 -> 매순간마다 미분(jacobian)하여 강제로 선형근사화 -> 칼만필터 적용

 

입니다.

 

칼만필터만 알고있다면, 아주 스무스하게 얻어갈 수 있는 스킬입니다.

 

출처 : http://www-sop.inria.fr/odyssee/software/old_robotvis/Tutorial-Estim/node16.html

으.. 이렇게 보면 정말 징글징글하네요, 아무것도아닌것이..

 

 

※ 참고

"칼만필터는 어렵지 않아" (2019,김성필)

댓글