IMU센서 - cchamchi/cansat GitHub Wiki
IMU 센서란
IMU(Inertial Measurement Unit)은 직역하면 관성측정장치 입니다. 또한 IMU는 자이로스코프 / 가속도계 / 지자기센서로 구성된 센서를 뜻합니다.종류에 따라 자이로스코프 가속도계만 있는 6축센서, 자이로스코프와 가속도계 지자기센서 까지 포함한 9축센서도 있습니다.당연히 9축이 지자기센서 기능까지 포함되니 많으니 비싸답니다. ㅠ.ㅠ 각 센서는 관성을 이용해 물리량을 측정하는데, 이 장치로 부터 이용할 수 있는 물리량은 아래와 같습니다.
자이로스코프는 각속도(rad/s)를 측정하고 시간당 몇도(degree)를 회전했는지가 필요할 때 사용합니다. 가속도계는 가속도(m/s^2)를 측정하고 초기값을 계산할때 중력 가속도를 분해하여 얼마나 기울어졌는지를 측정하는데 사용합니다. 또한 속도와 이동거리 역시 가속도를 적분해서 사용할 수 있습니다. 지자기센서는 지자기(magnet)를 측정합니다. 자북을 기준으로 자기선속의 세기를 측정하여 자북을 기준으로 얼마나 틀어졌는지를 측정합니다.
아래 동영상을 보시면 자세한 동작원리를 배울 수 있습니다.
https://www.youtube.com/watch?v=eqZgxR6eRjo
가속도 센서
[출처] http://mechaworld.tistory.com/11
가속도 센서는 Accelerometer 로 말 그대로 가속도를 측정하는 센서입니다. 가속도 센서가 3축이라 함은 센서가 3차원에서 움직일 때 x축, y축, z축 방향의 가속도를 측정할 수 있다는 의미입니다. 기본적으로 가속도 센서는 가만히 정지한 상태에서 중력 가속도를 감지하기 때문에 z축 방향으로 -g 만큼의 값을 출력합니다. 그러면 이러한 가속도 센서를 이용해서 어떻게 자세, 즉 기울어진 각도를 측정할 수 있을까요?
먼저 움직이는 물체와 견고하게 센서가 장착되어 있는 상태에서 시작합니다. 센서의 초기 출력은 모두 0이라고 합시다. 이 상태에서 물체를 y축 방향으로 45도 기울여 보면, 기울어진 상태에서 z축 방향과 x축 방향으로 동일한 값의 가속도가 측정됩니다. 아래 그림 보시면 쉽게 이해가 되실텐데 중력방향으로 g 가 측정되어야 하므로 0.707g 만큼 z축과 x축 방향으로 값이 출력됩니다. 결과적으로는 z축과 x축 값의 비율을 atan 에 넣으면 그 결과값이 45도, 즉 기울어진 값을 알수 있습니다.

간단히 가속도 센서를 이용해서 각도를 측정하는 방법은 위와 같습니다. 하지만 간단한 만큼 문제점이 있습니다. 정지된 상태에서 물체가 움직이기 시작하면 그때 측정되는 값은 기울기를 나타내지 않을 수 있습니다. 예를 들어 45도 기울어진 위와 같은 상태에서 오른쪽으로 가속을 해본다고 가정해 보죠. 그러면 x축과 z축에서 측정되는 가속도는 변하게 됩니다. 한쪽값이 더 커지겠죠? 그러면 이 상태에서 atan 에 대입한다고 하더라도 45도 값은 나오지 않게 됩니다. 즉 움직임이 생겨서 어느 한쪽 방향으로 가속도가 생기게 되면 결과적으로 이 값이 중력에 의해 측정되는 가속도값과 구분이 안되게 됩니다.
정지하지 않은 움직임 상태에서는 가속도 센서만으로 기울기 값을 측정할 수가 없습니다.
자이로 센서
가속도 센서가 X,Y,Z 방향으로의 진행정도를 알수 있었다면, 자이로는 회전의 변화량 즉 각속도를 측정하는 센서입니다. 위 사진을 보는 것처럼 비행기 제어에 가장 많이 쓰이는데, X 축으로의 회전을 Roll, Y축은 Pitch, Z축은 Yaw 라고 부릅니다.

자이로 센서는 위 사진 처럼 중력을 이용하여 코리올리힘을 검출하는데 중력이 가해질때 진동속도가 변화하는 것을 각속도로 계산하여 질량과 진동속도를 통해 값을 측정합니다.
각속도는 시간당 회전하는 각도를 의미하죠? 다음과 같은 예를 들어서 자이로 센서값이 어떻게 측정되는지 알아보겠습니다.
-
수평한 자세를 유지하고 있는 상태를 가정합시다. 이때는 정지 상태이니 당연히 각속도도 0도/sec를 나타낼 것입니다.
-
이 물체가 10초 동안 50도만큼 기울어진다고 봅시다. 이 10초동안은 0이 아닌 각속도 값을 가지게 됩니다. 10초 동안의 평균 각속도는 5도/sec 가 될것입니다.
-
기울어지는 동작을 한 후 다시 멈춰서 50도를 유지한다고 봅시다. 이때는 다시 각속도가 0도/sec 가 됩니다.
1번 2번 3번 과정을 거치면서 각속도는 0 -> 5 -> 0으로 바뀌었습니다. 그런데 각도는 어떻게 바뀌었나요? 0도에서 점차 증가해서 50도가 되었습니다. 각속도에서 각도를 구하려면 전체 시간에 해당하는 만큼 적분을 해야합니다. 자이로 센서는 이와 같이 각속도를 출력으로 내보내기 때문에 전체 시간동안 이 각속도를 적분하면 기울어진 각도를 계산할 수 있습니다. 그런데 자이로 센서에도 문제점은 존재합니다. 적분의 문제점이지요. 센서에서 측정되는 각속도는 노이즈가 생기든 어떠한 이유에 의해 측정값에 에러가 계속 생기는데, 이 오차가 적분시에는 누적이 되어서 최종 값이 드리프트 되는 현상이 생깁니다.
자이로 센서에서 측정되는 각속도를 이용하면 시간이 지날수록 각도는 오차가 생겨 기울기 값이 변하게 됩니다.
지자기 센서를 이용하여 오차값을 보상하게 됩니다.