자이로스코프는 세 축에 대한 기기의 회전 각속도를 측정하는 센서입니다. 선형 가속도를 측정하는 가속도 계와 달리, 자이로스코프는 공간의 회전과 방향을 감지합니다. STMicroelectronics, 2024에 따르면, 현대 MEMS 자이로스코프는 초당 0.01도까지의 정확도를 달성하여 네비게이션, 이미지 안정화 그리고 AR 애플리케이션에서 사용될 수 있습니다.
주요 요점
스마트폰의 자이로스코프는 기기의 회전 각속도를 측정하는 미세 전자기계 센서 (MEMS)입니다. 항공에서 사용되는 기계식 자이로스코프와 달리, MEMS 자이로스코프는 휴대폰의 메인보드에 장치된 2×2×1mm 실리콘 칩입니다.
현대 스마트폰은 진동형인 MEMS 자이로스코프 (튜닝-포크 및 링-디자인)만을 사용합니다. 회전 부분이 없어 최대 10년 간 지속 작동이 가능합니다. 주요 제조사는 Bosch Sensortec (BMI 시리즈), STMicroelectronics (L3G, A3G 시리즈), InvenSense (ICM 시리즈) 입니다.
일반적인 MEMS 자이로스코프는 ±125에서 ±2000 °/s까지의 측정 범위, 최대 32kHz의 샘플링 속도, 그리고 3~6mA의 전류 소모를 가집니다. Bosch Sensortec BMI160 (2023)에 따르면, ±125 °/s 범위에서 잡음 수준은 0.007 °/s/√Hz이며, 정확한 회전 추적에 붙으로 충분합니다.
| 매개변수 | 값 |
|---|---|
| 기술 | MEMS (진동형) |
| 범위 | ±125 — ±2000 °/s |
| 전력 소모 | 3~6 mA |
| 크기 | 2×2×1 mm |
| 잡음 | 0.007 °/s/√Hz |
MEMS 자이로스코프의 작동 원리는 코리올리스 효과에 기반합니다. 칩 내부에는 특정 주파수 (15~30kHz)로 진동하는 실리콨 질량이 있습니다. 기기가 회전하면 코리올리스 힘이 진동하는 질량에 작용하며, 이는 각속도에 비례합니다.
MEMS 자이로스코프의 구성 요소는 진동을 만드는 구동 전극과 변위를 감지하는 센싱 전극입니다. 연구 논문 “MEMS Gyroscopes for Consumer Electronics” (IEEE, 2023)에 따르면, 일반적인 설계는 중앙 질량 주위에 대칭으로 배치된 4~8개의 빛 구조를 포함합니다.
현대 자이로스코프는 I²C 또는 SPI 버스를 통해 데이터를 전송합니다. 스마트폰 컨트롤러는 3개 축 (X: Pitch, Y: Roll, Z: Yaw)의 각속도 값을 수신합니다. 내장된 ADC가 정룡 신호를 디지털 값(16~24비트 해상도)으로 변환합니다. 게임 모드에서 업데이트 율은 400Hz까지 달합니다.
가속도 계는 선형 가속도——축에 따른 물체의 속도 변화——를 측정합니다. 자이로스코프는 회전——각도의 변화율——을 측정합니다. 이러한 센서는 상호 보완적입니다. 가속도 계는 중력 벡터에 대한 방향을 제공하지만 기울기와 직선 운동을 구별할 수 없습니다. 자이로스코프는 중력과 무관하게 회전을 추적할 수 있지만 드리프트의 영향을 받습니다.
실제 애플리케이션에서는 Sensor Fusion——자이로스코프, 가속도 계, 지감의 데이터를 결합하는 알고리즘——이 사용됩니다. Mahony 필터 또는 보완 필터는 정지 상태에서 2도, 동적 상태에서 5도의 정확도로 방향 케어터니언을 계산합니다. Android은 프레임워크 레벨에서 가상 센서 TYPE_ROTATION_VECTOR를 제공합니다.
val rotationVector = sensorManager
.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)
val callback = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
val quat = FloatArray(4)
SensorManager.getQuaternionFromVector(quat, event.values)
// quat[0..3] — 방향 쿼터니언
}
}
Android는 두 가지 유형의 자이로스코프 센서를 제공합니다: TYPE_GYROSCOPE (교정된, 드리프트 없음) 그리고 TYPE_GYROSCOPE_UNCALIBRATED (드리프트 추정이 포함된 원시 데이터)입니다. SensorManager.getDefaultSensor()를 통해 액세스할 수 있습니다. 데이터는 rad/s (라디언 마다 초)로 반환됩니다.
자이로스코프에 대한 리스너 등록에는 지연 시간을 지정해야 합니다: 게임용 SENSOR_DELAY_GAME (20ms), UI용 SENSOR_DELAY_UI (67ms), 최대 주파수용 SENSOR_DELAY_FASTEST (0ms)입니다. onPause()에서 등록을 해지하지 않으면 배터리가 2~3시간 만에 방전됩니다.
class GyroActivity : AppCompatActivity() {
private lateinit var sensorManager: SensorManager
private var gyroscope: Sensor? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
gyroscope = sensorManager.getDefaultSensor(
Sensor.TYPE_GYROSCOPE
)
}
override fun onResume() {
super.onResume()
gyroscope?.let { sensor ->
sensorManager.registerListener(
this, sensor, SensorManager.SENSOR_DELAY_GAME
)
}
}
}
event.values[0..2]의 원시 데이터는 X, Y, Z 각축의 각속도에 해당합니다. 회전각을 얻려면 각속도를 시간에 대해 적분해야 합니다. 50Hz에서 적분 오차는 분당 약 1도로, 게임에서는 허용되지만 보정 없이 네비게이션에서는 불충분합니다.
영점 드리프트(바이어스 드리프트)는 MEMS 자이로스코프의 주요 문제점입니다. 정지 상태에서도 센서가 0이 아닌 각속도 (0.1~2 °/s)를 나타낼 수 있습니다. 원인은 실리콨 구조의 온도 변화와 기계적 응력입니다. 제조사는 하드웨어 레벨에서 이 효과를 보상합니다.
Android 시스템은 첫 부팅 시 또는 온도가 변화할 때 자동으로 자이로스코프를 교정합니다. 교정 과정은 10~30초가 걸리며 사용자가 아무것도 할 필요가 없습니다——그냥 휴대폰을 고정된 표면에 놓으면 됩니다. calibrate() 메소드는 모든 기기에서 사용할 수 있는 것은 아닙니다. 강제 교정에는 TYPE_GYROSCOPE_UNCALIBRATED를 사용하여 event.values[3..5]를 통해 바이어스 옥셋을 획득합니다.
private fun handleUncalibratedGyro(event: SensorEvent) {
val rawX = event.values[0] // 교정 안된 rad/s
val biasX = event.values[3] // X축 바이어스
val calibratedX = rawX - biasX
applyCalibrationToFusion(
calibratedX,
event.values[1] - event.values[4],
event.values[2] - event.values[5]
)
}
자이로스코프는 카메라 안정화부터 Google Cardboard같은 VR 헤드셋까지 수십 가지 시나리오에서 사용됩니다. Apple의 ARKit과 Google의 ARCore는 머리 회전 추적을 위한 기본 센서로 자이로스코프를 사용합니다. Apple ARKit Technical Specification (2024)에 따르면, 가속도 계와 결합된 자이로스코프는 최대 0.5도의 추적 정확도를 제공합니다.
소비자 전자 제품 이외에도 자이로스코프는 로봇과 UAV에서 사용됩니다. Android Things와 ROS (Robot Operating System)에 기반한 모바일 로봇은 MEMS 자이로스코프를 사용하여 운동 안정화와 주행 계산을 수행합니다. IEEE 연구 “MEMS IMU in Robotics” (2024)에 따르면, 자이로스코프가 장착된 모바일 로봇의 위치 정확도는 바퀴 주행 계산만 사용했을 때보다 3~5배 높으며, 특히 미꼬러운 표면에서 효과가 두드럽니다. 일반 용 드론에서는 기압계와 결합된 자이로스코프가 최대 10m/s의 바람에서 0.5m의 정확도로 비행 높이를 유지합니다.
AR 애플리케이션에서 자이로스코프는 현실 세계에 대한 가상 물체의 위치를 결정하는 기본 센서입니다. Google ARCore는 1000Hz (내부 샘플링을 통해 API 율과 무관하게) 기기 운동 추적에 자이로스코프를 사용합니다. Apple의 ARKit은 운동 중 0.5도의 위치 정확도를 달성하여 현실 장면에 가상 가구나 게임 캐릭터를 오버레이하기 충분합니다.
차기 6축 IMU(InvenSense ICM-42688, 2024)의 새로운 세대는 저전력 모드에서 0.45mA의 전력 소모로 단일 칩에 자이로스코프와 가속도 계를 통합합니다. 모바일 기기용 그레디오미터와 원자 자이로스코프의 개발은 아직 실험실 프로토타입 단계입니다. 0.001 °/s의 정확도를 가진 상용 급 MEMS 자이로스코프는 2028년까지 출시될 것으로 예상됩니다.
자주 묻는 질문
자이로스코프는 공간에서 기기의 회전과 방향을 감지합니다. 이것이 없으면 VR 모드, 기울기에 따른 자동 회전, 동영상 안정화, AR 애플리케이션은 불가능합니다. 현대 휴대폰은 자이로스코프 없이는 작동할 수 없습니다.
가속도 계는 선형 가속도(중력에 대한 운동과 기울기)를 측정합니다. 자이로스코프는 각속도(회전)를 측정합니다. 가속도 계는 기기의 회전과 직선 운동을 구별할 수 없지만, 자이로스코프가 이 문제를 해결합니다.
Android는 자동 교정을 사용합니다. 수동 교정을 위해서는 “GPS Status & Toolbox”와 같은 앱을 다운로드하여 휴대폰을 평한 곡면에 놓고 TYPE_GYROSCOPE_UNCALIBRATED를 통해 교정하십시오.
이것은 영점 드리프트로, MEMS 센서의 자연스러운 특성입니다. 비싼 자이로스코프도 정지 상태에서 0.1~2 °/s의 옥셋이 있습니다. 교정은 이 옥셋을 빼집니다. 드리프트가 5 °/s를 초과하면 센서가 고장된 것입니다.
SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE)를 사용하고 SensorEventListener를 등록하십시오. 데이터는 3개 축에서 rad/s로 수신됩니다. 게임에는 SENSOR_DELAY_GAME (20ms)를, 백그라운드에는 SENSOR_DELAY_UI (67ms)를 사용하십시오.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.