Core Motion: podstata, pohybové senzory a zpracování dat

Autor: IT Sectr Publikováno: 2026-03-25 Doba čtení: 8 min

Framework Core Motion — systémová komponenta iOS, která poskytuje přístup k datům akcelerometru, gyroskopu, magnetometru a krokoměru na zařízeních Apple. Podle Apple Developer Documentation, 2025 framework zpracovává surová data senzorů a převádí je na srozumitelné metriky — zrychlení, úhlovou rychlost, orientaci a počet kroků. Jednotné API pro všechny pohybové senzory umožňuje vývojářům vytvářet krokoměry, fitness aplikace a hry ovládané nakloněním zařízení.

Hlavní body

  • Core Motion — framework Apple pro zpracování dat z pohybových senzorů iPhone a iPad.
  • CMMotionManager — centrální třída pro přístup k akcelerometru, gyroskopu a magnetometru.
  • CMAltimeter — třída pro získávání dat o relativní výšce a změně tlaku.
  • CMPedometer — třída pro počítání kroků, ušlé vzdálenosti a rychlosti pohybu.
  • CMDeviceMotion — kombinovaná data s filtrací gravitace (userAcceleration).

Co je Core Motion?

Core Motion — systémový framework Apple, představený v iOS 4 pro práci s pohybovými senzory zařízení. Poskytuje jednotné rozhraní pro přístup k akcelerometru, gyroskopu, magnetometru a krokoměru, čímž zbavuje vývojáře nutnosti pracovat s hardwarovými ovladači na nízké úrovni.

Klíčovou výhodou Core Motion je hardwarová filtrace dat. Framework automaticky kombinuje údaje z akcelerometru a gyroskopu pro výpočet čistého userAcceleration bez gravitační složky a také poskytuje orientaci zařízení v prostoru ve formě kvaternionů a Eulerových úhlů.

Podle Apple WWDC 2023 je Core Motion používán ve více než 80% fitness aplikací v App Store. Framework je optimalizován pro spotřebu energie — frekvence dotazování senzorů se automaticky snižuje při neexistenci odběratelů, což prodlužuje výdrž baterie zařízení.

Důležitou architektonickou vlastností je použití koprocesoru řady M (Motion coprocessor), který zpracovává data pohybových senzorů nezávisle na hlavním procesoru řady A. Počínaje čipem M7 (iPhone 5S) koprocesor nepřetržitě shromažďuje data akcelerometru a gyroskopu, což umožňuje CMPedometer a CMAltimeter pracovat na pozadí s uzamčenou obrazovkou s příkonem menším než 1 mW. To bylo umožněno díky hardwarové izolaci: koprocesor má vlastní nevolatilní paměť a datovou sběrnici nezávislou na hlavním systému.

Architektura Core Motion

Architektura Core Motion je postavena na singleton modelu prostřednictvím CMMotionManager. Aplikace získá jedinou instanci správce a prostřednictvím něj konfiguruje frekvenci aktualizace, spouští nebo zastavuje sběr dat z každého typu senzoru. Data jsou doručována prostřednictvím bloků s určeným intervalem.

Framework používá dva režimy získávání dat: pull (aktivní dotazování přes startAccelerometerUpdates) a push (pasivní příjem přes startAccelerometerUpdatesToQueue). Režim push je preferován pro UI aplikace, protože data jsou doručována do určené fronty bez blokování hlavního vlákna.

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)")
}

Senzory Core Motion

Core Motion poskytuje přístup ke čtyřem kategoriím senzorů: akcelerometr měří lineární zrychlení podél tří os, gyroskop — úhlovou rychlost rotace, magnetometr — intenzitu magnetického pole pro kompas. Čtvrtá kategorie — kombinovaná data CMDeviceMotion, která zahrnují filtrované údaje všech senzorů.

