본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

IMU MEMS 센서(Gyroscope + Accelerometer)

by 베니스상인 2019. 10. 27.

 

MEMS 란?

MEMS(Micro Electro Mechanical Systems) 라고 한다. 센서의 기술이 발달함에 따라 기계식 센서를 실리콘다이와 같은 반도체 안에 구현한 초소형 센서들을 말한다.

 

MEMS 중 주변에서 쉽게 사용할 수 있는 것이 드론에서 사용하는 IMU(Inertial Measurement Unit: 관성측정장치) 센서이다.  IMU 센서에는 보통 가속도계(Accelerometer), 각속도계(Gyroscope), 지자계(Magnetometer)가 한 센서에 일체형으로 들어가 있다.

 

 

가속도계는 직선운동에 대한 가속도값을 측정하고, 각속도계는 회전운동에 대한 각도 변화율을 계산하여 자세를 측정하는 용도로 사용된다.

 

 

 

아래 링크는 IMU MEMS 센서를 쉽게 설명한 자료이다. 센서의 물리적인 동작원리가 포함되어 있으므로 참고하기 바란다. 

 

https://howtomechatronics.com/how-it-works/electrical-engineering/mems-accelerometer-gyrocope-magnetometer-arduino/

 

MEMS Accelerometer Gyroscope Magnetometer & Arduino

In this article we will learn how the MEMS accelerometer, gyroscope and magnetometer work and how to use them with the Arduino Board. MEMS accelerometer...

howtomechatronics.com

 

 

 

 

 

IMU MEMS 센서의 종류

 

http://www.starlino.com/imu_guide.html

 

A Guide To using IMU (Accelerometer and Gyroscope Devices) in Embedded Applications. – Starlino Electronics

 

www.starlino.com

 

아래부터는 위 사이트의 설명을 이해하기 쉽도록 요약하는 것으로 정리한다.

 

 

 

1. Accelerometer

 

1) 개요

 

- 직선운동에 대한 가속도의 값을 측정하는 센서이다.

- 3축으로 되어 있으며 가속도 센서의 각 축의 방향은 아래 그림과 같다.  오른손 법칙에서 검지(x축), 중지(y축),  엄지(z축)으로 나타낼 수 있다. 빨간색으로 표시된 부분이 + 방향이다.

 

 

 

큐브상자에 공이 있다고 가정하자.

우주와 같이 중력이 작동하지 않는 공간에서는 3축 모두 0의 값을 가진다.

 

지구에서는 1g(9.8㎨) 만큼의 중력이 바닦을 향하고 있으므로 Z축 방향으로 -1g의 값을 가지게 된다.

 

 

갑자기 상자를 X축 방향으로 1g 만큼 당기게 되면 관성에 의해서 당기는 쪽과 반대방향으로 1g만큼의 힘을 받게 된다. 

 

상자를 45도 만큼 기울이게 되면 X와 Z축 방향으로 공이 벽에 닿으면서 각각 0.7g(1/√2)만큼의 힘을 받게 된다. 

 

 

 

Accelerometer 내부에는 이 공의 역할을 담당하는 금속성 센서가 들어 있고 센서의 기울기에 따라 3축 가속도 값을 측정한다.

 

 

2) 가속도값 계산

 

Accelerometer의 측정값을 계산하기 위해 다음 그림과 같이 정의한다. 

 

- Vector R: Accelerometer가 측정할 가속도 벡터

- Rx : Vector R을 X축에 투영한 Vector

- Ry : Vector R을 Y축에 투영한 Vector

- Rz : Vector R을 Z축에 투영한 Vector  

 

 

 

R^2 = Rx^2 + Ry^2 + Rz^2   

따라서 Vector R은 Rx, Ry, Rz의 조합으로 구할 수 있다.

 

그럼 Rx, Ry, Rz는 어떻게 구하는가?

앞에서 살펴본 것과 같이 Accelerometer는 각 축의 가속도 크기를 측정해주므로 각 축의 가속도값을 알면 Vector R의 가속도 값을 알 수 있는 것이다.

 

Rx(g) = (AdcRx * ADC_LSB - V0 ) / Sensitivity

