Core Motion: lényeg, mozgásérzékelők és adatfeldolgozás

Szerző: IT Sectr Megjelenés: 2026-03-25 Olvasási idő: 8 perc

A Core Motion keretrendszer — egy iOS rendszerkomponens, amely hozzáférést biztosít a gyorsulásmérő, giroszkóp, magnetométer és lépésszámláló adataihoz Apple eszközökön. A Apple Developer Documentation, 2025 szerint a keretrendszer feldolgozza az érzékelők nyers adatait és érthető metrikákká alakítja — gyorsulás, szögsebesség, tájolás és lépésszám. Egységes API minden mozgásérzékelőhöz lehetővé teszi a fejlesztők számára lépésszámlálók, fitnesz alkalmazások és az eszköz döntésével vezérelt játékok készítését.

Főbb pontok

  • Core Motion — Apple keretrendszer az iPhone és iPad mozgásérzékelőinek adatfeldolgozásához.
  • CMMotionManager — központi osztály a gyorsulásmérő, giroszkóp és magnetométer eléréséhez.
  • CMAltimeter — osztály a relatív magasság és nyomásváltozás adatainak lekéréséhez.
  • CMPedometer — osztály lépések, megtett távolság és mozgási sebesség számlálásához.
  • CMDeviceMotion — egyesített adatok gravitációs szűréssel (userAcceleration).

Mi az a Core Motion?

Core Motion — az Apple rendszerkeretrendszere, amelyet az iOS 4-ben vezettek be az eszköz mozgásérzékelőivel való munkához. Egységes interfészt biztosít a gyorsulásmérő, giroszkóp, magnetométer és lépésszámláló eléréséhez, megszabadítva a fejlesztőt az alacsony szintű hardver-illesztőprogramokkal való munkától.

A Core Motion kulcsfontosságú előnye az adatok hardveres szűrése. A keretrendszer automatikusan egyesíti a gyorsulásmérő és giroszkóp leolvasásait a tiszta userAcceleration kiszámításához gravitációs komponens nélkül, valamint megadja az eszköz térbeli tájolását kvaterniók és Euler-szögek formájában.

Az Apple WWDC 2023 szerint a Core Motion az App Store fitneszalkalmazásainak több mint 80%-ában használatos. A keretrendszer energiafogyasztásra optimalizált — az érzékelők lekérdezési gyakorisága automatikusan csökken előfizetők hiányában, meghosszabbítva az eszköz akkumulátorának élettartamát.

Fontos architektúrális jellemző — az M-sorozatú koprocesszor (Motion coprocessor) használata, amely a mozgásérzékelők adatait a fő A-sorozatú processzortól függetlenül dolgozza fel. Az M7 chip-től (iPhone 5S) kezdve a koprocesszor folyamatosan gyűjti a gyorsulásmérő és giroszkóp adatait, lehetővé téve a CMPedometer és CMAltimeter számára a háttérben való munkát zárt képernyő mellett, kevesebb mint 1 mW energiafogyasztással. Ez a hardveres izolációnak köszönhetően vált lehetővé: a koprocesszor saját nem felejtő memóriával és adatbusszal rendelkezik, amely független a fő rendszertől.

A Core Motion architektúrája

A Core Motion architektúrája a szingleton modell szerint épül fel a CMMotionManager-en keresztül. Az alkalmazás egyetlen menedzser példányt kap, és azon keresztül konfigurálja a frissítési gyakoriságot, elindítja vagy leállítja az adatgyűjtést minden érzékelő típushoz. Az adatok blokkokon keresztül, meghatározott időközönként érkeznek.

A keretrendszer két módot használ az adatok lekérésére: pull (aktív lekérdezés a startAccelerometerUpdates segítségével) és push (passzív fogadás a startAccelerometerUpdatesToQueue segítségével). A push mód előnyösebb UI alkalmazásokhoz, mivel az adatok a megadott sorba kerülnek a fő szál blokkolása nélkül.

swift
import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1

guard motionManager
    .isAccelerometerAvailable else { return }

motionManager.startAccelerometerUpdates(
    to: OperationQueue.current()!
) { data, _ in
    guard let accel = data?.acceleration else { return }
    print("X: \(accel.x), Y: \(accel.y), Z: \(accel.z)")
}

Core Motion érzékelők

Core Motion négy érzékelő kategóriához biztosít hozzáférést: a gyorsulásmérő lineáris gyorsulást mér három tengely mentén, a giroszkóp — a forgás szögsebességét, a magnetométer — a mágneses mező erősségét az iránytűhöz. A negyedik kategória — a CMDeviceMotion egyesített adatai, amelyek az összes érzékelő szűrt leolvasásait tartalmazzák.

