본문 바로가기
Control system engineering

[제어시스템공학-9] Kalman Filter(칼만필터) 구현 - 실전예제

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

[제어시스템공학-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

 

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

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


이번에는 실생활 예제로 선형칼만필터 코드정리를 마무리해보겠습니다.

 

input data로 수중에서 음파를 쏴서 거리를 측정한값을 토대로, 음파탐지기의 속도를 그려보겠습니다.

 

SonarAlt.mat
0.00MB

 

 

 

해당 파일이 음파 위치측정값입니다. 다운로드 받아 현재 m파일들을 돌리시는 path에 저장해주시면 됩니다.

 

 

그럼 이 데이터로 위치를 한번 추정해보겠습니다.

 

점찍힌 부분들이 실제값이고, 직선으로 그려진 부분들이 Kalman filter로 추정한 값인데요

거의 일치함을 확인하실 수 있습니다.

 

그 이유는, 칼만이득(Kalman gain)에 의해 센싱값과 추정값의 오차만큼 계속 보상되어 따라가기 때문입니다.

그럼 이렇게 추정한 위치데이터를 기준으로 속도를 구하면 아래와같이 나옵니다.

 

 

이것이 칼만필터로 추정한 Sonar의 속도값입니다.

매트랩에서 서비스로 제공하는 Sonar는 위치데이터만 저장되어있을뿐, 실제 속도값은 저장되어있지 않은 관계로 추정값과 비교를 해볼 순 없겠지만, Distance와 함께 그려보아 정합성이 어느정도인지 유추는 해볼 수 있습니다.

 

 

 

실제 위치값과 추정한 속도값을 비교해보면

 

7~9초 대역에선 속도가 거의 0으로 추정되고있고, 측정된 위치값 또한 105부근에서 크게 변화가 없음을 확인할 수 있습니다.

 

또한, 3~4초 부근 속도가 +였다가 -로 바뀌는 부분이 존재하는데, 실제 측정된 위치도 증가하다가 반대로 감소하는 모습을 보이고 있습니다.

 

또한, 0~3초까지 속도가 -로 가는경우는 거의없는데요, 이에 맞게 측정되는 거리또한 꾸준히 증가하는 그래프를 보여주는것을 확인할 수 있습니다.

 

이런 추측으로, 칼만필터로 추측한 속도가 실제 거리센싱값과 비교해보았을때, 어느정도 정합성이 있다라는것을 판단할 수 있습니다.

 


[코드분석-1]

 

이전 예제와 동일하며, GetSonar()데이터를 받아 위치센싱값(z)를 기준으로 삼고 칼만필터링을 하는 코드입니다.

 

 

[코드분석-2]

이전 예제 코드와 동일한 초기값 선언들입니다.

 

[코드분석-3]

 

load SonarAlt 및 persistent sonarAlt라는 코드를 통해 sonarAlt.mat파일의 데이터값들을 읽어오는 코드입니다.

 

sonar 위치값들은 h에 담겨집니다.


Summary

 

이제까지 구현해본 코드들은 모두 "선형칼만필터(Linear Kalman Filter)" 입니다.

 

x_k-1 = A * x_k 처럼 A가 명확한 숫자로 나오는, 선형시스템에만 접목이 가능한 방법이였죠

 

물론, 선형시스템에서 칼만필터는 최적의 제어방법입니다.

 

하지만, 이세상의 대부분은 비선형 시스템이죠

 

x_k-1 = (x_k)^2 + 3 이정도 간단한 수식도 칼만필터는 제대로 못따라가기 시작합니다.

 

즉, "비선형"을 해결하기에는 칼만필터는 부족한데요, 이것을 해결하기위한 방법으로 여러가지 필터들이 존재하는데

 

가장 유명한 Extended Kalman Filter(확장칼만필터)를 다음글에 정리해보도록 하겠습니다.

댓글