CMDeviceMotion — nejcennější třída pro vývoj. Poskytuje userAcceleration (zrychlení bez gravitace), rotationRate (rychlost rotace), magneticField (vektor magnetického pole) a attitude (orientace zařízení ve formě kvaternionu nebo Eulerových úhlů). Pro výpočet attitude používá Core Motion fúzi dat gyroskopu a akcelerometru podle algoritmu podobného komplementárnímu filtru.

Magnetometr se používá pro korekci driftu gyroskopu. Čistý gyroskop v průběhu času akumuluje chybu v důsledku teplotního driftu a šumu — magnetometr a akcelerometr tuto chybu korigují a zajišťují přesnost orientace až 1–2 stupně ve statické poloze.

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)")
}

Krokoměr a výškoměr

CMPedometer — třída pro počítání kroků, ušlé vzdálenosti a tempa pohybu. Využívá data akcelerometru s hardwarovým zpracováním na koprocesoru pohybu řady M (M7/M8/M9/M10/M11). To umožňuje práci na pozadí s minimální spotřebou energie — přibližně 1% baterie na 8 hodin nepřetržitého sledování.

CMAltimeter — třída pro určení relativní výšky na základě barometru instalovaného v iPhone 6 a novějších. Zobrazuje změnu výšky vůči výchozímu bodu s přesností asi 1 metr. Používá se ve fitness aplikacích pro počítání pater a v navigačních aplikacích pro určení výškových rozdílů.

Data CMPedometer jsou k dispozici se zpožděním nejvýše 5 sekund pro aktuální údaje. Pro historická data je k dispozici výběr z posledních 7 dnů prostřednictvím queryPedometerData. Krokoměr automaticky rozpoznává chůzi, běh a jízdu — tyto typy aktivit jsou k dispozici prostřednictvím queryPedometerData s filtrem podle typu.

Přesnost a omezení

Přesnost CMPedometer je přibližně 95% při běžné chůzi a klesá na 90% při běhu. Přesnost ovlivňuje: umístění telefonu v kapse nebo batohu, typ obuvi a povrch. Apple doporučuje používat CMPedometer v kombinaci s Core Location pro určení vzdálenosti na otevřeném prostranství — GPS poskytuje přesnější vzdálenost a Core Motion — počítání kroků.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

pedometer.startUpdates(from: Date()) { data, _ in
    guard let pedData = pedometerData else { return }
    print("Kroky: \(pedData.numberOfSteps)")
    print("Vzdálenost: \(pedData.distance)")
}

// Přístup k výškoměru
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Výška: \(data?.relativeAltitude)")
}

Integrace Core Motion do aplikace

Integrace Core Motion nevyžaduje zvláštní oprávnění ani entitlement — stačí přidat import frameworku a vytvořit instanci CMMotionManager. Nicméně pro CMPedometer od iOS 11 je vyžadován požadavek na autorizaci prostřednictvím CMStepCounter nebo použití CMPedometer s žádostí o povolení prostřednictvím systémového dialogu.

Proces integrace zahrnuje: vytvoření CMMotionManager, kontrolu dostupnosti senzoru prostřednictvím isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, nastavení intervalu aktualizace a spuštění příjmu dat. Je důležité zastavit aktualizace prostřednictvím stopAccelerometerUpdates, když data nejsou potřeba — to je kritické pro spotřebu energie.

Pro práci na pozadí CMPedometer a CMAltimeter nevyžadují další nastavení — používají koprocesor pohybu. Pro CMMotionManager není práce na pozadí k dispozici — data jsou shromažďována pouze když je aplikace aktivní a nachází se v popředí. Jedinou podmínkou pro CMPedometer — aplikace musí být alespoň jednou spuštěna uživatelem po instalaci pro inicializaci odběru aktualizací na pozadí z iOS.

Optimalizace spotřeby energie

