칼만 필터

루돌프 칼만이 개발한 알고리즘.

개요

오차(외란)을 가지는 관측치로 부터 시스템의 상태를 추정하거나 제어하기 위한 알고리즘, 상태 관측기의 최적버전. 예를 들어 로봇 팔의 각도와 각속도가 알고 싶은데, 관측가능한 점은 로봇 팔의 끝이라고 하자. 그러면 각도와 각속도를 상태로 가지는 상태방정식및 출력방정식을 세워서 칼만 필터를 돌리게 되면, 매우 근사하게 각도와 각속도를 시시각각 추정할 수 있다. 물론 상태방정식과 출력방정식이 가지는 물리적 패러미터가 정확하다라는 가정하의 얘기고, 이 시스템의 경우 비선형이기 때문에 선형 칼만 필터가 아닌 Unscented Kalman Filter같은 비선형 칼만 필터가 필요하다.

보다 구체적이고 간단한 예를 들어보자면, 지표면을 움직이는 자동차를 생각해볼 수 있다. 우리가 궁금한건 특정 시점 (T) 의 자동차의 "정확한 위치(X)" 이다. 우리가 관찰하는 차량엔 INS가 장착되어있고, 또한 적당한 방법 (GPS를 이용한다 치자)을 통해 자동차의 위치를 잴 수 있다고 하자.
위 상황에서 T 시점에서 자동차의 위치 X를 구하는 방법은 두 가지가 있다. 하나는 시점 T-1의 자동차 위치와 INS의 값을 이용해 추측하는것, 그리고 시점 T에서 GPS의 값을 읽는 것. 두 관측값 모두 오차를 가지고 있다 (모든 관측값은 오차를 가지고 있으며, 이는 기술의 발전을 통해 줄일 수는 있지만 완전히 없애는건 불가능하다). 한가지 다행인 것은, 우리는 두 가지 전혀 다른 방법을 통해 자동차의 위치를 구했으며, 오차가 어느 정도인지 알고 있다는 것이다. 따라서 이 오차의 역수에 비례하는 가중치를 줘서 두 값을 더하면 더한 값의 오차는 최소가 된다.
이렇게 구한 T시점의 위치 X를 다시 T+1시점의 위치를 계산하는데 사용하면, INS를 통해 계산되는 X의 오차가 줄어들게 된다 (초기값인 T의 X의 오차가 줄어듦으로). 따라서 계산된 위치값의 오차는 이 전 단계보다 더 작아지며, 이를 반복하면 오차는 점점 수렴하게 된다.
이를 보다 있어보이는formal 한 언어로 일반화 하자면, 칼만 필터는 현 시점의 계의 상태의 측정치와 이전 시점의 계의 상태로부터 예측된 현 시점의 시스템의 상태를 재귀적으로 이용해 현재 시점의 계의 상태를 최적 추정 (optimal estimation)을 하는 기법이다. 기본 개념 자체는 그다지 어렵지 않으나 응용분야에 따라 "예측"에 사용하는 모델이 복잡하고 비선형인 경우가 많기 때문에 필터를 잘 설계하려면 모델에 대한 이해가 전제 되어야 한다.

특히 이 알고리즘이 유용한 이유는 수식적으로 앞서 입력된 값들을 모두 기억했다가 평균을 내는 것이 아니라, 매 순간 앞서 입력된 값들에 의한 어떠한 경향을 나타내는 값 몇가지만 메모리에 기억해두었다가 바로 다음 타이밍에 입력된 값을 가지고 이 경향을 나타내는 값을 다시 보정하는 방식이라는 점이다. 이는 메모리 용량이 끔찍하게 부족했던 1960년대에 대단히 유용한 기법이었으며, 지금도 실시간으로 빠르게 작동해야 하는 시스템에게 중요하다.

이 알고리즘은 루돌프 칼만이 미국의 NASA에 방문했을 때, 자신이 떠올린 아이디어가 아폴로 계획에 쓰일 수 있다고 생각하고 아폴로 프로젝트의 항법컴퓨터에 이 기법을 적용하고자 연구하였다.

현재도 항법, 제어 같은데 쓰인다. 또한 펄스형 레이더처럼 입력신호가 연속적이지 않고 끊겨져 들어올때, 다음 신호가 들어올 방향과 타이밍을 예측하는데 쓰인다.

더 상세한 내용과 정확한 수식들에 대하여 많은 엔지니어 여러분들의 적극적인 추가작성 바랍니다.