# 센서 데이터 처리

드론의 비행 제어기(Fly Controller, FC)는 드론이 안정적으로 비행할 수 있도록 다양한 센서 데이터를 실시간으로 처리하고 반영해야 한다. 이 섹션에서는 FC가 처리하는 주요 센서 데이터와 그 처리 방법에 대해 상세히 설명한다.

#### IMU (Inertial Measurement Unit) 데이터

IMU는 가속도계와 자이로스코프를 포함하여 드론의 3축 가속도 및 회전 속도를 측정한다.

**가속도계**

가속도계는 드론의 선형 가속도를 측정하는 센서이다. 가속도계의 출력은 다음과 같은 벡터로 표현된다:

$$
\mathbf{a} = \begin{bmatrix} a\_x \ a\_y \ a\_z \end{bmatrix}
$$

여기서 $a\_x$, $a\_y$, $a\_z$는 각각 x, y, z 축의 가속도이다.

**자이로스코프**

자이로스코프는 드론의 회전 속도를 측정하는 센서이다. 자이로스코프의 출력은 다음과 같은 벡터로 표현된다:

$$
\mathbf{\omega} = \begin{bmatrix} \omega\_x \ \omega\_y \ \omega\_z \end{bmatrix}
$$

여기서 $\omega\_x$, $\omega\_y$, $\omega\_z$는 각각 x, y, z 축의 각속도이다.

#### 센서 데이터 융합

드론의 FC는 가속도계와 자이로스코프에서 나온 데이터를 융합하여 드론의 자세(roll, pitch, yaw)를 계산한다. 주로 칼만 필터(Kalman Filter)나 보정된 상보 필터(Complementary Filter)가 사용된다.

**칼만 필터**

칼만 필터는 드론의 상태를 예측하고, 센서의 측정값을 이용해 상태를 갱신하는 반복적인 과정이다. 상태 벡터 $\mathbf{x}$와 측정 벡터 $\mathbf{z}$는 다음과 같다:

$$
\mathbf{x}\_k = \begin{bmatrix} \phi\_k \ \theta\_k \ \psi\_k \ p\_k \ q\_k \ r\_k \end{bmatrix}
$$

$$
\mathbf{z}\_k = \begin{bmatrix} \phi\_k^m \ \theta\_k^m \ \psi\_k^m \ p\_k^m \ q\_k^m \ r\_k^m \end{bmatrix}
$$

여기서 $\phi$, $\theta$, $\psi$는 각각 롤, 피치, 요 각도이고, $p$, $q$, $r$는 각속도이다. $m$ 표시는 측정값을 나타낸다.

**상태 예측**

상태 예측은 다음과 같이 이루어진다:

$$
\mathbf{x}*{k|k-1} = \mathbf{A} \mathbf{x}*{k-1} + \mathbf{B} \mathbf{u}\_{k-1}
$$

여기서 $\mathbf{A}$는 상태 전이 행렬, $\mathbf{B}$는 제어 입력 행렬, $\mathbf{u}\_{k-1}$은 제어 입력 벡터이다.

**측정 갱신**

측정 갱신은 다음과 같이 이루어진다:

$$
\mathbf{y}\_k = \mathbf{z}*k - \mathbf{H} \mathbf{x}*{k|k-1}
$$

$$
\mathbf{S}*k = \mathbf{H} \mathbf{P}*{k|k-1} \mathbf{H}^\top + \mathbf{R}
$$

$$
\mathbf{K}*k = \mathbf{P}*{k|k-1} \mathbf{H}^\top \mathbf{S}\_k^{-1}
$$

$$
\mathbf{x}*k = \mathbf{x}*{k|k-1} + \mathbf{K}\_k \mathbf{y}\_k
$$

여기서 $\mathbf{H}$는 측정 모델 행렬, $\mathbf{P}$는 상태 공분산 행렬, $\mathbf{R}$는 측정 공분산 행렬, $\mathbf{K}$는 칼만 이득(Kalman Gain)이다.

#### GPS 데이터

GPS 센서는 드론의 절대 위치를 제공하며, 이를 통해 드론의 전역 좌표를 추적할 수 있다. GPS 데이터는 주기적으로 업데이트되며 보정된 현재 위치를 계산하는 데 사용된다.