Core Motion podporuje adaptivní frekvenci dotazování: pokud aplikace nepotřebuje data v reálném čase, stačí nastavit interval 1–5 Hz místo 100 Hz. Pro fitness aplikace je optimální frekvence 10 Hz pro CMMotionManager a 1 Hz pro CMPedometer. Apple doporučuje snižovat frekvenci na minimum potřebné pro správnou funkci.

Pro hry ovládané nakloněním je vyžadována frekvence 60–100 Hz pro zajištění plynulosti reakce. V tomto případě je důležité použít startDeviceMotionUpdates se samostatnou frontou a zpracovávat data co nejrychleji. Podle Apple spotřebovává frekvence 60 Hz přibližně 2krát více energie než 30 Hz.

Při práci s Core Motion je třeba zohlednit kompatibilitu zařízení: gyroskop chybí na iPhone 3GS a iPad 1. generace, magnetometr — na všech iPadech bez celulárního modulu. Pro kontrolu dostupnosti senzorů se používají statické metody isAccelerometerAvailable, isGyroAvailable a isDeviceMotionAvailable třídy CMMotionManager. V simulátoru Core Motion vrací testovací data — pro ladění na reálném senzoru je vždy zapotřebí fyzické zařízení Apple.

swift
// Optimální nastavení pro fitness aplikaci
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()
    }
}

Často kladené otázky

Funguje Core Motion na iPadu a iPodu touch?

Ano, Core Motion funguje na všech zařízeních Apple s potřebnými senzory. Akcelerometr je ve všech iPhone, iPad a iPod touch. Gyroskop — ve všech iPhone 4 a novějších, iPad 2 a novějších. Magnetometr — pouze v iPhone, v iPad chybí. Barometr — v iPhone 6 a novějších.

Jak Core Motion ovlivňuje baterii?

Dopad na baterii závisí na frekvenci dotazování. Při 100 Hz spotřebovává Core Motion přibližně 5–7% baterie za hodinu. Při 10 Hz — přibližně 1–2% za hodinu. CMPedometer na koprocesoru pohybu spotřebovává méně než 1% za 8 hodin provozu. Apple doporučuje vždy zastavit aktualizace, když data nejsou potřeba.

Lze Core Motion použít k vytvoření krokoměru?

Ano, CMPedometer poskytuje hotové řešení pro krokoměr bez nutnosti zpracovávat surová data akcelerometru. Třída automaticky rozpoznává kroky s přesností přibližně 95% při chůzi a 90% při běhu. Pro vlastní detektor kroků lze použít CMMotionManager s vlastním algoritmem.

Čím se Core Motion liší od frameworku pohybu na Androidu?

Core Motion je integrován do iOS na úrovni systému a využívá koprocesor řady M pro nízkoenergetické zpracování. Android používá SensorManager s přímým přístupem k hardwarovým ovladačům, ale nemá specializovaný koprocesor, což zvyšuje spotřebu energie při sledování na pozadí.

Je vyžadováno zvláštní oprávnění pro CMPedometer?

Pro CMPedometer v iOS 11 a novějších je vyžadováno povolení uživatele. Žádost se provádí automaticky při vytvoření CMPedometer a zobrazí systémový dialog. V Info.plist je třeba přidat klíč NSMotionUsageDescription s popisem, proč aplikace potřebuje přístup k údajům o pohybu.

Shrnutí

  • Core Motion — systémový framework iOS pro práci s akcelerometrem, gyroskopem a magnetometrem.
  • CMMotionManager — centrální třída poskytující přístup ke všem pohybovým senzorům zařízení.
  • CMDeviceMotion poskytuje filtrovaná data — userAcceleration, attitude a rotationRate.
  • CMPedometer využívá koprocesor řady M pro počítání kroků s minimální spotřebou energie.
  • CMAltimeter měří změnu výšky s přesností až 1 metr pomocí barometru.
  • Integrace nevyžaduje entitlement, ale pro CMPedometer je potřebný NSMotionUsageDescription.
  • Koprocesor M7–M11 zajišťuje sběr dat na pozadí s příkonem menším než 1 mW.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také