CMDeviceMotion — a legértékesebb osztály a fejlesztéshez. userAcceleration-t (gyorsulás gravitáció nélkül), rotationRate-t (forgási sebesség), magneticField-et (mágneses mező vektora) és attitude-ot (az eszköz tájolása kvaternió vagy Euler-szögek formájában) biztosít. Az attitude kiszámításához a Core Motion a giroszkóp és gyorsulásmérő adatainak fúzióját használja egy komplementer szűrőhöz hasonló algoritmussal.

A magnetométer a giroszkóp drift korrekciójára szolgál. A tiszta giroszkóp idővel hibát halmoz fel a hőmérsékleti drift és zaj miatt — a magnetométer és gyorsulásmérő korrigálja ezt a hibát, 1–2 fokos tájolási pontosságot biztosítva statikus helyzetben.

swift
guard motionManager
    .isDeviceMotionAvailable else { return }

motionManager.deviceMotionUpdateInterval = 1.0 // 1 Hz

motionManager.startDeviceMotionUpdates(
    using: .xArbitraryZVertical,
    to: OperationQueue.current()!
) { motion, _ in
    guard let attitude = motion?.attitude else { return }
    print("Roll: \(attitude.roll)")
    print("Pitch: \(attitude.pitch)")
    print("Yaw: \(attitude.yaw)")
}

Lépésszámláló és magasságmérő

CMPedometer — osztály lépések, megtett távolság és mozgási tempó számlálásához. A gyorsulásmérő adatait használja hardveres feldolgozással az M-sorozatú (M7/M8/M9/M10/M11) mozgáskoprocesszoron. Ez lehetővé teszi a háttérben való munkát minimális energiafogyasztással — körülbelül 1% akkumulátor 8 óra folyamatos követéshez.

CMAltimeter — osztály a relatív magasság meghatározására az iPhone 6 és újabb készülékekbe épített barométer alapján. A magasságváltozást a kiindulási ponthoz képest körülbelül 1 méteres pontossággal mutatja. Fitnesz alkalmazásokban szintszámoláshoz és navigációs alkalmazásokban magasságkülönbségek meghatározásához használják.

A CMPedometer adatok legfeljebb 5 másodperces késéssel érhetők el az aktuális leolvasásokhoz. Történeti adatokhoz az elmúlt 7 napból lehet választani a queryPedometerData segítségével. A lépésszámláló automatikusan felismeri a gyaloglást, futást és vezetést — ezek a tevékenységtípusok elérhetők a queryPedometerData segítségével típus szerinti szűrővel.

Pontosság és korlátozások

A CMPedometer pontossága normál gyaloglásnál körülbelül 95%, futásnál 90%-ra csökken. A pontosságot befolyásolják: a telefon elhelyezése zsebben vagy hátizsákban, a lábbeli típusa és a felület. Az Apple a CMPedometer használatát javasolja a Core Location-al kombinálva a szabadtéri távolság meghatározásához — a GPS pontosabb távolságot, a Core Motion pedig lépésszámlálást biztosít.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

pedometer.startUpdates(from: Date()) { data, _ in
    guard let pedData = pedometerData else { return }
    print("Lépések: \(pedData.numberOfSteps)")
    print("Távolság: \(pedData.distance)")
}

// Hozzáférés a magasságmérőhöz
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Magasság: \(data?.relativeAltitude)")
}

Core Motion integrálása az alkalmazásba

A Core Motion integrálása nem igényel különleges engedélyeket vagy entitlement-et — elég hozzáadni a keretrendszer importját és létrehozni egy CMMotionManager példányt. Azonban a CMPedometer esetében iOS 11-től kezdve engedélykérés szükséges a CMStepCounter-en keresztül vagy a CMPedometer használata rendszerpárbeszédablakon keresztüli engedélykéréssel.

Az integrációs folyamat magában foglalja: CMMotionManager létrehozása, az érzékelő elérhetőségének ellenőrzése az isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable segítségével, a frissítési időköz beállítása és az adatok fogadásának elindítása. Fontos a frissítések leállítása a stopAccelerometerUpdates segítségével, amikor az adatokra nincs szükség — ez kritikus az energiafogyasztás szempontjából.

A háttérmunkához a CMPedometer és CMAltimeter nem igényel további beállításokat — a mozgáskoprocesszort használják. A CMMotionManager esetében a háttérmunka nem elérhető — az adatok csak akkor gyűlnek, amikor az alkalmazás aktív és az előtérben van. Az egyetlen feltétel a CMPedometer esetében — az alkalmazást legalább egyszer el kell indítania a felhasználónak a telepítés után a háttérfrissítésekre való feliratkozás inicializálásához iOS-ből.

Energiafogyasztás optimalizálása

A Core Motion támogatja az adaptív lekérdezési gyakoriságot: ha az alkalmazásnak nincs szüksége valós idejű adatokra, elég 1–5 Hz-es időközt beállítani 100 Hz helyett. Fitnesz alkalmazásokhoz az optimális gyakoriság 10 Hz a CMMotionManager és 1 Hz a CMPedometer esetében. Az Apple javasolja a gyakoriság csökkentését a megfelelő működéshez szükséges minimumra.

