Ett gyroskop är en sensor som mäter vinkelhastigheten för en enhets rotation i förhållande till tre axlar. Till skillnad från en accelerometer, som registrerar linjär acceleration, bestämmer ett gyroskop rotation och orientering i rymden. Enligt data från STMicroelectronics, 2024, ger moderna MEMS-gyroskop en noggrannhet på upp till 0,01 grader per sekund, vilket gör att de kan användas inom navigering, bildstabilisering och AR-applikationer.
Huvudpunkter
Gyroskop i en smartphone är en mikroelektromekanisk sensor (MEMS) som mäter vinkelhastigheten för enhetens rotation. Till skillnad från mekaniska gyroskop inom flyget är MEMS-gyroskopet ett kiselchip med storleken 2×2×1 mm monterat på telefonens moderkort.
I moderna smartphones används endast MEMS-gyroskop av vibrationstyp — tuning-fork och ring-design. De har inga roterande delar, vilket garanterar en livslängd på upp till 10 år av kontinuerlig drift. Ledande tillverkare — Bosch Sensortec (BMI-serie), STMicroelectronics (L3G, A3G-serier) och InvenSense (ICM-serie).
Ett typiskt MEMS-gyroskop har ett mätområde från ±125 till ±2000 °/s, samplingsfrekvens upp till 32 kHz och strömförbrukning på 3–6 mA. Enligt Bosch Sensortec BMI160 (2023) är brusnivån 0,007 °/s/√Hz vid området ±125 °/s — tillräckligt för noggrann spårning av rotationer.
| Parameter | Värde |
|---|---|
| Teknik | MEMS (vibration) |
| Område | ±125 — ±2000 °/s |
| Strömförbrukning | 3–6 mA |
| Storlek | 2×2×1 mm |
| Brus | 0,007 °/s/√Hz |
Funktionsprincipen för MEMS-gyroskopet är baserad på Coriolis-effekten. Inuti chipet finns en kiselmassa som oscillerar med en viss frekvens (15–30 kHz). När enheten roterar verkar Corioliskraften proportionell mot vinkelhastigheten på den oscillerande massan.
Nyckelelementen i MEMS-gyroskopet är driftelektroderna som skapar oscillationer och de känsliga elektroderna som registrerar avvikelsen. Enligt forskningen “MEMS Gyroscopes for Consumer Electronics” (IEEE, 2023) omfattar en typisk konstruktion 4–8 kamstrukturer symmetriskt placerade runt den centrala massan.
Moderna gyroskop överför data via I²C- eller SPI-bussen. Smartphonestyrenheten tar emot treaxliga vinkelhastighetsvärden — för X-axeln (Pitch), Y-axeln (Roll) och Z-axeln (Yaw). Den inbyggda ADC omvandlar den kapacitiva signalen till digitala värden med en upplösning på 16–24 bitar. Uppdateringsfrekvensen i spelläge når 400 Hz.
Accelerometer mäter linjär acceleration — förändring av hastigheten hos ett objekt längs axlarna. Gyroskop mäter rotation — hastigheten för vinkelförändring. Dessa sensorer är komplementära: accelerometern ger orientering i förhållande till gravitationsvektorn men skiljer inte lutning från linjär rörelse. Gyroskopet spårar rotationer oberoende av gravitationen men är utsatt för drift.
I verkliga tillämpningar används Sensor Fusion — en algoritm som slår samman data från gyroskopet, accelerometern och magnetometern. Mahony-filtret eller det komplementära filtret beräknar orienteringskvaternioner med en noggrannhet på upp till 2 grader i statiskt tillstånd och 5 grader i dynamiskt tillstånd. Android tillhandahåller en virtuell sensor TYPE_ROTATION_VECTOR på ramverksnivå.
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] — orienteringskvaternion
}
}
Android tillhandahåller två typer av gyroskopsensorer: TYPE_GYROSCOPE (kalibrerad, utan drift) och TYPE_GYROSCOPE_UNCALIBRATED (rådata med driftuppskattning). Åtkomst sker via SensorManager.getDefaultSensor(). Data returneras i rad/s — radianer per sekund.
Registrering av lyssnare för gyroskopet kräver angivelse av fördröjning: SENSOR_DELAY_GAME (20 ms) för spel, SENSOR_DELAY_UI (67 ms) för gränssnitt, SENSOR_DELAY_FASTEST (0 ms) för maximal frekvens. Utan annullering av registreringen i onPause() laddas batteriet ur på 2–3 timmar.
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
)
}
}
}
Rådata från event.values[0..2] motsvarar vinkelhastigheten för X, Y och Z. För att erhålla rotationsvinkeln måste vinkelhastigheten integreras över tiden. Vid 50 Hz frekvens är integrationsfelet cirka 1 grad per minut — acceptabelt för spel men otillräckligt för navigering utan korrigering.
Nolldrift (bias drift) — det största problemet med MEMS-gyroskop. Även i vila kan sensorn visa en icke-noll vinkelhastighet (0,1–2 °/s). Orsaken är temperaturförändringar och mekaniska spänningar i kiselskrukturen. Tillverkare kompenserar denna effekt på hårdvarunivå.
Android-systemet kalibrerar automatiskt gyroskopet vid första påslagning eller vid temperaturförändring. Kalibreringsprocessen tar 10–30 sekunder och kräver ingen användarintervention — lägg bara telefonen på en stillastående yta. Metoden calibrate() är inte tillgänglig på alla enheter. För tvångskalibrering används TYPE_GYROSCOPE_UNCALIBRATED med hämtning av bias offset via event.values[3..5].
private fun handleUncalibratedGyro(event: SensorEvent) {
val rawX = event.values[0] // rad/s utan kalibrering
val biasX = event.values[3] // X-offset
val calibratedX = rawX - biasX
applyCalibrationToFusion(
calibratedX,
event.values[1] - event.values[4],
event.values[2] - event.values[5]
)
}
Gyroskopet används i dussintals scenarier — från kamerastabilisering till VR-headset Google Cardboard. ARKit från Apple och ARCore från Google använder gyroskopet som primär sensor för att spåra huvudrotation. Enligt Apple ARKit Technical Specification (2024) ger gyroskopet tillsammans med accelerometern en spårningsnoggrannhet på upp till 0,5 grader.
Utöver konsumentelektronik används gyroskop inom robotik och drönare. Mobila robotar baserade på Android Things och ROS (Robot Operating System) använder MEMS-gyroskop för rörelsestabilisering och odometri. Enligt IEEE-forskningen “MEMS IMU in Robotics” (2024) är positioneringsnoggrannheten för en mobil robot med gyroskop 3–5 gånger högre än med endast hjulodometri, särskilt vid rörelse på hala ytor. I konsumentdrönare håller gyroskopet tillsammans med barometern flyghöjden med en noggrannhet på 0,5 meter vid vind upp till 10 m/s.
För AR-applikationer är gyroskopet den primära sensorn som bestämmer positionen för virtuella objekt i förhållande till den verkliga världen. Google ARCore använder gyroskopet för att spåra enhetens rörelse med en frekvens på 1000 Hz (via intern sampling, oberoende av API-frekvensen). ARKit från Apple uppnår en positioneringsnoggrannhet på 0,5 grader under rörelse, tillräckligt för att placera virtuella möbler eller spelkaraktärer på en verklig scen.
Den nya generationen 6-axliga IMU (InvenSense ICM-42688, 2024) kombinerar gyroskop och accelerometer i ett enda chip med en förbrukning på 0,45 mA i lågenergiläge. Utvecklingen av gradiometrar och atomgyroskop för mobila enheter förblir i stadiet av laboratorieprototyper. Industriella prover av MEMS-gyroskop med en noggrannhet på 0,001 °/s förväntas till 2028.
Vanliga frågor
Gyroskopet bestämmer enhetens rotation och orientering i rymden. Utan det är VR-läge, automatisk skärmrotation vid lutning, videostabilisering och AR-applikationer omöjliga. Moderna telefoner kan inte fungera utan gyroskop.
Accelerometer mäter linjär acceleration (rörelse och lutning i förhållande till gravitationen). Gyroskop mäter vinkelhastighet (rotation). En accelerometer kan inte skilja enhetens rotation från dess linjära förflyttning — gyroskopet löser detta problem.
I Android används automatisk kalibrering. För manuell kalibrering ladda ner appar som “GPS Status & Toolbox” — de föreslår att lägga telefonen på en plan yta och utföra kalibreringen via TYPE_GYROSCOPE_UNCALIBRATED.
Detta är nolldrift — en naturlig egenskap hos MEMS-sensorer. Även dyra gyroskop har en offset på 0,1–2 °/s i vila. Kalibrering subtraherar denna offset. Om driften överstiger 5 °/s — är sensorn defekt.
Använd SensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) och registrera en SensorEventListener. Data kommer i rad/s längs tre axlar. För spel använd SENSOR_DELAY_GAME (20 ms), för bakgrund — SENSOR_DELAY_UI (67 ms).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också