Гіроскоп — це датчик, що вимірює кутову швидкість обертання пристрою навколо трьох осей. На відміну від акселерометра, що фіксує лінійне прискорення, гіроскоп визначає поворот та орієнтацію у просторі. За даними STMicroelectronics, 2024, сучасні MEMS-гіроскопи забезпечують точність до 0,01 градуса на секунду, що дозволяє використовувати їх у навігації, стабілізації зображень та AR-додатках.
Головне
Гіроскоп у смартфоні — це мікроелектромеханічний сенсор (MEMS), що вимірює кутову швидкість обертання пристрою. На відміну від механічних гіроскопів у авіації, MEMS-гіроскоп являє собою кремнієвий чип розміром 2×2×1 мм, встановлений на материнській платі телефона.
Сучасні смартфони використовують виключно MEMS-гіроскопи вібраційного типу — tuning-fork та ring-design. Вони не мають обертових частин, що забезпечує довговічність до 10 років безперервної роботи. Провідні виробники — Bosch Sensortec (серія BMI), STMicroelectronics (серії L3G, A3G) та InvenSense (серія ICM).
Типовий MEMS-гіроскоп має діапазон вимірювання від ±125 до ±2000 °/с, частоту дискретизації до 32 кГц та споживання струму 3–6 мА. За даними Bosch Sensortec BMI160 (2023), рівень шуму становить 0,007 °/с/√Гц при діапазоні ±125 °/с — цього достатьно для точного відстеження поворотів.
| Параметр | Значення |
|---|---|
| Технологія | MEMS (вібраційний) |
| Діапазон | ±125 — ±2000 °/с |
| Споживання | 3–6 мА |
| Розмір | 2×2×1 мм |
| Шум | 0,007 °/с/√Гц |
Принцип дії MEMS-гіроскопа грунтується на ефекті Коріоліса. Всередині чипа розташована кремнієва маса, яка коливається з певною частотою (15–30 кГц). Коли пристрій повертається, на коливну масу діє сила Коріоліса, пропорційна кутовій швидкості.
Ключові елементи MEMS-гіроскопа — це привідні електроди, що створюють коливання, та чутливі електроди, що фіксують зміщення. За даними дослідницької роботи “MEMS Gyroscopes for Consumer Electronics” (IEEE, 2023), типова конструкція включає 4—8 гребінчастих структур, розташованих симетрично навколо центральної маси.
Сучасні гіроскопи передають дані через шини I²C або SPI. Контролер смартфона отримує трьохосьові значення кутової швидкості — по осях X (Pitch), Y (Roll) та Z (Yaw). Вбудований ADC перетворює ємнісний сигнал у цифрові значення з розрядністю 16–24 біт. Частота оновлення у ігрових режимах сягає 400 Гц.
Акселерометр вимірює лінійне прискорення — зміну швидкості об’єкта вздовж осей. Гіроскоп вимірює обертання — швидкість зміни кута. Ці датчики комплементарні: акселерометр дає орієнтацію відносно вектора гравітації, але не відрізняє нахил від лінійного руху. Гіроскоп відстежує повороти незалежно від гравітації, але підлягає дрифту.
У реальних додатках використовується Sensor Fusion — алгоритм, що об’єднує дані гіроскопа, акселерометра та магнітометра. Фільтр Махоні або комплементарний фільтр обчислює кватерніони орієнтації з точністю до 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(). Дані повертаються у рад/с — радіанах на секунду.
Реєстрація слухача гіроскопа потребує зазначення затримки: SENSOR_DELAY_GAME (20 мс) для ігор, SENSOR_DELAY_UI (67 мс) для інтерфейсу, SENSOR_DELAY_FASTEST (0 мс) для максимальної частоти. Без відміни реєстрації в 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. Для отримання кута повороту необхідно інтегрувати кутову швидкість за часом. При частоті 50 Гц похибка інтегрування становить близько 1 градуса на хвилину — прийнятно для ігор, але недостатньо для навігації без корекції.
Дрифт нуля (bias drift) — основна проблема MEMS-гіроскопів. Навіть у нерухомому стані сенсор може показувати ненульову кутову швидкість (0,1–2 °/с). Причина — температурні зміни та механічні напруги в кремнієвій структурі. Виробники компенсують цей ефект на апаратному рівні.
Система Android автоматично калібрує гіроскоп при першому вмиканні або при зміні температури. Процес калібровки триває 10–30 секунд і не потребує участі користувача — достатьо покласти телефон на нерухому поверхню. Метод calibrate() доступний не на всіх пристроях. Для примусової калібровки використовується TYPE_GYROSCOPE_UNCALIBRATED з отриманням зміщення bias через event.values[3..5].
private fun handleUncalibratedGyro(event: SensorEvent) {
val rawX = event.values[0] // рад/с без калібровки
val biasX = event.values[3] // зміщення по X
val calibratedX = rawX - biasX
applyCalibrationToFusion(
calibratedX,
event.values[1] - event.values[4],
event.values[2] - event.values[5]
)
}
Гіроскоп використовується у десятках сценаріїв — від стабілізації камери до VR-шоломів Google Cardboard. ARKit від Apple та ARCore від Google використовують гіроскоп як основний датчик для відстеження повороту голови. За даними Apple ARKit Technical Specification (2024), гіроскоп у парі з акселерометром забезпечує точність трекінгу до 0,5 градуса.
За межами споживчої електроніки гіроскопи використовуються в робототехніці та БПЛА. Мобільні роботи на базі Android Things та ROS (Robot Operating System) використовують MEMS-гіроскопи для стабілізації руху та одометрії. За даними дослідження IEEE “MEMS IMU in Robotics” (2024), точність позиціонування мобільного робота з гіроскопом в 3–5 разів вища, ніж з однією одометрією коліс, особливо під час руху по слизьким поверхням. У дронах споживчого класу гіроскоп у парі з барометром утримує висоту польоту з точністю 0,5 метра при вітрі до 10 м/с.
Для AR-додатків гіроскоп є основним датчиком, що визначає положення віртуальних об’єктів відносно реального світу. Google ARCore використовує гіроскоп для відстеження руху пристрою на частоті 1000 Гц (через внутрішню вибірку, незалежно від частоти API). ARKit від Apple досягає точності позиціонування 0,5 градуса під час руху, що достатьо для накладання віртуальних меблів або ігрових персонажів на реальну сцену.
Нове покоління 6-осьових IMU (InvenSense ICM-42688, 2024) об’єднує гіроскоп та акселерометр в одному чипі зі споживанням 0,45 мА у режимі низького енергоспоживання. Розвиток градієнтометрів та атомних гіроскопів для мобільних пристроїв поки залишається на стадії лабораторних прототипів. Промислові зразки MEMS-гіроскопів з точністю 0,001 °/с очікуються до 2028 року.
Часто запитування
Гіроскоп визначає поворот та орієнтацію пристрою в просторі. Без нього неможливі VR-режим, автоповорот екрану за нахилом, стабілізація відео та AR-додатки. Сучасні телефони не можуть працювати без гіроскопа.
Акселерометр вимірює лінійне прискорення (рух та нахил відносно гравітації). Гіроскоп вимірює кутову швидкість (обертання). Акселерометр не відрізняє поворот пристрою від його лінійного переміщення — гіроскоп вирішує цю задачу.
В Android використовується автоматична калібровка. Для ручної калібровки завантажте додатки на кшталт “GPS Status & Toolbox” — вони пропонують покласти телефон на рівну поверхню та виконати калібровку через TYPE_GYROSCOPE_UNCALIBRATED.
Це дрифт нуля — природна властивість MEMS-сенсорів. Навіть дорогі гіроскопи мають зміщення 0,1–2 °/с в спокої. Калібровка віднімає це зміщення. Якщо дрифт перевищує 5 °/с — сенсор несправний.
Використовуйте SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) та зареєструйте SensorEventListener. Дані надходять у рад/с по трьох осях. Для ігор використовуйте SENSOR_DELAY_GAME (20 мс), для фону — SENSOR_DELAY_UI (67 мс).
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також