칼만필터 c++ 예제

이제 우리는 마침내 칼만 필터 방정식을 볼 수 있는 위치에 있습니다. 방정식을 표현하는 많은 대안이지만 동등한 방법이 있습니다. 제형 중 하나는 다음과 같이 주어진다: 그래서 파고 하자, 여기에 Kalman 필터 클래스 : 칼만 필터는 시간이 지남에 따라 속도를 학습하고, 본질적으로 위치 측정보다 더 많은 위치 추정을 업데이트하는 속도 정보를 신뢰합니다. 내 경험에서 좋은 Kalman 필터 설계의 핵심은 각 측정이 상태로 변환되는 방법과 상태 및 측정의 소음이 어떻게 관련되어 있는지 여부에 따라 어떻게 일치하는지 에 주목하는 것입니다. 위의 방정식에서 각 문자는 단일 숫자가 아니라 객체(행렬)입니다. 모든 시스템에는 분산이 있습니다. 필터의 분산이 +-1%이고 실제 값의 값이 +-5%라고 가정해 보겠습니다. 값을 예측하는 경우 예측 값 또는 meassures 값을 사용하도록 업데이트를 선택해야 합니다. 어느 것이 더 믿는지에 따라. 그렇지 않으면 필터는 항상 자신의 값을 기반으로 개발않습니다 … 위치 측정이 가능합니다(측정 사이의 시간이 다를 때)하고 위치가 시끄러웠지만 측정값의 평균 속도가 느리고 매우 원활하게 변경되어야 한다고 가정해 보세요. 이것은 두 번째 순서, 시간 변화 칼만 필터입니다. 이것은 단지 소개, 칼만 필터링에 새로운 누군가의 자리에 점프하기위한 것입니다.

따라서 Kalman 필터가 이 두 기준을 충족시키는 추정기입니다. 그러나 Kalman 필터 솔루션은 시스템에 영향을 미치는 소음에 대한 특정 가정을 충족할 수 없다면 적용되지 않습니다. w는 공정 노이즈와 z가 측정 노이즈라는 것을 시스템 모델에서 기억하십시오. w의 평균 값이 0이고 z의 평균 값이 0이라고 가정해야 합니다. w와 z 사이에 상관 관계가 없다고 가정해야 합니다. 즉, 언제든지 k, wk 및 zk는 독립적인 랜덤 변수입니다. 그런 다음 노이즈 공분산 행렬 Sw 및 Sz로 정의됩니다: 이것은 Eigen 라이브러리를 사용하여 C++의 기본 Kalman 필터 구현입니다. [칼만 필터 소개](http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf)에 있는 대로 알고리즘을 직접 구현합니다.

Kalman 필터는 가능한 한 기본으로 유지될 때 항상 가장 잘 작동합니다. 이는 Kalman 필터가 소음이 많은 위치 정보를 수정하기 위해 저소음 속도 정보를 실제로 사용하는 방법의 좋은 예입니다. K = P * H^T *S^-1 K = 칼만 게인 = 분산/잔류 공분산. 실제로 Kalman 필터는 시스템 동적 매트릭스만 사용하여 현재 상태 $X(t)$를 다음 phsyical 측정 지점 $X(t+T_s)$로만 전파합니다. (즉, 이전 상태 추정치에서 제공된 초기 조건에 따라 미분 방정식을 수치적으로 해결하고, 요청된 높은 데이터 레이트에서 이 솔루션을 샘플링합니다. 도로를 따라 주행하는 차량에 대한 필터 시뮬레이션.

칼만필터 c++ 예제