Żyroskop to czujnik mierzący prędkość kątową obrotu urządzenia względem trzech osi. W przeciwieństwie do akcelerometru, który rejestruje przyspieszenie liniowe, żyroskop określa obrót i orientację w przestrzeni. Według danych STMicroelectronics, 2024, nowoczesne MEMS-żyroskopy zapewniają dokładność do 0,01 stopnia na sekundę, co pozwala na ich wykorzystanie w nawigacji, stabilizacji obrazu i aplikacjach AR.
Najważniejsze
Żyroskop w smartfonie to mikroelektromechaniczny czujnik (MEMS), który mierzy prędkość kątową obrotu urządzenia. W przeciwieństwie do mechanicznych żyroskopów w lotnictwie, MEMS-żyroskop to krzemowy chip o rozmiarze 2×2×1 mm zamontowany na płycie głównej telefonu.
W nowoczesnych smartfonach stosowane są wyłącznie MEMS-żyroskopy typu wibracyjnego — tuning-fork i ring-design. Nie mają one ruchomych części, co zapewnia trwałość do 10 lat ciągłej pracy. Wiodący producenci to Bosch Sensortec (seria BMI), STMicroelectronics (serie L3G, A3G) i InvenSense (seria ICM).
Typowy MEMS-żyroskop ma zakres pomiarowy od ±125 do ±2000 °/s, częstotliwość próbkowania do 32 kHz i pobór prądu 3–6 mA. Według danych Bosch Sensortec BMI160 (2023), poziom szumu wynosi 0,007 °/s/√Hz przy zakresie ±125 °/s — to wystarcza do dokładnego śledzenia obrotów.
| Parametr | Wartość |
|---|---|
| Technologia | MEMS (wibracyjny) |
| Zakres | ±125 — ±2000 °/s |
| Pobór prądu | 3–6 mA |
| Rozmiar | 2×2×1 mm |
| Szum | 0,007 °/s/√Hz |
Zasada działania MEMS-żyroskopu opiera się na efekcie Coriolisa. Wewnątrz chipa znajduje się krzemowa masa, która drga z określoną częstotliwością (15–30 kHz). Gdy urządzenie się obraca, na drgającą masę działa siła Coriolisa proporcjonalna do prędkości kątowej.
Kluczowe elementy MEMS-żyroskopu to elektrody napędowe wytwarzające drgania oraz elektrody czujnikowe rejestrujące odchylenie. Według badań „MEMS Gyroscopes for Consumer Electronics” (IEEE, 2023), typowa konstrukcja zawiera 4–8 struktur grzebieniowych rozmieszczonych symetrycznie wokół centralnej masy.
Nowoczesne żyroskopy przesyłają dane przez magistralę I²C lub SPI. Kontroler smartfona otrzymuje trójosiowe wartości prędkości kątowej — odpowiednio dla osi X (Pitch), Y (Roll) i Z (Yaw). Wbudowany ADC przekształca sygnał pojemnościowy na wartości cyfrowe z rozdzielczością 16–24 bitów. Częstotliwość odświeżania w trybie gier sięga 400 Hz.
Akcelerometr mierzy przyspieszenie liniowe — zmianę prędkości obiektu wzdłuż osi. Żyroskop mierzy obrót — szybkość zmiany kąta. Te czujniki są komplementarne: akcelerometr podaje orientację względem wektora grawitacji, ale nie odróżnia nachylenia od ruchu liniowego. Żyroskop śledzi obroty niezależnie od grawitacji, ale podlega dryfowi.
W rzeczywistych zastosowaniach stosuje się Sensor Fusion — algorytm łączący dane z żyroskopu, akcelerometru i magnetometru. Filtr Mahony'ego lub filtr komplementarny oblicza kwaterniony orientacji z dokładnością do 2 stopni w statyce i 5 stopni w dynamice. Android udostępnia wirtualny czujnik TYPE_ROTATION_VECTOR na poziomie frameworka.
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] — kwaternion orientacji
}
}
Android udostępnia dwa typy czujników żyroskopowych: TYPE_GYROSCOPE (kalibrowany, bez dryfu) i TYPE_GYROSCOPE_UNCALIBRATED (surowe dane z oszacowaniem dryfu). Dostęp do nich odbywa się przez SensorManager.getDefaultSensor(). Dane są zwracane w rad/s — radianach na sekundę.
Rejestracja słuchacza żyroskopu wymaga podania opóźnienia: SENSOR_DELAY_GAME (20 ms) dla gier, SENSOR_DELAY_UI (67 ms) dla interfejsu, SENSOR_DELAY_FASTEST (0 ms) dla maksymalnej częstotliwości. Bez anulowania rejestracji w onPause() bateria rozładowuje się w 2–3 godziny.
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
)
}
}
}
Surowe dane z event.values[0..2] odpowiadają prędkości kątowej odpowiednio dla X, Y i Z. Aby uzyskać kąt obrotu, należy scałkować prędkość kątową w czasie. Przy częstotliwości 50 Hz błąd całkowania wynosi około 1 stopnia na minutę — jest to akceptowalne dla gier, ale niewystarczające dla nawigacji bez korekty.
Dryf zera (bias drift) to główny problem MEMS-żyroskopów. Nawet w stanie spoczynku czujnik może pokazywać niezerową prędkość kątową (0,1–2 °/s). Przyczyną są zmiany temperatury i naprężenia mechaniczne w strukturze krzemowej. Producenci kompensują ten efekt na poziomie sprzętowym.
System Android automatycznie kalibruje żyroskop przy pierwszym włączeniu lub przy zmianie temperatury. Proces kalibracji trwa 10–30 sekund i nie wymaga udziału użytkownika — wystarczy położyć telefon na nieruchomej powierzchni. Metoda calibrate() nie jest dostępna na wszystkich urządzeniach. Do wymuszonej kalibracji używa się TYPE_GYROSCOPE_UNCALIBRATED z pobraniem bias offset przez event.values[3..5].
private fun handleUncalibratedGyro(event: SensorEvent) {
val rawX = event.values[0] // rad/s bez kalibracji
val biasX = event.values[3] // przesunięcie X
val calibratedX = rawX - biasX
applyCalibrationToFusion(
calibratedX,
event.values[1] - event.values[4],
event.values[2] - event.values[5]
)
}
Żyroskop jest używany w dziesiątkach scenariuszy — od stabilizacji kamery po gogle VR Google Cardboard. ARKit od Apple i ARCore od Google wykorzystują żyroskop jako główny czujnik do śledzenia obrotu głowy. Według Apple ARKit Technical Specification (2024), żyroskop w parze z akcelerometrem zapewnia dokładność śledzenia do 0,5 stopnia.
Poza elektroniką konsumencką żyroskopy są używane w robotyce i dronach. Roboty mobilne oparte na Android Things i ROS (Robot Operating System) wykorzystują MEMS-żyroskopy do stabilizacji ruchu i odometrii. Według badań IEEE „MEMS IMU in Robotics” (2024), dokładność pozycjonowania robota mobilnego z żyroskopem jest 3–5 razy wyższa niż z samą odometrią kół, szczególnie przy ruchu po śliskich powierzchniach. W dronach konsumenckich żyroskop w parze z barometrem utrzymuje wysokość lotu z dokładnością 0,5 metra przy wietrze do 10 m/s.
Dla aplikacji AR żyroskop jest głównym czujnikiem określającym położenie wirtualnych obiektów względem rzeczywistego świata. Google ARCore używa żyroskopu do śledzenia ruchu urządzenia z częstotliwością 1000 Hz (poprzez wewnętrzne próbkowanie, niezależnie od częstotliwości API). ARKit od Apple osiąga dokładność pozycjonowania 0,5 stopnia podczas ruchu, co wystarcza do nakładania wirtualnych mebli lub postaci gier na rzeczywistą scenę.
Nowa generacja 6-osiowych IMU (InvenSense ICM-42688, 2024) łączy żyroskop i akcelerometr w jednym chipie z poborem 0,45 mA w trybie niskiego zużycia energii. Rozwój gradiometrów i atomowych żyroskopów dla urządzeń mobilnych pozostaje na razie na etapie prototypów laboratoryjnych. Przemysłowe próbki MEMS-żyroskopów z dokładnością 0,001 °/s spodziewane są do 2028 roku.
Często zadawane pytania
Żyroskop określa obrót i orientację urządzenia w przestrzeni. Bez niego niemożliwe są tryb VR, automatyczne obracanie ekranu przy przechyleniu, stabilizacja wideo i aplikacje AR. Nowoczesne telefony nie mogą działać bez żyroskopu.
Akcelerometr mierzy przyspieszenie liniowe (ruch i nachylenie względem grawitacji). Żyroskop mierzy prędkość kątową (obrót). Akcelerometr nie odróżnia obrotu urządzenia od jego liniowego przemieszczenia — żyroskop rozwiązuje ten problem.
W Androidzie stosowana jest automatyczna kalibracja. Do ręcznej kalibracji pobierz aplikacje takie jak „GPS Status & Toolbox“ — proponują one położenie telefonu na płaskiej powierzchni i wykonanie kalibracji przez TYPE_GYROSCOPE_UNCALIBRATED.
To dryf zera — naturalna cecha czujników MEMS. Nawet drogie żyroskopy mają przesunięcie 0,1–2 °/s w spoczynku. Kalibracja odejmuje to przesunięcie. Jeśli dryf przekracza 5 °/s — czujnik jest uszkodzony.
Użyj SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) i zarejestruj SensorEventListener. Dane przychodzą w rad/s wzdłuż trzech osi. Do gier używaj SENSOR_DELAY_GAME (20 ms), do tła — SENSOR_DELAY_UI (67 ms).
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również