Ry(g) = (AdcRy * ADC_LSB - V0 ) / Sensitivity

Rz(g) = (AdcRz * ADC_LSB - V0 ) / Sensitivity

 

 

AdcRx는 AD 변환된 각 축의 가속도 출력값이다. 이 값을 ADC_LSB곱하면 Vref에 대한 Voltage 레벨이 되고 거기서 V0를 뺀 값을 Sensitivity로 나누어주면 가속도의 단위값으로 변환이 가능하다. Sensitity는 V/g 의 민감도이다.

 

 

3) 각도값 계산

 

3축 Accelerometer를 이용하여 각도값을 계산할 수 있다.

 

Vector R과 Rx, Ry, Rx사이의 각도값을 DCT(Direc Cosine Transform)을 이용하여 표현하면 다음과 같이 나타낼 수 있다.

 

Rx/R = cos(Axr)

Ry/R = cos(Ayr)

Rz/R = cos(Azr)

 

 

각 축의 각도는 Vector R을 기준으로 각 축으로 프로젝션된 값 Rx, Ry, Rz값의 arccos값이다. 

Rx, Ry, Rz는 앞에서 구했고, R의 값도 Rx, Ry, Rz로 구할 수 있으니 각속도도 계산이 가능하다.

 

Axr = arccos(Rx/R)

Ayr = arccos(Ry/R)

Azr = arccos(Rz/R)

 

 

 

 

2. Gyroscope

 

1) 개요

 

- 각도 변화율을 이용하여 각속도를 측정하는 센서이다.

- 각속도를 알면 회전하는 물체의 각도를 알 수 있으므로 자세측정 센서의 역할을 한다. 

- 회전운동을 측정하기 위한 것으로 처음에는 디스크 기반의 기계식으로 만들어졌다.

- 주로 이동체의 항법장치로 사용되며 Roll, Pitch, Yaw의 3축으로 구성되어 있다. 앞 서 설명한 Accelerometer의 오른손 좌표계를 Roll 방향으로 뒤집으면 동일한 좌표계가 된다.

 

 

 

 

 

 

 

2) 각도 변화율 계산

 

 

아래 좌표에서 R을 X-Z평면에 프로젝션한 것을 Rxz, Y-Z평면에 프로젝션한 것을 Ryz, X-Y평면에 프로젝션한 것을 Rxy라 한다.

 

Z축과 Rxz사이의 각도를 Axz, Z축과 Ryz사이의 각도를 Ayz라 하자. 

 

 

Y축을 중심으로 회전한다고 가정하자. 그러면 X축과 Z축이 회전하게 된다.

 

Z축 중심으로 Rxz의 각도(Axz)의 변화가 생기는데 t0에서 t1시간까지의 각도 변화는 아래와 같이 계산할 수 있다.

 

Axz_rate = (Axz1 - Axz0) / (t1-t0)

 

Gyzo는 각도변화율을 ADC값으로 출력해주므로 deg/sec의 단위로 변환하면 다음과 같이 계산할 수 있다.

 

Axz_rate = (GyroXZ * ADC_LSB - Vo_rate)/Sensitivity

Ayz_rate = (GyroYZ * ADC_LSB - Vo_rate)/Sensitivity

Axy_rate = (GyroXY * ADC_LSB - Vo_rate)/Sensitivity

 

 

GyroXZ는 Y축의 회전각도 변화, GyroYZ는 X축의 회전각도 변화, GyroXY는 Z축의 회전각도 변화를 나타낸다. t1-t0sms ADC의 sample rate이므로 sample rate를 나누어 주면 각도 변화율이 된다. 이 값을 전압값으로 환산하고 다시 각도값으로 환산하면 각도 변화율을 구할 수 있다.

 

 

V0_rate는 각속도 변화가 없을 때 출력되는 전압값이다. Sensitivity는 mV/dps 즉, 1초당 회전각도에 대한 전압값을 mV로 표현한 출력감도이다.

 

 

다음번에는 실제 IMU MEMS 센서를 사용해보고 각도 및 가속도값을 확인해볼 예정이다.

728x90

댓글