A döntéssel vezérelt játékokhoz 60–100 Hz-es gyakoriság szükséges a reakció simaságának biztosításához. Ebben az esetben fontos a startDeviceMotionUpdates használata külön sorral és az adatok minél gyorsabb feldolgozása. Az Apple szerint a 60 Hz-es gyakoriság körülbelül kétszer annyi energiát fogyaszt, mint a 30 Hz.

A Core Motion használatakor figyelembe kell venni az eszköz kompatibilitást: a giroszkóp hiányzik az iPhone 3GS és iPad 1. generációból, a magnetométer — minden cellamodul nélküli iPad-ből. Az érzékelők elérhetőségének ellenőrzéséhez a CMMotionManager osztály statikus isAccelerometerAvailable, isGyroAvailable és isDeviceMotionAvailable metódusai használhatók. A szimulátorban a Core Motion tesztadatokat ad vissza — a valódi érzékelőn történő hibakereséshez mindig fizikai Apple eszköz szükséges.

swift
// Optimális beállítás fitnesz alkalmazáshoz
motionManager.deviceMotionUpdateInterval = 0.1 // 10 Hz

motionManager.startDeviceMotionUpdates(
    to: .main
) { [weak self] motion, error in
    guard let self = self,
          let motion = motion else { return }

    if motion.userAcceleration.magnitude() > 2.0 {
        self.detectedSignificantMovement()
    }
}

Gyakran ismételt kérdések

Működik a Core Motion iPad-en és iPod touch-on?

Igen, a Core Motion minden olyan Apple eszközön működik, amely rendelkezik a szükséges érzékelőkkel. A gyorsulásmérő minden iPhone, iPad és iPod touch készülékben megtalálható. A giroszkóp — minden iPhone 4 és újabb, iPad 2 és újabb készülékben. A magnetométer — csak iPhone-ban, iPad-ben nincs. A barométer — iPhone 6 és újabb készülékekben.

Hogyan befolyásolja a Core Motion az akkumulátort?

Az akkumulátorra gyakorolt hatás a lekérdezési gyakoriságtól függ. 100 Hz-en a Core Motion körülbelül 5–7% akkumulátort fogyaszt óránként. 10 Hz-en — körülbelül 1–2% óránként. A CMPedometer a mozgáskoprocesszoron kevesebb mint 1%-ot fogyaszt 8 óra alatt. Az Apple azt javasolja, hogy mindig állítsa le a frissítéseket, amikor nincs szükség az adatokra.

Használható a Core Motion lépésszámláló készítésére?

Igen, a CMPedometer kész megoldást kínál a lépésszámlálóhoz anélkül, hogy a gyorsulásmérő nyers adatait kellene feldolgozni. Az osztály automatikusan felismeri a lépéseket körülbelül 95%-os pontossággal gyaloglásnál és 90%-kal futásnál. Egyéni lépésdetektorhoz a CMMotionManager használható saját algoritmussal.

Miben különbözik a Core Motion az Android mozgás keretrendszerétől?

A Core Motion rendszerszinten integrálódik az iOS-be, és az M-sorozatú koprocesszort használja alacsony energiafogyasztású feldolgozáshoz. Az Android a SensorManager-t használja közvetlen hozzáféréssel a hardver-illesztőprogramokhoz, de nem rendelkezik speciális koprocesszorral, ami növeli az energiafogyasztást a háttérkövetés során.

Szükséges különleges engedély a CMPedometer-hez?

A CMPedometer esetében iOS 11 és újabb rendszereken felhasználói engedély szükséges. A kérés automatikusan megtörténik a CMPedometer létrehozásakor, és rendszerpárbeszédablakot jelenít meg. Az Info.plist-ben hozzá kell adni az NSMotionUsageDescription kulcsot egy leírással arról, hogy az alkalmazásnak miért van szüksége a mozgásadatokhoz való hozzáférésre.

Összefoglaló

  • Core Motion — iOS rendszerkeretrendszer a gyorsulásmérővel, giroszkóppal és magnetométerrel való munkához.
  • CMMotionManager — központi osztály, amely hozzáférést biztosít az eszköz összes mozgásérzékelőjéhez.
  • CMDeviceMotion szűrt adatokat biztosít — userAcceleration, attitude és rotationRate.
  • CMPedometer az M-sorozatú koprocesszort használja a lépésszámláláshoz minimális energiafogyasztással.
  • CMAltimeter a magasságváltozást méri 1 méteres pontossággal a barométer segítségével.
  • Integráció nem igényel entitlement-et, de a CMPedometer-hez NSMotionUsageDescription szükséges.
  • M7–M11 koprocesszor biztosítja a háttéradatgyűjtést kevesebb mint 1 mW energiafogyasztással.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is