**GPS 위치 벡터**

GPS로부터 얻은 위치 데이터는 다음과 같은 형태로 나타낼 수 있다:

$$
\mathbf{p} = \begin{bmatrix} \text{Latitude} \ \text{Longitude} \ \text{Altitude} \end{bmatrix}
$$

여기서 위도(Latitude), 경도(Longitude), 고도(Altitude)를 나타낸다.

**위치 보정**

GPS는 드론의 전역 위치를 제공하지만, 신호 지연이나 정밀도 문제로 인해 보정이 필요할 수 있다. 이를 위해 보통 다른 센서와의 융합이 필요하다.

#### 고도 센서 데이터

드론은 고도계를 통해 고도를 측정한다. 고도 센서는 주로 압력 센서나 초음파 센서를 사용하며, 드론의 높이 제어에 중요한 역할을 한다.

**압력 센서**

압력 센서는 주변 압력을 측정하여 고도를 계산한다. 압력 $P$와 고도 $h$의 관계는 다음과 같다:

$$
h = \frac{RT}{Mg} \ln{\frac{P\_0}{P}}
$$

여기서 $R$은 기체 상수, $T$는 절대 온도, $M$은 공기의 몰 질량, $g$는 중력 가속도, $P\_0$는 기준 압력이다.

**초음파 센서**

초음파 센서는 음파의 반사를 이용해 드론과 지면 사이의 거리를 측정한다. 초음파 센서의 거리는 다음과 같이 계산된다:

$$
d = \frac{v \cdot t}{2}
$$

여기서 $v$는 음속, $t$는 음파가 되돌아오는 데 걸리는 시간이다. 이 거리는 저고도에서 매우 정확하게 측정할 수 있다.

#### 비전 센서 데이터

비전 센서는 드론의 카메라를 사용하여 주위 환경을 인식한다. 일반적으로 RGB 카메라, 적외선 카메라, 심도 카메라가 사용된다.

**특징 추출**

비전 센서는 이미지 처리 알고리즘을 사용하여 특징을 추출한다. 대표적인 방법은 SIFT(Scale-Invariant Feature Transform)와 SURF(Speeded-Up Robust Features)이다.

**특징 매칭**

추출된 특징들은 이전 프레임의 특징들과 비교하여 매칭된다. 이를 통해 드론의 상대적인 이동을 추적할 수 있다.

#### 바람 센서 데이터

드론은 바람의 영향을 많이 받기 때문에 바람 센서를 통해 바람의 세기와 방향을 측정한다. 이는 비행의 안정성을 높이는 데 매우 중요하다.

**바람 벡터**

바람 센서로부터 얻는 데이터는 다음과 같은 벡터로 나타낼 수 있다:

$$
\mathbf{w} = \begin{bmatrix} w\_x \ w\_y \ w\_z \end{bmatrix}
$$

여기서 $w\_x$, $w\_y$, $w\_z$는 각각 x, y, z 축의 바람 속도를 나타낸다.

#### 센서 데이터의 시간 동기화

다양한 센서에서 입력되는 데이터는 각각 다른 주기로 업데이트된다. 이 데이터를 정확하게 융합하기 위해서는 시간 동기화가 필요하다.

**타임스탬프**

각 센서 데이터는 타임스탬프를 포함하여 기록된다. 이를 통해 FC는 동일 시간대의 데이터를 융합하여 드론의 상태를 계산할 수 있다.

**동기화 방법**

일반적으로 센서 데이터를 시간 순서에 맞춰 큐(queue)에 저장하고, 특정 시점의 데이터를 추출하여 동기화한다. 또한, 상호보완적인 방법으로 보간(interpolation)을 사용할 수도 있다.

***

센서 데이터 처리는 드론의 안정적인 비행을 위해 매우 중요하다. 다양한 센서로부터 입력된 데이터를 적절히 융합하고 보정하여 정확한 드론의 상태를 유지하는 것이 핵심이다. 이를 통해 드론은 다양한 환경에서 안전하고 효율적으로 비행할 수 있다.
