IMU는 관성 측정 장치(Inertial Measurement Unit)이다. 가속도 센서(Acceleration Sensor), 각속도 센서(Gyroscope, 자이로스코프)로 이루어져 있으며(6축) 일부는 지자기 센서(Magnetometer)도 포함한다(9축).
물체에 작용하는 가속력과 진동력, 충격력 등 동적 힘이 발생했을 때, 움직임의 변화에 따른 가속도의 변화(단위: m/s^2)를 순간적으로 감지해낸다. 센서에서 얻어지는 출력값인 가속도를 적분하여 물체의 진행 방향에 대한 속도를 계산할 수 있고, 이를 가공하면 물체의 위치를 알아낼 수 있다.
짧은 기간에 대한 오차는 작으나, 센서에서 얻은 가속도 값을 적분하므로 시간에 따라 오차가 누적되는 단점이 있다. 때문에 GPS와 결합하여 보정하는 방법이 대중적으로 사용된다.
측정 방법에 대해 정확히 이야기하자면, 가속도 센서는 비중력(specific force)을 측정한다.
비중력(Specific Force, g-force 혹은 mass-specific force)은 단위 질량 당 비중력 힘(non-gravitational force)이다. 비중력은 실제 힘이 아니라 가속도의 타입이라 할 수 있다. $$ \text{Specific Force} = \cfrac{\text{Force}_{\text{Non-Gravitatinoal}}}{\text{Mass}} $$ Wikipedia(Eng.) ‘Specific Force’
지상에서는 물체는 수직 하방으로 중력가속도만큼(-g) 힘을 받고 있다. 어느 쪽으로 기우는 등 자세가 변함에 따라 x와 y, z 축 가속도계가 서로 영향을 미치며 측정 가속도값이 변화한다.
만약 정지된 상태라면, 중력 방향으로 작용하는 힘을 계산하여 각 축의 방향으로 기울어진 각도를 계산할 수 있다.
예를 들어 위 사진과 같이 y방향으로 45°기울었다고 하자. 그렇다면 기울어진 상태에서 중력 방향으로 G=0.707만큼의 힘이 작용하여 이것이 x축과 z축 방향으로 나뉘어 힘이 출력될 것이며, 이 비율을 arctan 계산을 통해 각도를 알 수 있는 것이다.
하지만 위 예시 상황과는 달리 물체가 움직일 경우, 즉 중력 외 가속이 있는 경우에는 가속도 센서만으로는 정확한 기울기를 알 수 없다. 중력 가속도와 이동에 의한 가속도 값이 구분이 안되기 때문이다. 그래서 이를 보정하기 위해 각속도 센서(자이로스코프)를 이용한다.
IMU 센서를 사용해 위치를 계산해내기 위해서는, 가속도계의 측면에서는 물체의 각도에 맞는 중력가속도를 제거해야 한다. 자이로스코프에서 출력한 각속도를 적분해 물체의 각도를 구한뒤 중력가속도를 구해 이를 제거한다. 이때 센서의 각도로 지구 방향으로 중력 가속도가 적용되는 크기를 구하기 위해서는 AHRS 알고리즘을 이용한다.
자이로스코프는 대표적인 관성 센서로, 물체의 회전 변화량인 각속도(단위: rad/s)을 측정한다. 자이로스코프는 중력을 이용하여 코리올리 힘을 검출한다. 중력이 가해질 때 진동 속도가 변하는 것을 각속도로 계산해, 질량과 진동 속도를 통해 값을 측정하여 검출할 수 있다.
각속도(角速度, angular velocity, ω)는 특정 축을 기준으로 했을 때의 초당 회전 각도라 이해하면 된다. 수평 자세로 정지 시 ω=0 deg/s이다. 10초간 50°가 기울어진다면 평균 각속도는 ω=5deg/s이다. 다시 기울어짐을 멈춰 50°를 유지한다면 ω=0 deg/s로 돌아온다.
물체가 회전하고 있는 좌표계 위에 존재할 경우, 직선 방향으로 운동하도록 힘을 가했을 때 좌표계로 인하여 직선 운동이 아닌 회전을 한다. 이것이 코리올리 효과(Coriolis effect)이며, 코리올리 효과를 유발하는 힘을 코리올리 힘(Coriolis force)(전향력(轉向力): 직선 운동의 방향 바꿈)이라 한다. 즉, ‘회전체의 표면 위에서 운동하는 물체에 대해 운동 속도 방향에 수직으로 작용하는 힘’ 또는 ‘회전하는 계에서 느껴지는 관성력’으로 이해할 수 있다. 지구의 자전, 세면대 배수구에서 물의 회전 등이 그 예시이다
자이로스코프는 종류에 따라 정확도와 크기, 출력 형태가 다양한데, 일반적으로 MEMS 자이로스코프가 있으며, 대부분 회전 각속도를 측정한다.
샘플링 시간(Δt)마다 회전 각속도를 측정한다면 (회전각) = (각속도 측정값) X (샘플링 시간)
로 회전각을 구할 수 있다.
이 원리에 입각해 각속도를 통해 최종적으로 물체가 기울어진 각도를 구하려면, 각속도를 측정의 전체 시간에 걸쳐 적분을 해야 한다. (가속도의 경우에도 마찬가지이다. 가속도를 적분해 속도의 변화량을 구한다)
자이로스코프는 정지할 때 혹은 아주 짧은 시간에 움직일 때는 오차가 없다. 그러나 움직일 때는 측정되는 각속도가 노이즈 등에 의해 에러가 발생하는데, 이 오차가 적분 시에 누적된다면 시간이 지날수록 누적오차가 매우 커져 물체가 기울어진 각도 값이 실제와는 차이가 난다. 이 오차의 보상을 위해 지자기 센서를 활용한다.
또한 자이로스코프는 온도에 따라 측정값이 변화하기도 하는데, 하여 일부 IMU에서는 온도 센서를 추가적으로 내장하여 이용해 오차를 보상하기도 한다.
지자기 센서는 지구 자기장의 세기(자기선속)와 방향(자북을 기준으로 틀어진 각도)을 측정하는 센서이다. 물체가 바라보는 방향이 북쪽 방향과 정렬되어 지구의 자기력선과 일치할 때 센서의 측정값이 최댓값·최솟값을 가진다. 따라서 지자기 센서는 주변 전기장, 자기장의 유무에 따라 측정값이 달라질 수도 있으므로 주의해야 한다.
나침반이 측정하는 북쪽, 자기장이 가리키는 북쪽(자북, Magnetic North)은 실제 지구의 북쪽(진북, True North)과 일치하지 않는다. 진북과 자북 축 사이의 각도를 편각(Declination)이라 한다. 자북과 진북은 위도에 따라 일정하게 선형으로 변하므로, 물체의 현재 위도를 알면 편각은 보정이 가능하다.
IMU는 가속도 센서와 자이로스코프(각속도 센서)을 가지므로, 기본적으로 3축의 가속도계와 3축의 각속도계를 가진다. 위에서 살펴본 바와 같이 자이로스코프를 이용해 물체의 자세를 알아내고 물체가 움직임에 따라 자세를 업데이트하려면, 초기 물체의 Roll과 Pitch, Yaw 각에 자이로스코프에서 계산된 회전각을 누적(적분)해야 한다.
6자유도(Six Degrees of Freedom, 6DOF)란 여섯 개의 운동 방향을 말하며, 로봇공학이나 비행기, 선박 등에서 사용되는 개념이다. 위치(Position)에 대하여 x, y, z축 각각으로 선형 이동하는 Sway, Surge, Heave가 있고, 회전(기울기, Orientation)에 대하여 x, y, z축 각각을 기준으로 회전하는 Pitch, Roll, Yaw가 있다. 특히 Yaw의 경우 차량, 비행기, 선박의 heading을 말한다
앞서 본 바와 같이 Roll과 Pitch는 가속도 센서에서 간단히 구할 수 있으며 시간에 따라 적분할 필요가 없다. 물론 온도나 타 잡음에 대한 오차가 있긴 하지만, 역시나 시간에 대한 값은 아니다.
반면 Yaw는 가속도 센서로 계산할 수 없어 자이로스코프에서 적분을 통해서만 구할 수 있으며 이 과정에서 누적오차가 발생한다. 이 때문에 지자기 센서를 융합해 사용하고 칼만 필터(Kalman Filter)로 보정하기도 한다.
자이로스코프는 정밀한 센서의 경우 금액이 매우 높기 때문에 타 센서와 융합해 사용하는 경우가 일반적이다. 자이로스코프(각속도 센서)는 빠른 시간 내에 변위값을 측정하기 유리하나 적분 오차가 발생하고, 가속도 센서와 지자기 센서는 느리지만 절대각을 구할 수 있다. 따라서 가속도 센서 및 지자기 센서와 자이로스코프는 서로 보완(Complementary) 관계라 할 수 있다. 센서 값의 융합 과정에서 칼만 필터(Kalman Filter) 혹은 상호보완필터(상보필터, Complementary Filter)를 사용한다.
IMU는 물체에 고정되어 있으므로 동체 좌표계(Body Frame)를 이용한다. IMU의 출력값을 가공하기 위해서는 항법 좌표계(Navigation Frame) 형태로 변환해야 한다. 이 과정에서 방향코사인행렬(DCM, Direction Cosine Matrix) 등을 사용할 수 있다. 또한 자세를 업데이트하는 방법에는 오일러각, 쿼터니언 등을 사용하는 경우도 있다. (참고: 오일러각과 쿼터니언의 변환 이유)
위에서 언급한 바와 같이, 지자기 센서는 자기력선 위에서 최대/최솟값을 가지므로, 이론적으로는 일정한 속도로 평면에서 회전하면 sin 형태의 그래프를 가져야 한다. 좌측 사진을 보면 데이터가 일정하게 반복되는 것은 맞지만, 최댓값(약 60)과 최솟값(약 -20)이 서로 절댓값 크기가 다르다. 따라서 예를 들어보자면 북쪽으로 30도 회전했을 때와 남쪽으로 30도 회전했을 때의 자기장의 세기가 다르게 측정되는 것이다.
우측 사진은 좌측의 sin 그래프 데이터를 다시 그린 것으로, 지자기 센서의 (x, y)를 x-y축으로 나타낸 데이터이다. 이상적으로는 (0,0) 중심으로 데이터 분포가 상하좌우 대칭이어야 한다. 그러나 지자기 센서의 오차로 인해 원점에서 벗어난 타원형 형태를 띄고 있다. 이때 원점이 틀어진 부분을 Hard Iron Calibration, 타원이 찌그러진 것을 Soft Iron Calibration을 통해 보정해주어 올바른 Heading(방위)을 구할 수 있다.
원점 틀어짐은 자기장을 만들어내는 물체인 자석, 전선(Hard Iron) 등이 원인이다. Hard Iron Calibration은 센서 주변에서 주위의 자기장 등 데이터를 측정하고 분석하여, 주변 자기장의 세기로 인한 변화만큼 보정하여 제거한다. 구체적으로는, 찌그러진 타원의 원점을 찾아 실제 좌표계 원점인 (0, 0)으로 offset 이동시켜야 한다. x, y, z축의 데이터 최댓값과 최솟값을 각각 구해 평균을 낸 뒤, 측정치에서 빼줌으로써 offset 시킬 수 있다.
타원 찌그러짐은 지자기 센서의 주변에 철판, 구리 등 전도성 물질(Soft Iron)이 센서의 주변에 있을 때 자기장(자기력선)이 왜곡되기 때문에 발생한다. 자기력선은 금속을 통과하거나 끊어지지 않으므로 왜곡의 형태로 변형이 된다. 그렇기 때문에 위 그래프에서 자기 데이터의 원점을 변화시키지 않고 형태만 변화되는 것이다. Soft Iron Calibration은 Hard Iron Calibration보다 복잡하다. 보통 타원의 장축(긴 반경)과 단축(짧은 반경)의 비율을 scale factor로 삼아, 장축에서는 길이를 줄여주고 단축에서는 늘려주는 식으로 측정값에 반영하여 타원을 상하좌우 대칭의 원으로 만들어간다.
ARS(Attitude Reference System)은 IMU과 더불어 내부적으로 센서 혼합 알고리즘(Complimentary Filter 등) 등을 통해 Roll, Pitch, 그리고 초기 자세로부터 회전한 상대적 Yaw 각도까지 출력할 수 있는 장치이다.
AHRS(Attitude Reference Heading System)은 ARS에 추가적으로 지자기센서를 장착하거나, 정밀한 자이로스코프를 통해 절대적 Yaw를 출력할 수 있는 장치이다. 지자기센서를 갖춘다면 총 9개의 축을 가지게 되는 것이다. IMU의 가속도계, 각속도계, 지자기계에서 측정한 값을 바탕으로 MCU에서 Roll, Pitch, Yaw를 계산하고 이를 칼만 필터 등을 이용해 처리한 뒤 출력한다.
INS(관성항법장치, Inertial Navigation System)은 간단하게 말하면 현재 물체의 위치를 감지하는 시스템이다. AHRS에 추가적으로 정밀한 가속도계가 있고, 초기 위치로부터 변화한 위치를 가속도계 측정치에 중력을 보상하고 두 번 적분하여 계산하는 등의 정밀한 항법 알고리즘을 내장한다. 고가이며, 항공기나 잠수정, 유도탄, 미사일 등 군무기에 탑재한다.
GPS의 정확도를 향상시키기 위해 IMU와의 센서 융합(Sensor Fusion)을 하기도 한다. IMU에서 3축의 가속도 센서로부터 연속적인 위치 데이터를 제공하면, GPS에서는 절대적 위치 데이터를 통해 이를 보정하는 방식이다.
위에서 밝힌 바와 같이, 이 과정에서 IMU의 출력은 내비게이션 알고리즘을 이용해 동체 좌표계에서 항법 좌표계로 변환하고, IMU의 누적 오차를 상쇄하기 위해 칼만 필터를 이용한다. GPS와 IMU는 데이터 형식이 다른데, 이때 방향코사인행렬(DCM, Direction Cosine Matrix)를 이용해 동기화를 한다