데이터 수집 및 전처리

실제 데이터를 기반으로 확장 칼만 필터(EKF)의 성능을 평가하기 위해서는, 먼저 적절한 데이터를 수집해야 한다. 센서 데이터는 일반적으로 GPS, IMU(관성 측정 장치), 라이다, 카메라 등 여러 센서로부터 수집될 수 있다. 수집된 데이터는 다음 단계에서 필터링과 동기화가 필요하다.

상태 변수와 관측 데이터

EKF를 사용하여 실제 데이터를 평가하기 위해서는 상태 변수와 관측 데이터를 정의해야 한다. 예를 들어, 로봇의 위치를 추정하는 문제에서 상태 변수는 3차원 공간에서의 위치와 속도일 수 있다.

상태 변수는 다음과 같이 정의될 수 있다:

\mathbf{x}_k = \begin{bmatrix} x_k \\ y_k \\ z_k \\ \dot{x}_k \\ \dot{y}_k \\ \dot{z}_k \end{bmatrix}

여기서, x_k, y_k, z_k는 각각 k번째 타임스텝에서의 위치, \dot{x}_k, \dot{y}_k, \dot{z}_k는 속도를 나타낸다.

관측 데이터는 GPS나 IMU로부터 얻어진 정보일 수 있으며, 예를 들어 GPS로부터는 위치가 관측될 수 있다. 이때 관측 벡터는 다음과 같이 나타낼 수 있다:

\mathbf{z}_k = \begin{bmatrix} x_k \\ y_k \\ z_k \end{bmatrix}

이는 실제 측정된 값이 된다.

모델 및 노이즈 정의

확장 칼만 필터는 비선형 시스템에 적용되므로, 시스템 모델과 측정 모델이 필요하다. 시스템 모델은 시간에 따른 상태 변화를 나타내며, 측정 모델은 센서로부터 얻은 데이터를 상태로 변환하는 역할을 한다.

시스템 모델은 다음과 같이 정의될 수 있다:

\mathbf{x}_{k+1} = f(\mathbf{x}_k, \mathbf{u}_k) + \mathbf{w}_k

여기서, f는 시스템의 비선형 동작을 설명하는 함수이며, \mathbf{u}_k는 제어 입력, \mathbf{w}_k는 시스템 노이즈이다. 시스템 노이즈는 대개 가우시안 분포를 따르는 랜덤 벡터로 가정된다:

\mathbf{w}_k \sim \mathcal{N}(0, \mathbf{Q}_k)

측정 모델은 다음과 같이 표현된다:

\mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k

여기서, h는 상태를 측정 값으로 변환하는 함수이며, \mathbf{v}_k는 측정 노이즈이다. 측정 노이즈 또한 가우시안 분포를 따르는 랜덤 벡터로 가정된다:

\mathbf{v}_k \sim \mathcal{N}(0, \mathbf{R}_k)

예측 단계

확장 칼만 필터에서 예측 단계는 현재 상태와 제어 입력을 기반으로 다음 상태를 예측하는 과정이다. 이 단계에서는 시스템 모델을 사용하여 상태를 갱신한다. 예측된 상태는 다음과 같이 계산된다:

\hat{\mathbf{x}}_{k+1|k} = f(\hat{\mathbf{x}}_{k|k}, \mathbf{u}_k)

여기서, \hat{\mathbf{x}}_{k+1|k}k+1번째 타임스텝에서 예측된 상태이며, \hat{\mathbf{x}}_{k|k}k번째 타임스텝에서 추정된 상태, \mathbf{u}_k는 제어 입력을 나타낸다.

오차 공분산 행렬도 예측 단계에서 업데이트되는데, 이는 다음과 같이 계산된다:

\mathbf{P}_{k+1|k} = \mathbf{F}_k \mathbf{P}_{k|k} \mathbf{F}_k^\top + \mathbf{Q}_k

여기서, \mathbf{P}_{k+1|k}는 예측된 오차 공분산 행렬, \mathbf{F}_k는 시스템 모델의 야코비 행렬이며, \mathbf{Q}_k는 시스템 노이즈 공분산 행렬이다. \mathbf{F}_k는 시스템 모델을 상태 변수에 대해 선형화한 것으로, 다음과 같이 계산된다:

\mathbf{F}_k = \frac{\partial f(\mathbf{x}_k, \mathbf{u}_k)}{\partial \mathbf{x}_k}

업데이트 단계

업데이트 단계에서는 센서로부터의 측정 데이터를 기반으로 예측된 상태를 조정한다. 이때 측정 모델을 사용하여 상태를 업데이트하며, 칼만 이득(Kalman Gain)이 중요한 역할을 한다.

칼만 이득은 다음과 같이 계산된다:

\mathbf{K}_k = \mathbf{P}_{k+1|k} \mathbf{H}_k^\top (\mathbf{H}_k \mathbf{P}_{k+1|k} \mathbf{H}_k^\top + \mathbf{R}_k)^{-1}

여기서, \mathbf{K}_k는 칼만 이득, \mathbf{H}_k는 측정 모델의 야코비 행렬이며, \mathbf{R}_k는 측정 노이즈 공분산 행렬이다. \mathbf{H}_k는 다음과 같이 측정 모델을 상태 변수에 대해 선형화하여 계산된다:

\mathbf{H}_k = \frac{\partial h(\mathbf{x}_k)}{\partial \mathbf{x}_k}

상태는 다음과 같이 업데이트된다:

\hat{\mathbf{x}}_{k+1|k+1} = \hat{\mathbf{x}}_{k+1|k} + \mathbf{K}_k (\mathbf{z}_k - h(\hat{\mathbf{x}}_{k+1|k}))

여기서, \hat{\mathbf{x}}_{k+1|k+1}는 업데이트된 상태이며, \mathbf{z}_k는 실제 측정된 값이다.

오차 공분산 행렬도 다음과 같이 업데이트된다:

\mathbf{P}_{k+1|k+1} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k+1|k}

여기서, \mathbf{I}는 단위 행렬이다.

실제 데이터와 비교

예측 및 업데이트 단계가 완료되면, 실제 데이터와 필터링된 데이터를 비교하여 필터의 성능을 평가할 수 있다. 이를 위해 일반적으로 루트 평균 제곱 오차(RMSE, Root Mean Square Error)를 사용한다. RMSE는 다음과 같이 계산된다:

\text{RMSE} = \sqrt{\frac{1}{N} \sum_{k=1}^{N} (\mathbf{x}_k - \hat{\mathbf{x}}_k)^2}

여기서, N은 데이터의 총 개수이며, \mathbf{x}_k는 실제 값, \hat{\mathbf{x}}_k는 필터링된 값이다. RMSE 값이 낮을수록 필터의 성능이 우수하다는 것을 의미한다.